- 498
- 8
- CPU
- i5 2400
- Scheda Madre
- ASRock H61M-GS
- HDD
- 932 GB Seagate ST1000DM005 HD103SJ
- RAM
- 8,00 GB Canale Doppio DDR3 @ 665 MHz
- GPU
- AMD Radeon HD 7700 Series
- Audio
- Integrata
- Monitor
- Asus 21,5 pollici
- PSU
- 600w corsair cx
- OS
- W7
Ciao a tutti, devo scrivere un programma che riempa una matrice a spirale con un vettore multidimensionale, questa è la traccia:
Si scriva una funzione in linguaggio C per riempire una matrice10x10 a spirale, con valori crescenti da 0 a N^2-1 iniziando dall'angolo superiore sinistro. Si scriva inoltre il main necessario a provare la funzione. Il formato dei dati in ingresso e in uscita può essere dedotto dagli esempi seguenti.
Note:
1) si definisca una matrice di dimensione massima (10x10), e si legga da tastiera la dimensione della sottomatrice da considerare
2) il formato di stampa di ogni elemento della matrice deve essere %6d (senza spazi) e tutte le righe devono essere terminate da uno e un solo spazio
Esempi:
# ./riempi_matrice_a_spirale
dimensione della matrice (quadrata max 10x10): 1
0
# ./riempi_matrice_a_spirale
dimensione della matrice (quadrata max 10x10): 2
0 1
3 2
# ./riempi_matrice_a_spirale
dimensione della matrice (quadrata max 10x10): 3
0 1 2
7 8 3
6 5 4
# ./riempi_matrice_a_spirale
dimensione della matrice (quadrata max 10x10): 4
0 1 2 3
11 12 13 4
10 15 14 5
9 8 7 6
# ./riempi_matrice_a_spirale
dimensione della matrice (quadrata max 10x10): 5
0 1 2 3 4
15 16 17 18 5
14 23 24 19 6
13 22 21 20 7
12 11 10 9 8
Ho scritto questo codice che suddivide il lavoro in 4 fasi:
Questo è il primo dei problemi in quanto quando stampo la matrice sono diversi i dati che vengono sbagliati, non capisco cosa però perchè analizzando manualmente l'algoritmo sembra corretto.
Ringrazio in anticipo chi mi aiuterà.
P.S.: perdonate errori banali, sono alle prime armi.
Si scriva una funzione in linguaggio C per riempire una matrice10x10 a spirale, con valori crescenti da 0 a N^2-1 iniziando dall'angolo superiore sinistro. Si scriva inoltre il main necessario a provare la funzione. Il formato dei dati in ingresso e in uscita può essere dedotto dagli esempi seguenti.
Note:
1) si definisca una matrice di dimensione massima (10x10), e si legga da tastiera la dimensione della sottomatrice da considerare
2) il formato di stampa di ogni elemento della matrice deve essere %6d (senza spazi) e tutte le righe devono essere terminate da uno e un solo spazio
Esempi:
# ./riempi_matrice_a_spirale
dimensione della matrice (quadrata max 10x10): 1
0
# ./riempi_matrice_a_spirale
dimensione della matrice (quadrata max 10x10): 2
0 1
3 2
# ./riempi_matrice_a_spirale
dimensione della matrice (quadrata max 10x10): 3
0 1 2
7 8 3
6 5 4
# ./riempi_matrice_a_spirale
dimensione della matrice (quadrata max 10x10): 4
0 1 2 3
11 12 13 4
10 15 14 5
9 8 7 6
# ./riempi_matrice_a_spirale
dimensione della matrice (quadrata max 10x10): 5
0 1 2 3 4
15 16 17 18 5
14 23 24 19 6
13 22 21 20 7
12 11 10 9 8
Ho scritto questo codice che suddivide il lavoro in 4 fasi:
- lavora su riga verso destra
- lavora su colonna verso il basso
- lavora su riga verso sinistra
- lavora su colonna verso l'alto
Questo è il primo dei problemi in quanto quando stampo la matrice sono diversi i dati che vengono sbagliati, non capisco cosa però perchè analizzando manualmente l'algoritmo sembra corretto.
Ringrazio in anticipo chi mi aiuterà.
P.S.: perdonate errori banali, sono alle prime armi.
C:
#include <stdio.h>
#include <stdlib.h>
void riempi_matrice(int n, int m[n-1][n-1]);
void stampa_matrice(int dim, int m[dim][dim]);
int main()
{
int n;
int matrice[30][30];
printf("dimensione della matrice (quadrata max 10x10): ");
scanf("%d", &n);
riempi_matrice(n, matrice);
// stampa_matrice(n, matrice);
return EXIT_SUCCESS;
}
void riempi_matrice(int n, int m[n-1][n-1])
{
int i = 0, j = 0, x = 0, k = 0;
int y,z;
//fino a quando x < n
while (x < n)
{
printf("prima della riga verso destra\n");
printf("j = %d, k = %d\n", j, k);
printf("\n");
while (k < n - x)
{
printf("sono nel ciclo riga verso destra\n");
m[j][k] = i;
printf("m[%d][%d] = %d = %d\n", j, k, i, m[j][k]);
k++;
i++;
printf("incremento k, quindi k = %d\n", k);
}
printf("sono fuori dal ciclo riga verso destra\n");
printf("\n");
k--;
j++;
//test
y = 0;
z = 0;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 0;
z = 1;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 0;
z = 2;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
printf("\n");
printf("prima della colonna verso il basso\n");
printf("j = %d, k = %d\n", j, k);
printf("\n");
while (j < n - x)
{
printf("sono nel ciclo colonna verso il basso\n");
m[j][k] = i;
printf("m[%d][%d] = %d = %d\n", j, k, i, m[j][k]);
j++;
i++;
printf("incremento j, quindi j = %d\n", j);
}
printf("sono fuori dal ciclo colonna verso il basso\n");
printf("\n");
j--;
k--;
//test
y = 0;
z = 0;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 0;
z = 1;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 0;
z = 2;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 1;
z = 2;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 2;
z = 2;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
printf("\n");
printf("prima della riga verso sinistra\n");
printf("j = %d, k = %d\n", j, k);
printf("\n");
while(k >= x)
{
printf("sono nel ciclo riga verso sinistra\n");
m[j][k] = i;
printf("m[%d][%d] = %d = %d\n", j, k, i, m[j][k]);
k--;
i++;
printf("decremento k, quindi k = %d\n", k);
}
printf("sono fuori dal ciclo riga verso sinistra\n");
printf("\n");
k++;
j--;
//test
y = 0;
z = 0;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 0;
z = 1;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 0;
z = 2;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 1;
z = 2;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 2;
z = 2;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 2;
z = 1;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
y = 2;
z = 0;
printf("m[%d][%d] = %d\n", y, z, m[y][z]);
printf("\n");
printf("prima della colonna verso l'alto\n");
printf("j = %d, k = %d\n", j, k);
printf("\n");
while (j > x)
{
printf("sono nel ciclo colonna verso l'alto\n");
m[j][k] = i;
printf("m[%d][%d] = %d = %d\n", j, k, i, m[j][k]);
j--;
i++;
printf("decremento j, quindi j = %d\n", j);
}
printf("sono fuori dal ciclo colonna verso l'alto\n");
printf("\n");
x++;
j = x;
k = x;
}
return;
}
void stampa_matrice(int dim, int m[dim][dim])
{
int i, j;
for (i = 0; i < dim; i++)
{
for(j = 0; j < dim; j++)
{
printf("%6d", m[i][j]);
}
printf("\n");
}
return;
}
Ultima modifica: