Esercizi C 01 - costrutti

di il
9 risposte

Esercizi C 01 - costrutti

Ciao a tutti,

Volevo sapere dove sbaglio, visto che sono un principiante in c.

//02 - COSTRUTTI DI SELEZIONE - PARTE 1
//07) Dati 2 interi stampare una delle seguenti frasi: "i due interi inseriti sono entrambi pari",
//"un intero è pari e l'altro è dispari", "entrambi gli interi sono dispari".

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

int main()
{
	int n1, n2;

	printf("\nInserisci due numeri interi:  ");
	scanf("%d %d",&n1, &n2);

	if (n1 % 2 == 0 && n2 % 2 == 0) {
		printf("I due interi inseriti sono entrambi pari\n\n");
	if (n1 % 2 == 0 && n2 != 0) {
		printf("Un intero è pari e l'altro è dispari\n\n");
	}
	else {
		printf("Entrambi gli interi sono dispari\n\n");
	     }
	}
}


9 Risposte

  • Re: Esercizi C 01 - costrutti

    Dovresti anche spiegarci qual è il problema che riscontri.
    Non si compila?
    Non ti legge correttamente n1 o n2?
    Oppure per determinati valori di n1 ed n2 non ti stampa l'esito corretto?
    Credimi, descrivendo meglio il problema che hai lo risolvi da solo!
  • Re: Esercizi C 01 - costrutti

    Descrivendo meglio il problema che hai lo risolvi da solo!
    Sono d'accordo, anche perché non è un problema che ha a che fare direttamente con il linguaggio ma con la logica ...
  • Re: Esercizi C 01 - costrutti

    Crossposting su

    http://www.ioprogrammo.it/index.php?topic=26356.msg95712;topicseen#msg95712
  • Re: Esercizi C 01 - costrutti

    Hai innestato malamente gli if, questo è l'errore più grave.
    ti do un consiglio subito, visto che sei un neofita: l'indentazione del codice ti salva la vita. credimi.
    per indentazione intendo il rientro a destra che hanno le varie righe di codice: per regola, dopo una { ci va un tab in avanti, e dopo una } un tab indietro.
    esempio:
    istruzione (condizione)
    {
    	// il contenuto andrà qui: notare la distanza dal margine destro rispetto alle righe precedenti
    } // la graffa di chiusura va portata allo stesso rientro di quella di apertura: in molti editor è possibile "nascondere" il contenuto di due graffe tramite un pulsante: se le hai indentate correttamente è molto facile capire quando inizia e quando finisce il blocco
    
    altra istruzione; // dopo la graffa di chiusura si torna a scrivere un tab indietro rispetto a prima 
    questa è una regola che probabilmente non è definita dalla sintassi del c/c++, ma si tratta di una regola obbligatoria per scrivere del codice leggibile. e credimi, la leggibilità ha un ruolo importantissimo nella risoluzione di un problema. come fai a risolvere il problema se non capisci nemmeno com'è scritto?

    un'altra indentazione di graffe che si usa è
    if (condizione) {
    	// codice
    }
    vedi tu con quale ti trovi meglio fra le due (personalmente mi trovo meglio con la prima: si ha a colpo d'occhio l'inizio e la fine di un blocco).
  • Re: Esercizi C 01 - costrutti

    Ciao Çlÿkÿ~ la tua descrizione è davvero buona e in qualche modo può sicuramente aiutare il nostro amico mazinga_2016; si tratta però di una spiegazione inutile perchè già presente sicuramente sul libro di testo in uso.
    Il problema che ha mazinga_2016 non è un problema di programmazione C, come giustamente fatto notare da oregon: lo stesso problema ce lo avrebbe avuto anche programmando in Java, in Pascal, in Python (qui... chissà, magari se ne sarebbe accorto ), in Basic...
    I problemi, e qui inizia la parte "costruttiva" per il nostro amico, sono altri:
    - incapacità di descrivere il problema, normalissimo per un neofita: per avere un prodotto devo seguire delle fasi in cui potrei incontrare dei problemi, bisogna specificare quale, analisi (es.: non so come impostare l'algoritmo), implementazione (es.: non so come scrivere in C questa cosa), test (es.: inserendo i valori "5" e "2" mi dice che sono entrambi pari);
    - limitatamente al primo "step", l'analisi, è chiaro come il sole che mazinga_2016 ha "buttato giù" del codice senza sapere cosa aspettarsi...
    Nella mia prima risposta (che continuo a pensare sia quella più utile al nostro amico mazinga_2016) lo invito a ragionare su quello che deve fare, quindi a scrivere in pseucodice quello che deve fare l'algoritmo, es.:
    - acquisisci n1 ed n2
    - se n1 è pari allora 
    	- se n2 è pari allora
    		- stampa "entrambi pari"
    	- altrimenti
    		- stampa "uno pari e uno dispari"
    - altrimenti
    	- se n2 è pari allora
    		- stampa "uno pari e uno dispari"
    	- altrimenti
    		- stampa "entrambi dispari"
    
    ed è proprio questa la parte importante del lavoro di programmazione...
  • Re: Esercizi C 01 - costrutti

    Grazie Candaluar, se l'unico che mi hai capito al pieno il mio problema.
  • Re: Esercizi C 01 - costrutti

    Mazinga ... il tuo problema l'hanno capito tutti perché è banale ...

    Ma proprio per questo ci si aspetta che tu ci ragioni un altro po' in modo di arrivarci da solo ...
  • Re: Esercizi C 01 - costrutti

    Ho fatto le modifiche del programma.
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	int n1, n2;
    
    	printf("\nInserisci due numeri interi:  ");
    	scanf("%d %d",&n1, &n2);
    
    	if (n1 % 2 == 0) {
    
    		if ( n2 % 2 == 0) {
    			printf("I due interi inseriti sono entrambi pari\n\n");
    		else {
    			printf("Un intero è pari e l'altro è dispari\n\n");
    		}}
    	else
    		printf("Entrambi gli interi sono dispari\n\n");
    
    	if (n2 % 2 == 0) {
    		printf("Un intero è pari e l'altro è dispari\n\n");
    	else {
    		printf("I due interi inseriti sono entrambi pari\n\n");
    	}}
    }
    
    }
    
    

    Mi dà questo errore riguardando le parentesi, non capisco dove sbaglio.
    
    05.c: In function ‘main’:
    05.c:19:3: error: expected ‘}’ before ‘else’
       else {
       ^
    05.c:27:2: error: expected ‘}’ before ‘else’
      else {
      ^
    05.c: At top level:
    05.c:30:1: error: expected identifier or ‘(’ before ‘}’ token
     }
     ^
    05.c:32:1: error: expected identifier or ‘(’ before ‘}’ token
     }
     ^
    
  • Re: Esercizi C 01 - costrutti

    Conta le parentesi aperte e quelle chiuse ... devono corrispondere.

    Indenta meglio il codice ... Ad esempio, hai 3 parentesi aperte nelle prime righe ma solo due chiuse ...
Devi accedere o registrarti per scrivere nel forum
9 risposte