Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    31

    [JAVA] Prodotto tra matrici

    Ragazzi sto avendo mooolti problemi con il seguente esercizio:
    codice:
    Si scriva un programma Java che prenda in input un file contenente una sequenza
    di matrici <A1, A2, A3, ...., An> e scriva in un file di output la matrice B
    ottenuta dalla moltiplicazione delle matrici contenute nella sequnza.
    B = A1 x A2 x A3 x ... x An
    
    Il file di input contiene una sequenza di matrici. Ogni matrice è preceduta da unaa
    riga contenente il numero di righe e il numero di colonne della matrice. Ogni
    matrice è rappresentata riga per riga.
    Tutte le matrici contengono solo i valori 0 e 1.
    
    
    Il file di output contiene un'unica matrice ottenuta dalla moltiplicazione delle
    matrici contenute nel file di input.
    La riga che precede la matrice deve contenere il numero di righe ed il numero di
    colonne della matrice risultato.
    Esempio del file di input:
    codice:
    5x4
    1 0 0 1
    0 0 1 0
    0 1 1 1
    1 0 1 0
    1 0 1 1
    
    4x5
    0 0 1 0 1
    1 0 1 1 1
    0 0 1 1 0
    1 0 1 1 0
    
    5x7
    0 1 0 1 1 1 1
    0 1 1 0 1 0 0
    1 1 0 0 1 1 1
    1 0 0 1 1 1 0
    0 1 1 0 0 1 0
    
    7x8
    1 1 0 0 1 0 1 1
    1 0 1 1 1 0 1 0
    1 1 0 0 1 1 1 1
    0 0 0 0 1 0 0 0
    1 0 0 0 0 0 0 1
    0 1 1 1 1 0 1 0
    1 0 0 0 1 1 0 0
    
    8x6
    0 0 1 0 0 1
    1 0 0 0 1 0
    0 0 0 1 1 0
    0 1 1 0 1 1
    0 1 1 0 1 1
    1 1 1 0 1 0
    0 1 0 0 1 1
    0 1 0 0 0 1
    
    6x5
    0 1 0 0 0
    1 0 1 0 0
    1 1 0 0 1
    0 0 1 0 1
    1 0 0 1 0
    1 1 1 1 0
    
    5x6
    1 1 1 1 1 1
    1 1 1 0 0 1
    0 0 0 0 0 1
    1 1 0 1 1 1
    0 0 0 1 1 1
    
    6x5
    0 0 0 1 0
    1 1 1 0 1
    1 1 1 1 1
    1 0 0 0 1
    1 0 1 0 0
    1 1 1 1 0
    Premetto che sono ancora un principiante per la programmazione
    Il mio ragionamento in questo caso è:
    1)leggo dal file di testo usando BufferedReader in modo da analizzare tutte le stringhe fino al carattere null di ognuna
    2)visto che la prima riga indica le dimensioni della matrice allora quando leggo la stringa "se" trovo il carattere "x" nella posizione "i" faccio una substring dalla posizione 0 fino alla pizione i+1 e memorizzo il risultato in una varibile righe...stessa cosa per la variabile colonne(ovviamente partendo dalla posizione i+1 fino alla fine!)
    3)creo quindi una "matrice[righe][colonne]" e gli copio tutti gli elementi del file di testo
    4)continuo a copiare fino a quando non trovo il carattere di return che mi indicherà che la matrice è finita
    5)Incremento allora una variabile contaNumeroDiMatrici di un'unità;
    6)vado all'ora per una seconda volta a capo e ricomincio a prendere le dimensioni di una seconda matrice e ricomincio dal punto 3
    7)copiata quindi la seconda matrice incremento nuovamente "contaNumeroDiMatrici" che sarà arrivato a 2. Visto quindi che ho 2matrici posso farne il prodotto
    8)finito il prodotto avrò una nuova matrice(si decrementa allora contaNumeroDiMatrici in modo da portarla a 1).Questa nuova matrice andrà a moltiplicarsi con la successiva matrice che trovo nel file di testo. Così ricomincio...ricarico ciò che leggo in una matrice di interi(o forse meglio di byte visto che si utilizzano solo "0" e "1"),incremento contaNumeroDiMatrici e faccio il prodotto
    9)continuo fino a quando non finisco il file(e quindi fino a quando non finisce il numero di matrici)

    Il mio problema sta nel fatto che non riesco a scrivere del codice per il punto 4-5-6 o meglio come faccio a dire: "Leggi fino a quando non trovi la riga vuota....e in questo caso vai un'altra volta a capo??Scusate se il post è così lungo ma ho preferito dirvi tutto nel modo + minuzioso possibile in modo che potete aiutarmi con questo esercizio.Grazie a tuti

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Prodotto tra matrici

    Originariamente inviato da soeca
    1)leggo dal file di testo usando BufferedReader in modo da analizzare tutte le stringhe fino al carattere null di ognuna
    Il readLine() di BufferedReader restituisce null per indicare "end of file".

    Originariamente inviato da soeca
    2)visto che la prima riga indica le dimensioni della matrice allora quando leggo la stringa "se" trovo il carattere "x" nella posizione "i" faccio una substring dalla posizione 0 fino alla pizione i+1 e memorizzo il risultato in una varibile righe...stessa cosa per la variabile colonne(ovviamente partendo dalla posizione i+1 fino alla fine!)
    Sì. Ma un approccio sarebbe ragionare in termini di stati. All'inizio del file (o dopo una matrice) tu "sai" che ti puoi aspettare righe vuote ma la prima con dentro qualcosa che troverai è quella della definizione. Quindi sai poi quante righe leggere per la matrice. Dopodiché ritorni nello "stato" iniziale. E vai avanti così.

    Originariamente inviato da soeca
    3)creo quindi una "matrice[righe][colonne]" e gli copio tutti gli elementi del file di testo
    4)continuo a copiare fino a quando non trovo il carattere di return che mi indicherà che la matrice è finita
    5)Incremento allora una variabile contaNumeroDiMatrici di un'unità;
    6)vado all'ora per una seconda volta a capo e ricomincio a prendere le dimensioni di una seconda matrice e ricomincio dal punto 3
    Io suggerirei questo: fare una tua classe es. LettoreMatrici che internamente ha e usa ovviamente il BufferedReader ma che offre le seguenti cose:

    - un costruttore che riceve un File (o String) per il file.
    - 2 metodi:
    public Matrice leggiMatrice() throws IOException
    public void close() throws IOException

    Insomma, il consiglio è di "incapsulare" la logica di lettura di 1 matrice in un metodo e di "modellarla" con una classe apposita es. Matrice.

    Non solo viene ben scritto, pulito e nell'ottica OOP. Ma poi usare LettoreMatrici per leggere N matrici diventa banalissimo e altrettanto "pulito".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    31
    Ciao scusa se non ho più risposto ma oggi ho avuto abbastanza problemi di linea!!Comunque grazie mille per la spiegazione....l'hai fatto sembrare un problema semplicissimo(sicuramente lo sarà ma avendo alle spalle qualche settimana di programmazione non riuscivo a trovare una soluzione!!). Ora vedo un pò di implementare il codice(ovviamente commentandolo!) e poi posterò qui i risultati o gli eventuali errori!!Grazie ancora e.......stay tuned!

    PS. Sto dando un'occhiata al tuo blog su java e credo proprio che mi sarà molto d'aiuto(per esempio in un altro esercizio mi serviva un modo per fare un arrotondamento per difetto di alcuni numeri e ora sto scoprendo dal tuo blog i metodi della java.lang.Math !!)

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.