Matrice quadrata e matrice rettangolare presa da file

di il
1 risposte

Matrice quadrata e matrice rettangolare presa da file

Salve questo programma legge una matrice quadrata da file , io vorrei mantenere il programma intatto tranne che per il fatto che la matrice non deve essere quadrata ma è specificato nel file il numero di righe e colonne.
Aiuti
     MAIN.CPP:
#include<string>
#include<iostream>
#include"header.h"

using namespace std;

int main(){
 string percorso;
 int size;
 int **mat;
 bool errore;

 cout << "Inserire percorso file: ";
 cin >> percorso;

 do{
  //size = determina_size(percorso);
  errore = carica_file(percorso, mat, size);
  if (errore){
   cout << "Inserire nuovo percorso: ";
   cin >> percorso;
  }
 } while (errore);
 
 /*mat = new int*[size];
 for (int i = 0; i < size; i++)
  mat[i] = new int[size];

 carica_file(percorso, mat, size);*/

 ordina_matrice(mat, size);

 stampa_matrice(mat, size);

 system("PAUSE");

 return 0;
}
*********************************************************************************
HEADER.CPP:
#include"header.h"

using namespace std;

int determina_size(string percorso){
 int temp;
 ifstream mioFile;
 int size = 0;

 mioFile.open(percorso, ios::in);
 if (!mioFile){
  cout << "Errore nell'apertura del file!\n";
  return -1;
 }
 while (!mioFile.eof()){
  mioFile >> temp;
  size++;
 }
 mioFile.close();

 size = sqrt(size);

 return size;
}

bool carica_file(string percorso, int **&mat, int &size){
 ifstream mioFile;
 int temp;

 mioFile.open(percorso, ios::in);

 if (!mioFile){
  cout << "Errore nell'apertura file!\n";
  return true;
 }
 size = 0;
 while (!mioFile.eof()){
  mioFile >> temp;
  size++;
 }

 size = sqrt(size);
 
 mat = new int*[size];
 for (int i = 0; i < size; i++)
  mat[i] = new int[size];

 mioFile.clear();
 mioFile.seekg(0, ios_base::beg);

 for (int i = 0; i < size; i++){
  for (int j = 0; j < size; j++){
   mioFile >> mat[i][j];
  }
 }
 mioFile.close();
 return false;
}

int calcola_somma(int vet[], int size){
 int somma = 0;
 for (int i = 0; i < size; i++)
  somma += vet[i];
 return somma;
}

void scambia_righe(int **mat, int i, int size){
 int *temp;
 temp = new int[size];

 for (int j = 0; j < size; j++){
  temp[j] = mat[i][j];
 }

 for (int j = 0; j < size; j++){
  mat[i][j] = mat[i+1][j];
 }

 for (int j = 0; j < size; j++){
  mat[i+1][j] = temp[j];
 }
}

void ordina_matrice(int **mat, int size){
 int *temp;
 int somma = 0;
 int scambi;
 temp = new int[size];

 do{
  scambi = 0;
  for (int i = 0; i < size - 1; i++){
   if (calcola_somma(mat[i], size)>calcola_somma(mat[i + 1], size)){
    scambia_righe(mat, i, size);
    scambi++;
   }
  }
 } while (scambi > 0);
}

void stampa_matrice(int **mat, int size){
 for (int i = 0; i < size; i++){
  for (int j = 0; j < size; j++){
   cout << mat[i][j] << " ";
  }
  cout << endl;
 }
}
*********************************************************************************
HEADER.H:
#include<iostream>
#include<fstream>
#include<string>
#include<math.h>
#include<string>

using namespace std;

int determina_size(string percorso);

bool carica_file(string percorso, int **&mat, int &size);

void ordina_matrice(int **mat, int size);

void stampa_matrice(int **mat, int size);

int calcola_somma(int vet[], int size);

void scambia_righe(int **mat, int i, int size);
     
     

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte