Programavimas. Klausimai del užduočių, kurių nesuprantu C++.
mendinskis (+1455)
Sveiki, turiu problema. Dabar sprendziu si uzdavini ir kompiliatorius ismeta toki pranesima Kas gali buti blogai? #include <iostream> #include <iomanip> #include <fstream> using namespace std; const int Cmax = 100; const char CD[]="Duomenys.txt"; const char CR[]="Rezultatai.txt"; void Skaitymas(char A[], int B[], int & n); int Tikrinimas(char A[], int B[], int n); int main(){ int n, B[Cmax]; char A[Cmax]; Skaitymas(A, B, n); Tikrinimas(A, B, n); return 0; } void Skaitymas(char A[], int B[], int & n){ ifstream fd(CD); fd >> n; for(int i=0; i<n; i++){ fd >> A[i] >> B[i]; } fd.close(); } int Tikrinimas(char A[], int B[], int n){ int q=-1; for(int i=0; i<n; i++){ if((A[i]=="v")&&(B[i]==43)){ } q=i; } return q; }
valdas3 (+1276)
Dvigubos kabutės reiškia string, viengubos reiškia char. Pakeisk tas dvigubas kabutes ("v") į viengubas ('v') ir tikriausiai klaidos nebebus.
mendinskis (+1455)
Aciu, taip ir yra. Dar noreciau paklausti int Tikrinimas(char A[], int B[], int n){ int q=-1; for(int i=0; i<n; i++){ if((A[i]=="v")&&(B[i]==43)){ } q=i; } return q; kodel sitam kode man negrazina q?
valdas3 (+1276)
Kodėl sakai, kad negražina? Aišku tas q tikriausiai nėra tas skaičius apie kurį tu galvoji, bet funkcija jį gražina (q=i; turėtų būti tarp if'o skliaustų). Beje, vietoje masyvų A ir B galėtum sukurti vieną, kokios nors duomenų struktūros (savo aprašytos), masyvą.
mendinskis (+1455)
Teisingai q reiksme grazino, bet ja grazino is komp. atminties (susimaisiau truputi), bet tavo pasakyta pastaba nepadejo(matyt pats kazka prazioplines) pasikrapstes uzduoti padariau, tik nera aiksu kas ivyktu jei tarkime tokiu batu nebutu? (atsakymus gavau teisingus).(man atrodo salygoje rezultatuose yra klaida, nes Marytes indeksas negali buti 6) Ikelsiu koda: #include <iostream> #include <iomanip> #include <fstream> using namespace std; const int Cmax = 100; const char CD[]="Duomenys.txt"; const char CR[]="Rezultatai.txt"; void Skaitymas(char A[], int B[], int & n); int Tikrinimas(char A[], int B[], int n, int & ind); int Tikrinimas2(char A[], int B[], int n, int & ind2); void Spausdink(char A[], int B[], int n, int ind, int ind2); int main(){ int n, B[Cmax]; char A[Cmax]; int ind, ind2; Skaitymas(A, B, n); Tikrinimas(A, B, n, ind); Tikrinimas2(A, B, n, ind2); Spausdink(A, B, n, ind, ind2); return 0; } void Skaitymas(char A[], int B[], int & n){ ifstream fd(CD); fd >> n; for(int i=0; i<n; i++){ fd >> A[i] >> B[i]; } fd.close(); } int Tikrinimas(char A[], int B[], int n, int & ind){ //int ind = -1; // Uzkomentavau, nes kitaip programa neveikia, beda ta, kad neaisku kas butu jei nebutu tinkamu batu. Koki tada indeksa mestu? for(int i=0; i<n; i++){ if((A[i]=='v')&&(B[i]==43)){ ind=i; } } return ind; } int Tikrinimas2(char A[], int B[], int n, int & ind2){ //int ind2 = -1; for(int i=0; i<n; i++){ if((A[i]=='m')&&(B[i]==38)){ ind2=i; } } return ind2; } void Spausdink(char A[], int B[], int n, int ind, int ind2){ ofstream fr(CR); fr << "Batu sarasas" << endl; fr <<"-------------" << endl; fr << "Tipas" << setw(8) << "Dydis " << endl; for(int i=0; i<n; i++){ fr << A[i] << setw(8) << B[i] << endl; } fr << "------------" << endl; fr << "Mykolo 43-io dydzio batu indeksas masyve: " << ind << endl; fr <<"Marytes: " << ind2 << endl; fr.close(); }
Ir duomenu failas: 11 v 45 v 44 v 43 m 38 m 40 v 43 m 37 m 38 v 40 m 36 v 39
pakeista prieš 13 m
valdas3 (+1276)
Nesuprantu kodėl tu gražini indekso reikšmę du kartus (viena kartą ją gražina funkcija, o kitą - priskiria ja parametrui)? int Tikrinimas(char A[], int B[], int n, int & ind) Taip, tikriausiai tam rezultatų faile yra klaida. O ką daryti, jei tokių batų nėra yra parašyta sąlygoje. Dar nepadarei vieno sąrašo spausdinimo (kuriame nerodo batų, kuriuos nusipirko).
mendinskis (+1455)
Turiu labai nesudetinga klausima. Kaip is tekstinio failo 1000 4 3 15 360 8 5 2 1 145 99 300 4 700 600 900 800 2 8 1
nusiskaityti TIK pirmus narius t.y 3; 5; 4 ir 2?
mendinskis (+1455)
Viename forume parase, kad tureciau naudoti fd.ignore( ), bet jis iekiuo nepadeda, nes skaito ne kiekvienos eilutes pirmus narius, bet visa eilute.
mendinskis (+1455)
Stai kodas kaip man reiktu nuskaityti tik pirmu eiluciu narius, nes su fd.ignore('\n') nuskaito pirmus 2 gerai(3 ir 5) o kitus 2 meta nesamoningus (9 ir 600)#include <iostream> #include <iomanip> #include <fstream> using namespace std; const int Cmax = 50; const char CD[]="Duomenys.txt"; const char CR[]="Rezultatai.txt"; void Skaitymas(int & p, int & n, int A[], int K[]); int main(){ int p, n, A[Cmax], K[Cmax]; Skaitymas(p, n, A, K); } void Skaitymas(int & p, int & n, int A[], int K[]){ ifstream fd(CD); fd >> p >> n; for(int i=0; i<n; i++){ fd >> K[i]; fd.ignore('\n'); cout << K[i] << endl; } fd.close(); }
pakeista prieš 13 m
valdas3 (+1276)
Kam tau iš vis to reikia? Juk turbūt ne šiaip sau tie kiti skaičiai duoti. O šiaip, tai į kokį nors papildomą kintamąjį nuskaityk nereikalingus skaičius, o reikalingus nuskaityk ten kur reikia. Ir ne turbūt ne taip naudoji ignore().
std::cin.ignore() can be called three different ways:
No arguments: A single character is taken from the input buffer and discarded: std::cin.ignore(); //discard 1 character One argument: The number of characters specified are taken from the input buffer and discarded: std::cin.ignore(33); //discard 33 characters Two arguments: discard the number of characters specified, or discard characters up to and including the specified delimiter (whichever comes first): std::cin.ignore(26, '\n'); //ignore 26 characters or to a newline, whichever comes first