Posizione elemento e elementi doppi

di il
8 risposte

Posizione elemento e elementi doppi

Salve, sono alle prime armi con Matlab e mi sono bloccata su un paio di esercizi in cui mi si chiede, data una matrice, di trovare il massimo (senza usare funzioni predefinite, quindi attraverso il ciclo for e il confronto tra valori) e fin qui tutto ok, in seguito dovrei trovare la posizione del massimo all'interno della matrice e questo è il mio problema. C'è qualcuno in grado di aiutarmi usando sia i cicli sia eventuali funzioni predefinite (ho letto che esiste ind2sub, ma non ho ben capito se è quello che cerco nè come funziona esattamente).

Secondo problema: data una matrice, trovare gli eventuali elementi doppi e sostituirli (anche in questo caso senza usate funzioni predefinite).

Grazie infinite a chiunque mi risponderà

8 Risposte

  • Re: Posizione elemento e elementi doppi

    Se sei riuscita a scorrere la matrice con i cicli e trovare il massimo, vuol dire che gli indici possono aiutarti a trovare la posizione di questo anche senza usare nessuna funzione.

    Nel secondo problema potresti utilizzare un vettore di supporto che ti aiuti a rintracciare gli elementi doppi e nel caso sostituirli.
    Metti ogni elemento distinto in questo vettore e scorri la matrice.

    Se hai scritto codice ed hai problemi lo posti e ti si cerca di aiutare.
  • Re: Posizione elemento e elementi doppi

    %dato un vettore, trovare massimo attraverso l'uso di cicli
    A=[3 7 15 9 11]
    max=A(1);
    for i=1:length(A)
    if max<A(i)
    max=A(i);
    end
    end

    Attraverso questo script sono riuscita a trovare il massimo, come mi consigliate di trovare gli indici del massimo???

    Per quanto riguarda il secondo esercizio ho pensato di usare il seguente script, ma questo no funziona. In cosa ho sbagliato?

    A=[2 6 3 2 8 6 4];
    for i=1:length(A)-1
    for j=1:length(A)
    if A(i)==A(i+1)
    B=A(i)
    end
    end
    end
  • Re: Posizione elemento e elementi doppi

    Stai attenta però che tu stai scorrendo vettori e non matrici...

    Comunque nel primo esercizio ti basta aggiungere dopo l'istruzione max = A(i) l'istruzione indmax = i.

    Il secondo ha una logica insensata. Confronti l'elemento corrente con quello successivo e se sono uguali metti in un nuovo vettore B il risultato. E j che lo tieni a fare?
  • Re: Posizione elemento e elementi doppi

    Sì, ho usato un vettore e non una matrice solo per semplificare.

    Ok per il primo esercizio.
    Per quanto riguarda il secondo, il ciclo con j non serve a nulla in effetti, ho sbagliato nel copiare lo script ...mi trovo in grande difficoltà con questo esercizio: il confronto mi sembra corretto e se gli elementi sono uguali li pongo in un nuovo vettore B, eppure quando faccio partire il "programma" non ho alcun tipo di risultato (memorizza solo nella workspace il vettore e l'indice i e nient'altro...di B nessuna traccia).
  • Re: Posizione elemento e elementi doppi

    E' quello il tuo codice che stai usando? Perchè non ha senso, ti ho già scritto cosa fa.
  • Re: Posizione elemento e elementi doppi

    Ok, come mi suggerisci di risolvere l'esercizio?
  • Re: Posizione elemento e elementi doppi

    Allora potresti utilizzare un vettore di supporto per trovare tutti gli elementi DISTINTI della matrice. Provo a fartelo capire con una matrice 2x2 per semplicità:
    2 2
    1 3

    Con due cicli for ti scorri la matrice. Prendi il primo numero e lo inserisci nel vettore di supporto (nel mio esempio 2 e vettore = [2]). Durante la seconda iterazione viene preso di nuovo 2, controlli prima se è presente nel vettore di supporto, se è presente fai la sostituzione che devi fare, altrimenti lo inserisci nel vettore di supporto e vai avanti (nel mio esempio è presente, quindi dovrebbe essere sostituito). Nella terza iterazione viene preso 1 e si controlla se è presente, in questo caso non è presente quindi viene inserito nel vettore che diventa [2,1]. Nella quarta e ultima iterazione viene preso 3, stesso discorso precedente quindi il vettore di supporto sarebbe [2,1,3] e il tuo programma dovrebbe aver sostituito gli elementi doppi.

    Ho cercato di spiegarti la logica, però non so se devi usare una matrice nuovo o sempre la stessa e con cosa sostituire gli elementi doppi. Ma sono cose superflue che non cambiano la logica dell'esercizio.
  • Re: Posizione elemento e elementi doppi

    Perdona la mia insistenza e ignoranza, ho scritto uno script FORSE giusto nella logica ma errato all'atto pratico...solo per chiarire i dubbi che ho:

    A=[2 2;1,3];
    elementi_doppi=zeros(length(A))

    for i=1:length(A)
    for j=1:length(A)
    a=A(i,j);
    if a==A(i,j)
    elementi_doppi(i,j)=a;
    end
    end
    end
    elementi_doppi


    Dunque, usando la tua stessa matrice una volta trovati gli elementi che si ripetono voglio porli in una matrice di zeri (in modo che quei numeri non vengano sostituiti ma solo evidenziati).
    Con due cicli scorro la matrice e pongo il primo elemento uguale ad a, in seguito voglio confrontare questo elemento con tutti gli altri presenti nella matrice iniziale, eccetto se stesso...come faccio ad escluderlo dal confronto?
Devi accedere o registrarti per scrivere nel forum
8 risposte