10 svar
84 visningar
I am Me 720
Postad: 16 okt 2022 11:53 Redigerad: 16 okt 2022 13:52

Vad säger lösningen

Uppgiften är :

Ett användningsområde för fält är att räkna hur ofta något förekommer, t.ex. hur ofta vissa heltal
förekommer. Skriv ett program som låter användaren mata in heltal mellan 0 och 10. Använd ett fält
för att hålla reda på hur många nollor, ettor, tvåor osv som användaren gett. Loopen avslutas när
användaren skriver in ett negativt tal eller ett tal större än 10. Efter loopen skall innehållet i fältet
skrivas ut på samma sätt som tidigare.
Exemp el på körning:
Enter an integer (0-9): 1
Enter an integer (0-9): 2
Enter an integer (0-9): 4
Enter an integer (0-9): 3
Enter an integer (0-9): 4
Enter an integer (0-9): 5
Enter an integer (0-9): 5
Enter an integer (0-9): 6
Enter an integer (0-9): 4
Enter an integer (0-9): 3
Enter an integer (0-9): 4
Enter an integer (0-9): 9
Enter an integer (0-9): -1
The number 0 was entered 0 time(s).
The number 1 was entered 1 time(s).
The number 2 was entered 1 time(s).
The number 3 was entered 2 time(s).
The number 4 was entered 4 time(s).
The number 5 was entered 2 time(s).
The number 6 was entered 1 time(s).
The number 7 was entered 0 time(s).
The number 8 was entered 0 time(s).
The number 9 was entered 1 time(s).
Tänk på hur stor ditt fält b ör vara. Tänk också på att utforma din loop (kanske med en if-sats eller
två) för att hindra att ett felaktigt index används i fältet.


I lösningsförslaget står det:

#include <stdio.h>

int main(void) {

      int count[11] = {0};         Varför deklarerade de fältet på det sättet? varför {0}????

      int answer;

      do {

              printf("Ange ett heltal (0 –10):");

              scanf("%d", &answer);

              if (answer >= 0 && answer <= 10) {

                          count[answer]++;       Tacksam om någon kan berätta tydligt vad som händer här.

            }

     } while (answer >= 0 && answer <= 10);

      printf("\n");       Kan man alltid gå vidare i koden genom att skriva printf("\n") ???

      for (int i = 0; i < 11; i++) {

              printf("Det fanns %d tal med värdet %d\n", count[i], i);

      }

    return 0;

}


Varför skriver de {0} ??

 vad säger denna lopp??

if (answer >= 0 && answer <= 10) {

                          count[answer]++;     


 
 

Bubo 7418
Postad: 16 okt 2022 13:04

Första frågan: Det skrivsättet har jag aldrig sett. Kanske får varje elementi fältet värdet noll?

Andra frågan: Om det är så att answer är minst noll och högst tio (dvs ett giltigt svar) skall count[answer] öka.

y++  är ett kort skrivsätt för "öka y".

I am Me 720
Postad: 16 okt 2022 13:10
Bubo skrev:

Första frågan: Det skrivsättet har jag aldrig sett. Kanske får varje elementi fältet värdet noll?

Andra frågan: Om det är så att answer är minst noll och högst tio (dvs ett giltigt svar) skall count[answer] öka.

y++  är ett kort skrivsätt för "öka y".

I en annan lösningsförslag står det 

#include <stdio.h>
#define N 10

int main (void)
{
    int count (N) ={0};
    int answer;
    do......

I am Me 720
Postad: 16 okt 2022 13:11

Hur vet man att man ska använda do- while här?

I am Me 720
Postad: 16 okt 2022 13:30 Redigerad: 16 okt 2022 13:48
Bubo skrev:

Första frågan: Det skrivsättet har jag aldrig sett. Kanske får varje elementi fältet värdet noll?

Andra frågan: Om det är så att answer är minst noll och högst tio (dvs ett giltigt svar) skall count[answer] öka.

y++  är ett kort skrivsätt för "öka y".

Ja , jagvet att answer är minst noll och högst tio och vördet av count [answer] ska ökas med 1 för varje gång vi kör.

Jag tror det är den del av koden alltså 

   if (answer >= 0 && answer <= 10) {

                          count[answer]++;      

som ska hålla reda på hur många nollor och ettor, tvåor osv som användaren har gett. Men hur räknas det? Om man ser det som matematik så är answer som variabeln x och count [answer]  som y . Det vi vill göra är att vi ska räkna hur många y som har värdet 3 och hur många 2 osv , så hur kan man ta reda på det genom att öka värdet för y alltså count[answer] med 1 för varje gång vi går igenom loopen? Alltså hur kan vi ta reda på hur många av varje tal vi har genom count [answer]++ ?

Bubo 7418
Postad: 16 okt 2022 13:36

Som vanligt: Bästa hjälpmedlet vid programmering är papper och penna.

Skriv upp dina variabler, gå genom programmet rad för rad och ändra variablerna efter hand.

I am Me 720
Postad: 16 okt 2022 14:25

Det gjorde jag, men hängde inte med vad som hände.

anders_k 237
Postad: 17 okt 2022 06:42

Eftersom vi har 10 siffror borde det egentligen stå count[10] och inte count[11]

int count[11] = {0};

Så till din fråga om ++

if (answer >= 0 && answer < 10) { // borde vara < 10 inte <= 10
  count[answer]++;
}

variabel++ är en kortform av variabel = variabel + 1 men postfix notation innebär att man kan läsa av värdet innan det höjs eller för att ge ett annat exempel:

if (variabel++ == 42) {
  ..
}

då kan man kolla värdet av "variabel" innan man höjer det med ett.

i ditt fall, count[answer]++ är samma som

if (answer >= 0 && answer < 10) {
  count[answer] = count[answer] + 1;
}

 

"answer" är ju siffran, 0-9 

 

printf("\n");

printf ovan skriver bara ut en ny new line på skärmen och är väl bara för att det skall se lite snyggare ut.

varför skriver der {0} ?

int count[11] = {0};

det initialiserar hela arrayen till 0, dvs samma som

count[0] = count[1] = ... = count[10] = 0
Bubo 7418
Postad: 17 okt 2022 07:11 Redigerad: 17 okt 2022 08:49

En liten detalj:

De elva tillåtna värdena är 0 1 2 3 4 5 6 7 8 9 10

anders_k 237
Postad: 17 okt 2022 09:28 Redigerad: 17 okt 2022 09:30
Bubo skrev:

En liten detalj:

De elva tillåtna värdena är 0 1 2 3 4 5 6 7 8 9 10

Ok ser lite udda ut när man har följande prompt

"Enter an integer (0-9)"

Då hade man tänkt sig att  10, -1 osv. hanteras utanför arrayen.

anders_k 237
Postad: 17 okt 2022 09:36 Redigerad: 17 okt 2022 09:36

Ok reviderat

if (answer >= 0 && answer <= 10) { 
  count[answer]++;
}

variabel++ är en kortform av variabel = variabel + 1 men postfix notation innebär att man kan läsa av värdet innan det höjs eller för att ge ett annat exempel:

if (variabel++ == 42) {
  ...
}

då kan man kolla värdet av "variabel" innan man höjer det med ett.

i ditt fall, count[answer]++ är samma som

if (answer >= 0 && answer <= 10) {
  count[answer] = count[answer] + 1;
}

 

"answer" är ju 0-10 

 

printf("\n");


printf ovan skriver bara ut en ny new line på skärmen och är väl bara för att det skall se lite snyggare ut.

varför skriver der {0} ?

 

int count[11] = {0};


det initialiserar hela arrayen till 0, dvs samma som

count[0] = count[1] = ... = count[10] = 0
Svara
Close