Snabb hjälp med C++ uppgift.

Avdelningen för programmering, nätverk samt alternativa OS.
Post Reply
Lindfors
Posts: 640
Joined: 2002-03-09 16:26:52
Location: Fagersta
Contact:

Snabb hjälp med C++ uppgift.

Post by Lindfors »

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
Ljudingenjör - Örebro Universitet
User avatar
IcePic
Hedersbit
Posts: 6061
Joined: 2002-03-08 16:09:38

Post by IcePic »

Tänkte du posta det som redan gjorts eller ska vi göra hela din flickväns läxa?

Det kostar ju olika beroende på hur mycket tid vi ska lägga ner, så du vinner
ju på att inte låta oss göra hela jobbet från början.

postgiro: 127 0 0-1
Oh give me a clone, my very own clone,
with the Y chromosome changed to X!
And since she's my own, of my own flesh and bone,
she'll be thinking of nothing but sex!
Lindfors
Posts: 640
Joined: 2002-03-09 16:26:52
Location: Fagersta
Contact:

Post by Lindfors »

Jag har inte tillgång till koden hemifrån, dessutom är den långt ifrån fungerade.

Är det ingen som vill bidra med någon hjälp så kan jag väl inte göra något åt det. Saken är väl att uppgiften ligger snäppet högre än vad som är igenomgånget, programmeringsläraren är verkligen inte pedagogisk och lyckas sällan skriva fungerande kod själv.
Vi känner ingen som kan detta, därav frågade jag här. Men det verkar riktigt svårt att få hjälp, även om det säkert finns programerare som skulle kunna förklara koden i en handvändning.
Ljudingenjör - Örebro Universitet
User avatar
IcePic
Hedersbit
Posts: 6061
Joined: 2002-03-08 16:09:38

Post by IcePic »

Lindfors wrote:Jag har inte tillgång till koden hemifrån, dessutom är den långt ifrån fungerade.

Är det ingen som vill bidra med någon hjälp så kan jag väl inte göra något åt det. Saken är väl att uppgiften ligger snäppet högre än vad som gått igenom, programmeringsläraren är verkligen inte pedagogisk och lyckas sällan skriva fungerande kod själv.
Vi känner ingen som kan detta, därav frågade jag här. Men det verkar riktigt svårt att få hjälp, även om det säkert finns programerare som skulle kunna förklara koden i en handvändning.
Problemet är att formuleringen
inte lyckats lösa helt och hållet
kan betyda allt ifrån att hon
inte begriper C++, att hon/ni inte vet vad en kompilator är, att programmet
konstant kraschar datorn till omboot eller att du har
problem med att just "50" hamnar i listan för stora tal istället för små.

Så bortsett från om folk gillar eller ogillar att göra andra personers hemläxor
så är "felrapporten" väldigt svag som sådan.
Hade t.ex problemet varit just att 50 kommer på fel kolumn så skulle säkert
en listning av programmet kunnat locka någon att leta upp vart det står
=< ska bytas till bara < eller liknande. Om felet är att 50 kommer på fel
plats och du inte postar det ni redan gjort så är risken stor att man sitter och
bakar ett helt program bara för att ni har tagit fel på "större än eller lika med"-tecknet.

Att falla i den "fällan" lockar iallafall inte mig, så från mig kommer ingen kod,
men det är inte bara lathet, det är även en vanföreställning om att ni/hon
ändå inte lär er något av att luta huvet bakåt, gapa och bli matade med en
fungerande lösning på skolproblemet, för just veckans läxa är inte målet
med kursen. I övrigt är den usle läraren inte heller betjänt av att ni får en
lösning serverad från nätet, han kommer ju stärkas i sin tro att hans pedagogik
faktiskt ledde till att hon skapade ett fint fungerande program som sorterar
alla talen helt korrekt. Då känner jag att ni återkommer nästa vecka då det
är dags att quick-sorta ett påhittat medlemsregister i omvänd medlemsnummerordning.
Innan man vet ordet av är 64bits ansvariga för hennes förmåga att klara
nån tenta/prov och det är inte jag särskilt sugen på. Eftersom kursen är
upplagd så att nya uppgifter baseras på tidigare så kommer svårighetsgraden
konstant ökas samtidigt som man förutsätts kunna allt det man gjort tidigare,
så det blir ju knappast enklare av att få en lösning från nätet eftersom man
skjuter problemet till framtiden då det bara blir större, precis som skulder
hos MC-klubbar. 8-/

Det saknas inte C/C++-kurser på nätet på både svenska och engelska, så
skaka fram 5 poäng googlo-informatik och sök fram kunskapen om hur man
skriver C++-kod är mitt tips.
Oh give me a clone, my very own clone,
with the Y chromosome changed to X!
And since she's my own, of my own flesh and bone,
she'll be thinking of nothing but sex!
Lindfors
Posts: 640
Joined: 2002-03-09 16:26:52
Location: Fagersta
Contact:

Post by Lindfors »

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?

Code: Select all

#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 1\n";
	cout<<"För att skriva ut listan med tal över 50 tryck 2\n";
	cout<<"För att skriva ut båda listorna tryck 3\n";
	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;
			}
		}
	}

}

Ljudingenjör - Örebro Universitet
Axeflower
Posts: 947
Joined: 2002-03-07 23:06:58
Location: Kalmar
Contact:

Post by Axeflower »

Felaktig input hanteras inte.
Om jag säger att jag vill skriva in 300 tal så kommer for-loopen att låta mig försöka, och då händer det grejer.
Samt när man gör valet för utskrift så kommer alla val utom de godkända att bara skippa allt, där kanske det är läge att loopa tills man väljer ett godkänt alternativ och lägga till ett alternativ för att bryta loopen och därmed avsluta programmet.
Lindfors
Posts: 640
Joined: 2002-03-09 16:26:52
Location: Fagersta
Contact:

Post by Lindfors »

Var missnöjd med koden så jag skrev helt ny, dessutom kommentarer
Men nu får jag inte koden att funka i mitt borland 5
Vet inte om den kan fungera i någon kompilator, vad kan vara felskrivet?

Code: Select all

 #include <iostream>
#define NUM 30 // Antalet heltal som ska läsas in
using namespace std;

void bubbleSort(int*); // Deklarerar funktionen bubbleSort, tar emot en int* som skall sorteras.


int main (void)
{
	int input[NUM], choice, i; // Input-vektorn är där de inskrivna
talen lagras, choice är användarens val på slutet och i är en räknare.
	
	cout << "Skriv in" << NUM << "antal nummer." << endl; //
Uppmanar användaren att skriva in NUM heltal
	for(i = 0;i < NUM;i++)
		cin >> input[i];

	cout << "Anropar bubbelsortering." << endl;
	bubbleSort(input); // anropa bubbleSort();
	cout << "Bubbelsortering klar." << endl;

	while(true) // Oändlig loop för att användaren ska kunna prova detta underbara program hur många gånger som helst. :)
	{
		cout << "Vad vill du göra härnäst?" << endl << "1. Lista nummer under 50." << endl << "2. Lista nummer över 50." << endl << "3.
Sluta." << endl << "?";
		cin >> choice;
		switch(choice)
		{
		case 1:
			for(i = 0;i < NUM;i++) // Börjar från början och
räknar upp alla tal upp till 50, då hoppar den ur loopen.
			{
				if(input[i] >= 50)
					break;
				cout << input[i] << " ";
			}
			break;
		case 2:
			for(i = 0;i < NUM;i++) // Börjar från början men
hoppar över alla tal under 50, hoppar ur automatiskt när den är klar.
			{
				if(input[i] < 50);
				else
                    cout << input[i] << " ";
			}
			break;
		case 3:
			return 0;
		default:
			break;
		}
	}
				
	
	return 0;
}

void bubbleSort(int *sort)
{
	int i,j,temp; // Två räknare och en temporär variabel för att kunna byta.

	for(i = 0;i < NUM;i++) // Går igenom hela vektorn.
	{
		for(j = 0;j < NUM;j++) // Går igenom hela vektorn en gång för varje element.
		{
			if(sort[j] > sort[i]) // Om elementet sort[j] är
större än sort[i], byt plats på dem.
			{
				temp = sort[j];
				sort[j] = sort[i];
				sort[i] = temp;
			}
		}
	}
}
Ljudingenjör - Örebro Universitet
User avatar
IcePic
Hedersbit
Posts: 6061
Joined: 2002-03-08 16:09:38

Post by IcePic »

Lindfors wrote:Var missnöjd med koden så jag skrev helt ny, dessutom kommentarer
Men nu får jag inte koden att funka i mitt borland 5
Vet inte om den kan fungera i någon kompilator, vad kan vara felskrivet?
Gcc på mac har inga problem med den iaf.
Oh give me a clone, my very own clone,
with the Y chromosome changed to X!
And since she's my own, of my own flesh and bone,
she'll be thinking of nothing but sex!
felix
Posts: 4
Joined: 2004-10-09 17:27:07
Contact:

Post by felix »

från början var det det urdumma felet att bubblesort(&f[0][0],x);
försöker sortera ETT heltal :))))) eftersom &f[0][0] betyder adressen till f[0][0], inte till början av den första kolumnen, vilken är f[0]
det ska alltså vara

Code: Select all

bubblesort(f[0],x);
=))

i det senare programmet ser jag inget direkt fel, men jag orkade dock inte kolla igenom det så noga heller. skulle vara schysst att få veta vad "jag får det inte att funka" betyder. compile errors/access violations/ fel beteende? lr? :)) det kan ju fan vara så att det visar en bild på pamela och exitar.
1000101110011011001
Post Reply