Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    esercizio matrice:media dell' intorno di un elemento !!

    Salve a tutti!!!ho bisogno del vostro aiuto!!sono alle prese con questo maledetto esercizo di fondamenti di informaticaaaaa, "la mia materia preferita"..e non riesco a trovare una strada da seguire per svolgerlo!!!Qualcuno può darmi una mano???una direttiva,un input???perfavore.. :-D


    Scrivere un metodo FILTROMEDIA che riceve in input una matrice di interi M e restituisce una matrice N di interi delle stesse dimensioni costruita come segue: l'elemento in posizione (i,j) dI N viene calcolato come la media degli elementi che costituiscono l'elemento (i,j) della matrice M. per esempio l'elemento N[0][0] sarà dato dalla media degli elementi che fanno da contorno all'elemento M[0][0] e dunque ==> N[0][0]=(M[0][1]+M[1][1]+M[1][0])/3


    codice:
                   100  100  48   48
                   215  100  56   56
    M=             100  48  215   56
                   215  215  56   56
    
                  138   104   72  53
                  90    110   84  85
    N=            159   146   80  88 
                  121   127  204  109
    
    N[0][0]=(100+100+215)/3=138
    N[1][1]=(100+48+215+56+48+100+100+215)/8=110
    Spero di essere stato chiaro!!!

  2. #2
    ma non c'è nessuno che può aiutarmi???

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    fondamentalmente sì, ma qui sul forum non facciamo i compiti per gli altri. Soprattutto poi quando non c'è uno straccio di riga di codice. Prova nella sezione Lavoro / Collaborazione cerco / offro, più sotto nel forum.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    ma infatti non ho chiesto a nessuno di farmi i compiti...ho chiesto soltanto un input..un idea!!cmq grazie lo stesso provo nella sezione lavoro!!!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lorenzcollixx
    ma infatti non ho chiesto a nessuno di farmi i compiti...ho chiesto soltanto un input..
    Bene, un input è questo:

    • Il metodo riceverà un int[][] e restituirà un int[][], questo è quanto hai descritto all'inizio. Chiaramente essendoci una media ci sarà una divisione che però sarà "intera" cioè otterrai un int, dato l'array da restituire.
    • Nel metodo come prima cosa devi determinare numero di righe e di colonne della matrice ricevuta in input. Il numero di righe lo ottieni dalla lunghezza dell'array principale, il numero di colonne lo puoi dedurre dal numero di elementi nella prima riga (e si presuppone/impone che l'array sia "rettangolare". In java si possono anche fare array detti "jagged", non rettangolari).
    • Come seconda cosa, saputo numero di righe/colonne, istanzi un nuovo array int[][] con quelle dimensioni.
    • Quindi fai una sola scansione della matrice in input. Falla pure nel senso che vuoi (es. da alto verso basso da sinistra a destra), la logica della elaborazione è tale per cui la direzione di scansione non inficia sul risultato finale. Qui chiaramente devi avere 2 for "annidati".
    • Per ogni cella della matrice devi fare la somma dei valori nelle celle appena adiacenti la cella. Data una cella (r,c), non c'è alcun problema a indirizzare es. (r-1,c-1) o (r-1,c), ecc... insomma le 8 celle adiacenti ..... salvo il caso particolare in cui si è ai bordi della matrice. Ma per questo bastano dei banali test con dei "if". Se c > 0 ok, altrimenti è ovvio che non puoi fare c-1 (che sarebbe un numero negativo). Bastano pochi test per stabilire quali celle adiacenti sono indirizzabili. E vista la questione della media, devi anche "contare" quante celle sono disponibili.
      La media la assegni nella matrice di output alla locazione (r,c).


    Ora prova tu a svilupparlo. E ti assicuro che non è difficile ... la logica è molto "lineare", non come altri esercizi che possono essere ben più contorti!


    P.S. 1) Ho provato a scrivere un programmino con il metodo per vedere quanto mi veniva lungo. Per lo stile con cui scrivo io il codice, solo per il metodo mi vengono 57 righe. Sembrano tante ma alla fine è stato solo un copia/incolla cambiando le condizioni e i +/- per spostarsi di cella. Potrei compattare qualcosa ma come l'ho scritto è "leggibile".

    P.S. 2) I valori nel mio output sono un pochino diversi da quanto hai riportato prima (tra l'altro il tuo penultimo valore 204 è sbagliato, non può fare quello). Se vuoi fare un arrotondamento si può fare. La somma la fai "intera" ma la divisione la fai poi "floating-point" e per gli arrotondamenti ci sono metodi nella classe Math (ma si può anche fare senza Math).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    P.S. 3) Invece che fare test separati per gli 8 casi, si può compattare in questo modo: dal momento che gli offset per lo spostamento di cella (sia per riga che colonna) sono -1, 0, +1, nulla vieterebbe di fare un ulteriore doppio for annidato per fare le varie combinazioni di spostamenti (scartando solo la cella stessa di origine). Sarebbe un po' più "convoluto" ma più compatto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Si fa con 4 cicli for ed un if. Per pulizia però conviene fare i calcoli in un metodo a parte. Direi 15/20 righe in tutto. Resta il fatto che questo è un uso sbagliato del forum
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.