Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Sviluppare programma c per determinare 2 array uguali

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[21] Re: Sviluppare programma c per determinare 2 array uguali

Messaggioda Foto UtenteSjuanez » 12 ott 2015, 15:27

Io ero curioso invece :mrgreen: . 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.
Avatar utente
Foto UtenteSjuanez
11,3k 6 8 13
G.Master EY
G.Master EY
 
Messaggi: 3479
Iscritto il: 18 mar 2015, 13:48

0
voti

[22] Re: Sviluppare programma c per determinare 2 array uguali

Messaggioda Foto Utenteangrigio » 12 ott 2015, 16:19

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. =D>
Avatar utente
Foto Utenteangrigio
18 2 7
Frequentatore
Frequentatore
 
Messaggi: 181
Iscritto il: 8 set 2008, 15:44

1
voti

[23] Re: Sviluppare programma c per determinare 2 array uguali

Messaggioda Foto UtenteWALTERmwp » 12 ott 2015, 16:46

Foto Utenteangrigio, solo un suggerimento, se vuoi "riprendere" parte del messaggio scritto da un altro utente.

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.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8990
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[24] Re: Sviluppare programma c per determinare 2 array uguali

Messaggioda Foto Utenteangrigio » 12 ott 2015, 16:58

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.
Avatar utente
Foto Utenteangrigio
18 2 7
Frequentatore
Frequentatore
 
Messaggi: 181
Iscritto il: 8 set 2008, 15:44

0
voti

[25] Re: Sviluppare programma c per determinare 2 array uguali

Messaggioda Foto UtenteTardoFreak » 12 ott 2015, 17:01

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.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

4
voti

[26] Re: Sviluppare programma c per determinare 2 array uguali

Messaggioda Foto UtenteTardoFreak » 12 ott 2015, 17:17

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:
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.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[27] Re: Sviluppare programma c per determinare 2 array uguali

Messaggioda Foto Utentecronos80 » 12 ott 2015, 17:18

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?

Foto Utenteangrigio non hai risposto alla mia domanda, il codice per com'è scritto al momento non distingue se i due array sono uguali nel contenuto, ma ordinati in modo diverso.
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!
Avatar utente
Foto Utentecronos80
1.546 1 6 12
Expert EY
Expert EY
 
Messaggi: 636
Iscritto il: 17 gen 2012, 10:43

0
voti

[28] Re: Sviluppare programma c per determinare 2 array uguali

Messaggioda Foto UtenteSjuanez » 12 ott 2015, 17:19

Grazie Foto UtenteTardoFreak!
Più so e più mi accorgo di non sapere.

Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
Avatar utente
Foto UtenteSjuanez
11,3k 6 8 13
G.Master EY
G.Master EY
 
Messaggi: 3479
Iscritto il: 18 mar 2015, 13:48

0
voti

[29] Re: Sviluppare programma c per determinare 2 array uguali

Messaggioda Foto Utenteangrigio » 12 ott 2015, 17:42

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}
sono uguali e ripetuti nello stesso modo,invece i dati
Codice: Seleziona tutto
float mioArray{2,1,3}
float tuoArray{1,2,3}
pur contenendo gli stessi elementi non sono uguali
Avatar utente
Foto Utenteangrigio
18 2 7
Frequentatore
Frequentatore
 
Messaggi: 181
Iscritto il: 8 set 2008, 15:44

0
voti

[30] Re: Sviluppare programma c per determinare 2 array uguali

Messaggioda Foto UtenteTardoFreak » 12 ott 2015, 17:44

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.
"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.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

PrecedenteProssimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 24 ospiti