A[kur]=sk; Šis sakinys turėtų būti po ciklu, o ne jame.
brilliant (+70)
valdas3 A[kur]=sk; Šis sakinys turėtų būti po ciklu, o ne jame.
Vaje...Labai ačiū :)
brilliant (+70)
valdas3 A[kur]=sk; Šis sakinys turėtų būti po ciklu, o ne jame.
Jei dar galima, paklausiu dėl šio uždavinio. Kur čia prasilenkiu su logika?
#include <iostream> #include <fstream>
using namespace std; void nuskaityk(int A[],int B[], int &n, int &p) { ifstream Df("U1.txt"); Df>>n;
for(int i=0; i<n; i++) { Df>>A[i]; } Df>>p; for(int i=0; i<p; i++) { Df>>B[i]; } Df.close(); } void iterpk(int A[], int & n, int sk,int kur) { for(int i=n; i>kur; i--) { A[i]=A[i-1]; } A[kur]=sk; n++; } void sk(int A[], int B[], int & n, int p) { for(int i=0; i<n; i++) { for(int j=0; j<p; j++) { if(B[j]%A[i]==0) { iterpk(A,n,B[j],i+1); } } } int main() { int n,p,mas2[100],mas[100]; nuskaityk(mas,mas2,n,p); sk(mas,mas2,n,p); return 0; }
valdas3 (+1276)
Tą žodį "įterpti" galima suprasti įvairiai, tu supratai taip, kad skaičius reikia įterpti į masyvą, o aš suprasiu taip, kad išvestame rezultate reikia įterpti tuos skaičius tarp pirminių ir tada pagrindinis algoritmas atrodys taip: for(int i = 0; i < n; i++){ cout << A[i] << " "; for(int j = 0; j < m; j++){ if(B[j]%A[i]==0){ cout << B[j] << " "; } } }
Šio algoritmo rezultatas net bus teisingas, ne taip kaip pavyzdyje (ten skaičiai iš B imami atbulai (nors jo kaip ir nebandžiau paleisti)). O bandant daryti su įterpimu į masyvą, tai susidursi su problemomis. Visų tų problemų priežastis yra ta, kad masyvas A ciklo viduje kinta. Į tą masyvą yra įterpiami nauji elementai, todėl kai bandai vykdyti antrą išorinio ciklo iteraciją, tai antras masyvo A elementas jau nebebus 7, o bus kažkuris masyvo B elementas, kuri įterpei prieš tai. Galimi du sprendimo būdai, turbūt paprastesnis būdas yra susikurti trečią masyvą, kuriame būtų įterpinėjami tie visi skaičiai. Kodas būtų panašus į mano aukščiau parašytą kodą, t.y. net nereikėtų nieko įterpinėti, tiesiog iš eilės sudėtum į masyvą reikiamus skaičius. Antras būdas yra pakeisti tavo algoritmą taip, kad būtų atsižvelgiama į tai kaip keičiasi masyvas ir atitinkamai įterpti skaičius į tinkamas pozicijas. Gali reikėti truputį pasukti smegenis, bet galbūt tai padės geriau perprasti programavimą :) . Jei nepavyks pačiam sugalvoti kaip tai padaryti, tai paliksiu kodą čia (labai keista buvo vadinti kintamuosius lietuviškais žodžiais...).
pakeista prieš 11 m
brilliant (+70)
valdas3Tą žodį "įterpti" galima suprasti įvairiai, tu supratai taip, kad skaičius reikia įterpti į masyvą, o aš suprasiu taip, kad išvestame rezultate reikia įterpti tuos skaičius tarp pirminių ir tada pagrindinis algoritmas atrodys taip: for(int i = 0; i < n; i++){ cout << A[i] << " "; for(int j = 0; j < m; j++){ if(B[j]%A[i]==0){ cout << B[j] << " "; } } }
Šio algoritmo rezultatas net bus teisingas, ne taip kaip pavyzdyje (ten skaičiai iš B imami atbulai (nors jo kaip ir nebandžiau paleisti)). O bandant daryti su įterpimu į masyvą, tai susidursi su problemomis. Visų tų problemų priežastis yra ta, kad masyvas A ciklo viduje kinta. Į tą masyvą yra įterpiami nauji elementai, todėl kai bandai vykdyti antrą išorinio ciklo iteraciją, tai antras masyvo A elementas jau nebebus 7, o bus kažkuris masyvo B elementas, kuri įterpei prieš tai. Galimi du sprendimo būdai, turbūt paprastesnis būdas yra susikurti trečią masyvą, kuriame būtų įterpinėjami tie visi skaičiai. Kodas būtų panašus į mano aukščiau parašytą kodą, t.y. net nereikėtų nieko įterpinėti, tiesiog iš eilės sudėtum į masyvą reikiamus skaičius. Antras būdas yra pakeisti tavo algoritmą taip, kad būtų atsižvelgiama į tai kaip keičiasi masyvas ir atitinkamai įterpti skaičius į tinkamas pozicijas. Gali reikėti truputį pasukti smegenis, bet galbūt tai padės geriau perprasti programavimą :) . Jei nepavyks pačiam sugalvoti kaip tai padaryti, tai paliksiu kodą čia (labai keista buvo vadinti kintamuosius lietuviškais žodžiais...).