Scusate se posto continuamente argomenti nuovi ma ne ho bisogno e siete gli unici in grado di aiutarmi su queste cose ahahah
Devo creare un programma che svolga il seguente esercizio:
Scrivere un programma (no ricorsivo) che accetti in input due array ordinati di interi
e restituisca in output l’unione ordinata dei due array.
Ho già scritto il codice e l'ho compilato e fin li tutto ok solo che il programma mi restituisci un array ordinato ma che ha come ultimo posto uno zero...
Il codice scritto da me è il seguente:
#include <stdio.h>
int main(){
int n;
int m;
int *a;
int *b;
int *c;
printf ("inserire posti primo array = ");
scanf ("%d",&n);
a=(int*)malloc(n*sizeof(int));
printf ("inserire posti secondo array = ");
scanf ("%d",&m);
printf ("\n\n----------------------\n\n");
b=(int*)malloc(m*sizeof(int));
int p=n+m;
c=(int*)malloc(p*sizeof(int));
int i;
printf (" CARICA PRIMO ARRAY\n\n");
for (i=0; i<n; i++) {
printf ("inserisci elemento al posto %d = ",i+1);
scanf ("%d",&a[i]);
if ((a[i]<a[i-1]) && (i!=0)) {
printf ("ERRORE:ARRAY NON ORDINATO!!!!\n");
i--;
}
}
printf ("\n\n----------------------\n\n");
printf (" CARICA SECONDO ARRAY\n\n");
for (i=0; i<m; i++) {
printf ("inserisci elemento al posto %d = ",i+1);
scanf ("%d",&b[i]);
if ((b[i]<b[i-1]) && (i!=0)) {
printf ("ERRORE:ARRAY NON ORDINATO!!!!\n");
i--;
}
}
int j=0;
int y=0;
int x=0;
while ((y<n) || (j<m)) {
if (a[y]<=b[j]) {
c[x]=a[y];
y++;
}
else if (a[y]>b[j]){
c[x]=b[j];
j++;
}
x++;
}
if (y=n) {
for (i=j; i<m; i++) {
c[x]=b[i];
x++;
}
}
else if (j=m) {
for (i=y; i<n; i++) {
c[x]=b[i];
x++;
}
}
printf ("\n\n----------------------\n\n");
printf (" VISUALIZZA ARRAY INCROCIO\n\n");
for (i=0; i<p; i++) {
printf ("array di incrocio al posto %d = %d\n",i+1,c[i]);
}
printf ("\n\n-------------------------------------------\n\n");
return 0;
}
Qualcuno mi sa dire il perchè? grazie della pazienza ahahah