January 15, 2004
Min flickvän har fått en marig c++ uppgift som hon inte lyckats lösa helt och hållet, själv är jag inte så extremt säker på just c++, så jag är verkligen tacksam för all hjälp jag kan få här.
Uppgiften lyder:
Skapa ett program som läser in ett antal heltal (högst 100 stycken) och placerar dem i fält som delas upp i två delar (OBS! Detta sker i ett och samma fält), var sida i fältet skall vara sorterade i storleksordning med minsta talet först.
Om talet som läses in är mindre än 50 skall det placeras i ena fältet och om det är ett tal över 50 läses det in i det andra fältet. Talet 50 läggs in i fältet med de lägre talen. Programmet ska läsa in ett ta i taget och placerar detta i något av fälten.
Inför varje ny inläsning skall de hittills inlästa talen vara sorterade. Sorteringen skall göras med hjälp av bubbelsortering (se uppgifter 18, sida 80 i Skansholm). När användaren avslutar inläggning av tal skall fältets innehåll skrivas ut.
Krav:
Programmet ska
* ha en fungerande inläsning av talet samt en fungerande bubbelsortering
* ha en fungerande utskrift av listan med det minsta talet först för varje del
* sortera fältet i två delar - en med tal över 50 och en med tal under 50
* fälten ska kunna skrivas ut var för sig
Är som sagt väldigt tacksam för all ev. hjälp som kan erbjudas.
Mvh
Lindfors
January 15, 2004
Bifogar koden hon skrivit. det skumma är att den funkade inte i skolan men hemma. Använder samma kompilator, hursomhelst så skulle jag vara tacksam för lite optimeringsförslag. Måste koden verkligen bli såhär pass lång?
#include "iostream.h"
void bubblesort(int *f, int &k);
void skriv_ut_lista(int *f, int k);
int main(int argc, char* argv[])
{
int f[2][100];
int i;
int x=0;
int y=0;
int tal;
int antal;
int val;
cout<<"Hur många tal vill du skriva in(max 100)?";
cin>> antal;
for(i=0;i<antal;i++)
{
cout<<"skriv ett tal";
cin>>tal;
if(tal<50)
{
f[0][x]=tal;
bubblesort(&f[0][0],x);
x++;
}
else
{
f[1][y]=tal;
bubblesort(&f[1][0],y);
y++;
}
}
cout<<"För att skriva ut listan med tal under 50 tryck 1n";
cout<<"För att skriva ut listan med tal över 50 tryck 2n";
cout<<"För att skriva ut båda listorna tryck 3n";
cin>>val;
if (val==1)
{
skriv_ut_lista(&f[0][0], x);
}
if (val==2)
{
skriv_ut_lista(&f[1][0], y);
}
if (val==3)
{
cout<<"Lista1:";
skriv_ut_lista(&f[0][0], x);
cout<<"Lista2:";
skriv_ut_lista(&f[1][0], y);
}
return 0;
}
void skriv_ut_lista(int *f, int k)
{
for(int i=0;i<k;i++)
{
cout<<*(f+i);
cout<<" ";
}
}
void bubblesort(int *f, int &k)
{
bool byt_plats = true;
while (byt_plats == true)
{
byt_plats=false;
for (int i=0; i<k; i++)
{
int a=*(f+i);
int b=*(f+i+1);
if(a>b)
{
int c = a;
a = b;
b = c;
*(f+i)=a;
*(f+i+1)=b;
byt_plats = true;
}
}
}
}
July 18, 2001
Går nog inte att få det så mkt kortare, men jag ändrade lite så det ser lite bättre ut iaf..
#include "iostream.h"
void bubblesort(int *f, int &k);
void skriv_ut_lista(int *f, int k);
int main(int argc, char* argv[])
{
int f[2][100];
int i;
int x=0;
int y=0;
int tal;
int antal;
int val;
cout<<"Hur mx86nga tal vill du skriva in(max 100)? ";
cin>> antal;
for(i=0;i<antal;i++)
{
cout<<"skriv tal nr: " << i+1 << ": ";
cin>>tal;
if(tal<50)
{
f[0][x]=tal;
bubblesort(&f[0][0],x);
x++;
}
else
{
f[1][y]=tal;
bubblesort(&f[1][0],y);
y++;
}
}
cout<<"Fx94r att skriva ut listan med tal under 50 tryck 1n";
cout<<"Fx94r att skriva ut listan med tal x94ver 50 tryck 2n";
cout<<"Fx94r att skriva ut b" << "x86" << "da listorna tryck 3n"; //vet inte varför men å:et krånglar om det inte får stå ensammet 🙁
cin>>val;
if (val==1)
{
cout<<"Lista under 50: ";
skriv_ut_lista(&f[0][0], x);
cout<<"n";
}
if (val==2)
{
cout<<"nLista över 50: ";
skriv_ut_lista(&f[1][0], y);
cout<<"n";
}
if (val==3)
{
cout<<"Lista under 50: ";
skriv_ut_lista(&f[0][0], x);
cout<<"nLista över 50: ";
skriv_ut_lista(&f[1][0], y);
cout<<"n";
}
system("Pause");
return 0;
}
void skriv_ut_lista(int *f, int k)
{
for(int i=0;i<k;i++)
{
cout<<*(f+i);
cout<<" ";
}
}
void bubblesort(int *f, int &k)
{
bool byt_plats = true;
while (byt_plats == true)
{
byt_plats=false;
for (int i=0; i<k; i++)
{
int a=*(f+i);
int b=*(f+i+1);
if(a>b)
{
int c = a;
a = b;
b = c;
*(f+i)=a;
*(f+i+1)=b;
byt_plats = true;
}
}
}
}
1 Guest(s)