Visualizzazione dei risultati da 1 a 7 su 7

Discussione: esercizi con array

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    185

    esercizi con array

    Ciao a tutti, sapete dove posso trovare millemila esercizi su array?
    Sono quelli che mi danno problemi e sono i canditati possibili per la prova di esame.
    Con esercizi intendo di tutti i tipi, io uso il linguaggio java ma va bene qualsiasi linguaggio, sarebbe meglio se ci sono anche le soluzioni, cosi da capire se ho svolto bene o no..
    Grazie mille a tutti

  2. #2
    Il consiglio è quello di studiare le strutture dati in un valido testo, magari che ti è stato consigliato in ambito scolastico (o accademico).
    Il tuo tentativo di esercitarti è sicuramente apprezzabile, tuttavia se c'è qualche cosa che non sei riuscito a capire, chiedi pure: prima infatti di affrontare qualsiasi esercizio è *fondamentale* aver capito decentemente ogni singolo aspetto teorico.
    "Memento audere semper"

    IBM Europe - Italy Group

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    185
    il problema è che ho capito come funziona il tutto, mi manca l'esercitazione sugli array.
    Faccio l'esempio della prova di esercitazione che avevo oggi:
    avevo un metodo con ingresso due vettori p e t. Dovevo controllare se p occorreva in t e creare l'array con la posizione di dove occorreva. Ad esempio con ingresso p={1,2,1} e t={1,2,1,3,1,2,1,2,1} dovevo restituire il vettore di 3 elementi (in quanto p occorre esattamente 3 volte in t) cositituito dagli elementi {0,4,6} che sono gli indici di dove inizia l'occorrenza.

    Io stavo riprovando a farlo adesso, ma naturalmente non funziona, comunque posto il codice.
    codice:
    public static void main(String[] args) {
    		int[] p = { 1, 2, 1 };
    		int[] t = { 1, 2, 1, 3, 1, 2, 1, 2, 1 };
    
    		occorrenze(t, p);
    
    	}
    
    	static int[] occorrenze(int[] t, int[] p) {
    		int lt = t.length;
    		int lp = p.length;
    		int count = 0;
    		int lunghezza = 0;
    		int k = 0;
    		int[] arrayRestituito = new int[lt];
    
    		int i =0;
    			for (int j = 0; j < lt; j++) {
    				if (p[i] == t[j]) {
    					lunghezza++;
    					i++;
    
    				} else {
    					i = 0;lunghezza=0;
    				}
    				if (lunghezza == lp) {
    					arrayRestituito[k] = (j - (lp - 1));
    					k++;lunghezza = 0;i = 0;j=j-1;count++;
    				}
    			}
    			
    			arrayRestituito = new int[count];
    			
    			i =0;lunghezza=0;k=0;
    			for (int j = 0; j < lt; j++) {
    				if (p[i] == t[j]) {
    					lunghezza++;
    					i++;
    
    				} else {
    					i = 0;lunghezza=0;
    				}
    				if (lunghezza == lp) {
    					arrayRestituito[k] = (j - (lp - 1));
    					k++;lunghezza = 0;i = 0;j=j-1;count++;
    				}
    			}
    
    			for(int l=0;l<arrayRestituito.length;l++){
    				System.out.print(" "+arrayRestituito[l]);
    			}
    			
    			return arrayRestituito;
    	}
    
    }
    EDIT:
    Ora funziona. Ma la soluzione fa veramente schifo.
    Comunque secondo me quello che mi manca sono migliaia e migliaia di esercizi, in modo da imparare bene a lavorare sugli array.
    Perche questo esercizio oggi in laboratorio non mi tornava, mentre adesso si. Devo anche ammettere che adesso l'ho fatto con il debug, mentre in laboratorio in sede di esame non ce lo fanno usare il debug..

  4. #4

    Re: esercizi con array

    Originariamente inviato da dennis87
    va bene qualsiasi linguaggio
    Vista tale premessa e visto che in questo preciso istante dispongo solo di VB.NET ti posto un mini-esempio, scritto 'a memoria' e facilmente riportabile in qualsiasi linguaggio.
    codice:
      
            Dim p() As Integer = {1, 2, 1}
            Dim t() As Integer = {1, 2, 1, 3, 1, 2, 1, 2, 1}
    
            Dim result As Boolean
    
            For i As Integer = 0 To UBound(t) - UBound(p)
    
                result = True
    
                For k As Integer = 0 To UBound(p)
    
                    If t(i + k) <> p(k) Then result = False
    
                Next
    
                If result = True Then MsgBox("Posizione : " & i.ToString)
    
            Next
    Il codice utilizza Ubound per trovare la dimensione della matrice, e due semplicissimi cicli for/next. A te serve vedere il ragionamento.
    Ovviamente il primo ciclo viene effettuato non per tutti gli elementi del vettore: è ovvio che se il vettore di confronto ha 3 elementi, è inutile controllare le occorrenze nel primo vettore quando siamo arrivati agli ultimi 2 elementi, per definizione non ci sarebbe corrispondenza.
    Ad ogni ciclo, viene stampato a video la posizione dell'occorrenza (qui puoi benissimo popolare la tua matrice).
    "Memento audere semper"

    IBM Europe - Italy Group

  5. #5

    Moderazione

    Dato che il linguaggio di riferimento "di base" resta Java sposto nella sezione apposita (lasciando un collegamento qui).
    È vero che i concetti generali degli array sono trasversali ai vari linguaggi, ma (1) ci sono spesso differenze non indifferenti in sintassi ed implementazione (un array C e un "array" PHP sono bestie molto diverse) e (2) magari riusciamo ad evitare una babele che rischia di confondere ulteriormente l'OP.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    185
    Ragazzi, questo è il codice, pessimo, che ho scritto, mi potreste aiutare a renderlo migliore?
    codice:
    int[] occorrenze(int[] t, int[] p) {
    		int lt = t.length;
    		int lp = p.length;
    		int count = 0;
    		int lunghezza = 0;
    		int k = 0;
    		int[] arrayRestituito = new int[lt];
    
    		int i = 0;
    		for (int j = 0; j < lt; j++) {
    			if (p[i] == t[j]) {
    				lunghezza++;
    				i++;
    
    			} else {
    				i = 0;
    				lunghezza = 0;
    			}
    			if (lunghezza == lp) {
    				arrayRestituito[k] = (j - (lp - 1));
    				k++;
    				lunghezza = 0;
    				i = 0;
    				j = j - 1;
    				count++;
    			}
    		}
    		if (count == 0) {
    			arrayRestituito = new int[1];
    			arrayRestituito[0] = -1;
    		} else {
    			arrayRestituito = new int[count];
    		}
    
    		i = 0;
    		lunghezza = 0;
    		k = 0;
    		for (int j = 0; j < lt; j++) {
    			if (p[i] == t[j]) {
    				lunghezza++;
    				i++;
    
    			} else {
    				i = 0;
    				lunghezza = 0;
    			}
    			if (lunghezza == lp) {
    				arrayRestituito[k] = (j - (lp - 1));
    				k++;
    				lunghezza = 0;
    				i = 0;
    				j = j - 1;
    				count++;
    			}
    		}
    
    		for (int l = 0; l < arrayRestituito.length; l++) {
    			System.out.print(" " + arrayRestituito[l]);
    		}
    
    		return arrayRestituito;
    	}

  7. #7
    Per caso hai minimamente dato uno sguardo al codice che ti ho postato?

    Come vedi, poche linee di codice ma funzionanti. Ho usato Java tempo fa (in particolare JME) per un progetto di un programma per dispositivi mobile con SO Android (progetto personale, che non ha nulla a che fare con il mio lavoro, che ovviamente è coperto da segreto industriale), ed ora non ho più gli strumenti (leggi: Eclipse) per tradurre la soluzione con Java, però è molto semplice da interpretare anche pur essendo in VB.NET.

    C'è qualcosa che non capisci? Se è così, chiedi pure..
    "Memento audere semper"

    IBM Europe - Italy Group

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 © 2025 vBulletin Solutions, Inc. All rights reserved.