Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    12

    HELP C Confronto vettori

    Ciao a tutti amici,
    sono alle prese con un problema alquanto scocciante... ho due vettori di numeri di ugual lunghezza (4 interi scelti a caso tra 0 e 9) e devo confrontarli dicendo quanti numeri sono uguali in posizione uguale, quanti uguali in posizione diversa e quanti diversi... una sorta di Mastermind.
    Esempio
    vettore1 0 0 1 4
    vettore2 0 0 2 1

    Abbiamo: 2 numeri uguali nella stessa posizione
    1 numero diverso
    1 numero uguale in diversa posizione

    Riesco a codificare l'algoritmo che mi calcola i numeri uguali in posizione uguale ma i doppioni mi fanno sballare il conto dei numeri uguali in posizione diversa.
    Qualche spunto concettuale su come potrei escludere i doppioni dal conteggio?
    Bella sfida questa

    Grazie 1000 a tutti
    Fox_

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    112
    Nel risolvere l'esercizio didattico è consentito fare uso di vettori supplementari?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    12
    Si, non ci sono vincoli
    Fox_

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,571
    Usi un vettori di booleani per mark-are le posizioni che hai già assegnato in modo da non ricontarle.
    Devi farlo per entrambi i vettori.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    12
    Avevo implementato una soluzione simile, cioè per ogni elemento di ciascun vettore lo avevo confrontato a ritroso con i precedenti e marcato un booleano"doppione" a true se trovavo un'occorrenza dello stesso numero, questo booleano poi mi serviva per escludere quel numero dal conteggio dei numeri giusti in posizione sbagliata.
    Quindi avevo due booleani per i due vettori.
    Ma in caso di numeri uguali adiacenti il calcolo non andava.
    Tipo
    vettore1 3 3 0 6
    vettore2 3 0 3 3

    il mio programma restituiva -> numeri uguali in posizione uguale 1
    numeri uguali in posizione diversa 1
    numeri diversi 2
    Fox_

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    112
    Il primo passo è determinare la struttura dati. Tu devi acquisire informazioni non solo sui singoli interi ma sugli interi da 0 a 9. Ne consegue che avrai bisogno di una matrice fatta da 10 righe (tanti quanti sono gli interi da 0 a 9) e da 3 colonne che fungerà da contatore.
    La prima colonna conterrà i "numeri uguali in posizione uguale". La seconda conterrà i "numeri uguali in posizione diversa". La terza infine conterrà "i numeri diversi" che si suppone nella uguale posizione.
    Stabilito questo puoi con un ciclo da 0 a 9 esaminare le singole cifre confrontandole con quelle dei vettori e in presenza di una corrispondenza con quello che ti serve andare a incrementare il contatore relativo.
    Esempio pratico.
    Stai esaminando la cifra 0. Inizi col primo confronto basandoti sullo stesso indice e scorri tutto il vettore. Posto v1 e v2 i due vettori ed M la struttura dati allora avrai che se V1 [n] = V2 [n] allora inc (M [0][n]) e cosi via.
    Credo che il problema fosse nella struttura dati.
    Potresti utilizzare anche altre strutture dati se preferisci. Ho scelto la matrice perché a me personalmente mi sembra quella più indicata nel caso di specie.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    12
    Non mi è molto chiara la dinamica di questa soluzione, potresti spiegarla partendo da questo esempio?

    Vettore1 3 3 0 6

    Vettore2 3 0 3 3

    Considerando anche che i vettori sono composti da soli 4 elementi e che gli elementi diversi non per forza hanno lo stesso posto...
    Ultima modifica di Fox_; 12-08-2016 a 20:40
    Fox_

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,571
    Come dicevo ti servono due vettori in cui tieni traccia delle posizioni che hai già considerato.
    Prima confronti i numeri nella stessa posizione e marchi A quelli che risultano uguali, poi lavori solo nelle posizioni non marcate, per ogni numero del primo vettore vai a cercare un numero nel secondo con cui accoppiarlo, se lo trovi marchi B le due posizioni.
    Alla fine le posizioni marcate A contengono numeri uguali in posizione uguale, quelle marcate B numeri uguali in posizione diversa, quelle non marcate numeri diversi.

    P.s. se usi come non marcato un numero negativo e come marcatore l'indice nell'altro vettore puoi anche controllare le posizioni relative:
    alla fine avrai
    usati[i] < 0 diverso
    usati[i] == i uguale in posizione uguale
    altrimenti uguale in posizione diversa, usati1[i] ti dice la posizione nell'altro vettore e lo stesso fa rispettivamente usati2[i]
    Ultima modifica di Scara95; 15-08-2016 a 18:00
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    12
    Ok penso di aver capito, grazie mille a tutti =)
    Fox_

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    12
    Restando in tema di questo esercizio, viene anche richiesto un controllo sugli input, io riesco a scartare lettere (maiuscole e minuscole),numeri non compresi tra 0 e 9 e simboli.
    Tuttavia se provo ad inserire un input tipo 1+, il programma lo accetta e pone 1 al primo posto del vettore e il '+' al successivo, dandomi dunque l'errore al secondo posto.
    Oppure se scrivo come input '1+1', il programma pone 1 in prima posizione nell'array e 1 nella successiva.
    Sapete come potrei fare per riuscire a scartare anche queste tipologie di input?
    Fox_

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2021 vBulletin Solutions, Inc. All rights reserved.