Problema con funzioni e vettori

di il
10 risposte

Problema con funzioni e vettori

Buongiorno, sto cercando di realizzare il gioco del tris con le funzioni, avevo già precedentemente scritto il codice per esso senza le funzioni ed era funzionante, ma ora ho un problema. Una funzione chiamata "vettore" contiene i numeri da 1 a 9, la quale viene richiamata in un'altra funzione che stampa la griglia di gioco, qui a una matrice viene assegnato il rispettivo numero del vettore. Il problema sorge dopo aver chiesto al giocatore la casella in cui dev'essere inserita la 'x'. Come posso modificare una specifica posizione di un vettore nel main, per fare in modo che possa essere assegnata nella matrice di stampa? Posto il codice scritto fino ad ora, compresa la richiesta del numero all'utente (so che le righe di codice successive sono sbagliate, chiedo per questo motivo). Ho cominciato da poco l'argomento funzioni e non ho trovato una soluzione a riguardo. Grazie mille in anticipo.
#include <stdio.h>
#define R 3
#define C 3
#define DIM 9

char vettore(char vett[DIM]) {
	int i;
	for (i=0;i<DIM;i++) {
		vett[i]=i+49;
		//printf("%c|",vett[i]);
	}
	//printf("\n");
}
void tris () {
	char Vett[DIM],mat[R][C];
	int i,j,k=0;
	vettore(&Vett[0]);
	for (i=0;i<R;i++) {
		for (j=0;j<C;j++) {
			mat[i][j]=Vett[k];
			printf("%c|",mat[i][j]);
			k++;
		}
		printf("\n");
}
}

main () {
	int num1,num2,pos,x;
	char Mat[R][C],vett2[DIM];
	vettore(&vett2[0]);
	tris();
	printf("Giocatore 1\ninserisci una posizione: ");
	scanf("%d",&num1);
	pos=num1-1;
	vett2[pos]='x';
	vettore(&vett2[0]);
	tris();
}

10 Risposte

  • Re: Problema con funzioni e vettori

    Nin ti dà alcun errore di compilazione? Per esempio che la funzione vettore non ritorna un char, o che quando la chiami non le passi un vettore, o che il gioco non funzionerebbe lo stesso perché evidentemente manca qualche pezzo (tutto lo svolgimento)
  • Re: Problema con funzioni e vettori

    Ok, l'ho provato, ed effettivamente non dà errori, ma la logica rimane sbagliata. per esempio, dopo che cambi il valore di una posizione nell'array, chiami la funzione vettore, che puntualmente fa tornare l'array alla forma originale!
  • Re: Problema con funzioni e vettori

    ANDPRI ha scritto:


    Per esempio, dopo che cambi il valore di una posizione nell'array, chiami la funzione vettore, che puntualmente fa tornare l'array alla forma originale!
    E' esattamente questo che vorrei comprendere, come si può modificare il valore di un array dal main per una funzione? Se non ho capito male per passare come parametro un array basta leggere per indirizzo la prima "cella" del vettore, perché corrisponde al nome di esso. Di conseguenza non trovo un metodo: qualsiasi posizione del vettore sia passata non interferisce sui valori stessi. Potreste dirmi di cercare su libri o su internet, ma ho già provato.
    Potresti spiegarmi il motivo per cui è sbagliata la logica?
  • Re: Problema con funzioni e vettori

    Nono non è sbagliata. In realtà puoi anche passare l'intero vettore alla funzione, ed essa lo modificherà lo stesso. In effetti la tua funzione lo modifica, sarebbe giusta, se non lo riportasse sempre a 0. Tu chiami la funzione che mette 123ecc nell'array, poi cambi una posizione dell'array in x, e funziona, infatti se stampassi l'array subito dopo vett2[pos]='x'; ti accorgeresti che lo cambia. Ma subito dopo chiami vettore(), che lo riporta allo stato iniziare, quindi non è cambiato nulla. Inoltre la funzione che converte l'array in matrice e la stampa è inutile, ma se è così che devi farlo, va bene
  • Re: Problema con funzioni e vettori

    ANDPRI ha scritto:


    Nono non è sbagliata. In realtà puoi anche passare l'intero vettore alla funzione, ed essa lo modificherà lo stesso. In effetti la tua funzione lo modifica, sarebbe giusta, se non lo riportasse sempre a 0. Tu chiami la funzione che mette 123ecc nell'array, poi cambi una posizione dell'array in x, e funziona, infatti se stampassi l'array subito dopo vett2[pos]='x'; ti accorgeresti che lo cambia. Ma subito dopo chiami vettore(), che lo riporta allo stato iniziare, quindi non è cambiato nulla. Inoltre la funzione che converte l'array in matrice e la stampa è inutile, ma se è così che devi farlo, va bene
    Dopo aver cambiato una posizione del vettore in x il valore effettivamente si modifica, ma non riesco comunque ad assegnarlo ad uno specifico valore di un vettore presente all'interno di una funzione. Riguardo la matrice e relativa stampa pensavo fosse utile per controllare se è stato fatto tris, è più immediato il procedimento con i cicli for.
    Una domanda forse off topic: esistono dei libri che insegnano un corretto utilizzo delle funzioni? Capisco che è nostro dovere imparare ad usarle nei contesti adatti, ma delle regole formali o consigli specifici in diversi ambiti (esempio le funzioni e vettori/matrici) potrebbero aiutare a scrivere un codice più chiaro e leggibile.
  • Re: Problema con funzioni e vettori

    Ma tu scrivi programmi senza avere un libro da cui imparare?

    Tutti i libri sul linguaggio parlano di quello che ti serve.
  • Re: Problema con funzioni e vettori

    oregon ha scritto:


    Ma tu scrivi programmi senza avere un libro da cui imparare?

    Tutti i libri sul linguaggio parlano di quello che ti serve.
    Certamente ho un libro da cui imparare. Sul nostro vengono spiegati brevemente array e vettori, ma soltanto nell'impostazione. Provvederò a cercare un libro più dettagliato.
  • Re: Problema con funzioni e vettori

    Quale libro usate?
  • Re: Problema con funzioni e vettori

    oregon ha scritto:


    Quale libro usate?
    Linguaggio C e C++:
    https://www.amazon.it/Linguaggio-espansione-online-Ist-tecnici/dp/8839516735
  • Re: Problema con funzioni e vettori

    Lorenzo2000 ha scritto:


    ANDPRI ha scritto:


    Nono non è sbagliata. In realtà puoi anche passare l'intero vettore alla funzione, ed essa lo modificherà lo stesso. In effetti la tua funzione lo modifica, sarebbe giusta, se non lo riportasse sempre a 0. Tu chiami la funzione che mette 123ecc nell'array, poi cambi una posizione dell'array in x, e funziona, infatti se stampassi l'array subito dopo vett2[pos]='x'; ti accorgeresti che lo cambia. Ma subito dopo chiami vettore(), che lo riporta allo stato iniziare, quindi non è cambiato nulla. Inoltre la funzione che converte l'array in matrice e la stampa è inutile, ma se è così che devi farlo, va bene
    Dopo aver cambiato una posizione del vettore in x il valore effettivamente si modifica, ma non riesco comunque ad assegnarlo ad uno specifico valore di un vettore presente all'interno di una funzione.
    Che intendi? Scusa dopo che l'hai modificato, l'hai modificato e basta. Per giocare a tris ti basta usare un ciclo che ti fa modificare sempre una cella diversa finché qualcuno non vince. Non capisco cosa intend dire con questo. Il problema che non ti fa funzionare il programma è chw dopo aver modificato una posizione, resetti l'array come era prima. Ti basta non farlo e risolvi no? E comunque, a giudicare dal nome che dai alle variabili e da quello che hai scritto qui, mi viene da pensare che non hai ben capito come funzionano le variabili dentro e fuori le funzioni
Devi accedere o registrarti per scrivere nel forum
10 risposte