0
votes

Je ne peux pas obtenir de tri de bulles pour travailler en fonction tout en passant une matrice à la fonction

#include <stdio.h>
#include <conio.h>
void ascending(int numbers[], int size);
int main()
{
    int size=10, numbers[size], i, order;

    for (i=0; i<10; i++)
    {
        printf("please enter a number:");
        scanf("%d", &numbers[i]);
    }
    ascending(numbers[], size);

}

void ascending(int numbers[], int size)
{
    int temp, i, sflag, count=0;

    do
    {
        sflag = 0;
        for(i=1; i <10; i++)
        {
            if (numbers[i-1] > numbers[i])
            {
                temp = numbers[i-1];
                numbers[i-1] = numbers[i];
                unmbers[i] = temp;
                sflag = 1;
            }
        }
        count++;
    }while(sflag);

    for (i=0; i<10; i++)
    {
        printf("%d\t", numbers[i]);
    }


}
the code fails at the the first if statement in the function,  it says segmentation error.
im not sure why,  i think there may be an error in how i am passing the array to the function.

6 commentaires

Dans votre principale: essayez d'appeler la fonction ascendant avec ascendance (numéros, taille); Votre boucle doit aussi ressembler à pour (i = 0; i < taille; i ++) . Je recommande relooking sur les bases des tableaux C. Programiz.com/c-programming/c-Arrays-fonctions


"Désigné [I] = Temp;" est une erreur d'orthographe, je suppose que cela devrait être "chiffres"


Avec les deux "fautes de frappe", le code fonctionne. (1) = "désigné" (2) = ascendance (chiffres [], taille); au lieu de ascension (numéros, taille);


Quel est le point de passer la taille en tant que paramètre à monter si vous allez au codage dur 10? Ne devrait-il pas être pour (i = 1; i ? Généralement, la meilleure pratique pour le codage est d'éviter les «numéros magiques» à tous les coûts et d'utiliser des constantes ou des constantes nommées à la place des numéros sans signification afin que les gens puissent voir quelles sont les valeurs. Cela facilite également la modification de votre programme si vous utilisez une valeur de constante ou de constante de définition #, car chaque taille de boucle et de matrice basée sur la constante peut être ajustée simplement en modifiant la valeur de la constante. N'utilisez pas non plus de tri de bulle à moins que ce soit un très petit tableau.


Regardez également le code sur GitHub ou d'autres endroits où il existe un code professionnel de haute qualité et vous remarquerez que la plupart des normes de codage pour les portes nécessitent un espace autour des opérateurs, ce qui rend le code moins étroit et dense, et plus facile à lire. Donc au lieu de [i-1] , [i - 1 ] et au lieu de i <10 , i <10 , énoncé de i = 0 , i = 0 . J'avais l'habitude de coder comme vous le faites jusqu'à ce que je reçois des travaux réels et que je devais vivre avec des normes de code pour la lisibilité et la cohérence du code. Maintenant, je ne supporte pas la syntaxe cryptique cryptique crampe. Le Sun Kernel Group étranglerait quelqu'un pour ça!


Ugh, poussant les choses à côté d'accolades est laide! au lieu de } alors que (SFLAG); plus conventionnellement respecté serait } tandis que (Sflag);


3 Réponses :


0
votes

Il y a 2 erreurs dans votre code:

  1. sur la ligne 13 Vous passez numéros [] à la fonction ascendante. C'est faux, vous ne pouvez jamais rien transmettre avec [] , lorsque vous appelez une fonction. Lorsque vous écrivez INT NUMÉROS [] Dans la liste d'arguments d'une fonction, cela signifie que vous souhaitez que la fonction accepte un pointeur à un numéro, vous ne déclarez que cela au compilateur. Donc, il devrait simplement être ascendance (chiffres, taille);

  2. sur la ligne 30 Vous avez créé une faute de frappe, vous avez écrit DIBERS [I] = TEMP; , alors qu'il devrait être numéros [i] = TEMP; < / p>

    Voici le code correct: xxx


0 commentaires

1
votes
/******************************************************************************

                            Online C Compiler.
                Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <stdio.h>



#include <stdio.h>
#include <conio.h>
void ascending(int numbers[], int size);
int main()
{
    int size=10, numbers[size], i, order;

    for (i=0; i<10; i++)
    {
        printf("please enter a number:");
        scanf("%d", &numbers[i]);
    }
    ascending(numbers, size);

    return 0;
}

void ascending(int numbers[], int size)
{
    int temp, i, sflag, count=0;

    do
    {
        sflag = 0;
        for(i=1; i <10; i++)
        {
            if (numbers[i-1] > numbers[i])
            {
                temp = numbers[i-1];
                numbers[i-1] = numbers[i];
                numbers[i] = temp;
                sflag = 1;
            }
        }
        count++;
    }while(sflag);

    for (i=0; i<10; i++)
    {
        printf("%d\t", numbers[i]);
    }

}
Running your code slightly modified (make it compile able) in https://www.onlinegdb.com/online_c_compiler#I was not able to detect any errorI checkt 3,7,8,8,9,10,11,200,317 and 1,1,1,1,1,1,1,1,1

0 commentaires

3
votes

Il y a au moins deux fautes de frappe dans votre programme.

Le premier est dans cette déclaration p> xxx pré>

il devrait y avoir p> xxx

le second dans cette instruction p> xxx pré>

il devrait y avoir p> xxx pré>

aussi dans cette déclaration dans cette déclaration La fonction p> xxx pré>

Vous utilisez un numéro magique 10 code> au lieu de la variable Taille code>. P>

Néanmoins, votre fonction est inefficace car la boucle interne toujours itérer de 1 à taille code>. p>

Une implémentation plus efficace Sa mise en œuvre peut être indiquée dans le programme de démonstration ci-dessous. p> xxx pré>

dans le programme, un tableau de nombres aléatoires est trié 10 fois. La sortie du programme peut rechercher des exemples comme. P> xxx pré>

Si vous allez utiliser la même fonction de tri pour trier un tableau dans les commandes ascendantes et décroissantes, la fonction peut alors regarder comme il est montré dans le programme de démonstration ci-dessous. P>

9 0 1 6 0 8 7 4 9 4 
0 0 1 4 4 6 7 8 9 9 
9 9 8 7 6 4 4 1 0 0 


0 commentaires