PDA

Visualizza la versione completa : [C] Fusione di Array


shiony
29-01-2015, 01:05
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 mi sto trovando in netta difficoltà, sono praticamente in bianco, e per questo è inutile che vi metta qui qualche esempio di quello che ho provato a fare perché è praticamente inutile.
Quindi vi chiedo (quasi vi supplico:cry:) di darmi una mano a sviluppare il programma e a farmi 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(· (http://it.wikipedia.org/wiki/%C2%B7))) 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?

Scara95
29-01-2015, 05:45
1)2) basta che peschi sempre i minimi (i massimi) dagli array e li confronti. Quando finisci gli elementi di uno gli elementi dell'altro saranno tutti maggiori o tuttalpiù uguali all'ultimo elemento inserito.
3)4) sono prettamente teoriche, pensaci tu dopo l'implementazione.

shiony
29-01-2015, 17:08
Il problema sta appunto nell'implementazione, ho scritto(con molta fatica) due array che generano numeri casuali in ordine crescente uno e decrescente l'altro. Se non fosse stato per internet non sarei riuscito a scrivere i codici. E vorrei sapere se mi conviene dare un limite ai numeri che genera o no, dato che genera numeri a 4 o 5 cifre

Scara95
30-01-2015, 09:04
A parte che l'esercizio è scrivere due funzioni che uniscano gli array.
In ogni caso non si può risolverti un esercizio scolastico.

shiony
30-01-2015, 17:22
In che senso non si può risolvere un esercizio scolastico?

shiony
30-01-2015, 18:55
Comunque questo è quello che ho tentato di fare, solo che ovviamente non funziona credo che il problema sia il printf, poi non so se ci sia qualche altra anomalia.

#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;
k = 0;
while (i<m && j<n)
{
if (A[i]<B[j])
{
C[k]=A[i];
i++;
}
else
{
C[k]=B[j];
j--;
}
k++;
}
while (i<m)
{
C[k]=A[i];
i++;
k++;
}
while (j<n)
{
C[k]=B[j];
j--;
k++;
}
printf("L'array C e' [%d] = %d\n",k,C[k]);
system("pause");
}

Scara95
30-01-2015, 19:12
Usa i tag CODE per il codice, non QUOTE.
In ogni caso devo controllare se (j >= 0) non se (j < n). E dovresti partire da (j = n-1) non da (j = n).

shiony
30-01-2015, 23:15
Come ho detto precedentemente sono nuovo e mi scuso per gli eventuali errori riguardanti il forum, ma essendo che l'esame è alle porte non mi sono messo a leggere il regolamento del forum. Comunque adesso che ho seguito i tuoi consigli il programma funziona l'unico problema è che se ci sono elementi in comune nei due array me li inserisce entrambi quando invece dovrebbe metterne uno solo.

MItaly
31-01-2015, 00:43
In che senso non si può risolvere un esercizio scolastico?
Nel senso che normalmente non si fornisce "risoluzione on demand" di esercizi (che didatticamente è sostanzialmente inutile), ma si cerca di "guidare" alla soluzione partendo dal codice scritto da chi pone la domanda. La cosa è specificata nel regolamento (che un giorno o l'altro mi deciderò ad alleggerire un attimo :stordita:):

Niente "pappa pronta": non vengono tollerate le richieste di codice già pronto all'uso, la commissione di programmi da realizzare in forma retribuita o gratuita, oppure la risoluzione delegata a terzi di esercizi e problemi.
L'utente che apre la discussione ha il compito di fornire la propria proposta (o tentativo) di risoluzione ed eventualmente il codice sorgente scritto; in assenza di questi elementi, è comunque obbligatorio indicare con precisione i dettagli del problema, le indagini già fatte e il dubbio specifico in merito, senza limitarsi a porre la questione e delegare ad altri il lavoro.
:ciauz:

shiony
31-01-2015, 01:27
Si infatti nel primo messaggio che ho messo non ho scritto: " voglio svolto l'esercizio", perché ovviamente so che in forum come questi è quasi una blasfemia :stordita:. Le mie parole sono state queste: " Quindi vi chiedo (quasi vi supplico:cry:) di darmi una mano a sviluppare il programma e a farmi comprendere il tutto."
Comunque come ho scritto sopra l'ultimo problema che mi è rimasto è riguardante gli elementi in comune

Loading