Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

Videoannonse
Annonse

#include <iostream>
#include <conio.h>
#include <limits.h>
using namespace std;

int main ()
{
   int Tab [20], Nytab [20];
   int I, K, Min;
   
   //Inntasting av verdier:
   for (I=0; I<20; I++)
   {
   cout << "\nTast inn komponent nummer " << I+1 << ": ";
   cin >> Tab [I]; cin.ignore;
   }
   
   //Sortering:
   for (I=0; I<20; I++)
   {
   Min = 0;
   for (K=1; K<20; K++)
   if (Tab[K] < Tab [Min])
   Min = K;
   Nytab [I] = Tab [Min];
   Tab [Min] = INT_MAX;
   }
   
   //Utskrift:
   cout << "\n\nDen ordnede listen er:  ')";
   for (I=0; I<20; I++)
   cout << " " << Nytab[I];
   
   getche ();
   return 0;
}
   

 

På linje 15:

cin >> Tab [I]; cin.ignore;

får eg fram denne feilmeldingen:

Statement cannot resolve address of overload function.

Kva er feil?

Endret av gamma48
Lenke til kommentar

Så klart, det gjekk nå.

Er det nokon som gidder å forklare meg kva som skjer i sorteringsdelen og kvifor?

Prøvde å forstå det i boka, men det gjekk litt i surr...

//Sortering:
   for (I=0; I<20; I++)
   {
   Min = 0;
   for (K=1; K<20; K++)
   if (Tab[K] < Tab [Min])
   Min = K;
   Nytab [I] = Tab [Min];
   Tab [Min] = INT_MAX;
   }
   
   //Utskrift:
   cout << "\n\nDen ordnede listen er: ";
   for (I=0; I<20; I++)
   cout << " " << Nytab[I];

Lenke til kommentar

Først så er det den feil der. K må begynne på 0 og ikke 1.

 

Det algortimen gjør er å lete gjennom lista etter laveste tall. Dette tallet plasseres først i en ny liste. I den gamle lista erstattes tallet med INT_MAX så man skal være sikker på at det ikke lenger er laveste tall. Så gjentar man dette, finner det tallet som nå er lavest, og plasserer det på plass nummer to i lista. Osv. osv.

Lenke til kommentar
  • 2 uker senere...

Når eg kjører denne kildefilen så får eg feilmelding opp på skjermen:

 

#include <iostream>
#include <conio.h>
using namespace std;

int main ()
{
   char* Tpkr;
   Tpkr = "Hei gamle venn";
   cout << "\n" << Tpkr;
   cout << "\n" << Tpkr [1] << " " << Tpkr [5];
   Tpkr [2] = 'x';
   cout << "\n" << Tpkr;
   cout << "\n" << *Tpkr;
   
   getche ();
   return 0;
}

What's happening?!!

 

Debugger:

Det oppstod en access vialation (segmantation fault) i programmet ditt.

Linjen: Tpkr [2] = 'x';

 

What's happening?!!

Endret av gamma48
Lenke til kommentar

Hva er det egentlig min kode gjør som ikke gjør det du ønsker?

 

Det du prøver å gjøre er udefinert.

char* Tpkr = "Hei gamle venn";

 

Dette sier at Tpkr skal peke til en konstant streng, altså kan du ikke endre den.

Du kan endre hva Tpkr skal peke til, men du kan ikke endre strengen i seg selv. Dersom du skal gjøre det, må du gjøre som jeg har vist ovenfor.

Endret av Nazgul
Lenke til kommentar

Då er det berre boka mi som er utaddert.

Der står det at det går ann å bruke begge metodene...

 

Nytt eksempel:

 

#include <iostream>
#include <conio.h>
using namespace std;

int main ()
{
   int I;
   char* Tpkr = new char [10];
   cout << "Tast inn ein namnet ditt: ";
   cin.getline (Tpkr,10);
   cout << "\nDu heiter: ";
   for (I=0; (int)*Tpkr;)
   {
       cout << *(Tpkr++);
       I++;
   }
   cout << "\nBaklengs blir det: ";
   for (; I;)
   {
   I--;
   cout << *(Tpkr--);
   }
   
   getche ();
   return 0;
}

 

Når eg taster navnet mitt forsvinner alltid den første bokstaven når den skal telle baklengs...Går dette ann å hindre??

Altså avslutter løkke nr. 2 før den har fått skrevet det første teiknet (som skal komme sist). :roll:

Endret av gamma48
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å
×
×
  • Opprett ny...