Permalänk
Medlem

Hjälp med enklare c++

"Pekare är en datatyp som refererar till en annan datatyp på en annan minnesplats i primärminnet."
Någon som skulle kunna hjälpa mig och förklara kodbiten nedan? Vilka värden är det som skrivs ut?
Samt peta ut felen i kodbiten som är längst ner.

#include <iostream> using namespace std; int main(){ int i=1; int ii=11; int o=2; int *oo=&o; i--; --i; ii=i+ii+*oo; *oo=*oo+*oo+o; cout<<i<<endl<<ii<<endl<<o<<endl<<*oo<<endl; }

Finn 5 fel...

#include <sodastream> using namespace std; int main(){ while(int i=0; i<2; i++){ cout<< KanonKula <<endl; ) int a=2 if(a==2) a=3; }

Permalänk
Medlem

Är med på att första biten kod skriver ut värdena: -1, 12, 6, 6 men förstår inte riktigt.

Permalänk

i == -1 eftersom både "i--" och "--i" minskar i med 1. i initieras till 1 och minskas med 1 två gånger, vilket blir -1.

ii == 12 eftersom den börjar som 11. Sen på raden "ii = i + ii + *oo;" sätts ii till i + ii + *oo = -1 + 11 + 2 = 12.

0 == 6 eftersom den börjar som 0 och sedan sätts till 6 på raden "*oo=*oo+*oo+o;" eftersom "*oo + *oo + o = 2 + 2 + 2 = 6"
Men hur kan o ändras när det är *oo som vi ändrar värde på? När man skriver int *oo=&o; så pekar oo på minnesplatsen o. Och när man sen sätter *oo till något nytt ändrar man det som är sparat på minnesplatsen o.

*oo == 6 eftersom om oo pekar på minnesplatsen för oo måste värdet vara samma.

Permalänk

Vilka fel har du själv hittat? Tänk igenom och resonera.

1: #include <sodastream>
2: using namespace std;
3: int main(){
4: while(int i=0; i<2; i++){
5: cout<< KanonKula <<endl;
6: )
7: int a=2
8: if(a==2)
9: a=3;
10: }

Rad 4 är en for-loop enligt argumenten, inte en while-loop.
Rad 6 har en parentes som inte stänger någonting.
Rad 7 saknar semikolon.
Rad 9 ska ha en indentering eftersom den tillhör if-satsen.
Rad 11 finns inte, som ska innehålla en klammer som stänger main().

Dold text
Permalänk
Medlem

De ser ut som programmeringstest, som en läxa i en kurs eller ett inträdesprov till något. Det andra exemplet går att hitta om man googlar lite med variabelnamnen i sökfrågan.

Det är meningen att du ska göra såna själv, utefter kunskap som du redan ska ha skaffat.
Det anses dålig stil att posta programmeringsuppgifter på forum. Vissa forum har t.om specifika regler som förbjuder det.

Visa signatur

För övrigt anser jag att tobak ska förbjudas.

Permalänk
Medlem
Skrivet av kijsee92:

"Pekare är en datatyp som refererar till en annan datatyp på en annan minnesplats i primärminnet."
Någon som skulle kunna hjälpa mig och förklara kodbiten nedan? Vilka värden är det som skrivs ut?
Samt peta ut felen i kodbiten som är längst ner.

#include <iostream> using namespace std; int main(){ int i=1; int ii=11; int o=2; int *oo=&o; i--; --i; ii=i+ii+*oo; *oo=*oo+*oo+o; cout<<i<<endl<<ii<<endl<<o<<endl<<*oo<<endl; }

Finn 5 fel...

#include <sodastream> using namespace std; int main(){ while(int i=0; i<2; i++){ cout<< KanonKula <<endl; ) int a=2 if(a==2) a=3; }

Finn 5 fel? Vilka värden skrivs ut?
För mig handlar det rätt uppenbart om läxhjälp, eller rättare sagt läxlösning. Hur många kapitel in är ni och vilka är dom?

Visa signatur

Endeavour OS(arch) - Cassini Nova

Permalänk
Medlem

@NybbTronio: Antar att #include <sodastream> ska bytas ut till #include <iostream>

Permalänk
Medlem

@Findecanor: Det är gamla uppgifter jag kikar på. hittade 2 fel själv på andra men är inte världsbäst på sånt här än direkt så blir blind för småfel i koden. Sen så förstod jag inte riktigt första då "Pekare" är ett uttryck jag inte hört än.

Permalänk
Medlem

@Louwsy Shroom: Har bara lärt mig det mest grundläggande än så länge. Har precis börjat kika på for-loopar.

Permalänk
Medlem

Är inte ett fel också att man måste lägga till "" i cout<< KanonKula <<endl; så det blir cout<< "KanonKula" <<endl;

Permalänk
Medlem

@kijsee92: När du deklarerar en vanlig variabel, t.ex.:

int i = 17;

så talar du om för kompilatorn att du vill lagra talet 17 i ett datablock någonstans i minnet (du bryr dig inte om vart), och att du vill referera till det datablocket med namnet i.

En pekare är också en variabel, men datablocket som en pekare refererar till innehåller en minnesadress istället för vanlig data. Så du kan deklarera en pekare som pekar på t.ex. minnesadress 0x239843b3:

int *p = 0x239843b3;

Men att bara peka på någon godtycklig minnesadress är ju inte så användbart, så istället kan man använda &-operatorn för att ta reda på vilken adress en viss variabel refererar till:

int i = 17; int *p = &i; // p pekar på adressen för i

För att ha någon nytta av pekare så behöver man sen kunna tala om att man vill komma åt det som pekaren pekar på, vilket man i C++ förvirrande nog gör med *-operatorn (som även används för att deklarera pekare, och för att multiplicera saker). Så t.ex.:

int i = 17; int *p = &i; *p = 18; // Lagra 18 på adressen som p pekar på, d.v.s. i. std::cout << i << '\n'; // Skriv ut värdet som i refererar till. std::cout << p << '\n'; // Skriv ut adressen som p refererar till. std::cout << *p << '\n'; // Skriv ut värdet på adressen som p refererar till.

Permalänk
Medlem

@NybbTronio: kan det vara så att parantesen ) egentligen ska vara en } klammer som stänger for-loopen och att den klammer som finns längre ner är den som stänger main()?

Permalänk
Medlem

Vad innebär det att strukturera data på ett ändamålsenligt sätt?

Permalänk

@kijsee92: Ja så är det