Salve a tutti , oggi ho provato a fare un esercizio che dice :
"Letta da file una matrice di interi in cui sono specificati numero di riga come primo valore e numero di colonna come secondo valore, cancellare da questa matrice tutte e sole le colone crescenti"
Ho provato così:
MAIN:
codice:
#include <iostream>
#include "CancRigCresc.h"
using namespace std;
int main(int argc, char** argv) {
matrice m;
int r,c;
LeggiMatriceFile("Matrice.txt",m,r,c);
StampaMatrice(m,r,c);
cout<<"La matrice senza le righe crescenti e':\n";
EliminaRigCresc(m,r,c);
StampaMatrice(m,r,c);
return 0;
}
HEADER:
codice:
#include <fstream>
#define N 100
typedef int vettore[N];
typedef int matrice[N][N];
typedef char VettoreCaratteri[N];
void LeggiMatriceFile(VettoreCaratteri,matrice,int&,int&);
void StampaMatrice(matrice,int,int);
void EliminaRiga(matrice,int&,int,int);
bool RigaCrescente(matrice,int,int);
void EliminaRigCresc(matrice,int&,int);
BODY:
codice:
#include <iostream>
#include "CancRigCresc.h"
using namespace std;
void LeggiMatriceFile(VettoreCaratteri nomefile,matrice m,int& r,int& c){
fstream f;
r=0,c=0;
f.open(nomefile,ios::in);
if(!f)
cout<<"Access Denied Or Can't found file\n";
else{
while(!f.eof()){
f>>r;
f>>c;
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
f>>m[i][j];
}
}
}
void StampaMatrice(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 EliminaRiga(matrice m,int& r,int c,int rigacan){
for(int j=0;j<c;j++)
for(int i=rigacan;i<r;i++)
m[i][j]=m[i+1][j];
r--;
}
bool RigaCrescente(matrice m,int rigafissata ,int c){
for(int j=0;j<c-1;j++){
if(m[rigafissata][j]<m[rigafissata][j+1])
return true;
}
return false;
}
void EliminaRigCresc(matrice m,int& r,int c){
int k=0;
for(int i=0;i<r;i++){
if(RigaCrescente(m,i,c)){
EliminaRiga(m,r,c,i);
r++;
k++;
}
}
r=r-k;
}
Mi Funziona SOLO se le righe crescenti sono 1 oppure 2 , altrimenti non va... e non capisco il motivo!
ESEMPI:
1) 1 solo Riga Crescente:
provola 1.jpg
2)2 Righe Crescenti
provola 2.jpg
3) 3 Righe Crescenti
provola 3.jpg
4) 4 Righe Crescenti
http://i65.tinypic.com/sl2wit.png
Come vedete negli esempi 3) e 4) non funziona mentre in 1) e 2) si... Non riesco a capire il motivo
Grazie mille a chiunque mi aiuta