C|Array/Numeri casuali multipli di 3

di il
32 risposte

C|Array/Numeri casuali multipli di 3

Buonasera, sto avendo problemi con questo programma in cui tramite array devo stampare i numeri multipli di 3 di una sequenza di numeri generati casualmente. Ho 2 problemi che ho sono:
-non capisco come dividere i numeri in cifre per verificare che siano multipli;
-non riesco a generare più numeri casuali, ne viene infatti generato uno solo.
Questo è il codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 30

/*
Scrivere un programma che carica un vettore con valori interi casuali compresi fra 1 e 100, poi stampa
solo le componenti del vettore che sono multipli di 3*/

int main() {
	int i;	/*indice array*/
	int dim;	/*dimensione effettiva*/
	int v[MAX]; /*array*/
	
	do{
		printf("Quanti numeri vuoi generare ? (da 1 a 100) : ");
		scanf("%d", &dim);
	}while(dim < 1 || dim > 100);
	
	for(i = 0; i < dim; i++){
			srand(time(0));
			v[i] = rand() % 100 +1;	
			i++;
	}
	for(i = 0; i < dim; i++){
		if(){
			printf("\nValori multipli di 3: %d", v[i]);
		}else{
			printf("\nNon sono stati generati valori multipli di 3");
		}
	}
	printf("\n-------------------------LISTA VALORI GENERATI-------------------------");
	for(i = 0; i < dim; i++){
		printf("\n%d Valore: %d", i, v[i]);
	}
	return 0;
}

32 Risposte

  • Re: C|Array/Numeri casuali multipli di 3

    Ciao,
    come definisci un multiplo di 3? Un numero che diviso per 3 dà resto 0;
    Credo tu debba mettere srand(time(NULL)); fuori dal ciclo for.
    Credo.
    Sono uno studente (anzianotto) anch'io...
  • Re: C|Array/Numeri casuali multipli di 3

    Grazie, per i numeri casuali credo di aver risolto;
    Rimane il problema dei multipli di 3, dato che al contrario di come pensavo anche io, la regola che hai detto è sbagliata.
    Ho scoperto infatti che per essere multiplo di 3, un numero deve avere la somma delle sue cifre divisibili per tre, es. 72, 7+2=9, 9/3=3 --> multiplo
    se invece si divide per 3 un numero non è detto che sia multiplo di 3, es. 87/3=29 --> non multiplo
    Grazie ancora per il problema dei numeri, ma ho ancora il dubbio di come scomporre le cifre di un numero.
  • Re: C|Array/Numeri casuali multipli di 3

    Aiutami a capire;
    Io ho preso il tuo programma e l'ho leggermente modificato.
    Stampa numeri casuali e riconosce quali di questi sono multipli di 3.
    Esempio reale. Richiedendo 10 numeri mi dà:
    86, 46, 27, 38, 8, 59, 14, 37, 74, 79 e mi dice che solo 27 è multiplo di 3.

    Pensavo fosse questa la richiesta.

    Cosa dovrebbe fare il programma?
  • Re: C|Array/Numeri casuali multipli di 3

    FuturoProgrammatore ha scritto:


    se invece si divide per 3 un numero non è detto che sia multiplo di 3, es. 87/3=29 --> non multiplo
    ? sicuro di quello che dici?
    ma sicuro sicuro?
    87 è multiplo di tre
    comunque se un numero è multiplo di un'altro il resto della divisione fa 0, per definizione, non per caso
    se hai dei dubbi ti conviene ristudiare le basi della matematica
  • Re: C|Array/Numeri casuali multipli di 3

    La definizione matematica di "numero multiplo di n" é quel numero che, se diviso per n, da RESTO 0. E non penso proprio tu voglia metterla in dubbio.
    l'operatore che fornisce il resto di una divisione è l'operatore %. Esso va usato esattamente come gli altri operatori.
  • Re: C|Array/Numeri casuali multipli di 3

    FuturoProgrammatore ha scritto:


    ... al contrario di come pensavo anche io, la regola che hai detto è sbagliata.
    Stiamo su problemi delle scuole elementari ... Quindi la regola è sbagliata? Ma che dici?
    Ho scoperto...
    Stai facendo un sacco di confusione. Controlla che il resto della divisione sia 0 e basta.
  • Re: C|Array/Numeri casuali multipli di 3

    FuturoProgrammatore ha scritto:


    Grazie, per i numeri casuali credo di aver risolto;
    Se apporti modifiche al codice devi ripostarlo, o siamo qui per nulla
  • Re: C|Array/Numeri casuali multipli di 3

    Scusate effettivamente ho fatto un ragionamento del cavolo. Per il problema dei multipli avevo fatto giusto dall'inizio, ma cercando su internet ho visto questa cosa..
    Comunque ora modifico il programma e vedo se funziona;
    scusate ancora non so perché ho avuto questo vuoto di memoria.
  • Re: C|Array/Numeri casuali multipli di 3

    Comunque ho notato che ho anche problemi nello stampare i multipli, inoltre viene a volte generato anche -1 come numero casuale.
    Grazie in caso aveste ancora intenzione di aiutarmi
    int main() {
    	int i;	/*indice array*/
    	int dim;	/*dimensione effettiva*/
    	int v[MAX]; /*array*/
    	
    	do{
    		printf("Quanti numeri vuoi generare ? (da 1 a 100) : ");
    		scanf("%d", &dim);
    	}while(dim < 1 || dim > 100);
    		srand(time(0));
    	for(i = 0; i < dim; i++){
    		
    			v[i] = rand() % 100 +1;	
    			i++;
    	}
    	for(i = 0; i < dim; i++){
    		if(v[i] % 3 == 0){
    			printf("\n%d", v[i]);
    		}else{
    			printf("\nNon sono stati generati valori multipli di 3");
    		}
    	}
    	printf("\n-------------------------LISTA VALORI GENERATI-------------------------");
    	for(i = 0; i < dim; i++){
    		printf("\n%d Valore: %d", i, v[i]);
    	}
    	return 0;
    }
  • Re: C|Array/Numeri casuali multipli di 3

    Sono basito

    Parti da programmi più semplici, per cominciare

    Oppure prima di scrivere pensa...
  • Re: C|Array/Numeri casuali multipli di 3

    Sono basito anche io ma così non mi sei di aiuto
  • Re: C|Array/Numeri casuali multipli di 3

    -1 come numero casuale è impossibile, se tu leggessi la documentazione lo sapresti

    Quindi il tuo problema è cosa stampi, non cosa generi

    O meglio ancora cosa salvi dopo generato

    Leggere il programma è il primo passo per trovare gli errori

    E sono tantini

    PS
    Postalo "tutto" il programma
  • Re: C|Array/Numeri casuali multipli di 3

    E indentalo anche meglio

    E "necessario" per leggere bene
  • Re: C|Array/Numeri casuali multipli di 3

    Questo è il programma, lo so di aver commesso molti errori il mio problema è proprio trovarli.
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define MAX 30
    
    /*
    Scrivere un programma che carica un vettore con valori interi casuali compresi fra 1 e 100, poi stampa
    solo le componenti del vettore che sono multipli di 3*/
    
    int main() {
    	int i;	/*indice array*/
    	int dim;	/*dimensione effettiva*/
    	int v[MAX]; /*array*/
    	
    	do{
    		printf("Quanti numeri vuoi generare ? (da 1 a 100) : ");
    		scanf("%d", &dim);
    	}while(dim < 1 || dim > 100);
    	
    	srand(time(0));
    	for(i = 0; i < dim; i++){
    		v[i] = rand() % 100 +1;	
    		i++;
    	}
    	for(i = 0; i < dim; i++){
    		if(v[i] % 3 == 0){
    			printf("\n%d e' multiplo di 3", v[i]);
    		}else{
    			printf("\nNon sono stati generati valori multipli di 3");
    		}
    	}
    	printf("\n-------------------------LISTA VALORI GENERATI-------------------------");
    	for(i = 0; i < dim; i++){
    		printf("\n%d Valore: %d", i, v[i]);
    	}
    	return 0;
    }
Devi accedere o registrarti per scrivere nel forum
32 risposte