shiony710
31-01-2015, 17:15
Salve a tutti,
sono nuovo del forum, quindi vi chiedo preventivamente di ignorare e aiutarmi nel caso in cui io commetta qualche errore all'interno del forum.
Sono iscritto al primo anno di informatica. A breve (giorno 5 Febbraio) devo dare un esame di programmazione 1, ho studiato solo che il libro trattava esclusivamente di parte teorica e poco e niente di pratica (scrittura di programmi, ecc...).
Prima dell'esame il professore ci ha chiesto di creare 2 programmi dandoci diverse tracce.
Io come prima ho scelto la fusione degli array, ma essendo che il tempo è molto brave vi chiedo di aiutarmi a scrivere e comprendere il tutto.
La traccia è questa:
Fusione di Array
Supponi di avere a disposizione due arrayA e B di dimensione rispettivamente pari ad m ed n. Sia m che n sono interi positivi e supponiamo che m ≠ n. Infine, supponiamo che A sia ordinato in senso crescente (ovvero l'elemento di valore minimo in A e l'elemento A[0]) mentre B sia ordinato in senso decrescente (ovvero l'elemento di valore massimo in B e l'elemento B[0]).
L'obiettivo dell'esercizio e calcolare l'array C ottenuto facendo l'unione di A e B. L'unione di due
array A e B e definita come l'insieme degli elementi che appartengono ad A oppure a B. Se un elemento figura sia in A che in B allora deve essere preso una sola volta.
Risolvi i seguenti esercizi:
1. Scrivi una funzioneC che calcoli l'unione C di A e B; C deve essere ordinato in senso crescente.
2. Scrivi una funzione C che calcoli l'unione C di A e B; C deve essere ordinato in senso decrescente.
3. Supponiamo che sia m = n. Quanto vale la complessità computazionale (espressa tramite la notazione O(·)) dell'algoritmo da te proposto?
4. Come cambia la complessità computazionale del tuo algoritmo se invece supponiamo che sia
m > n? In questo caso m e strettamente maggiore di n. Cosa succede invece se n > m?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int A[] = {0, 2, 4, 6,};
int m = 4;
int B[] = {9, 8, 7, 6, 3, 1};
int n = 6;
int C[10];
int i, j, k;
i = 0;
j = n-1;
k = 0;
while (i<m && j>=0)
{
if (A[i]<B[j])
{
C[k]=A[i];
i++;
k++;
}
else
{
C[k]=B[j];
j--;
k++;
}
}
while (i<m)
{
C[k]=A[i];
i++;
k++;
}
while (j>=0)
{
C[k]=B[j];
j--;
k++;
}
printf (" ARRAY C :\n");
for (k =0; k< 10; k ++)
printf ("C[%d] = %d\n",k,C[k]);
system("pause");
}
Questo è quello che ho sviluppato fino ad ora ed è funzionante, l'unico problema rimasto è che il codice se ci sono elementi in comune nei due array, scrive entrambi quando invece dovrebbe metterne uno solo
sono nuovo del forum, quindi vi chiedo preventivamente di ignorare e aiutarmi nel caso in cui io commetta qualche errore all'interno del forum.
Sono iscritto al primo anno di informatica. A breve (giorno 5 Febbraio) devo dare un esame di programmazione 1, ho studiato solo che il libro trattava esclusivamente di parte teorica e poco e niente di pratica (scrittura di programmi, ecc...).
Prima dell'esame il professore ci ha chiesto di creare 2 programmi dandoci diverse tracce.
Io come prima ho scelto la fusione degli array, ma essendo che il tempo è molto brave vi chiedo di aiutarmi a scrivere e comprendere il tutto.
La traccia è questa:
Fusione di Array
Supponi di avere a disposizione due arrayA e B di dimensione rispettivamente pari ad m ed n. Sia m che n sono interi positivi e supponiamo che m ≠ n. Infine, supponiamo che A sia ordinato in senso crescente (ovvero l'elemento di valore minimo in A e l'elemento A[0]) mentre B sia ordinato in senso decrescente (ovvero l'elemento di valore massimo in B e l'elemento B[0]).
L'obiettivo dell'esercizio e calcolare l'array C ottenuto facendo l'unione di A e B. L'unione di due
array A e B e definita come l'insieme degli elementi che appartengono ad A oppure a B. Se un elemento figura sia in A che in B allora deve essere preso una sola volta.
Risolvi i seguenti esercizi:
1. Scrivi una funzioneC che calcoli l'unione C di A e B; C deve essere ordinato in senso crescente.
2. Scrivi una funzione C che calcoli l'unione C di A e B; C deve essere ordinato in senso decrescente.
3. Supponiamo che sia m = n. Quanto vale la complessità computazionale (espressa tramite la notazione O(·)) dell'algoritmo da te proposto?
4. Come cambia la complessità computazionale del tuo algoritmo se invece supponiamo che sia
m > n? In questo caso m e strettamente maggiore di n. Cosa succede invece se n > m?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int A[] = {0, 2, 4, 6,};
int m = 4;
int B[] = {9, 8, 7, 6, 3, 1};
int n = 6;
int C[10];
int i, j, k;
i = 0;
j = n-1;
k = 0;
while (i<m && j>=0)
{
if (A[i]<B[j])
{
C[k]=A[i];
i++;
k++;
}
else
{
C[k]=B[j];
j--;
k++;
}
}
while (i<m)
{
C[k]=A[i];
i++;
k++;
}
while (j>=0)
{
C[k]=B[j];
j--;
k++;
}
printf (" ARRAY C :\n");
for (k =0; k< 10; k ++)
printf ("C[%d] = %d\n",k,C[k]);
system("pause");
}
Questo è quello che ho sviluppato fino ad ora ed è funzionante, l'unico problema rimasto è che il codice se ci sono elementi in comune nei due array, scrive entrambi quando invece dovrebbe metterne uno solo