spaistik
24-05-2010, 12:48
raga ho dei problemi ad ordinare questa matrice di struct, se fosse un'array magari ci riuscirei ma con una matrice non ci riesco, cosa cambia? :help:
vi posto il codice:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
struct Casa{
char nome[15];
char cognome[15];
int num_civ;
int posta;
int num_str;};
typedef struct Casa casa;
casa pop(casa ab[][10],int,int,int[]);
void ord_sel_max(casa ab[][10],int,int);
void max_val_ind (casa[][10], int n, int m,int *, int *);
void scambiare_c(casa *,casa *);
int main()
{int i,j,n,m,cnt[10];
casa ab[10][10];
srand(time(NULL));
printf("inserisci il numero di strade: ");
scanf("\n%d",&n);
printf("inserisci il numero di case per strada: ");
scanf("\n%d",&m);
ab[n][m];
pop(ab,n,m,cnt);
ord_sel_max(ab,n,m);
}
casa pop(casa ab[][10],int n,int m,int cnt[10])
{int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("Inserisci il Cognome del proprietario della %d^ abitazione %d strada: ",j+1,i+1);
scanf("\n%s",ab[i][j].cognome);
printf("Inserisci il Nome del proprietario della %d^ abitazione %d strada: ",j+1,i+1);
scanf("\n%s",ab[i][j].nome);
ab[i][j].num_civ=j+1;
ab[i][j].num_str=i+1;}}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
ab[i][j].posta=rand()%11;}}
}
void ord_sel_max (casa ab[][10],int n,int m)
{
int i,j, indiceN_max,indiceM_max;
int max_ab;
for(i=0;i<n-1;i++)
for(j=0;j<m-1;j++)
{
max_val_ind(ab,n-i, m-j,&max_ab, &indiceN_max);
scambiare_c(&ab[i][j], &ab[indiceN_max+i][indiceM_max+j]);
}
}
void max_val_ind (casa ab[][10], int n, int m,int *max_array, int *i_max)
{
int i,j;
*max_array = ab[0][0].posta;
*i_max = 0;
for(i=1;i<n;i++)
for(j=1;j<m;j++)
if( *max_array < ab[i][j].posta)
{
*max_array = ab[i][j].posta;
*i_max =i;
}
}
void scambiare_c(casa *c1,casa *c2)
{
char temp_nome[15];
char temp_cognome[15];
int temp_num_civ;
int temp_posta;
int temp_num_str;
temp_nome= c1->nome;
temp_cognome=c1->cognome;
temp_num_civ= c1->num_civ;
temp_posta=c1->posta;
temp_num_str=c1->num_str;
c1->nome = c2->nome;
c1->cognome = c2->cognome;
c1->num_civ = c2->num_civ;
c1->posta = c2->posta;
c1->num_str = c2->num_str;
c2->nome = temp_nome;
c2->cognome = temp_cognome;
c2->num_civ = temp_num_civ;
c2->posta = temp_posta;
c2->num_str = temp_num_str;
}
vi posto il codice:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
struct Casa{
char nome[15];
char cognome[15];
int num_civ;
int posta;
int num_str;};
typedef struct Casa casa;
casa pop(casa ab[][10],int,int,int[]);
void ord_sel_max(casa ab[][10],int,int);
void max_val_ind (casa[][10], int n, int m,int *, int *);
void scambiare_c(casa *,casa *);
int main()
{int i,j,n,m,cnt[10];
casa ab[10][10];
srand(time(NULL));
printf("inserisci il numero di strade: ");
scanf("\n%d",&n);
printf("inserisci il numero di case per strada: ");
scanf("\n%d",&m);
ab[n][m];
pop(ab,n,m,cnt);
ord_sel_max(ab,n,m);
}
casa pop(casa ab[][10],int n,int m,int cnt[10])
{int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("Inserisci il Cognome del proprietario della %d^ abitazione %d strada: ",j+1,i+1);
scanf("\n%s",ab[i][j].cognome);
printf("Inserisci il Nome del proprietario della %d^ abitazione %d strada: ",j+1,i+1);
scanf("\n%s",ab[i][j].nome);
ab[i][j].num_civ=j+1;
ab[i][j].num_str=i+1;}}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
ab[i][j].posta=rand()%11;}}
}
void ord_sel_max (casa ab[][10],int n,int m)
{
int i,j, indiceN_max,indiceM_max;
int max_ab;
for(i=0;i<n-1;i++)
for(j=0;j<m-1;j++)
{
max_val_ind(ab,n-i, m-j,&max_ab, &indiceN_max);
scambiare_c(&ab[i][j], &ab[indiceN_max+i][indiceM_max+j]);
}
}
void max_val_ind (casa ab[][10], int n, int m,int *max_array, int *i_max)
{
int i,j;
*max_array = ab[0][0].posta;
*i_max = 0;
for(i=1;i<n;i++)
for(j=1;j<m;j++)
if( *max_array < ab[i][j].posta)
{
*max_array = ab[i][j].posta;
*i_max =i;
}
}
void scambiare_c(casa *c1,casa *c2)
{
char temp_nome[15];
char temp_cognome[15];
int temp_num_civ;
int temp_posta;
int temp_num_str;
temp_nome= c1->nome;
temp_cognome=c1->cognome;
temp_num_civ= c1->num_civ;
temp_posta=c1->posta;
temp_num_str=c1->num_str;
c1->nome = c2->nome;
c1->cognome = c2->cognome;
c1->num_civ = c2->num_civ;
c1->posta = c2->posta;
c1->num_str = c2->num_str;
c2->nome = temp_nome;
c2->cognome = temp_cognome;
c2->num_civ = temp_num_civ;
c2->posta = temp_posta;
c2->num_str = temp_num_str;
}