masteryuri
29-01-2009, 18:33
Ho il seguente codice.
libreria.h
#include <stdio.h>
#include <stdlib.h>
#define MAX 30
typedef int vector [MAX];
typedef int matrix [MAX][MAX];
typedef char string [MAX];
main.c
#include "libreria.h"
int main()
{
vector v;
matrix m;
int a, b, check=0, ckquad=0;
string filename;
printf("Nome del text file: ");
scanf("%s",filename);
read (filename, m, &a, &b, &check, &ckquad);
if (check)
{
print(m,a,b);
if (ckquad)
{
printf("La matrice è quadrata\n");
printf("La sua diagonale è la seguente: ");
diagonale (m,a,v);
}
else
;
inverti(m,&a,&b);
print(m,a,b);
}
else
;
return 0;
}
funzioni.c
#include "libreria.h"
void read (string filename, matrix m, int *a, int *b, int *check, int *ckquad)
{
FILE *f;
f = fopen (filename,"r");
if (f)
{
*check = 1;
fscanf(f,"%d",a);
fscanf(f,"%d",b);
if (*a == *b) *ckquad = 1;
int i,j;
for (i=0;i<*a; ++i)
for (j=0;j<*b;++j)
fscanf(f,"%d",&m[i][j]);
fclose(f);
printf("Lettura eseguita, assegnazione ok\n");
}
else
*check = 0;
}
void print (matrix m, int a, int b)
{
printf("\n");
int i,j;
for (i=0;i<a;++i)
{
for (j=0;j<b;++j)
printf("%2d ",m[i][j]);
printf("\n");
}
printf("\n");
}
void diagonale (matrix m, int x, vector v)
{
int i,j;
for (i=0;i<x;++i)
{
v[i] = m[i][i];
printf("%2d ",v[i]);
}
printf("\n");
for (i=0;i<x;++i)
{
for (j=0;j<x;++j)
if (i == j)
printf("%2d ",m[i][j]);
else
printf(" ");
printf("\n");
}
printf("\n");
}
void inverti (matrix m, int *a, int *b)
{
int app;
app=*a;
*a=*b;
*b=app;
}
Se volessi cancellarne una riga?
Poi volevo sapere, sto sbagliando a lavorare sulla rappresentazione (data da print) della matrice, controllando a e b che ne controllano la stampa, e non direttamente sulla variabile m?
Mi chiedo ciò, perché in questo modo riesco soltanto a cancellare un'ultima riga o colonna, ma se volessi cancellare una riga o colonna centrale?
libreria.h
#include <stdio.h>
#include <stdlib.h>
#define MAX 30
typedef int vector [MAX];
typedef int matrix [MAX][MAX];
typedef char string [MAX];
main.c
#include "libreria.h"
int main()
{
vector v;
matrix m;
int a, b, check=0, ckquad=0;
string filename;
printf("Nome del text file: ");
scanf("%s",filename);
read (filename, m, &a, &b, &check, &ckquad);
if (check)
{
print(m,a,b);
if (ckquad)
{
printf("La matrice è quadrata\n");
printf("La sua diagonale è la seguente: ");
diagonale (m,a,v);
}
else
;
inverti(m,&a,&b);
print(m,a,b);
}
else
;
return 0;
}
funzioni.c
#include "libreria.h"
void read (string filename, matrix m, int *a, int *b, int *check, int *ckquad)
{
FILE *f;
f = fopen (filename,"r");
if (f)
{
*check = 1;
fscanf(f,"%d",a);
fscanf(f,"%d",b);
if (*a == *b) *ckquad = 1;
int i,j;
for (i=0;i<*a; ++i)
for (j=0;j<*b;++j)
fscanf(f,"%d",&m[i][j]);
fclose(f);
printf("Lettura eseguita, assegnazione ok\n");
}
else
*check = 0;
}
void print (matrix m, int a, int b)
{
printf("\n");
int i,j;
for (i=0;i<a;++i)
{
for (j=0;j<b;++j)
printf("%2d ",m[i][j]);
printf("\n");
}
printf("\n");
}
void diagonale (matrix m, int x, vector v)
{
int i,j;
for (i=0;i<x;++i)
{
v[i] = m[i][i];
printf("%2d ",v[i]);
}
printf("\n");
for (i=0;i<x;++i)
{
for (j=0;j<x;++j)
if (i == j)
printf("%2d ",m[i][j]);
else
printf(" ");
printf("\n");
}
printf("\n");
}
void inverti (matrix m, int *a, int *b)
{
int app;
app=*a;
*a=*b;
*b=app;
}
Se volessi cancellarne una riga?
Poi volevo sapere, sto sbagliando a lavorare sulla rappresentazione (data da print) della matrice, controllando a e b che ne controllano la stampa, e non direttamente sulla variabile m?
Mi chiedo ciò, perché in questo modo riesco soltanto a cancellare un'ultima riga o colonna, ma se volessi cancellare una riga o colonna centrale?