27/11/09 15:26
ho un problema in questo programma...il bug sta nel fatto che se metto nella sequenza iniziale numeri ad una sola cifra funziona, appena aumentano le cifre mi dice comunque che le sottosequenze sono contenute nonostante non lo siano....
#include <iostream> using namespace std; const int Max = 1000; int leggi(int [], int &); bool contenuta(int [], int [], int, int); int main (){ int A[Max], B[Max], C[Max], dim = 0, dimb = 0, dimc = 0; cout << "\t\t\t***calcoli in sottesequenza***\n\n"; cout << "inserisci una sequenza di numeri(1000 per terminare): \n"; leggi(A, dim); cout << "inserisci un'altra sottosequenza(1000 per terminare):\n"; leggi(B, dimb); cout << "inserisci ancora un'altra sottosequenza(1000 per terminare): \n"; leggi(C, dimc); cout << "ORA IL COMPUTER CONTROLLA SE LE DUE SOTTOSEQUENZE\nSONO CONTENUTE NELLA SEQUENZA PRINCIPALE:\n\n\n"; if (contenuta(A, B, dim, dimb)) cout << "la sottosequenza 1 e' contenuta nella sequenza di partenza!\n"; else cout << "la sottosequenza 1 non e' contenuta nella sequenza di partenza!\n"; if (contenuta(A, C, dim, dimc)) cout << "la sottosequenza 2 e' contenuta nella sequenza di partenza!\n"; else cout << "la sottosequenza 2 non e' contenuta nella sequenza di partenza!\n"; system("pause"); return 0; } int leggi(int A[], int & dim){ for (int i = 0; i < Max; i++){ cin >> A[i]; if (A[i] == 1000 || dim > Max) return 0; dim++; } } bool contenuta(int A[], int B[], int dim, int dimS){ for (int i = 0; i < dim; i++){ if(A[i] == B[0]){ int conti = i, contz = 0; while(contz < dimS){ if (A[conti] == B[contz]){ conti++; contz++; } else if (A[conti] != B[contz]) return false; } return true; } }}