Kezdőoldal » Számítástechnika » Programozás » Valaki segítene megtalálni a...

Valaki segítene megtalálni a hibát a kódban?

Figyelt kérdés

Szóval a feladat ez lenne:

Feljegyeztük, hogy egymás követő hétvégeken hány Forintot nyertünk vagy veszítettünk a

lóversenyen. Volt-e olyan napunk, amikor úgy nyertünk, hogy a megelőző k hétvégén

mindig veszítettünk?


A kód pedig ez:

#include <iostream>

#include <stdlib.h>

#include <vector>

#include <windows.h>

#include <fstream>


using namespace std;


void clearScr();

void manBe(vector<int> &v, bool hiba, int &n);

void FileBE(vector<int> &v, bool hiba, int &n);



bool elozo(vector<int> v,int i,int k);


void negativ(vector<int> v, bool hiba);


int main()

{

setlocale(LC_ALL,"Hun");

string re="";

bool reRun=false;

do{

vector<int> v;

bool hiba=false;

int ai = 0;

int n=0;

do{//Menu

string a="";

cout << "Menü:" << endl << endl;


cout << "1: Manuális beolvasás" << endl;

cout << "2: Fileból való beolvasás" << endl;

cout << "3: Kilépés" << endl << endl;


cout << "Kérem válasszon: ";

cin >> a;

cout << endl;


ai= atoi (a.c_str());

hiba = ((a != "0" && ai==0) || (ai<1) || (ai>3));

if (hiba){

clearScr();

cout << "HIBA: csak 1, 2 és 3 lehet a bemeneti érték!" << endl;

}


}while(hiba);


switch(ai){

case 1:

manBe(v, hiba, n);

break;

case 2:

FileBE(v, hiba, n);

for(int i=0; i<v.size(); i++){

cout << v[i] << endl;

}

break;

case 3:

return 0;

}


int k=0;

string a="0";

do{

cout << endl << "Kérem a vizsgálandó napok számát (k): ";

cin >> a;

k=atoi(a.c_str());

hiba=(((a!="0") && (k==0)) || (k<1) || (k>n));

if(hiba){

cout << "Nem megfelelõ érték!" << endl;

}

}while(hiba);


bool h=false;

int i=k+1;

while (!h && i<=n){

h=(v[i]>0 && elozo(v,i,k));

i++;

}


if (h){

cout << "Nem volt ilyen eset." << endl;

} else{

cout << "Volt ilyen eset." << endl;

}


cout << endl << "Újrafuttatashoz írjon I vagy i-t:" ;

cin >> re;

reRun = ((re=="I") || (re=="i"));

clearScr();

}while(reRun);


return 0;

}


void clearScr(){

cout << string( 100, '\n' );

COORD coord = {0, 0};

SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coord );

}


void manBe(vector<int> &v, bool hiba, int &n){

string a="";

do{

do{

cout << "Kérem adja meg hány verseny volt: ";

cin >> a;

n=atoi(a.c_str());

hiba=((a!="0" && n==0) || (n<1));

}while(hiba);

v.resize(n);

cout << endl;

cout << "Kérem adja meg a nyeremények értékét:" << endl;

for(int i=0; i<n; i++){

do{

cout << i+1 << ". verseny: ";

cin >> a;

v[i]=atoi(a.c_str());

hiba=(a!="0" && v[i]==0);

if(hiba){

cout << "A megadott érték nem egész szám!" << endl;

}

}while(hiba);

}

}while(hiba);

}


void FileBE(vector<int> &v, bool hiba, int &n){

ifstream ifs;

string fname="";


cout << "Kérem adja meg a file nevét: ";

cin >> fname;


ifs.open(fname.c_str());

int s;

while(!ifs.eof()){

ifs >> s;

v.push_back(s);

n++;

}


}


bool elozo(vector<int> v,int i,int k) {

bool h=true;

int j=i-k;


while (h && j<=i-1)

{

h=(v[j]<0);

j++;


}

return h;

}


És a probléma hogy minden tesztesetre igaz értéket kapok vissza :/



2013. ápr. 21. 15:53
 1/1 metaxxa válasza:

Talán mert szarul programozol :)


Tanácsok:

1. Ha használsz string adattípust, akkor a string.h-t tedd include-ba.

2. Szöveget, szöveggel nem így hasonlítunk. Vagy mindkettő legyen const char * és akkor pl strcmp(), vagy pedig, ha már így írtad, akkor a!="0" helyett a.compare("0")!=0 kellene.

3. Keress olyan fordítót, amivel lehet debugolni is.

[link]

És ismerkedj meg a Watch ablakkal, ahol nyomkövetés közben látod az egyes változók értékét. És láthatod, hogy mi a hiba!

2013. ápr. 27. 09:46
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!