PDA

Visualizza la versione completa : [C]Ordinamento di una Matrice


BiScA09
25-01-2010, 11:48
Salve a tutti,
A distanza di pochi minuti propongo un altro dilemma che mi impedisce di capire a fondo le matrici...

di seguito vi riporto il codice che ho utilizzato che prima funzionava e poi non funziona piu...
Il file a progetto...



//main
#include "header.h"


int main (){

matrice mat;
int select=0;
int rig=0;
int col=0;

printf("=== Benvenuti nel programma di gestione ==\n");
printf("=== delle matrici==\n");
do{
printf("Premere:\n");
printf("1 Per inserire la matrice da tastiera\n");
printf("2 Per salvare la matrice su file da file\n");
printf("3 Per ordinare la matrice\n");
printf("4 Per caricare la matrice da file\n");
printf("5 per stampare la matrice\n");
printf("\nInserire la scelta: ");
scanf("%d",&select);




if(select==1){
do{
printf("\nInserire il numero delle colonne desiderato (Max%d): ",DIM);
scanf("%d",&col);
printf("\nInserire il numero delle colonne desiderato (Max%d): ",DIM);
scanf("%d",&rig);
}while(col<=0 || col>DIM && rig<=0 || rig>DIM);
}




switch (select){
case(1):
leggi_tastiera(mat,rig,col);
break;
case(2):
salva_matrice(mat,rig,col);
break;
case(3):
ordina_matrice(mat,rig,col);
stampa_matrice(mat,rig,col);
break;
case(4):
rig=carica_matrice(mat);
col=rig;
break;
case(5):
stampa_matrice(mat,rig,col);
break;
case(6):
inserisci_valore(mat,&rig,&col);
break;




}


printf("\n\nPer continuare premere 1 altrimenti 0: ");
scanf("%d",&select);


}while(select==1);

system("PAUSE");
return 0;
}

//Le funzioni

#include "header.h"



void leggi_tastiera(matrice mat,int col,int rig){
register int i,j;

for(i=0;i<rig;i++){
for(j=0;j<col;j++){
printf("\nInserire la stringa nella posizione %d-%d: ",i,j);
scanf("%s",&mat[i][j]);
}
}


}

void salva_matrice(matrice mat,int col,int rig){
FILE*f1;
register int i,j;

f1 = fopen("matrice.txt","w");

if(!f1){
printf("Errore apertura file");
}

for(i=0;i<rig;i++){
for(j=0;j<col;j++){
fprintf(f1,"%s\n",mat[i][j]);
}
}

fclose(f1);

if(fclose(f1)){
printf("File salvato con successo");
}else{
printf("Errore nel salvataggio del file");
}
}

//risolvere funzionamento!!!!!
void ordina_matrice(matrice mat,int col,int rig){
register int i,j,z;

stringa temp;

for(z=0;z<col;z++){
for(i=0;i<rig;i++){

for(j=0;j<col;j++){
if(strlen(mat[i][j-1])>strlen(mat[i][j])){
strcpy(temp,mat[i][j-1]);
strcpy(mat[i][j-1],mat[i][j]);
strcpy(mat[i][j],temp);
}
}
}
}



}

int carica_matrice(matrice mat){
printf("\nCarico una matrice 4X4\n");
register int i,j;
FILE* f1;

f1 = fopen("matrice.txt","r");

for(i=0;i<4;i++){
for(j=0;j<4;j++){
fscanf(f1,"%s",&mat[i][j]);
}
}
if(feof(f1)){
printf("\nIl file e' stato caricato con successo\n");
}else{
printf("\nErrore caricamento file\n");
}
fclose(f1);

return 4;
}

void stampa_matrice(matrice mat,int rig,int col){
printf("\nLa matrice attuale e':\n\n");
register int i,j;
for(i=0;i<rig;i++){
printf("\n");
for(j=0;j<col;j++){
printf("%s ",mat[i][j]);
}
}



}


// l'header
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DIM 10
#define DIM1 10
#define MAX 100


typedef char stringa[MAX];
typedef stringa matrice[DIM][DIM1];

//int leggi_file(matrice mat,int *col,int *rig);

void leggi_tastiera(matrice mat,int col,int rig);
void salva_matrice(matrice mat,int col,int rig);
void ordina_matrice(matrice mat,int col,int rig);
int carica_matrice(matrice mat);
void stampa_matrice(matrice mat,int rig,int col);
int inserisci_valore(matrice mat,int *rig,int *col);




Mi scuso per aver postato tutto questo codice ma penso che per dare un quadro completo bisogna passare tutto

oregon
25-01-2010, 11:50
Se non racchiudi il codice tra tag CODE (pulsante # del forum), non si capisce nulla ...

BiScA09
25-01-2010, 12:02
Originariamente inviato da oregon
Se non racchiudi il codice tra tag CODE (pulsante # del forum), non si capisce nulla ...


Scusami oggi tra studio e stanchezza sono un po distratto... :dh:

BiScA09
25-01-2010, 13:22
Vorrei aggiungere delle mie supposizioni che ho fatto:
1.L'errore sta effettivamente nella funzione ordina_matrice e non me ne accorgo...
2.Puo essere che il problema sia scaturito dal while che al termine di un ciclo mi stravolge la matrice(Anche se ho provato ad avviare le funzioni una dopo l'altra ma nulla da fare)
3.Nel verificare qualche errore ho provato anche ad immettere la matrice da tastiera e non caricarla da file
4.La cosa che mi da i nervi che l'altro ieri avevo fatto un programmino di prova con questo algoritmo e funzionava....perch adesso no?ho provato anche a copiare ed incollare il codice ma nulla.... :dh:

BiScA09
25-01-2010, 17:46
up

Loading