PDA

Visualizza la versione completa : programma con matrice in C


mari87
02-03-2010, 13:16
Un esercizio mi chiede di immaginare di avere una tartaruga che si muove in una matrice inizializzata a zero, questa tartaruga ha una penna, posso abbassare la penna e segnare il percorso della tartaruga con degli 1, o alzare la penna e non segnarlo, devo creare un vettore che contenta 8 comandi per muovere la tartaruga a destra o a sinistra, o farla avanzare di un tot di posti, o uscire dal programma. Il mio codice Ŕ pi¨ o meno questo:


#include<stdio.h>
#include<stdlib.h>
#define SIZE 10

int x = 0, y = 0, penna = 0;

void VisComandi(void);
void VisMatrix(int matrice[][SIZE], int size);

//uso x per muovermi nelle righe e y per muovermi nelle colonne

int main()
{
//int vComandi[9]={0,1,2,3,4,5,6,9,10};
int floor[SIZE][SIZE]={{0},{0}};
int valore, spazi, i;

printf("-LINEA DI COMANDI-\n");
printf("Premere 0 per visualizzare i comandi.\n");
printf("Premere 1 per alzare la penna.\n");
printf("Premere 2 per abbassare la penna.\n");
printf("Premere 3 per girare a destra.\n");
printf("Premere 4 per girare a sinistra.\n");
printf("Premere 5 per andare avanti di un certo n. di spazi.\n");
printf("Premere 6 per visualizzare la matrice.\n");
printf("Premere 9 per terminare.\n");
printf("Premere 10 per andare avanti di 10 spazi.\n\n");

printf("La tartaruga parte dalla posizione iniziale (0,0).\n");

printf("Inserire un valore: ");
scanf("%d", &valore);

while(valore!=9){
switch (valore){
case 0:
VisComandi();
break;
case 1:
penna = 0;
floor[x][y] = 0;
printf("\nFloor[%d][%d] = %d\n", x,y, floor[x][y]);
break;
case 2:
penna = 1;
floor[x][y] = 1;
printf("\nFloor[%d][%d] = %d\n", x,y, floor[x][y]);
break;
case 3:
x+=1;
if(penna == 1) floor[x][y] = 1;
printf("\nFloor[%d][%d] = %d\n", x,y, floor[x][y]);
break;
case 4:
y-=1;
if(penna == 1) floor[x][y] = 1;
printf("\nFloor[%d][%d] = %d\n", x,y, floor[x][y]);
break;
case 5:
printf("Inserire il n. di spazi per avanzare: ");
scanf("%d", &spazi);
x+=spazi;
if(penna == 1) {
for(i=0;i<x;i++){
floor[i][y]=1;
}
}
printf("Consiglio di visualizzare la matrice.\n");

break;
case 6:
VisMatrix(floor,SIZE);
break;
case 10:
y+=10;
printf("\n\nValore penna: %d\n\n", penna);
if(penna == 1) {
for(i=0;i<x;i++){
floor[i][y]=1;
}
}
printf("Consiglio di visualizzare la matrice.\n");
break;
default:
printf("Tasto non valido.\n");
break;
}
printf("Inserire un valore: ");
scanf("%d", &valore);
}



system("pause");
}

//Visualizza i comandi
void VisComandi(void)
{
printf("-LINEA DI COMANDI-\n");
printf("Premere 0 per visualizzare i comandi.\n");
printf("Premere 1 per alzare la penna.\n");
printf("Premere 2 per abbassare la penna.\n");
printf("Premere 3 per girare a destra.\n");
printf("Premere 4 per girare a sinistra.\n");
printf("Premere 5 per andare avanti di un certo n. di spazi.\n");
printf("Premere 6 per visualizzare la matrice.\n");
printf("Premere 9 per terminare.\n");
printf("Premere 10 per andare avanti di 10 spazi.\n\n");
}

//Visualizza la matrice
void VisMatrix(int matrice[][SIZE], int size)
{
int i, j;

for(i=0;i<size;i++){
for(j=0;j<size;j++)
printf("%d",matrice[i][j]);
printf("\n");
}
}

fine del programma. I problemi sono: non so come usare il vettore per selezionare i comandi, quindi ho usato la switch, poi quando voglio che avanzi di 10 posta, lei scende. Inoltre non gira a sinistra. Potete aiutarmi partendo dal mio codice, senza scrivere un codice compl diverso?
L'esercizio prevedeva inoltre che la matrice sia 50X50, io l'ho fatta 10X10 per semplicitÓ

Loading