PDA

View Full Version : Vi prego aiutatemi


Vasec87
01-11-2006, 16:14
sono nei guai, mi mancano questi 2 esercizi e non ci riesco proprio a farli, qualcuno gia gli ha abbozzati, ma io non riesco a sistemarli, dai per piacere, voi non ci mettete niente, poi non vi scoccio piu


ESERCIZIO 2ue array A e B di lunghezza rispettivamente n e m sono simili se contengono gli stessi elementi. Attenzione che l'array {1,1,3} è simile all'array {1,3,1} ma anche all'array{3,3,3,1}, ma non all'array{1,2,3}.
Scrivere un programma che verifica se due array di interi sono simili.
INPUR: numero n degli elementi del primo array, successivamente i suoi n, poi la lunghezza m del secondo array e successivamente i suoi m elementi.
OUTPUT: 1 se i due array sono simili, 0 altrimenti.


ESERCIZIO 3ati due array A e B di uguale lunghezza, A è permutazione di B, se contiene esattamente gli stessi elementi B, non necessariamente nelle stesse posizioni (eventuali elementi ripetuti devono avere lo stesso numero di occorrenze in entrambi gli array).
Attenzione quindi che l'array{1,1,3} è permutazione dell'array {1,3,1} ma non dell'array{3,3,1}.
Scrivere un programma che verifica se due array di interi sono tra loro permutazioni.
INPUT:numero n degli elementi dei due array e successivamente i 2n elementi gli elementi dei due array.
OUTPUT: 1 se i due array sono uno la permutazione dell'altro, 0 altrimenti.
:help: :help: :help: :help: :help: :help: :help: :help: :cry: :cry: :cry: :cry:

andbin
01-11-2006, 16:36
sono nei guai, mi mancano questi 2 esercizi e non ci riesco proprio a farli, qualcuno gia gli ha abbozzati, ma io non riesco a sistemarli, dai per piacere, voi non ci mettete niente, poi non vi scoccio piuIntanto quale linguaggio? :confused:
Non sono esercizi particolarmente complicati. Entrambi si possono suddividere in due fasi: a) input dei dati b) elaborazione dei dati

Il tuo problema quale è di preciso?? Hai già buttato giù del codice (spero :D )?

Vasec87
01-11-2006, 16:46
:cry: :cry: :cry: si devono fare in C

io per ora riesco solo a caricare i vettori, perchè ancora devo finire di studiarli e quindi non so fare molte cose sui vettori

il problema è che mi servono per dopodomani

non so come fare :cry:

andbin
01-11-2006, 16:51
io per ora riesco solo a caricare i vettoriOk, allora posta il codice che carica almeno i vettori.

Vasec87
01-11-2006, 17:05
#include <stdio.h>

int main()
{
int a[1000];
int b[1000];
int i=0;
int j=0;
int uguali=0;

scanf("%d", &j);

for(i=0;i<j;i++){
scanf("%d", &a[i]);
scanf("%d", &b[i]);
}



QUESTO PEREO' PENSO CHE VALGA SOLO PER IL TERZO ESERCIZIO, CIOE' CON I DUE VETTORI CHE HANNO LO STESSO NUMERO DI ELEMENTI.
SO FARLO ANCHE CON ELEMENTI DIVERSI, MA POI NON SO CONTINUARE

Vasec87
01-11-2006, 17:57
dai ti prego andibin o chiunque altro, aiutatemi, non è che non mi va, è che non ci riuscirei mai in 2 giorni

Andrea16v
01-11-2006, 18:04
dai ti prego andibin o chiunque altro, aiutatemi, non è che non mi va, è che non ci riuscirei mai in 2 giorni

Potevi iniziare prima a farli... :read: :read: :read:

Scherzo eh, non te la prendere.. :sofico:

Vasec87
01-11-2006, 18:09
no, non potevo perchè me li hanno dati 2-3 giorni fa

dai se sai farli aiutami, per piacere

andbin
01-11-2006, 18:22
Ok, il codice che hai postato direi che va bene. Come hai giustamente pensato, vale solo per il 3° esercizio ma la differenza con il secondo 2° è praticamente minima. Nel secondo esercizio invece di prendere 1 lunghezza ne prendi 2. ;) In pratica si tratta di fare 2 scanf per le lunghezze e 2 for separati per l'input. Molto semplice, credo.

Da quanto ho capito, il tuo problema è sviluppare gli algoritmi per i due esercizi. Qui, secondo me, basta solo ragionare un pochino.

Vediamo il secondo esercizio: ti chiede di stabilire se i 2 array sono simili. Si deduce che sono simili solo se contengono gli stessi elementi, in qualunque posizione. Giriamo la cosa al contrario: non sono simili se uno dei due array contiene anche solo un valore che non c'è nell'altro.

Prendiamo a[]={1, 4, 1, 7} e b[]={4, 1, 1}

Fai un ciclo for per scansionare gli elementi di a[]. Per ogni elemento in a[] fai un ciclo for innestato che scansiona b[] per vedere se c'è un elemento in b[] con lo stesso valore. Se non c'è, allora non sono simili.
Ma non basta, devi fare poi la stessa cosa ma all'inverso, cioè scansioni prima b[] e per ogni elemento scansioni a[] per vedere se c'è.

Il terzo esercizio è anche abbastanza semplice: basta ordinare i 2 array e poi fare un confronto valore per valore. Se sono uguali allora un array è la permutazione dell'altro.

Vasec87
01-11-2006, 18:29
guarda, per il secondo esercizio potrei anche riuscirci, domani mi ci metto.

ma il terzo è impossibile per me visto che ancora non so fare l'ordinamento dei vettori. se potresti abbozzarlo tu il terzo mi faresti un enorme piacere, io intanto domani mattina provo a fare il secondo.

ti ringrazio

andbin
01-11-2006, 18:43
ma il terzo è impossibile per me visto che ancora non so fare l'ordinamento dei vettoriDi algoritmi di ordinamento ce ne sono svariati. Uno abbastanza semplice (che però non è molto efficiente) è il "bubble-sort". Nel tuo caso credo che sia più che sufficiente.
Leggi qui: http://it.wikipedia.org/wiki/Bubble_sort

Vasec87
02-11-2006, 08:22
ECCO QUELLO CHE SONO RIUSCITO A FARE DEL SECONDO ESERCIZIO, ORA COME DEVO PROCEDERE, HO LETTO IL TUO SUGGERIMENTO MA NON SO APPLICARLO A QUELLO CHE HO GIA FATTO IO

#include <stdio.h>

int main()
{

int a[1000];
int b[1000];
int f=0;
int g=0;
int h=0;
int z=0;

scanf("%d", &f);

for(g=0;g<f;g++){
scanf("%d", &a[g]);
}
scanf("%d", &h);

for(z=0;z<h;z++){
scanf("%d", &b[z]);
}





}

andbin
02-11-2006, 09:22
ECCO QUELLO CHE SONO RIUSCITO A FARE DEL SECONDO ESERCIZIO, ORA COME DEVO PROCEDERE, HO LETTO IL TUO SUGGERIMENTO MA NON SO APPLICARLO A QUELLO CHE HO GIA FATTO IOOk, fin qui ci siamo ...
Comunque usa dei nomi più chiari per le variabili. Non devi mica per forza usare tutte le lettere dell'alfabeto fino alla z! :D
Potresti usare 'na' e 'nb' per tenere il numero degli elementi e poi una generica 'i' per i cicli for.

Per l'algoritmo, l'ho già spiegato sopra ma forse non in modo molto chiaro: l'obiettivo è quello di scoprire se un elemento di un array non c'è nell'altro array. Per questo motivo, devi fare 2 test: a[] contro b[] e poi il contrario b[] contro a[].
Vediamo il primo step: devi scansionare tutti gli elementi dell'array 'a'. Per ogni elemento, fai un ciclo for innestato per andare a vedere se c'è nell'array 'b'. Devi anche tenere un flag per sapere se un elemento è stato trovato o meno.

tradotto in pseudo-codice:
ciclo da i=0 a i=na-1
flag = 0

ciclo da j=0 a j=nb-1
se a[i] uguale a b[j] allora
flag = 1
fine se
fine ciclo

se flag uguale a 0 allora
esci dal ciclo
fine se
fine cicloLo so, come pseudo codice non è il massimo ma almeno dovrebbe dare l'idea.

Se alla fine di questo codice, flag vale 0, vuol già dire che non sono simili e quindi puoi anche non fare l'altro step al contrario.

Provaci e poi vediamo.

Vasec87
02-11-2006, 09:37
prima di provare il tuo suggerimento vorrei farti vedere quello che ho fatto io, penso che vada bene ma non so cosa stampare alla fine. dacci un'occhiata

#include <stdio.h>

int main()
{

int a[1000];
int b[1000];
int f=0;
int g=0;
int h=0;
int z=0;
int output=0;
int cont=0;
int uguali=1;
int j=0;
int i=0;

scanf("%d", &f);

for(g=0;g<f;g++){
scanf("%d", &a[g]);
}
scanf("%d", &h);

for(z=0;z<h;z++){
scanf("%d", &b[z]);
}

if(f<h) //con f size di a e h size di b
{
for(j=0;j<h;j++)
{
i=0;
while(i<f&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont=h)
output=1;


}
else
{
for(j=0;j<f;j++)
{
i=0;
while(i<h&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont=f)
output=1;
}
while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();

}

Vasec87
02-11-2006, 09:39
per provare il tuo dovrei rifare tutto da capo perchè co tutti sti nomi non mi ci trovo piu, cerca di vedere se il mio è giusto

andbin
02-11-2006, 09:53
per provare il tuo dovrei rifare tutto da capo perchè co tutti sti nomi non mi ci trovo piuAppunto: metti dei nomi più chiari!!!! :muro:

cerca di vedere se il mio è giustoGià non capisco perché fai un test if(f<h) che serve praticamente a nulla. :mbe:

Inizia a fare il primo step: a[] contro b[]. Fai un ciclo for con dentro un altro ciclo for.

Vasec87
02-11-2006, 10:06
ma non so cosa scriverci,

per esempio che intendi per scansionare

andbin
02-11-2006, 10:15
ma non so cosa scriverci,

per esempio che intendi per scansionareAmmesso di usare dei nomi più validi, per esempio:
int arr_a[1000];
int arr_b[1000];
int na, nb, ia, ib;

....input....

for (ia = 0; ia < na; ia++)
{
....

for (ib = 0; ib < nb; ib++)
{
....
}

....
}

Vasec87
02-11-2006, 10:17
ci provo

Vasec87
02-11-2006, 10:22
#include <stdio.h>

int main()
{
int arr_a[1000];
int arr_b[1000];
int na, nb, ia, ib;

scanf("%d", &na);
for(ia=0;ia<na;ia++){
scanf("%d", &arr_a[ia]);}
scanf("%d", &nb);
for(ib=0;ib<nb;ib++){
scanf("%d", &arr_b[ib]);}
for (ia = 0; ia < na; ia++)
{




COME SI CONTINUA?

andbin
02-11-2006, 10:24
COME SI CONTINUA?Intanto metti un'altra variabile per il flag, chiamala 'trovato', 'uguale' o come vuoi.
Poi segui quella specie di pseudo codice che ho scritto sopra.

Vasec87
02-11-2006, 10:27
ok

Vasec87
02-11-2006, 10:29
sto impazzendo

ciclo da i=0 a i=na-1
flag = 0

ciclo da j=0 a j=nb-1
se a[i] uguale a b[j] allora
flag = 1
fine se
fine ciclo

se flag uguale a 0 allora
esci dal ciclo
fine se
fine ciclo


nel mio case quali sono j, e soprattutto perchè metti na-1, come devo cambiarlo?





#include <stdio.h>

int main()
{
int arr_a[1000];
int arr_b[1000];
int na, nb, ia, ib;
int uguale=0;

scanf("%d", &na);
for(ia=0;ia<na;ia++){
scanf("%d", &arr_a[ia]);}
scanf("%d", &nb);
for(ib=0;ib<nb;ib++){
scanf("%d", &arr_b[ib]);}
for (ia = 0; ia < na; ia++)
{

Vasec87
02-11-2006, 10:41
HO FINITO, MA NON PENSO CHE FUNZIONA. PUOI PROVARLO UN ATTIMO?
ED EVENTUALMENTE DIRMI COSA DEVO AGGIUSTARE
GRAZIE
#include <stdio.h>

int main()
{
int arr_a[1000];
int arr_b[1000];
int na, nb, ia, ib;
int uguale=0;

scanf("%d", &na);
for(ia=0;ia<na;ia++){
scanf("%d", &arr_a[ia]);}
scanf("%d", &nb);
for(ib=0;ib<nb;ib++){
scanf("%d", &arr_b[ib]);}

for (ia = 0; ia < na; ia++)
{
uguale=0;

for (ib = 0; ib < nb; ib++)
{
if(arr_a[ia]==arr_b[ib]){
uguale=1;
}
else{
uguale=0;}}
printf("%d", uguale);





while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();

}}

andbin
02-11-2006, 10:42
nel mio case quali sono j, e soprattutto perchè metti na-1, come devo cambiarlo? :rolleyes:
Nel mio pseuso codice, essendo generico, ho voluto indicare che l'indice deve andare da 0 a na-1 (ovvio altrimenti sfori nell'array). È chiaro che se fai for (ia = 0; ia < na; ia++) sei già a posto.

nel mio pseudo codice i --> ia e j --> ib. Insomma ne hai solo 2 ... non è che ci si possa confondere più di tanto! ;)

Vasec87
02-11-2006, 10:44
non capisco quel fine se, e quel fine ciclo

comq puoi dirmi cosa devo correggere nell'ultimo che ho postato?

andbin
02-11-2006, 10:48
HO FINITO, MA NON PENSO CHE FUNZIONA. PUOI PROVARLO UN ATTIMO?
ED EVENTUALMENTE DIRMI COSA DEVO AGGIUSTAREPrimo, non scrivere tutto in maiuscolo, please.

Secondo: non è ancora giusto. Non devi mettere l'else:
else{
uguale=0;}
Prima del ciclo innestato metti uguale=0 ma poi devi fare uguale=1 solo se ne trovi almeno 1 uguale e basta!!!
Finito il ciclo innestato, se uguale è 0, puoi fare un break ed uscire dal ciclo esterno (tanto come ho già detto, è già risultato che non sono simili).

andbin
02-11-2006, 10:49
non capisco quel fine se, e quel fine cicloMa nello pseudo codice non ho usato { } quindi si dovrà pur specificare dove diavolo finiscono i blocchi, no???

Vasec87
02-11-2006, 10:52
non ce la faccio piu

#include <stdio.h>

int main()
{
int arr_a[1000];
int arr_b[1000];
int na, nb, ia, ib;
int uguale=0;

scanf("%d", &na);
for(ia=0;ia<na;ia++){
scanf("%d", &arr_a[ia]);}
scanf("%d", &nb);
for(ib=0;ib<nb;ib++){
scanf("%d", &arr_b[ib]);}

for (ia = 0; ia < na; ia++)
{
uguale=0;

for (ib = 0; ib < nb; ib++)
{
if(arr_a[ia]==arr_b[ib]){
uguale=1;
}



se puoi dirmi i pezzetti che mancano mi faresti un grande piacere

mi sta scoppiando la testa

Vasec87
02-11-2006, 10:59
dai aiutami, non ci riesco proprio, mi sta a prende un nervoso che non ti puoi immagina

comq scrivevo in maiuscolo per non farlo confonde cone le istruzioni del programma

andbin
02-11-2006, 11:02
se puoi dirmi i pezzetti che mancano mi faresti un grande piacereOk, così sei già a buon punto.
Ora devi fare solo più poche cose:
a) Prima della fine del ciclo esterno, se uguale==0 allora fai un 'break' (esce dal ciclo esterno).
b) Dopo il primo blocco che hai fatto per testare a[] <--> b[] ne devi fare un altro ma al contrario (b[] <--> a[]). Ma attenzione, solo se uguale == 1 (metti un if che racchiude tutto il secondo blocco)
c) Alla fine di tutto quanto se uguale==1 allora i due array sono simili.

Vasec87
02-11-2006, 11:05
guarda andbin, apprezzo il tuo sforzo e ti ringrazio, ma non ci riesco proprio. sono cose banalissime, ma so talmente confuso che non le riesco a mette.mica puoi inserirle tu qui? non pensare che sia pigro che voglio approfittarne, è che proprio non ce la faccio, e dopo questo mi manca un altro esercizio che devo fare per domani

andbin
02-11-2006, 11:16
guarda andbin, apprezzo il tuo sforzo e ti ringrazio, ma non ci riesco proprio. sono cose banalissime, ma so talmente confuso che non le riesco a mette.mica puoi inserirle tu qui? non pensare che sia pigro che voglio approfittarne, è che proprio non ce la faccio, e dopo questo mi manca un altro esercizio che devo fare per domaniGuarda ... non è che non voglio scrivertelo io .... è che se lo faccio io, non so cosa impari tu. ;)
Per imparare le cose credo che ci si debba anche sbattere bene il muso (oops faccia) contro.

Fai un po' di pausa e poi più tardi riprovaci.

Vasec87
02-11-2006, 11:18
mo vado all'università, quando torno oggi ci provo, ne devo fare anche un altro.

comq non è che non le so scrive quelle cose che dici, è che non capisco alcuno cose, tipo ciclo innestato o altre cosette

Vasec87
02-11-2006, 11:20
non è che puoi finirmi di fare st'esercizio e poi l'ultimo che devo fare lo faccio completamente io?

tanto se lo finisco di fare io questo non imparo niente lo stesso, li sto facendo giusto perchè devo consegnarli, non è che li sto guardando per bene

andbin
02-11-2006, 11:36
è che non capisco alcuno cose, tipo ciclo innestato o altre cosetteUn ciclo innestato ... è semplicemente un ciclo messo dentro un altro ciclo. Come le scatole cinesi ... una dentro l'altra. ;)
Per le "altre cosette", è semplice: chiedi ...

Vasec87
02-11-2006, 11:38
io ora ho questo


cosa devo aggiungere e cosa togliere

#include <stdio.h>

int main()
{
int arr_a[1000];
int arr_b[1000];
int na, nb, ia, ib;
int uguale=0;

scanf("%d", &na);
for(ia=0;ia<na;ia++){
scanf("%d", &arr_a[ia]);}
scanf("%d", &nb);
for(ib=0;ib<nb;ib++){
scanf("%d", &arr_b[ib]);}

for (ia = 0; ia < na; ia++)
{
uguale=0;

for (ib = 0; ib < nb; ib++)
{
if(arr_a[ia]==arr_b[ib]){
uguale=1;
}

Vasec87
02-11-2006, 11:44
questo invece è l'altro esercizio, l'ultimo, se puoi aiutarmi anche qui mi faresti un enorme piacere

quando torno stasera provo a farlo e a finire l'altro
ciao

Vasec87
02-11-2006, 11:44
Dati due array A e B di uguale lunghezza, A è permutazione di B, se contiene esattamente gli stessi elementi B, non necessariamente nelle stesse posizioni (eventuali elementi ripetuti devono avere lo stesso numero di occorrenze in entrambi gli array).
Attenzione quindi che l'array{1,1,3} è permutazione dell'array {1,3,1} ma non dell'array{3,3,1}.
Scrivere un programma che verifica se due array di interi sono tra loro permutazioni.
INPUT:numero n degli elementi dei due array e successivamente i 2n elementi gli elementi dei due array.
OUTPUT: 1 se i due array sono uno la permutazione dell'altro, 0 altrimenti.

andbin
02-11-2006, 11:55
cosa devo aggiungere e cosa togliereL'ho spiegato nel post #31.

questo invece è l'altro esercizio, l'ultimo, se puoi aiutarmi anche qui mi faresti un enorme piacereHai già letto la pagina sul bubble-sort che avevo indicato??? C'è l'esempio di implementazione in svariati linguaggi!!!

In sostanza dopo l'input, che hai già capito come fare, devi:
a) Ordinare i due array a e b.
b) Fare un semplice ciclo per testate se a[i] è uguale a b[i]. Gli array tanto sono lunghi uguali.
c) Se tutti gli elementi sono uguali, a[] è una permutazione di b[].

Il punto a) presume che tu abbia fatto una funzione per ordinare un array.

Vasec87
03-11-2006, 09:53
andbin posso chiederti un favore. non vorrei approfittare della tua gentilezza ma sono nei guai. questo messaggio gia l'ho inviato a tulkas85 perchè sono nei guai. entro stasera devo consegnare i 5 esercizi, mi manca il terzo e dovrei aggiustare il secondo. Potresti scrivermi il terzo, mi sembra che gia l'hai fatto, ma non riesco proprio ad aggiustarlo. non so come fare. anche sull'altro mio trhead tulkas85 mi ha aiutato parecchio, in pratica mi manca soltanto 1-2 righe e ho finito il secondo esercizio, ma non riesco proprio a scriverle queste 2 righe nonostante siano cazzate. per questa volta potete aiutarmi voi a scriverli e dalla prossima non chiederò piu il vostro aiuto?
non pensate che scrivendomi questi 2 esercizietti io non imparerò niente, perchè ora sto cominciando dalle prime cose e sto studiando come si deve, ma entro stasera non riuscirò ad imparare quello che mi serve per finire gli esercizi.

grazie infinite

andbin
03-11-2006, 10:46
mi manca il terzo e dovrei aggiustare il secondo. Potresti scrivermi il terzo, mi sembra che gia l'hai fattoNo, il terzo non l'ho scritto .... l'ho spiegato a parole, questo sì.

Ti posso scrivere la funzione per il bubble-sort:
void bubble_sort (int *arr, int num_elem)
{
int i, j, t;

for (i = 0; i < num_elem-1; i++)
{
for (j = i+1; j < num_elem; j++)
{
if (arr[i] > arr[j])
{
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
}
L'esempio di implementazione fornito <qui> (http://it.wikipedia.org/wiki/Bubble_sort) a me personalmente non piace. :p

L'input dei valori, l'avevi già scritto tu all'inizio (ricordati di mettere dei nomi di variabili che siano chiari e validi).
Una volta che hai fatto l'input dei 2 array della stessa lunghezza, devi solo:

a) Chiamare la funzione sopra prima per un array e poi per l'altro.

b) Fare un semplice loop for (i = 0; i < num; i++) in cui testi se ogni elemento di un array è uguale all'altro. Basta che 1 solo elemento non sia uguale e allora sai già che non è una permutazione. Tieniti ovviamente il solito flag 0/1.

Se hai qualche dubbio chiedi. Questi esercizi non sono difficili, credo. Bisogna solo prestare un minimo di attenzione.

Vasec87
03-11-2006, 16:22
ma questo a quale esercizio si riferisce, a quello con i vettori uguali o diversi??

#include <stdio.h>

int main()
{
int arr_a[1000];
int arr_b[1000];
int na, nb, ia, ib;

scanf("%d", &na);

for(ia=0;ia<na;ia++){
scanf("%d", &arr_a[ia]);
}

scanf("%d", &nb);

for(ib=0;ib<nb;ib++){
scanf("%d", &arr_b[ib]);
}


questo è quello che ho fatto per l'esercizio con i vettori diversi, per ora l'altro lasciamolo stare. puoi dirmi come si continua questo, visto che ora non sto capendo piu di quale esercizio parli.

andbin
03-11-2006, 16:34
ma questo a quale esercizio si riferisce, a quello con i vettori uguali o diversi??

[...]

questo è quello che ho fatto per l'esercizio con i vettori diversi, per ora l'altro lasciamolo stare. puoi dirmi come si continua questo, visto che ora non sto capendo piu di quale esercizio parli.Tutto quello che ho scritto nel post #42 vale per il terzo esercizio, quello in cui gli array sono uguali e in cui si deve verificare se sono una permutazione.

Per quanto riguarda il secondo esercizio, cosa mancava l'avevo spiegato nel post #31, tu avevi già fatto una buona continuazione nel post #29. Tu avevi aggiunto dopo l'input:
for (ia = 0; ia < na; ia++)
{
uguale=0;

for (ib = 0; ib < nb; ib++)
{
if(arr_a[ia]==arr_b[ib]){
uguale=1;
}
}
}(ho aggiunto io le ultime 2 graffe ;) ).

Rimane da fare (e ripeto quanto detto nel post #31):

a) Prima della fine del ciclo esterno, se uguale==0 allora fai un 'break' (così esce dal ciclo esterno).

b) Dopo il primo blocco che hai fatto per testare a[] <--> b[] ne devi fare un altro praticamente uguale ma al contrario (b[] <--> a[]). Attenzione, solo se uguale == 1 (metti un if che racchiude tutto il secondo blocco)

c) Alla fine di tutto quanto se uguale==1 allora i due array sono simili.

Vasec87
03-11-2006, 16:42
quindi fino ad ora è cosi,


#include <stdio.h>

int main()
{
int arr_a[1000];
int arr_b[1000];
int na, nb, ia, ib;

scanf("%d", &na);

for(ia=0;ia<na;ia++){
scanf("%d", &arr_a[ia]);
}

scanf("%d", &nb);

for(ib=0;ib<nb;ib++){
scanf("%d", &arr_b[ib]);
}
for (ia = 0; ia < na; ia++)
{
uguale=0;

for (ib = 0; ib < nb; ib++)
{
if(arr_a[ia]==arr_b[ib]){
uguale=1;
}if(ugualue==0){
break;
}
}
}

non so se l'if l'ho messo nel punto giusto.

fino ad ora ci siamo? poi dovrei rifare tutto questo ma per b e a??

andbin
03-11-2006, 16:58
non so se l'if l'ho messo nel punto giusto.No, infatti non è giusto. Non devi metterlo dentro il for più interno ma nel for esterno, alla fine, prima della }

fino ad ora ci siamo? poi dovrei rifare tutto questo ma per b e a??Quasi .... fatto il primo blocco ne devi fare un'altro dove parti scansionando b[] e poi verificando con a[]. Con il fatto che il secondo blocco lo devi eseguire solo se uguale == 1 (ovvio, se è == 0, non è la permutazione!).

Vasec87
03-11-2006, 17:05
HO FATTO UN PASTICCIO VERO? :stordita:

#include <stdio.h>

int main()
{
int arr_a[1000];
int arr_b[1000];
int na, nb, ia, ib;

scanf("%d", &na);

for(ia=0;ia<na;ia++){
scanf("%d", &arr_a[ia]);
}

scanf("%d", &nb);

for(ib=0;ib<nb;ib++){
scanf("%d", &arr_b[ib]);
}
for (ia = 0; ia < na; ia++)
{
uguale=0;

for (ib = 0; ib < nb; ib++)
{

}if(arr_a[ia]==arr_b[ib]){
uguale=1;
}
}
for (ib = 0; ib < nb; ib++)
{
uguale=1;

for (ia = 0; ia < na; ia++)
{

}if(arr_b[ib]==arr_a[ia]){
uguale=1;
}
}

Vasec87
03-11-2006, 17:25
andbin sei la mia ultima speranza

andbin
03-11-2006, 17:31
HO FATTO UN PASTICCIO VERO?Sì, in particolare con le graffe.

Il blocco va così:
for (ia = 0; ia < na; ia++)
{
uguale = 0;

for (ib = 0; ib < nb; ib++)
{
if (arr_a[ia] == arr_b[ib])
uguale = 1;
}

if (uguale == 0)
break;
}Ne devi fare un altro ma scambiando la sequenza (dove c'è ia metti ib, ecc...). Il secondo blocco lo devi fare solo se uguale == 1.

Vasec87
03-11-2006, 17:55
devo scambiare solo ia con ib e viceversa o anche na e nb?

Vasec87
03-11-2006, 17:57
for (ia = 0; ia < na; ia++)
{
uguale=0;

for (ib = 0; ib < nb; ib++)
{

}if(arr_a[ia]==arr_b[ib]){
uguale=1;
}
}

questo è il pezzo buono, cosa devo scambiare e con cosa? :help:
e poi quale dei due uguale devo cambiare?

Vasec87
03-11-2006, 18:01
adesso perchè non c'è piu il break??


cazzo che casino che sto a fa, non so piu quale era quella buona mo

torno fra un po

andbin
03-11-2006, 18:11
devo scambiare solo ia con ib e viceversa o anche na e nb?Tutto ovviamente, dove usi 'a' metti 'b' e viceversa.

Vasec87
03-11-2006, 18:52
è una cosa tipo questa? dimmi di si :stordita:


#include <stdio.h>

int main()
{
int arr_a[1000];
int arr_b[1000];
int na, nb, ia, ib;

scanf("%d", &na);

for(ia=0;ia<na;ia++){
scanf("%d", &arr_a[ia]);
}

scanf("%d", &nb);

for(ib=0;ib<nb;ib++){
scanf("%d", &arr_b[ib]);
}
for (ia = 0; ia < na; ia++)
{
uguale=0;

for (ib = 0; ib < nb; ib++)
{
if(arr_a[ia]==arr_b[ib]){
uguale=1;
}if(ugualue==0){
break;
}
}
}
for (ib = 0; ib < nb; ib++)
{
uguale=0;

for (ia = 0; ia < na; ia++)
{
if(arr_b[ib]==arr_a[ia]){
uguale=1;
}if(ugualue==0){
break;
}
}
}

andbin
03-11-2006, 20:25
è una cosa tipo questa? dimmi di si :stordita: Noooo. Continui a perdere i pezzi per strada.
- hai di nuovo messo il if del break dentro il for più interno invece che nel for esterno.
- la variabile uguale non è dichiarata da alcuna parte.
- non hai racchiuso il secondo blocco nel if (uguale == 1) come avevo detto.
- manca una graffa di chiusura e un return 0; alla fine del main.
:rolleyes:

Vasec87
04-11-2006, 15:40
andbin, da ieri a oggi mi ci so messo e sono riuscito a fare da solo l'esercizio 3. ora ho capito un po il meccanismo e penso di riuscire a fare anche il secondo da solo.

puoi dirmi però una volta inizializzati i vettori i passi da seguire?

Vasec87
04-11-2006, 15:51
questo dovrebbe essere il secondo esercizio fatto in modo leggermente diverso dal tuo

puoi dirmi in cosa sbaglio?


#include <stdio.h>

int main()
{
int a[1000];
int b[1000];
int i=0;
int j=0;
int n=0;
int m=0;
int cont=0;
int output=0;
int uguali=0;



scanf("%d", &n);

for(i=0;i<n;i++);{
scanf("%d", &a[i]);}

scanf("%d", &m);

for(j=0;j<m;j++){
scanf("%d", &b[i]);}
output,cont=0;
uguali=1;
if(n<m) //con n size di a e m size di b
{
for(j=0;j<m;j++)
{
i=0;
while(i<n&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont=m)
output=1;

}
else
{
for(j=0;j<n;j++)
{
i=0;
while(i<m&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont==n)
output=1;
}
printf("%d",output);
while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();
}

andbin
04-11-2006, 21:01
questo dovrebbe essere il secondo esercizio fatto in modo leggermente diverso dal tuo

puoi dirmi in cosa sbaglio?Vuoi che sia del tutto sincero??? Bene:

a) Nel primo ciclo for hai messo un punto e virgola che non serve (crea una istruzione "vuota" eseguita in loop nel for):
for(i=0;i<n;i++);{

b) Nella quarta scanf hai usato 'i' mentre avresti dovuto usare 'j':
scanf("%d", &b[i]);

c) Hai messo:
output,cont=0;
che non serve a una mazza.

d) Hai fatto una assegnazione invece di una comparazione di eguaglianza (è sbagliato):
if(cont=m)

e) A che ti serve la variabile 'uguali'??? Quando è che vale zero??? Mai, perché dopo l'input la metti a 1!

f) Esegui uno dei 2 blocchi in base al test n<m, e alla fine di un blocco vuoi testare se cont == n oppure == m. Ma 'cont' quanto vale??? Cioè cosa conteggia??? Conta tutte le uguaglianze (al max n * m) ma questo non vuol certo dire che vale n oppure m.


Anche ammesso di correggere questi errori, non credo che possa funzionare dal punto di vista concettuale. Il fatto che un elemento che è presente in un array manchi nell'altro (condizione per dire che NON sono simili) non lo puoi testare guardando se n < m e facendo quindi una sola scansione a[] contro b[] oppure viceversa!!