Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

Arrays, For Loops...C

Anoniem
Wim Sturkenboom
8 antwoorden
  • Ik wil een C programma maken waarbij gebruikt gemaak wordt voor arrays. Het is een array van 5 x 5 integers. Het programma vraagt de gebruiker 5 cijfers per toets. Er zijn 5 toetsen. Aangezien er 5 cijfers zijn per toets, zijn er 5 scholieren waarvan de cijfers verwerkt moeten worden. Er zijn 2 dimensies dus, toets en scholier.

    Nadat de cijfers zijn ingevoerd, dmv arrays, moeten ze dus verwerkt worden. Alle cijfers voor elk van de 5 scholieren moeten bij elkaar opgeteld worden en ook moet daarna het gemiddelde van die 5 cijfers gemaakt worden per scholier.

    Voorbeeld: scholier1 heeft een 5 5 5 5 5 gehaald voor respectievelijk toets 1 t/m 5, dan is zijn totale score 25, maar zijn gemiddelde een 5.

    Maar voor docenten moet het programma ook handig zijn. Het moet wat statistische gegevens geven voor hoe hun leerlingen het hebben gedaan als groep. Dus de gemiddelde, de laagste score en hoogste score moeten weergeven worden.

    Wat is de eenvoudigste manier om dit aan te pakken? Ik zou graag wat tips (strategie) van jullie willen horen…

    Dit is wat ik tot nu toe heb en ik zit totaal vast en ik denk dat ik op de verkeerde weg zit.

    [code:1:0bcf1c5989]
    #include <stdio.h>

    #define NR_STUDENTS 5
    #define NR_QUIZES 5

    int main(void)
    {
    int i, j;
    int score[NR_STUDENTS][NR_QUIZES];

    for (i = 0; i < NR_STUDENTS; i++)
    {
    for (j = 0; j < NR_QUIZES; j++)
    {
    printf ("Enter the score for student %d for test %d of %d: ", i+1, j+1, NR_QUIZES);
    fflush(stdout);
    scanf("%d",&score;[i][j]);
    }
    }

    for (i = 0; i < NR_STUDENTS; i++)
    for (j = 0; j < NR_QUIZES; j++)
    printf ("%d %d %d
    ", i, j, score[i][j]);

    return(0);
    }[/code:1:0bcf1c5989]

    Sorry voor de layout…scherm is te klein.
  • Niks verkeerd aan deze code. Waarmee zit je vast?
    Gemiddelde per student: alles van een student optellen en delen door NR_QUIZES
    Gemiddelde per test: alles van een test optellen en delen door NR_STUDENTS
    Laagste en hoogste: gebruik een tijdelijk variabele en initialiseer die (voor laagste bv op -1 als het laagste cijfer een 0 kan zijn, voor hoogste bv op 11 als hoogste cijfer een 10 kan zijn).

    Deze vraag zag ik (volgens mij) ook bij tweakers 8)
  • [quote:9f0874357f="Wim Sturkenboom"]Deze vraag zag ik (volgens mij) ook bij tweakers 8)[/quote:9f0874357f]

    Dat klopt, ze hebben hem daar gesloten voordat ik erop kon reageren. Ik zat een heel verhaal te typen en toen merkte ik dat het al gesloten was. Heel mijn verhaal inclusief nieuwe code kwijt….Ze zijn daar echt niet normaal en ze claimen nog toegankelijk te willen zijn voor iedereen, maar ze gedragen zich daar als elitaire kakkers. Alsof iedereen expert is in C. Alsof zij vroeger nooit met deze problemen hebben gezeten. Zo, dat moest ik even kwijt. ;)

    [quote:9f0874357f="Wim Sturkenboom"]Niks verkeerd aan deze code. Waarmee zit je vast?
    Gemiddelde per student: alles van een student optellen en delen door NR_QUIZES
    Gemiddelde per test: alles van een test optellen en delen door NR_STUDENTS
    Laagste en hoogste: gebruik een tijdelijk variabele en initialiseer die (voor laagste bv op -1 als het laagste cijfer een 0 kan zijn, voor hoogste bv op 11 als hoogste cijfer een 10 kan zijn).[/quote:9f0874357f]

    Ik zit vast met het geven van schematisch voorbeeld waarbij de ingevoerde cijfers gepresenteerd worden.

    Dit is wat ik tot nu toe heb, ik heb het gevoel dat ik zeer omslachtig aan het werken ben.

    [code:1:9f0874357f]
    #include <stdio.h>

    #define NR_STUDENTS 5
    #define NR_QUIZES 5

    int main()
    {
    int i, j;
    int score[NR_STUDENTS][NR_QUIZES];

    for (i = 0; i < NR_STUDENTS; i++)
    {
    for (j = 0; j < NR_QUIZES; j++)
    {
    printf ("Enter the score for student %d for test %d of %d: ", i+1, j+1, NR_QUIZES);
    fflush(stdout);
    scanf("%d",&score;[i][j]);
    }
    }

    printf("
    ");
    printf("Here are the scores in schematic overview.
    ");
    for (i = 0; i < NR_STUDENTS; i++)
    for (j = 0; j < NR_QUIZES; j++) {
    printf("%3d", score[i][j]);
    if (j > 5) {
    printf("
    ");
    }
    }

    printf("
    ");
    printf("The total score is the sum of all quizes.
    ");

    printf("The total score for student 1 for all quizes: %3d
    ", score[0][0] + score[0][1] +score[0][2] + score[0][3] + score[0][4]);
    printf("The total score for student 2 for all quizes: %3d
    ", score[1][0] + score[1][1] +score[1][2] + score[1][3] + score[1][4]);
    printf("The total score for student 3 for all quizes: %3d
    ", score[2][0] + score[2][1] +score[2][2] + score[2][3] + score[2][4]);
    printf("The total score for student 4 for all quizes: %3d
    ", score[3][0] + score[3][1] +score[3][2] + score[3][3] + score[3][4]);
    printf("The total score for student 5 for all quizes: %3d
    ", score[4][0] + score[4][1] +score[4][2] + score[4][3] + score[4][4]);

    printf("The average score is the sum of all quizes divided by 5.
    ");

    printf("The average score for student 1 for all quizes: %.1f
    ", (float)(score[0][0] + score[0][1] +score[0][2] + score[0][3] + score[0][4]) / 5);
    printf("The average score for student 2 for all quizes: %.1f
    ", (float)(score[1][0] + score[1][1] +score[1][2] + score[1][3] + score[1][4]) / 5);
    printf("The average score for student 3 for all quizes: %.1f
    ", (float)(score[2][0] + score[2][1] +score[2][2] + score[2][3] + score[2][4]) / 5);
    printf("The average score for student 4 for all quizes: %.1f
    ", (float)(score[3][0] + score[3][1] +score[3][2] + score[3][3] + score[3][4]) / 5);
    printf("The average score for student 5 for all quizes: %.1f
    ", (float)(score[4][0] + score[4][1] +score[4][2] + score[4][3] + score[4][4]) / 5);

    return(0);
    }
    [/code:1:9f0874357f]















  • [code:1:8c34be3560]int total;
    for(i=0;i<NR_STUDENTS;i++)
    {
    total=0; // reset total for each student (iteration)
    for(j=0;j<NR_QUIZES;j++)
    {
    total+=score[i][j];
    }
    printf("Student %d : total = %d, average = %d
    ", i, total, total/NR_QUIZES);
    }[/code:1:8c34be3560]

    En tweakers verwacht inderdaad een zeker nivo; dat wordt ook ergens aangegeven in de FAQ of zo.
  • [quote:9596349eb2="Wim Sturkenboom"]
    Laagste en hoogste: gebruik een tijdelijk variabele en initialiseer die (voor laagste bv op -1 als het laagste cijfer een 0 kan zijn, voor hoogste bv op 11 als hoogste cijfer een 10 kan zijn).[/quote:9596349eb2]

    Wim, hier kom ik niet uit. Ik heb het nu geinitaliseerd, maar het werkt niet. Ik zal mijn code volledig posten.

    [code:1:9596349eb2]
    #include <stdio.h>

    #define NR_STUDENTS 5
    #define NR_QUIZES 5

    int main()
    {
    int i, j;
    int score[NR_STUDENTS][NR_QUIZES];

    for (i = 0; i < NR_STUDENTS; i++)
    {
    for (j = 0; j < NR_QUIZES; j++)
    {
    printf ("Enter the score for student %d for quiz %d of %d: ", i+1, j+1, NR_QUIZES);
    scanf("%3d",&score;[i][j]);
    }
    }

    printf("
    Here are the scores in schematic overview.
    ");
    for (i = 0; i < NR_STUDENTS; i++) {
    printf ("Student %d (quiz 1 to 5): ", i+1);
    for (j = 0; j < NR_QUIZES; j++)
    printf ("%3d", score[i][j]);
    printf("
    ");
    }

    int total_score;
    for(i=0;i<NR_STUDENTS;i++) {
    total_score=0; // reset total for each student (iteration)
    for(j=0;j<NR_QUIZES;j++) {
    total_score += score[i][j];
    }
    printf("
    Student %d: total = %d, average = %.1f", i+1, total_score, (float)total_score/NR_QUIZES);
    }

    for(j = 0; j < NR_QUIZES ; j++) {
    total_score=0; /*reset total score for quizes */
    for(i = 0; i < NR_STUDENTS ; i++) {
    total_score += score[i][j];
    }
    int low_score = 11;
    int high_score = 0;

    if(high_score < score[i][j]) {
    high_score = score[i][j];
    }
    if(low_score > score[i][j]) {
    low_score = score[i][j];
    }

    printf("
    Quiz %d: Lowest score = %d, Highest score = %d, Average score = %.1f", j+1, low_score, high_score,(float)total_score/NR_STUDENTS);
    }

    return(0);
    }
    [/code:1:9596349eb2]

    Bedankt!




  • 1)
    Zorg voor duidelijk inspringen; gebruik spaties of een optie in de editor om tabs te vervangen door spaties.
    2)
    Zorg voor consistent gebruik van accolades; ik zoek me rot om te zien welke sluit-accolade bij welke start-accolade hoort. Dus of overal [code:1:f995102a7f]for(i=0;i<10;i++) {
    // iets
    }[/code:1:f995102a7f]of[code:1:f995102a7f]for(i=0;i<10;i++)
    {
    // iets
    }[/code:1:f995102a7f]Persoonlijk vind ik de laatste duidelijker, maar dat terzijde.
    3)
    Geef duidelijk aan wat er niet werkt. Ik vermoed dat je hoogste en laagste niet goed werken en dat komt vermoedelijk omdat[code:1:f995102a7f] if(high_score < score[i][j]) {
    high_score = score[i][j];
    }
    if(low_score > score[i][j]) {
    low_score = score[i][j];
    } [/code:1:f995102a7f] op de verkeerde plek staat (buiten de tweede for-loop).
  • Bedankt, Ik denk dat ik het heb opgelost met die accolades, het gaat goed voor de eerste quiz, maar daarna reset het niet denk ik. Het blijft voor quiz 2 tm 5 de hoogste score van quiz 1 gebruiken en laagste score komt wel van quiz 2, maar die gebruikt ie dan voor quiz 2 tm 5. Ik zie de fout niet.

    [code:1:40f0ed2839]
    /* initialised the values to compute the highest and lowest score */
    int low_score = 11;
    int high_score = -1;
    /* The same as the For loop above, only reversed, it will show the lowest, highest and average score
    for each quiz. */
    for(j = 0; j < NR_QUIZES ; j++) {
    total_score=0; /*reset total score for quizes */
    for(i = 0; i < NR_STUDENTS ; i++) { {
    total_score += score[i][j];
    }
    /* Here is the highest and lowest score computed using 2 if statements */
    if(score[i][j] < low_score) { /* if the grade is lower than 11, then the low_score gets updated */
    low_score = score[i][j];
    }
    if(score[i][j] > high_score) { /* if the grade is higher than -1, then the high_score gets updated */
    high_score = score[i][j];
    }
    }
    printf("
    Quiz %d: Lowest score = %d, Highest score = %d, Average score = %.1f", j+1, low_score, high_score,(float)total_score/NR_STUDENTS);
    }
    [/code:1:40f0ed2839]
  • ps, laat maar, het is al gelukt. Ik moest de high_score en low_score initialiseren voor elke quiz, en ik had die initialiseringen op de verkeerde plaats staan. :oops:

    Toch nog gelukt!
    Heel erg bedankt Wim!

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.