Sviluppare programma c per determinare 2 array uguali
Moderatori:
Paolino,
fairyvilje
40 messaggi
• Pagina 3 di 4 • 1, 2, 3, 4
0
voti
Io ero curioso invece
. Di che parli?
Più so e più mi accorgo di non sapere.
Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
0
voti
Scusa , ho letto appena adesso il messaggio "Beh, se t'interessa potrei suggerirti un metodo per scrivere questo tipo di programmi." "Evidentemente non interessa. "
Ho riportato alcuni messaggi che ho trovato.
Alle domande rispondo:
Se ci sono metodi generali per risolvere questi ed altri problemi di questo tipo ben vengano suggerimenti.
Sono ben accetti.
Ho riportato alcuni messaggi che ho trovato.
Alle domande rispondo:
Se ci sono metodi generali per risolvere questi ed altri problemi di questo tipo ben vengano suggerimenti.
Sono ben accetti.

1
voti
Dopo avere aperto la finestra all'interno della quale vuoi scrivere il tuo messaggio, ti posizioni su quello che ti interessa riportare e selezioni, con il mouse (generalmente), le frasi, la frase o parte di essa, dopo di che selezioni il tasto "CITA che risulta presente, in alto a destra, in ogni Post.
Fatto questo ti "comparirà", nel messaggio che stai scrivendo, quello che avevi selezionato, all'interno dei tag(s) "quote", praticamente così:
[quote= "nomeUtente"]frase selezionata[/quote].
Tu però, quello che vuoi scrivere, non lo devi riportare all'interno di questi tag(s) dove appunto ci deve stare solo quello che hai ripreso dallo scritto altrui.
Per vedere l'effetto che fa, prima del tastino [Invia], selezioni il tastino [Anteprima], così ti rendi conto.
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8990
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
TardoFreak ha scritto:Beh, se t'interessa potrei suggerirti un metodo per scrivere questo tipo di programmi.
Ho citato il messaggio che mi interessava..
Se c'e' un metodo generale per risolvere questi problemi mi piacerebbe saperlo.
0
voti
Lo sto scrivendo, please wait ...
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
4
voti
Si, c'è un metodo generale che è quello di individuare il centro del problema e svilupparci il programma intorno. E' un metodo che si basa su ragionamenti matematici ma che, per semplicità, tralascio.
Prendiamo questo programma come esempio.
Dobbiamo dare un indicazione di verità (che potrebbe essere una variabile contenente un vero/falso o una scritta dipendente dalla verità o della falsità ) al seguente quesito: i due array coinvolti sono uguali?
Partiamo dall'inizio. Innanzi tutto quando due array A e B sono uguali? Quando soddisfano queste due condizioni:
- hanno la stessa dimensione, cioè lo stesso numero di elementi.
- ogni elemento A è uguale all'elemento B nell'ordine in cui sono negli array.
Ma sappiamo che il numero di elementi dei due array è identico perché dato per certo dal problema stesso.
Quindi dobbiamo verificare che tutti gli elementi nella stessa posizione siano uguali.
Però si potrebbe dire in un altro modo e precisamente: A e B sono uguali se non esiste un elemento di A diverso dal corrispondente elemento di B.
Il secondo modo di ragionare ci permette di essere più efficienti in quanto ci basta trovare un elemento differente per dire che i due array non sono uguali. In buona sostanza partiamo con l'ipotesi che i due array siano identici e ne cerchiamo un controesempio. Se non lo troviamo abbiamo confermato che sono uguali.
Quindi, preso a caso un elemento i di A e B, la riga di codice cuore del problema è questa:
Chiaramente dobbiamo fare questo confronto per tutti gli elementi, lo possiamo fare in modo iterativo o ricorsivo (provare come esercizio), lo facciamo in modo iterativo con, ad esempio, un ciclo di for. Quindi racchiudiamo la riga di codice all'interno di questo ciclo dove n è il numero di elementi degli array.
Ci ricordiamo però che noi abbiamo dato per scontato che prima dell'elaborazione A e B fossero uguali, quindi dobbiamo in qualche modo "dirlo" al programma, e lo facciamo inizializzando la variabile isEqual.
Ed il gioco è fatto. Se la nostra variabile isEqual è vera (in C vero significa diverso da 0) è perché i due array A e B sono identici.
Osservazione:
In questo modo noi esaminiamo tutti gli elementi degli array ma non ci serve fare questo. Nel momento in cui troviamo un solo elemento diverso è inutile continuare a fare il test su tutti gli altri. Possiamo (ma non è necessario) uscire anticipatamente dal ciclo utilizzando un'istruzione di break.
Ora, per esperienza personale, ho avuto un professore che se solo avessi osato inserire un break in un ciclo si sarebbe incaxxato non poco quindi rivediamo il programma utilizzando un altro sistema: usiamo un ciclo while e scrivendo tutto secondo i sacri comandamenti senza abbreviazioni e/o post incrementi.
Ripartiamo dalla riga cuore del problema
ed inseriamolo in un ciclo di while che scandisca tutti gli indici degli array da 0 a n-1
Non ci rimane che dire al programma che partiamo con l'idea che i due array siano uguali per poi eventualmente smentirla.
Infine, come ciliegina sulla torta, facciamo in modo che il ciclo s'interrompa nel momento in cui incontriamo un elemento diverso.
Tralascio le dichiarazioni delle variabili anche perché il compilatore te le suggerirebbe comunque.
Come vedi si tratta di isolare il problema e, passo dopo passo, costruirci il programma intorno.
Prendiamo questo programma come esempio.
Dobbiamo dare un indicazione di verità (che potrebbe essere una variabile contenente un vero/falso o una scritta dipendente dalla verità o della falsità ) al seguente quesito: i due array coinvolti sono uguali?
Partiamo dall'inizio. Innanzi tutto quando due array A e B sono uguali? Quando soddisfano queste due condizioni:
- hanno la stessa dimensione, cioè lo stesso numero di elementi.
- ogni elemento A è uguale all'elemento B nell'ordine in cui sono negli array.
Ma sappiamo che il numero di elementi dei due array è identico perché dato per certo dal problema stesso.
Quindi dobbiamo verificare che tutti gli elementi nella stessa posizione siano uguali.
Però si potrebbe dire in un altro modo e precisamente: A e B sono uguali se non esiste un elemento di A diverso dal corrispondente elemento di B.
Il secondo modo di ragionare ci permette di essere più efficienti in quanto ci basta trovare un elemento differente per dire che i due array non sono uguali. In buona sostanza partiamo con l'ipotesi che i due array siano identici e ne cerchiamo un controesempio. Se non lo troviamo abbiamo confermato che sono uguali.
Quindi, preso a caso un elemento i di A e B, la riga di codice cuore del problema è questa:
- Codice: Seleziona tutto
if (A[i] != B[i]) isEqual = 0;
Chiaramente dobbiamo fare questo confronto per tutti gli elementi, lo possiamo fare in modo iterativo o ricorsivo (provare come esercizio), lo facciamo in modo iterativo con, ad esempio, un ciclo di for. Quindi racchiudiamo la riga di codice all'interno di questo ciclo dove n è il numero di elementi degli array.
- Codice: Seleziona tutto
for (i=0; i<n; i++)
{
if (A[i] != B[i]) isEqual = 0;
}
Ci ricordiamo però che noi abbiamo dato per scontato che prima dell'elaborazione A e B fossero uguali, quindi dobbiamo in qualche modo "dirlo" al programma, e lo facciamo inizializzando la variabile isEqual.
- Codice: Seleziona tutto
isEqual = 1;
for (i=0; i<n; i++)
{
if (A[i] != B[i]) isEqual = 0;
}
Ed il gioco è fatto. Se la nostra variabile isEqual è vera (in C vero significa diverso da 0) è perché i due array A e B sono identici.
Osservazione:
In questo modo noi esaminiamo tutti gli elementi degli array ma non ci serve fare questo. Nel momento in cui troviamo un solo elemento diverso è inutile continuare a fare il test su tutti gli altri. Possiamo (ma non è necessario) uscire anticipatamente dal ciclo utilizzando un'istruzione di break.
- Codice: Seleziona tutto
isEqual = 1;
for (i=0; i<n; i++)
{
if (A[i] != B[i]) { isEqual = 0; break; }
}
Ora, per esperienza personale, ho avuto un professore che se solo avessi osato inserire un break in un ciclo si sarebbe incaxxato non poco quindi rivediamo il programma utilizzando un altro sistema: usiamo un ciclo while e scrivendo tutto secondo i sacri comandamenti senza abbreviazioni e/o post incrementi.
Ripartiamo dalla riga cuore del problema
- Codice: Seleziona tutto
if (A[i] != B[i]) isEqual = 0;
ed inseriamolo in un ciclo di while che scandisca tutti gli indici degli array da 0 a n-1
- Codice: Seleziona tutto
i = 0;
while(i < n)
{
if (A[i] != B[i]) isEqual = 0;
i = i + 1;
}
Non ci rimane che dire al programma che partiamo con l'idea che i due array siano uguali per poi eventualmente smentirla.
- Codice: Seleziona tutto
isEqual = 1;
i = 0;
while(i < n)
{
if (A[i] != B[i]) isEqual = 0;
i = i + 1;
}
Infine, come ciliegina sulla torta, facciamo in modo che il ciclo s'interrompa nel momento in cui incontriamo un elemento diverso.
- Codice: Seleziona tutto
isEqual = 1;
i = 0;
while((i < n) && (isEqual == 1))
{
if (A[i] != B[i]) isEqual = 0;
i = i + 1;
}
Tralascio le dichiarazioni delle variabili anche perché il compilatore te le suggerirebbe comunque.
Come vedi si tratta di isolare il problema e, passo dopo passo, costruirci il programma intorno.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
cronos80 ha scritto:
- Codice: Seleziona tutto
float mioArray[3] = { 3,4,5}; // gli altri elementi sono automaticamente inizializzati a zero.
float tuoArray[3] = { 4,3,5};
In questo caso il programma deve dire che i due array sono uguali o no?
Non cercare di piegare il cucchiaio. È impossibile. Cerca invece di fare l'unica cosa saggia: giungere alla verità. Il cucchiaio non esiste. Allora ti accorgerai che non è il cucchiaio a piegarsi, ma sei tu stesso!
0
voti
Grazie
TardoFreak!
Più so e più mi accorgo di non sapere.
Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
0
voti
cronos80 ha scritto:angrigio non hai risposto alla mia domanda,
Secondo me l'array1 ,pur contenendo gli stessi elementi dell'array2 quando il programma esegue i confronti trovera' che il primo elemento dell'array1 (3) e' diverso dal secondo elemento dell'array2 (4).
Il codice considera uguali i 2 array non solo se i dati in essi contenuti sono gli stessi ma anche se sono ripetuti nello stesso modo:
- Codice: Seleziona tutto
float mioArray {1,2,3}
foat tuoArray {1,2,3}
- Codice: Seleziona tutto
float mioArray{2,1,3}
float tuoArray{1,2,3}
0
voti
Se l'ordine non è importante non si deve parlare di array ma di insiemi (e si usa un'altra tecnica).
Mi pare che il problema sia confrontare due array e non due insiemi.
Mi pare che il problema sia confrontare due array e non due insiemi.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
40 messaggi
• Pagina 3 di 4 • 1, 2, 3, 4
Chi c’è in linea
Visitano il forum: Nessuno e 27 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



