Salve a tutti,
Mi sono imbattuto in questo esercizio:
"Sia letta da file una matrice di interi positivi con elemento tappo (ma ho deciso di fare una lettura normale, leggendo da file anche le righe e le colonne perchè per farlo con il tappo servono nozioni di sstream che ancora non ho), la si stampi a video e si controlli che non ci siano righe nulla (tutti gli elementi della riga uguali a 0 ), nel caso ci siano si procedi ad eliminare tali matrici e si ristampi la nuova matrice."
Esempio:
File di tipo txt:
3 4
1 2 3 4
0 0 0 0
5 6 7 8
Alla fine delle varie operazioni dovrà essere stampato a video:
1 2 3 4
5 6 7 8
Per il momento il mio codice è:
MAIN
#include "esame.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
int r;
int c;
matrice m;
ifstream myfile;
stringa nomefile;
cout<<"Inserisci il nome del file da aprire: "<<endl;
cin.getline(nomefile,MAX);
myfile.open(nomefile,ios::in);
if(!myfile){
cout<<"Errore!";
exit(1);
}
cout<<"Procedo all'apertura del file..."<<endl;
// leggimatrice(m,r,c);
leggimatrice(myfile,m,r,c);
myfile.close();
stampamatrice(m,r,c);
eliminarighe(m,r,c);
cout<<"Matrice modificata:"<<endl;
stampamatrice(m,r,c);
return 0;
}
PUNO.H
#include <iostream>
#include <cstring>
#include <fstream>
#define MAX 50
using namespace std;
typedef char stringa[MAX];
typedef int matrice [MAX][MAX];
void leggimatrice(istream &, matrice , int &, int &);
void stampamatrice(const matrice , int , int );
void eliminarighe(matrice , int &, int );
Sottoprogrammi:
#include "esame.h"
void leggimatrice(istream &in, matrice m, int &r, int &c){
in>>r;
in>>c;
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
in>>m[i][j];
}
}
}
void stampamatrice(const matrice m, int r, int c){
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
cout<<m[i][j]<<" ";
}
cout<<endl;
}
}
void eliminarighe(matrice m, int &r, int c){
int pos;
cout<<"Riga da eliminare: ";
cin>>pos;
for(int j=0; j<c; j++){
for(int i=pos; i<r; i++){ //Non funziona, mi elimina tutte le righe >= della posizione scelta
m[i][j]=m[i+1][j];
r--;
}
}
}
Ho provato a creare un algoritmo che mi elimini una riga in posizione scelta ma non funziona come dovrebbe, adesso dovrei creare una funzione del tipo bool (credo) che mi restituisca il valore della 'i' delle righe nulle, ma non ho idea di come farlo, soprattutto se ci sono più di una riga nulla.
Poi dovrei scrivere una funzione che mi elimini le righe che ho trovato essere nulle, ma non so proprio come fare.
Qualcuno potrebbe darmi dei consigli?