|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Caserta
Messaggi: 1056
|
[C] Cancellare una riga da una matrice
Ho il seguente codice.
libreria.h Codice:
#include <stdio.h> #include <stdlib.h> #define MAX 30 typedef int vector [MAX]; typedef int matrix [MAX][MAX]; typedef char string [MAX]; Codice:
#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;
}
Codice:
#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? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Caserta
Messaggi: 1056
|
per i posteri...
dopo un po di ragionamento ho ottenuto queste due funzioni, tutto ok. Codice:
void delete_r (matrix m, int x, int *a, int b)
{
int j;
int val = (*a)-1;
for (;x<val;++x)
for (j=0;j<b;++j)
m[x][j] = m[x+1][j];
--*a;
}
void delete_c (matrix m, int x, int a, int *b)
{
int i;
int val = (*b)-1;
for (;x<val;++x)
for (i=0;i<a;++i)
m[i][x] = m[i][x+1];
--*b;
}
Ultima modifica di masteryuri : 30-01-2009 alle 06:02. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:13.



















