Jag vill läsa in 10 heltal.
Sen ska en koll göras om talen är över 100, lika med 100 eller under 100.
Efter det ska alla talen som är över 100 läggas samman och delas med antal tal som var över 100, lika för tal under 100.
Självklart ska allt sedan visas.
Kan någon hjälpa mig, jag har fastnat totalt i formler osv.
Behöver hjälp
9 svar · 373 visningar · startad av Rulle
Det här är en skoluppgift, va?
I princip undviker jag såna.. men det lät som ett skojsigt problem. Är det en skoluppgift så är det ju du själv som blir lidande ;)
Jag kunde inte motstå - ändå :p:
#include<iostream>
using namespace std;
void calculate(int *a);
int main(){
int arr[11],i=0;
do{
cout << "Mata in ett tal "
<< "(Du har "
<< 10-i
<< " kvar)"
<< endl;
cin >> arr[i];
i++;
}while(i<10);
arr[10]=(-1);
calculate(arr);
return 0;
}
void calculate(int *a){
int *ptr,add=0,less=0,tm=0,tmp=10;
for(ptr=a;*ptr!=(-1);ptr++){
(*ptr>100)?(add+=*ptr):tmp--;
if(*ptr<100){
less+=*ptr;
tm++;
}
}
tmp=(tmp)?tmp:1;
tm=(tm)?tm:1;
cout << "Tal över hundra delat med antalet tal över hundra: "
<< add/tmp
<< endl;
cout << "Tal under hundra delat med antalet tal under hundra: "
<< less/tm
<< endl;
}
Hur den funkar får du klura ut själv.. (om den funkar som du tänkt ;))
Helt rätt
att det är en skoluppgift.
Men genom att läsa ditt svar ser jag snabbt att så långt har vi inte kommit än.......
OK... tänk så här:
Det behövs en datasamling för att placera de inlästa talen i. Lämpligast är då en int-array eftersom det rörde sig om heltal.. Genom att loopa 10ggr och hämta in talen och fylla arrayen med talen kan man sen lätt bearbeta arrayen.
Det som behövs är ytterligare en loop som stegar igenom arrayen... (i mitt exempel använde jag pekarstegning, men det går naturligtvis med att indexera med arr *också) ... och i den loopen undersöka om talen är enligt kriterierna <>100. Vid en "träff" måste man dels slå tillsammans de avsedda talen, men även räkna upp hur många träffar det är.
Vid utskrift är det sen bara att ta de variabler man använde för att "slå ihop" respektive "räkna antal".*
#include<iostream>
using namespace std;
#typedef BUFFSIZE 10
typedef enum {LESS, EQUAL, OVER} CheckState;
unsigned long Summary(int* buff)
{
unsigned long temp = 0;
for (int i = 0 ; i < BUFFSIZE ; i++)
temp = temp + (unsigned long)buff[i];
return temp;
}
void CheckSize(int* buff, CheckState state)
{
for(int i = 0 ; i < BUFFSIZE ; i++)
{
switch (state)
{
case LESS:
if (buff[i] < 100)
cout << buff[i] << " är mindre än hundra" << endl;
break;
case EQUAL:
if (buff[i] == 100)
cout << buff[i] << " är lika med hundra" << endl;
break;
case OVER:
if (buff[i] > 100)
cout << buff[i] << " är större än hundra" << endl;
break;
}
}
}
int main()
{
int buffer[BUFFSIZE];
for(int i = 0 ; i < BUFFSIZE ; i++)
cin >> buffer[i];
cout << "Tal mindre än hundra :" << endl;
CheckSize(buffer, LESS);
cout << "Tal lika med hundra :" << endl;
CheckSize(buffer, EQUAL);
cout << "Tal större än hundra :" << endl;
CheckSize(buffer, OVER);
cout << "Summa: " Summary(buffer) << endl;
return 0;
}
....
#include<iostream.h>
void main ()
{
const int TAL=10;
int a [TAL];
cout\<\<"Mata in tio heltal "\<\<endl;
for (int i=0;i\<TAL;i++)
cin\>\>a*;
cout\<\<"Dessa tal matade du in :"\<\<endl;
for (i=0;i\<TAL;i++)
cout\<\<a*;
}
Så långt så bra, men hur gör jag kollen i datasamlingen på ett nybörjarsätt ?
Sen ska jag ju också dela summan av alla tal över hundra och dela med antalet tal över hundra, likadant med exakt hundra och under 100.**
Beatbox:
"
kod:--------------------------------------------------------------------------------#include<iostream>
using namespace std;
#typedef BUFFSIZE 10
typedef enum {LESS, EQUAL, OVER} CheckState;
unsigned long Summary(int* buff)
{
unsigned long temp = 0;
for (int i = 0 ; i < BUFFSIZE ; i++)
temp = temp + (unsigned long)buff*;
return temp;
}
void CheckSize(int* buff, CheckState state)
{
for(int i = 0 ; i < BUFFSIZE ; i++)
{
switch (state)
{
case LESS:
if (buff *< 100)
cout << buff *<< " är mindre än hundra" << endl;
break;
case EQUAL:
if (buff *== 100)
cout << buff *<< " är lika med hundra" << endl;
break;
case OVER:
if (buff *> 100)
cout << buff *<< " är större än hundra" << endl;
break;
}
}
}
int main()
{
int buffer[BUFFSIZE];
for(int i = 0 ; i < BUFFSIZE ; i++)
cin >> buffer*;
cout << "Tal mindre än hundra :" << endl;
CheckSize(buffer, LESS);
cout << "Tal lika med hundra :" << endl;
CheckSize(buffer, EQUAL);
cout << "Tal större än hundra :" << endl;
CheckSize(buffer, OVER);
cout << "Summa: " Summary(buffer) << endl;
return 0;
}
"
moget å göra denna enkla uppgift så komplicerad? Fin lösning dock...
//me r fan of enum :F********
Hur skulle du löst den ?
Re: Någon
Rulle skrev:
som kan förklara för mig hur jag kan kolla tal i en array?
En array är platser i minnet som följer efter varandra. Har du en array av int så har varje minnesplats utrymme för varsin int. Har du en array av char så.... e.t.c
För att komma åt varje element måste du (om du inte redan vet vilket, då är det bara att accessa direkt) räkna dig fram till den plats som du vill kolla. Default är själva arraynamnet index 0.
Det finns i princip två sätt att göra detta på i C och C++ :
Pseudo->
loop 0-9
i = 0
koll = array[i]
if koll == _nåt_jämförelsevärde_ THEN
...
...
i=i+1
end loop
loop 0-9
i=0
*pek
pek = array
if *pek==_nåt_jämförelsevärde_ THEN
...
...
pek=pek+1
i=i+1
end loop
Eller som c-kod:
for(i=0; i<10;i++)
if(array[i]==_nåt_värde)
bla bla bla
int *pek;
pek = array
for(i=0;i<10;i++, pek++)
if(*pek==_nåt_värde)
bla bla bla
Direkt access:
array[_index_]
*(array+_index)