Forum: c++ hjälp? Summera alla värden i en foor loop?

Forum huvudsida -> Programmering -> c++ hjälp? Summera alla värden i en foor loop?

Sidor: 1

Till botten

Lrrr 00:22 - 22:a Oktober 2010 | Post #1
Medlem
Inlägg: 3


Skicka PM

Hej jag skall göra en program som frågar efter 2 heltal och sedan skriver ut alla tal mellan de inmatade talen. Sedan ska summan och medelvärdet av dessa tal skrivas ut, det är detta jag har problem med.

exempel: Ange 2 st heltal: 10 15
tal mellan 10 och 15:11 12 13 14
Summan=50
medelvärde=12,5

Det jag gjort hittills är:

#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
int reps1,reps2;
char teck='j';
while((teck=='j')||(teck=='J'))
{
cout<<"Ange tv\x86 st. heltal:";
cin>>reps1>>reps2;
if(reps1<reps2)
{
cout<<"Tal mellan "<<reps1<<" och "<<reps2<<":";
for(int antal=reps1+1;antal<reps2;antal++)
cout<<antal<<" ";
cout<<endl;
}
else
{
cout<<"Tal mellan "<<reps2<<" och "<<reps1<<":";
for(int antal=reps1+1;antal<reps2;antal++)
cout<<antal<<" ";
cout<<endl;
}
cout<<"Summan=";
for(int antal=reps1+1;antal<reps2;antal++)
cout<<antal;//Här vet jag inte vad jag ska skriva..;
cout<<endl;
cout<<"Medelv\x84rde=";
cout<<endl;
cout<<endl;
cout<<"Vill du ange 2 tal till, J/N:";
cin>>teck;
}
cout<<"Program slut, Tack f\x94r denna g\x86ng!"<<endl;
getch();
return 0;
}

Tacksam för hjälp och synpunkter!






Vitdom 14:47 - 22:a Oktober 2010 | Post #2
Medlem
Inlägg: 71


Skicka PM

Eftersom att du har delat upp "Tal mellan"-proceduren i två underprocedurer på rad 12 & 19 så är det mycket, mycket praktiskt att summera talen medan du beräknar dem.

På detta sätt skulle jag utföra summeringen:

  1. int summa = 0;
  2. if(reps1<reps2)
  3. {
  4. cout<<"Tal mellan "<<reps1<<" och "<<reps2<<":";
  5. for(int antal=reps1+1;antal<reps2;antal++)
  6. {
  7. cout<<antal<<" ";
  8. summa += antal;
  9. }
  10. cout<<endl;
  11. }
  12. else
  13. {
  14. cout<<"Tal mellan "<<reps2<<" och "<<reps1<<":";
  15. for(int antal=reps2+1;antal<reps1;antal++)
  16. {
  17. cout<<antal<<" ";
  18. summa += antal;
  19. }
  20. cout<<endl;
  21. }
  22. cout<<"Summan="<<summa<<endl;

Jag rättade även ett slarvfel du gjort. Du delar upp proceduren beroende på om reps1 < reps2, men skriver att reps1 är minst om reps2 < reps1 på rad 22(din), 15(min).

Kom också ihåg att när du beräknar medelvärdet av talen, så se till att den räknar på double eller float, och inte int.



-------------------------





Lrrr 22:37 - 22:a Oktober 2010 | Post #3
Medlem
Inlägg: 3


Skicka PM

Tack så jätte mycket. Made my day!!!






Lrrr 17:30 - 26:e Oktober 2010 | Post #4
Medlem
Inlägg: 3


Skicka PM

När jag nu skall räkna ut medelvärdet så blir det fel varför?

#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
int reps1,reps2;
char teck='j';
while((teck=='j')||(teck=='J'))
{
cout<<"Ange tv\x86 st. heltal:";
cin>>reps1>>reps2;
int summa=0;
if(reps1<reps2)
{
cout<<"Tal mellan "<<reps1<<" och "<<reps2<<":";
for(int antal=reps1+1;antal<reps2;antal++)
{
cout<<antal<<" ";
summa+=antal;
}
cout<<endl;
}
else
{
cout<<"Tal mellan "<<reps2<<" och "<<reps1<<":";
for(int antal=reps2+1;antal<reps1;antal++)
{
cout<<antal<<" ";
summa+=antal;
}
cout<<endl;
}
cout<<"Summan="<<summa<<endl;
double medelv=summa;
medelv/=antal;//antal undeclared....why???
cout<<"Medelv\x84rde="<<medelv;
cout<<endl;
cout<<endl;
cout<<"Vill du ange 2 tal till, J/N:";
cin>>teck;
}
cout<<"Program slut, Tack f\x94r denna g\x86ng!"<<endl;
getch();
return 0;
}






Vitdom 14:46 - 27:e Oktober 2010 | Post #5
Medlem
Inlägg: 71


Skicka PM

Anledningen till att du får "antal undeclared" vid medelv/=antal; är för att antal inte existerar i räckvidden.

T.ex.

  1. int main()
  2. {
  3. int mainVar;
  4.  
  5. {
  6. int blockInMainVar;
  7. }
  8.  
  9. int mainVar2;
  10.  
  11. cout << mainVar << endl;
  12. cout << blockInMainVar << endl; // FEL
  13. cout << mainVar2 << endl;
  14. }

Som du ser så deklarerar(egentligen definierande deklaration) du variabeln blockInMainVar inom blockparenteserna { }. Detta betyder att variabeln bara har räckvidd inom dessa parenteser.

Du deklarerar variabeln antal här:
for(int antal=reps2+1;antal<reps1;antal++)
{
cout<<antal<<" ";
summa+=antal;
}

vilket gör att variabeln antal endast har räckvidd inom for-loopen. Det allokerade minnet i datorn för variabeln frias när programmet går ur räckvidden. Variabeln kan därför inte kommas åt.

Detta kan lösas genom att du deklarerar variabeln antal så högt upp i programmets räckvidd som den behövs, i detta fall i main-funktionen, som vi också gjorde med int summa.

  1. int antal;
  2. for(antal=reps1+1;antal<reps2;antal++)
  3. {
  4. cout<<antal<<" ";
  5. summa+=antal;
  6. }

Det är bra om du lär dig termerna, t.ex. deklaration, definition. För senare i ditt programmeringslärande(där jag är) kommer det att bli MYCKET FÖRVIRRANDE om du inte lärt dig termerna. Och ännu viktigare är att du lär dig den rätta betydelsen.

Själva hände det så för mig att jag struntade i att lära mig den terminologin(varför ska man lära sig den?). Men nu lär jag mig några mer komplicerade nyckelord i C++, som måste förklaras; och som tyvärr endast kan förklaras med terminologin.

Jag sökte jättemycket på internet men överallt sa alla olika betydelser av deklaration och definition. Men till slut så tittade jag i säkra källor(t.ex. ordböcker, programmeringsböcker) och kom fram till att:

  • Deklaration är: När man talar om för kompilatorn att "här finns en variabel av den här typen".
  • Definition är: Den här variabeln ska ligga på den här positionen i datorns minne.

Några andra som kan förväxlas med definition är:

  • Tilldelning är: När man tilldelar en variabel ett värde.
  • Initiering är: När man tilldelar en variabel ett värde vid definitionen.

Lite "överkurs" för att räta ut min användning av begreppen.

Definierande deklaration är t.ex.

  1. int variabelnamn;

Till skillnad ifrån en ren deklaration:

  1. extern int variabelnamn;

int variabelnamn "talar om för kompilatorn att här finns en variabel vid namnet variabelnamn av typen int", och allokerar minne i datorn för variabeln.

Men, extern int variabelnamn talar BARA om för kompilatorn att här finns en variabel vid namnet variabelnamn av typen int. Den allokerar INTE minne i datorn åt variabeln.

Men det var som sagt bara för att visa vad jag menade, inget du alls behöver lära dig på ett tag.



-------------------------



Senast redigerad 15:06 - 27:e Oktober 2010


Sidor: 1

Forum huvudsida -> Programmering -> c++ hjälp? Summera alla värden i en foor loop?
Atom feed

Du får inte posta i den här tråden | Till toppen