Informatică, întrebare adresată de andriesboss92, 9 ani în urmă

Se consideră două tablouri unidimensionale a şi b fiecare având numere naturale de
maximum patru cifre, ordonate crescător. Tabloul a conţine n(1<n<100) numere pare, iar tabloul b conţine m (1<m<100) numere impare.
 
a) Scrieţi un program C/C++ care citeşte de la tastatură valoarea lui n şi cele n elemente ale tabloului a, apoi valoarea lui m şi cele m elemente ale tabloului b după care scrie în fişierul BAC.TXT un număr maxim de elemente ale tablourilor date, numerele fiiind scrise în ordine crescătoare, separate prin câte un spaţiu, iar cele aflate pe poziţii consecutive fiind de paritate diferită. Programul va utiliza un algoritm eficient din punct de vedere al timpului de executare.

Exemplu: pentru n=6, m=5 şi tablourile a=(2,4,8,10,14,16) şi b=(3,5,7,11,15 )
fişierul BAC.TXT va avea următorul conţinut : 2 3 4 5 8 11 14 15 16.
b) Descrieţi succint, în limbaj natural, algoritmul pe baza căruia a fost scris programul de la punctul a), explicând în ce constă eficienţa metodei utilizate.


blindseeker90: Nu inteleg ce se intampla. Tu intri in while fara sa stii valoarea lui c[1]. Nu imi dau seama cum poti sa faci comparatiile
andriesboss92: Poti sa o scrii tu corect sa vad ce am gresit?
blindseeker90: Acum ma gandesc daca nu exista vreo solutie mai eficienta
andriesboss92: Eu m-am gandit ca c[1] pot sa-l aflu in if (x>y)
blindseeker90: tu intri in while c k=1, deci tu faci deja comparatii cu c[1] in while
andriesboss92: ops... nu prea le am, ce-i drept.. dar vreau sa invat. Stiu ca nu e usor dar vreau sa fac asta.
blindseeker90: nu am timp acum sa o fac. O sa postez mai tarziu daca imi vine o idee
blindseeker90: din modul in care este formulat enuntul, singura variabila a carei paritate o verifici este numarul elementului din vector. Daca stii ca vectorul incepe cu un numar impar, atunci toate numerele de pe pozitii impare vor fi si ele impare, si numerele de pe pozitii pare vor fi pare. Altfel, daca incepe cu nr par, atunci toate de pe pozitiile impare vor fi numere pare.
blindseeker90: raspunsul meu le afiseaza pe ecran, dar poti sa-l modifici tu sa fie scrise in fisierul bac
andreipal2012: din sirul;72;53;91;3;44;18;65;56;79;80;99;100 ordoneaza numerele pare crescatoare impare descrescatoare cuprinse intre65si 99

Răspunsuri la întrebare

Răspuns de blindseeker90
1
#include <iostream>
using namespace std;

int main(){
int a[100],b[100],c[100],n,m,k,i,ind_a,ind_b,primul_impar=0;
cout<<"n=";
cin>>n;
//par
for(i=1;i<=n;i++){
cin>>a[i];
}
cout<<"m=";
cin>>m;
//impar
for(i=1;i<=m;i++){
cin>>b[i];
}
ind_a=1;
ind_b=1;

if(a[1]<b[1]){
c[1]=a[1];
primul_impar=0;
ind_a++;
}
else{
c[1]=b[1];
primul_impar=1;
ind_b++;
}
cout<<c[1]<<" ";
k=2;
while(ind_a<=n||ind_b<=m){
if((k%2==0&&primul_impar==0)||(k%2==1&&primul_impar==1)){
cout<<"Aici "<<ind_b<<" "<<b[ind_b]<<endl;
while(b[ind_b]<c[k-1]){
ind_b++;
}

c[k]=b[ind_b];
ind_b++;
}
else{
while(a[ind_a]<c[k-1]){
ind_a++;
}
c[k]=a[ind_a];
ind_a++;
}
k++;

}
for(i=1;i<k;i++){
cout<<c[i]<<" ";
}

return 0;
}

andriesboss92: ce inseamna ind_a .. ind_a++ e acelasi lucru cu a... a++ ?
blindseeker90: ind_a si ind_b sunt indici vectorilor a si b. i si j din codul tau
andriesboss92: aha
andriesboss92: auzi, de ce ai pus inainte de while.. k=2 ?
blindseeker90: pentru ca am stabilit cine este c[1] deja asa ca trebuie sa ma uit de la al doilea termen incolo din sirul de numere c
andriesboss92: a, mersi
andriesboss92: De ce a[ind_a]<c[k-1] .. de ce c[k-1] si nu c[k] ?
andriesboss92: Care este rolul lui c[k-1]?
Alte întrebări interesante