Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C]Programma calcolatrice v0.2

    Ciao a tutti ho aperto questa discussione per la versione 0.2 della mia calcolatrice, in questa versione ho deciso che l'utente puo decidere tra quanti numeri fare le operazione.

    SOURCE:

    codice:
    #include <stdio.h>
    #define PER_ARRAY 50
    
    int main () {
    	
    	int quante;
    	int partenza;	
    	int numeri[PER_ARRAY];
    	char operatore[PER_ARRAY];
    	char *puntatore_operatore;
    	puntatore_operatore = operatore;
    
    
    	printf("Calcolatrice V0.2 \n");
    	printf("Tra quante cifre vuoi fare l'operazione?\n");
    
    	while (quante >= 2) { //devono essere almeno 2 
    		scanf("%d", &quante);
    	}
    	
    	
    
    	
    	for (partenza = 0; partenza < quante; partenza++) {
    		printf("Numero numero %d: \n", partenza );
    		scanf( "%d", &numeri[partenza]);
    		
    		
    		if (partenza == quante)
    			
    			break;
    		
    		printf("Decidi il simbolo per il tipo di operazione: + - * / \n");
    		scanf(" %c",&operatore[partenza]);	
    		
    		
    	}
    	
    	
       
    	return 0;
    }
    per prima cosa:

    codice:
    #define PER_ARRAY 50
    definirla tramite costante e fare questo:


    codice:
    	int numeri[50];
    	char operatore[50];
    non è la stessa indentica cosa?



    codice:
    	while (quante >= 2) { //devono essere almeno 2 
    		scanf("%d", &quante);
    	}
    Con questo ciclo while dovrebbe dire al programma che finche non è maggiore di due deve richiederti di inserire il numero.


    però ovviamente mi blocca il programma. ( ogni volta che provo a fare una cosa nuova mi succede cosi).


    EDIT: la parte del while l'ho risolta.

    ho usato < al posto di >= errore di distrazione li.
    codice:
    for (partenza = 0; partenza < quante; partenza++) {
    		printf("Numero numero %d: \n", partenza );
    		scanf( "%d", &numeri[partenza]);
    		
    		
    		if (partenza < quante)
    			
    			break;
    		
    		printf("Decidi il simbolo per il tipo di operazione: + - * / \n");
    		scanf(" %c",&operatore[partenza]);	
    		
    		
    	}
    Invece qui dovrebbe darmi come output:



    Running…
    Calcolatrice V0.2
    Tra quante cifre vuoi fare l'operazione?
    3
    Numero numero 0:
    1
    Decidi il simbolo per il tipo di operazione: + - * /
    +
    Numero numero 1:
    1
    Decidi il simbolo per il tipo di operazione: + - * /
    +
    Numero numero 2:
    1
    Decidi il simbolo per il tipo di operazione: + - * /
    +

    ma dovrebbe essere:

    Running…
    Calcolatrice V0.2
    Tra quante cifre vuoi fare l'operazione?
    3
    Numero numero 0:
    1
    Decidi il simbolo per il tipo di operazione: + - * /
    +
    Numero numero 1:
    1
    Decidi il simbolo per il tipo di operazione: + - * /
    +
    Numero numero 2:
    1


    senza questa finale:

    Decidi il simbolo per il tipo di operazione: + - * /
    +


    però non capisco perche break non lavora come dovrebbe.

    Scusate ma sono ancora un newbie e probabilmente queste cose potrebbero essere elementari per tutti voi, mentre io ho seri problemi a risolverle


    Grazie per l'attenzione

  2. #2
    Non posso piu editare perche è passata piu di un ora.

    Però sono riuscito a risolvere anche il discorso dell break.


    codice:
    	for (partenza = 0; partenza < quante; partenza++) {
    		printf("Numero numero %d: \n", partenza );
    		scanf( "%d", &numeri[partenza]);
    		
    		if (partenza == (quante-1)){
    			break;
    		}
    		
    		printf("Decidi il simbolo per il tipo di operazione: + - * / \n");
    		scanf(" %c",&operatore[partenza]);	
    		
    	}
    Ora mi manca solo piu fare la parte nel quale stampa...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Originariamente inviato da gennahouse
    Però sono riuscito a risolvere anche il discorso dell break.
    La condizione di quell' if è inutile, perchè il ciclo for itererà sempre partenze fino a (quante-1) (per natura della condizione nel for) ed il ciclo terminerà.
    Avrebbe senso se nella dichiarazione del for la variabile verrebbe incrementata a <= quante.
    Esempio, se tu infatti provi ad interare una qualsiasi variabile da 0 a < 10 e provi a stamparne il suo valore, vedrai che stamperà numeri da 0 a 9 compreso, il che sono in totale 10 numeri.

  4. #4
    Ciao simo, il ciclo funziona come dovrebbe =D

    il problem è che non ho la piu pallida idea di come richiamare le array e fare i calcoli...
    tu hai delle idee?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Originariamente inviato da gennahouse
    il problem è che non ho la piu pallida idea di come richiamare le array e fare i calcoli...
    tu hai delle idee?
    Esempio:
    codice:
    /* PS: questo è un commento */
    int i, elements = 10;
    int array[elements];
    for(i = 0; i < elements; i++)
    {
       array[i] = /*valore che gli vuoi dare tu */;
       ...
    }
    Dove con quel "array[i]" stai facendo riferimento all'indice dell'array.
    Comunque non è una idea, è che si fa così (dentro ad un ciclo). Se poi vuoi richimare singolarmente un elemento di un array lo devi fare per il numero di indice. Ricordati che in una dichiarazione come esempio array[10], gli elementi vanno dal nº 0 al nº 9.

    PS: Stai studiando su un libro o su un qualsiasi tutorial in internet?

  6. #6
    Ciao simo, grazie per la risposta, sto studiando su un libro e credo sia fatto molto bene, il problema è che è la prima volta che sto programmando e ancora non ho l'ottica giusta... =)

    Sai, non riesco a capire come avere il risultato finale, per ipotesi, se l'utente decide di fare un operazione con 3 numeri il programma dovra fare questo:

    10 + 20 / 2

    questo è un esempio i problemi sono due per me, il primo, non penso che posso fare:


    risultato = numeri[0], operatore[0], numeri[1], operatore[1],numeri[2], operatore[2],numeri[3], operatore[4],numeri[5];


    perche come risutalto mi darà 10 + 20 / 2 e non il risultato vero.

    avevo pensato di usare for, però non capico bene come fare, con l'esempio che mi hai fatto tu vado solo a dire operatore [0] = +

    ma non mi darà il risultato.

    è questo il problema =(


    EDIT: yeahhhhhhhhh ci sono riuscito!!!! alla fine dovevo usare gli operatori come +=

    codice:
    		
    	int i, risposta= numeri[0];
    	for(i = 1; i < quante; i++)
    	{
    		if(operatore[(i - 1)]  == '*') {
    			risposta *= numeri[i];
    	}
    		else if(operatore[(i - 1)]  == '/'){
    			 risposta /= numeri[i];
    		}
    		else if(operatore[(i - 1)]  == '-'){
    			risposta -= numeri[i];
    		}
    		else if(operatore[(i - 1)]  == '+'){
    			risposta += numeri[i];
    		}
    	}
    	printf("Il risultato è: %i", risposta);

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    mmm....

    Così non salti mica l'ultimo operatore? Non sarebbe meglio inizializzare i a 0?

    codice:
     for (i = 0; i < quante; ++i)
    e indicizzare l'array con i invece che (i - 1)?
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  8. #8
    Ciao, il programma funziona perfettamente, non salta l'ultimo operatore...

    Ora analizzo con calma la differenza tra le due versioni

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [C]Programma calcolatrice v0.2

    Originariamente inviato da gennahouse
    per prima cosa:

    codice:
    #define PER_ARRAY 50
    	int numeri[PER_ARRAY];
    	char operatore[PER_ARRAY];
    definirla tramite costante e fare questo:


    codice:
    	int numeri[50];
    	char operatore[50];
    non è la stessa indentica cosa?
    Sì, è la stessa cosa. Usare #define però è più comodo: se domani vorrai partire con array di 200 elementi cosa fai, modifichi a mano tutti gli array che hai creato o modifichi il valore di PER_ARRAY?

    Per essere pignoli la riga #define PER_ARRAY 50 non dichiara una costante in quanto è una direttiva al preprocessore. Quando compili (ma prima della compilazione vera e propria) tutte le occorrenze di PER_ARRAY vengono sostituite dal valore 50. È per questo che non c'è il ";". Se ci fosse otterresti la seguente sostituzione, sintatticamente sbagliata: int numeri[50;];
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    Ciao, grazie per la risposta come sempre sai spiegarti benissimo =)

    grazie a tutti voi sto imparando tantissime cose

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.