Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 20-03-2016, 18.20.57   #1
Hollala
Newbie
 
Registrato: 20-03-2016
Messaggi: 4
Hollala promette bene
[C] Matrici e percorsi

Buongiorno a tutti!
Invoco il vostro aiuto perché non riesco proprio a cavare un ragno dal buco nella realizzazione di un programma in C.
Mi si richiede di stampare passo passo il moto casuale di una particella che parte dal centro di una tabella NxN (e ci rimane per tutti i suoi spostamenti).
In pratica devo stampare tante tabelle quanti sono gli spostamenti denotando la posizione della particella con * e tutte le posizioni precedenti con +.

Non dovrei avere problemi con la generazione di valori casuali, uso le funzioni srand(time(NULL)) e rand()%4, che associo alle 4 possibilità di uno switch di modificare il valore delle posizioni di una matrice matrix[N][N].
Le mie difficoltà consistono sostanzialmente nel capire come assegnare caratteri char alla matrice nelle varie posizioni (spazi della tabella compresi), come far "memorizzare" le posizioni precedenti al programma, in modo che stampi i + al loro posto e come stampare la tabella ottenuta.
La grafica dovrebbe risultare all'incirca così (primo passo, con gli spazi al posto dei puntini):
========
|...............|
|...............|
|......*.......|
|...............|
|...............|
========

Ringrazio chiunque mi dia qualche idea e qualche dritta a livello della sintassi, questo è quello che ho tentato di scrivere fin'ora:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define N 9
#define K 3

int main(void){
char a[N][N];
int i, j, RIG=N, COL=N, nord=0, est=0, sud=0, ovest=0, numero, g, d, *p;
srand(time(NULL));

while (g<K){
numero=(rand()%4);
switch (numero) {
case 0: nord++; break;
case 1: est++; break;
case 2: sud++; break;
case 3: ovest++; break;}

for(i = 0; i < RIG; i++)
for(j = 0; j < COL; j++)
{a[i][j]=' ';
a[i][0]='|';
a[i][N-2]='|';
a[i][N-1]='\n';
a[N/2][N/2]='*';}


for(d=1; d<N; d++) printf("=");
printf("\n");
for(i = 0; i < RIG; i++){
for(j = 0; j < COL; j++)
printf("%c", a[i][j]);}
for(d=1; d<N; d++) printf("=");
printf("\n");
g++;}
return 0;}
Hollala non è collegato   Rispondi citando
Vecchio 21-03-2016, 11.11.43   #2
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Rif: [C] Matrici e percorsi

Qui
Codice:
a[N/2][N/2]='*'
hai impostato che a[4][4] sia uguale a '*', quindi che problema hai ad impostare '+' dove riga e colonna possono essere casuali in un range da 0 a 9 per riga ed identico per colonna ?
Quante iterazioni si devono compiere per riempre la matrice con tutti '+' ?
E poi cosa deve succedere se ad esempio a riga 3 e colonna 3 c'è già '+' ?
___________________________________

Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice
LoryOne non è collegato   Rispondi citando
Vecchio 21-03-2016, 13.32.29   #3
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Rif: [C] Matrici e percorsi

...a mio avviso puoi fare tutto con soli 2 cicli for (uno per riga ed uno per colonna) nel momento stesso in cui stampi a video.
___________________________________

Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice
LoryOne non è collegato   Rispondi citando
Vecchio 22-03-2016, 22.09.38   #4
Hollala
Newbie
 
Registrato: 20-03-2016
Messaggi: 4
Hollala promette bene
Rif: [C] Matrici e percorsi

Ti ringrazio per la risposta, Lory! Però il mio problema sta nel riempire con i + solo le posizioni occupate precedentemente dall'asterisco, non tutte :/

Ho provato nuovamente, e ora ho K tabelle NxN e l'asterisco che pare muoversi in maniera corretta:

include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define N 8
#define K 5

int main(void){
char a[N][N];
int i, j, numero, g, d,
posx=(N-1)/2,
posy=(N-1)/2;

srand(time(NULL));

while (g<K){


for(i = 0; i < N; i++)
for(j = 0; j < N; j++)
{a[i][j]=' ';
a[i][0]='|';
a[i][N-2]='|';
a[i][N-1]='\n';
a[posx][posy]='*';}

for(d=1; d<N; d++) printf("=");
printf("\n");
for(i = 0; i < N; i++){
for(j = 0; j < N; j++)
printf("%c", a[i][j]);}
for(d=1; d<N; d++) printf("=");
printf("\n");

numero=(rand()%4);
switch (numero) {
case 0: posx++; break;
case 1: posx--; break;
case 2: posy++; break;
case 3: posy--; break;}

if(posx<=0) posx++;
if(posx>=(N-1)) posx--;
if (posy<=0) posy++;
if (posy>=(N-2)) posy--;

g++;}
return 0;}

Ma non capisco come far memorizzare le posizioni precedenti.
Ho tentato scrivendo
if (g>0) a[posx][posy]='+';
b[i][j]+=a[i][j];
e stampando b, ma deve aver sommato i caratteri char, stampando cose improbabili...
Hollala non è collegato   Rispondi citando
Vecchio 23-03-2016, 11.21.50   #5
Hollala
Newbie
 
Registrato: 20-03-2016
Messaggi: 4
Hollala promette bene
Rif: [C] Matrici e percorsi

Ah, dimenticavo! L'asterisco può ripassare in una posizione precedentemente occupata dal +.
Hollala non è collegato   Rispondi citando
Vecchio 23-03-2016, 12.09.49   #6
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Rif: [C] Matrici e percorsi

Sai cosa mi sembra ?
Una versione molto semplificata di Snake.
___________________________________

Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice
LoryOne non è collegato   Rispondi citando
Vecchio 23-03-2016, 16.56.41   #7
Hollala
Newbie
 
Registrato: 20-03-2016
Messaggi: 4
Hollala promette bene
Rif: [C] Matrici e percorsi

Dici? Cavolo, ora che ho risolto (ho implementato, ora fa tutto quello che deve fare) mi hai dato un'idea per trasformarlo e renderlo più divertente! :P
Hollala non è collegato   Rispondi citando
Vecchio 05-04-2016, 17.50.04   #8
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Rif: [C] Matrici e percorsi

Cosa c'era di sbagliato ?
Prima cosa presentiamo lo script in modo ordinato, indentando il codice in modo che i blocchi siano ben visibili.

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 8
#define K 5

int main(void){
    char a[N][N];
    int i, j, numero, g=0, d=0,
    posx=(N-1)/2,
    posy=(N-1)/2;
    
    srand(time(NULL));

    while (g<K){
            for(i = 0; i < N; i++)
                  for(j = 0; j < N; j++){
                        if(d==0) a[i][j]=' ';
                        a[i][0]='|';
                        a[i][N-2]='|';
                        a[i][N-1]='\n';
                        a[posx][posy]='*';
                  }

            for(d=1; d<N; d++) printf("=");
            printf("\n");
            for(i = 0; i < N; i++){
                  for(j = 0; j < N; j++)
                  printf("%c", a[i][j]);
            }
            for(d=1; d<N; d++) printf("=");
            printf("\n");

            numero=(rand()%4);
            switch (numero) {
            case 0: posx++; break;
            case 1: posx--; break;
            case 2: posy++; break;
            case 3: posy--; break;}
            
            if(posx<=0) posx++;
            if(posx>=(N-1)) posx--;
            if (posy<=0) posy++;
            if (posy>=(N-2)) posy--;

            g++;
   }
   return 0;
}
In secondo luogo, ricordiamoci SEMPRE che le variabili vanno inzializzate, una volta dichiarate.
Guardate il primo while: g potrebbe avere qualunque valore e la condizione specificata potrebbe essere verificata come no.
Passimo poi alla porzione di codice aggiunta: if(d==0) a[i][j]=' ';
Solo la prima volta l'elemento a[i][j] deve contenere quel valore ' ', altrimenti le posizioni successive identificate da posx e posy non saranno riempite da '*'
___________________________________

Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice
LoryOne non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Visualizzare files in percorsi diversi nella stessa finestra gutguy Windows 7/Vista/XP/ 2003 7 15-09-2008 19.30.06
Moltiplicazione di matrici aduri Programmazione 2 13-10-2006 13.56.41
siti dove vedere percorsi stradali afterhours Segnalazioni Web 9 26-08-2004 16.20.50
[VB.Net] Matrici di matrici wicasa Programmazione 0 25-08-2004 21.24.13
Calcolo tra matrici GiulioCesare Programmazione 1 02-10-2003 00.47.04

Orario GMT +2. Ora sono le: 22.57.53.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.