C|Array/Numeri casuali multipli di 3

di Anonimizzato27607 il
32 risposte

32 Risposte - Pagina 2

  • Cominciamo col primo:

    Se MAX vale trenta, perché accetti fino a un massimo di cento valori da generare?
  • Grazie, ho corretto;
    continuo però a non capire come è possibile che vengano stampati numeri che non sono presenti nell'intervallo che gli ho dato v = rand() % 100 +1;
  • Ma leggi quello che scrivo?

    Se tu ti fossi messo a RI-leggere il tuo programma avresti trovato tu l'errore del 30 non 100

    Ti rendi conto che indirizzare oltre il massimo dimensionato un array in C provoca potenzialmente malfunzionamenti di tutti i tipi?

    Bastava un minimo di buona volontà
    Ma non lo hai cercato

    Pochi messaggi fa ti ho detto che il problema non è quello che generi, ma quello che salvi
    Sei andato a vedere?
  • non capire come è possibile che vengano stampati numeri
    Se prepari 30 elementi e ne scrivi 100, alcuni andranno in memoria in posizioni NON gestite dal tuo codice e quindi potranno essere modificate in modo casuale (ecco perché vedi altri numeri) o causare crash.

    a) Ovviamente devi scrivere

    #define MAX 100

    se accetti fino a 100 elementi


    b) Nel primo ciclo for questa linea è sbagliata

    i++;

    perché l'hai inserita?


    c) Togli queste linee

    else {
    printf("\nNon sono stati generati valori multipli di 3");
    }

    dato che è evidentemente sbagliata. Se vuoi determinare la mancanza assoluta di numeri multipli di 3 ragiona in modo un po' diverso.
  • perché l'hai inserita?
    Deve esser stato un errore di distrazione, comunque grazie ora funziona bene, ma ho deciso di non stampare nulla in caso non ci siano multipli
    Ma non lo hai cercato
    Scusami non avevo afferrato il concetto.
    Comunque sia questo è il codice finale
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define MAX 100
    
    /*
    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; ){
    		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]);
    		}	
    	}
    	printf("\n-------------------------LISTA VALORI GENERATI-------------------------");
    	for(i = 0; i < dim; i++){
    		printf("\n%d Valore: %d", i, v[i]);
    	}
    	return 0;
    }
    
    Grazie ancora e perdonate gli errori gravi, alla fine sono qua proprio per imparare.
  • Basito...
  • alla fine sono qua proprio per imparare.
    Buona giornata
  • Ma perché hai tolto i++ dal for e non la linea che ti avevo indicato? Allora non è distrazione... non hai capito.
  • L'ho fatto, ma dopo ho notato che non sarebbe cambiato nulla se lo avessi tolto da uno o dall'altro, o forse sbaglio ma il risultato finale era lo stesso
  • Non conta il risultato finale ma la scrittura di codice che segua delle regole. La for si scrive in quel modo e la riga in più da togliere è quella finale. Se vuoi imparare segui i consigli.
  • Afferrato
  • Giusto per onor di cronaca:

    un numero INTERO e' multiplo di 3 SE il RESTO della divisione per 3 E' ZERO

    MA vale anche la regola:

    la somma delle sue cifre DECIMALI e' un multiplo di 3.
    87 -> 8+7=15->5+1=6->3+3.

    E' una vecchia regoletta che si imparava, penso, alle elementari, MOOOOLTO tempo fa.

    Si puo' DIMOSTRARE usando un po' di ragionamento, la scomposizione del numero in POTENZE di 10, e le proprieta' della divisione e del resto per 3.

    Un modo alternativo e' quello di usare l'ARITMETICA MODULARE e relative proprieta'.
  • oregon ha scritto:


    Non conta il risultato finale...
    oh no, per alcuni conta solo il risultato finale...

    in effetti per lo OP conta solo aver ottenuto qualcosa, non importa se non ha capito uno Jota di quello che avrebbe dovuto capire, in effetti non ci ha nemmeno provato
    non so se per imperizia o per trollaggine, ma comunque.......

    l'unico vantaggio è che io ho capito come regolarmi in futuro con lui.
  • Sicuramente non ha nozioni di base e non si è impegnato (vedi parte che non ha voluto neanche fare). Ma vedremo in seguito...
  • Wow. Sappiate che a scaricare critiche alle persone siete bravi. Comunque sia sarei voluto restare sul programma per terminarlo, ma devo svolgerne molti altri, e come avete potuto notare mi portano via un po' di tempo (per mia ignoranza lo so). Ripasserò le basi e sarò più attento ma per favore non ce l'abbiate con me
Devi accedere o registrarti per scrivere nel forum
32 risposte