Just nu i M3-nätverket
Gå till innehåll

Kan någon förklara för mig hur denna koden funkar?


christian++

Rekommendera Poster

#include <iostream>
using namespace std;
main()
{
const int max_antal = 100;
int f[max_antal], tal, plats, antal=0;

cout << "Skriv in ett antal heltal" << endl;
while (cin>>tal) // läs in nästa tal
{
antal++;

// leta reda på rätt plats för det nya talet
plats=0;
while (plats<antal-1 && tal>f[plats])
plats++;

// flytta alla tal till höger om platsen ett steg år höger
for (int i=antal-2; i>=plats; i--)
f[i+1] = f;

// lägg in det nya talet
f[plats] = tal;
}

for (int j=0; j<antal; j++)
cout << f[j] << endl;
}

 
Länk till kommentar
Dela på andra webbplatser

Först definierar man ett antal variabler. Till exempel arrayen f, tal, plats och antal är heltal.

 

Sen skriver man ut "Skriv in ett antal heltal". Exakt hur cin>>tal fungerar är jag inte helt säker på, men så länge du matar in ett heltal så kommer man komma in i loopen.

 

Inkrementera antal.

 

Sen gör man en loop för att se om talet redan finns i f, det gör man genom att kontrollera att plats är mindre än antal och det inmatade talet är större än talet lagrat i f på plats.

 

Om så är fallet så loopar man en gång till, denna gång ifrån slutet av f och flyttar samtliga tal ett steg.

 

Sen placerar man det inmatade talet i f på den nu lediga platsen.

 

Det sista är att man skriver ut hela arrayen f.

Länk till kommentar
Dela på andra webbplatser

Ser ut som en skoluppgift. Hur lyder den i sin helhet?

Har du någon första början på svaret så det går att få någon uppfattning om din kunskapsnivå?

Länk till kommentar
Dela på andra webbplatser

// flytta alla tal till höger om platsen ett steg år höger
for (int i=antal-2; i>=plats; i--)
f[i+1] = f;

 

Det är den jag har problem med.

Länk till kommentar
Dela på andra webbplatser

Är du med på vad variablerna plats och antal används till?

Ett bra sätt är ofta att på papper rita upp ett exempel på hur f kan se ut och markera vad plats och antal står för (vilket index, position de har). Sen ritar/skriver man ut hur allt förändras för varje steg i programmet.

 

For-satsen går från slutet av den använda delen av f mot början av f och flyttar värdet på sista använda platsen ett steg mot slutet av f så att det blir ett tomrum. Varje varv flyttar det tomrummet ett steg till vänster och det håller på tills man har tomrummet på den position där det sist inlästa värdet ska vara.

 

Blev du något klokare av det?

Länk till kommentar
Dela på andra webbplatser

Säg att du nu är på det varv i while-loopen där antal har värdet 5. Vad är då index för sista talet i f?

Länk till kommentar
Dela på andra webbplatser

// flytta alla tal till höger om platsen ett steg år höger
for (int i=antal-2; i>=plats; i--)
f[i+1] = f;

 

Men varför står det "antal-2"? "antal-1" funkar också att köra!

Länk till kommentar
Dela på andra webbplatser

Det fungerar om man har "int i=98;" också men det är onödigt att flytta på de positioner som inte innehåller något värde.

Länk till kommentar
Dela på andra webbplatser

// leta reda på rätt plats för det nya talet
plats=0;
while (plats<antal-1 && tal>f[plats])
plats++;

 

första inmatade talet borde få index 1? while loopen är sann och därför löses "plats++" ut. om inte "plats<antal-1" sätter stopp för det? jag har testat och första inmatade talet får index 0!

Länk till kommentar
Dela på andra webbplatser

Första gången är antal 1 och plats 0 så "plats<antal-1" är "0 < 0" vilket är falskt.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...