Gå til innhold

c++ trenge hjelp med oppgave


Anbefalte innlegg

Holde på med et oppgave som jeg sliter med å forstå hva som kommer som utskrift:

 

#include <iostream>
#include <cstring>
using namespace std;
 
const int LEN = 20;
 
class Objekt {
 
private:
 char txt[LEN];
 char tegn;
 int tall;
 
public:
 Objekt(char tx[], char te, int ta)
{ strcpy(txt, tx); tegn = te; tall = ta; }
 
 void funk1() { cout << txt << ' ' << tegn << ' ' << tall; }
 
 bool funk2(char te, int n1, int n2)
{ return (txt[n1] == te || txt[n2] == te); }
 
 char funk3() { return (char(int(tegn) + tall)); }
 
 void funk4(int ta) { tall = ta; }
};
 
 
int main() {
 
 
Objekt ob1("Arsenal", 'A', 5), ob2("Chelsea", 'H', 3);
 
ob2.funk1(); cout << " "; ob1.funk1(); cout << '\n';        // Utskrift: Chelsea H 3 ' ' Arsenal A 5
 
cout << ob2.funk2('e', 3, 6) << '\n';                               // Utskrift : ???
 
cout << ob1.funk2('a', 0, 5) << ' ' << ob2.funk2('E', 2, 5) << '\n';   // Utskrift ????
 
cout << ob2.funk3() << ' ' << ob1.funk3() << '\n';        // Utskrift: K ' ' F
 
ob2.funk4(-7); cout << ob1.funk2(ob2.funk3(), 0, 1) << '\n';  // Utskrift: ???
 
 
return 0; 
 
Jeg er usikker hva som skjer i return i funksjonene.
 
Jeg har fasit på svarene men jeg forstår ikke det.
Endret av heihopp89
Lenke til kommentar
Videoannonse
Annonse

Neste gang så bruk gjerne <> i editoren for å legge inn kode. Da ser det slik ut (med forklarende kommentarer): 

int main() {
	Objekt ob1("Arsenal", 'A', 5), ob2("Chelsea", 'H', 3);

	ob2.funk1(); cout << " "; ob1.funk1(); cout << '\n';        // Utskrift: Chelsea H 3 ' ' Arsenal A 5
	// funk2 sammenligner ob2.txt[3] == 'e' eller ob2.txt[6] == 'e'
	// siden e ikke finnes for Chelsea ved index 3 eller 6 så blir dette returnert som den boolske verdien false
	// false er også 0 så denne linjen printer antakelig 0 fordi funk2 returnerer false
	cout << ob2.funk2('e', 3, 6) << '\n';
	// her testes Arsenal om den har en liten a ved 0 eller 5
	// siden den har en liten a på index 5 så blir dette true og returneres som true
	// true blir 1 så her printes 1 
	cout << ob1.funk2('a', 0, 5) << ' ';
	// finnes ingen E i Chelsea så dette blir false, eller 0
	cout << ob2.funk2('E', 2, 5) << '\n';  
	// char(int('H')+3) er det samme som char(int(72)+3)
	// 72+3 blir 75 og http://www.asciitable.com/
	// sier at 75 blir K
	// samme regnestykket gjelder for ob1 bare andre tall
	cout << ob2.funk3() << ' ' << ob1.funk3() << '\n';        // Utskrift: K ' ' F
	// her endres ob2 sitt tall
	ob2.funk4(-7); 
	// input til funk2 blir nå returen av funk3
	// funk3 blir char(int('A')+ -7) = 65 + -7 = 58 = ':'
	// Arsenal har ikke : i seg, så dette blir false, og derfor 0
	cout << ob1.funk2(ob2.funk3(), 0, 1) << '\n';  // Utskrift: ???
	return 0;
}

Anbefaler deg å aldri bruke navn som funk2 og tall, det er utrolig forvirrende.

Endret av Enthroner
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...