Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C]Stabilire se una sequenza è crescente o decrescente, no uso di array

    Ciao a tutti ragazzi, è da poco che ho cominciato a studiare il linguaggio c e mi sono imbattuto in un esercizio che non riesco a svolgere. Vi copio il testo dell'esercizio:

    Si scriva un programma in linguaggio C per poter analizzare una sequenza di numeri.
    Dati N numeri interi letti da tastiera si vogliono calcolare e stampare su schermo diversi
    risultati:
    • quanti sono i numeri positivi, nulli e negativi
    • quanti sono i numeri pari e dispari
    • se la sequenza dei numeri inseriti è crescente, decrescente oppure né crescente né decrescente.
    Suggerimento. Una sequenza è crescente se ogni numero è maggiore del precedente, decrescente
    se ogni numero è minore del precedente, né crescente né decrescente in tutti gli altri casi.

    La prof. ci ha vietato l'uso di array o struct e ha detto che li dobbiamo fare utilizzando solo i tipi scalari. I primi due punti sono riuscito a farli tranquillamente mentre il terzo punto, cioè stabilire se la sequenza è crescente o no, non so come impostarlo.. se volete vi copio il codice che ho scritto fino ad ora. Grazie mille per le risposte che riceverò.

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Confrontando i primi due puoi supporre che sia crescente o decrescente, a questo punto tutti gli altri devono aderire a tale scelta o la sequenza non è né crescente né decrescente.

    In alternativa puoi inizializzare uno stato a 0 e a ogni coppia di numeri adiacenti incrementi lo stato di 1 se il primo è minore, decrementi se è maggiore, non fai nulla altrimenti. Alla fine se stato = -n+1 la sequenza è decrescente, se stato = n-1 la sequenza è crescente, se stato != -n+1, n-1 la sequenza non è né crescente né decrescente.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    mi spiace ma non ho capito ancora come fare.. vi posto il codice che ho scritto fin ora:
    codice:
    #include<stdio.h>
    main(){
    	printf("Questo programma consente di analizzare una sequenza di numeri inseriti dall'utente\n");
    	int i, N, num;
    	int positivi = 0, nulli = 0, negativi = 0, pari = 0, dispari = 0;
    	printf("Inserisci il numero di elementi da inserire nella sequenza: "); scanf("%d", &N);
    	for (i = 1; i <= N; i++){
    		printf("Inserisci l'elemento n.%d: ", i); scanf("%d", &num);
    		if (num > 0) positivi += 1;
    		else if (num < 0) negativi += 1;
    		else nulli += 1;
    		if (num % 2 == 0) pari += 1;
    		else dispari += 1;
    	}
    	printf("I numeri positivi sono: %d\nI numeri negativi sono: %d\nI numeri nulli sono: %d\n", positivi, negativi, nulli);
    	printf("I numeri pari sono: %d\nI numeri dispari sono: %d\n", pari, dispari);
    }
    Ultima modifica di MItaly; 02-07-2015 a 17:07 Motivo: Aggiunto tag CODE

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Ti do un indizio:
    codice:
    //...
    int i, N, num, prec;
    for(i = 1; i <= N; i++) {
      //...
      if(i > 1) { //al primo giro non abbiamo un precedente
        if(prec < num) {
          //...
        } else if(prec > num) {
          //...
        } else { //prec == num
          //...
        }
      }
      prec = num; //così al prossimo giro prec conterrà il numero di questo giro
    }
    Ho cercato di parlare semplice e mantenere la struttura del tuo codice facendoti capire cosa devi cambiare/aggiungere. Ora prova a vedere se riesci a risolvere!

    Edit. ah comunque, dovresti usare i tag code quando posti del codice nel forum!
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Scara95 grazie per i consigli però purtroppo ancora non sono riuscito a risolvere completamente, ho provato a implementare il tuo codice nel mio però il programma non funziona come dovrebbe, le sequenza crescenti e decrescenti me le indica ma quelle che non sono ne crescenti e ne decrescenti no. Ti scrivo il codice che ho riscritto e gentilmente se puoi dai un'occhiata e vedi cosa non va bene. Ancora grazie
    codice:
    include<stdio.h>
    main(){
        int N, i, num, numprec;
        int pari = 0, dispari = 0, positivi = 0, negativi = 0;
        int crescente=0, decrescente=0,neutro=0;
        printf("Inserisci il numero di elementi da inserire: "); scanf("%d", &N);
        for (i = 1; i <= N; i++){
            printf("Inserisci il n.%d: ", i); scanf("%d", &num);
            if (num >= 0) positivi += 1;
            else negativi += 1;
            if (num % 2 == 0) pari += 1;
            else dispari += 1;
            if (i > 1) {
                if (numprec<num) crescente = 1;
                else if (numprec>num) decrescente = 1;
                else neutro = 1;
            }
            numprec = num;
        }
        printf("pari: %d\ndispari: %d\npositivi: %d\nnegativi: %d\n", pari, dispari, positivi, negativi);
        if (crescente == 1) printf("La sequenza e' crescente\n");
        else if (decrescente==1) printf("La sequenza e' decrescente\n");
        else if (neutro == 1) printf("La sequenza non e' ne' crescente ne' descrescente\n");
    }

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Quote Originariamente inviata da InteristaPazzo9 Visualizza il messaggio
    Scara95 grazie per i consigli però purtroppo ancora non sono riuscito a risolvere completamente, ho provato a implementare il tuo codice nel mio però il programma non funziona come dovrebbe, le sequenza crescenti e decrescenti me le indica ma quelle che non sono ne crescenti e ne decrescenti no. Ti scrivo il codice che ho riscritto e gentilmente se puoi dai un'occhiata e vedi cosa non va bene. Ancora grazie
    codice:
    include<stdio.h>
    main(){
        int N, i, num, numprec;
        int pari = 0, dispari = 0, positivi = 0, negativi = 0;
        int crescente=0, decrescente=0,neutro=0;
        printf("Inserisci il numero di elementi da inserire: "); scanf("%d", &N);
        for (i = 1; i <= N; i++){
            printf("Inserisci il n.%d: ", i); scanf("%d", &num);
            if (num >= 0) positivi += 1;
            else negativi += 1;
            if (num % 2 == 0) pari += 1;
            else dispari += 1;
            if (i > 1) {
                if (numprec<num) crescente = 1;
                else if (numprec>num) decrescente = 1;
                else neutro = 1;
            }
            numprec = num;
        }
        printf("pari: %d\ndispari: %d\npositivi: %d\nnegativi: %d\n", pari, dispari, positivi, negativi);
        if (crescente == 1) printf("La sequenza e' crescente\n");
        else if (decrescente==1) printf("La sequenza e' decrescente\n");
        else if (neutro == 1) printf("La sequenza non e' ne' crescente ne' descrescente\n");
    }
    Attento: una sequenza o è crescente o è decrescente o nessuna delle due. Non devi usare 3 variabili di stato!
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Ho eliminato la variabile neutro, però quando per esempio inserisco "51432" mi continua a dire che la sequenza è crescente.. chiedo troppo se gentilmente mi posteresti il codice esatto che dovrei usare? non so piu come fare

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Quote Originariamente inviata da InteristaPazzo9 Visualizza il messaggio
    Ho eliminato la variabile neutro, però quando per esempio inserisco "51432" mi continua a dire che la sequenza è crescente.. chiedo troppo se gentilmente mi posteresti il codice esatto che dovrei usare? non so piu come fare
    Ti darò due soluzioni, alla condizione che le studi e ne capisci la logica. Nel caso non dovessi capire qualcosa sei tenuto a chiedere qui.
    codice:
    #include <stdio.h>
    
    
    int main(void) {
    	int i, n, p, c;
    	int crescenza; // 1 se crescente -1 se decrescente 0 altrimenti
    	printf("Quanti numeri vuoi inserire?");
    	scanf("%d", &n);
    	
    	printf("N.1: ");
    	scanf("%d", &p);
    	
    	printf("N.2: ");
    	scanf("%d", &c);
    	
    	if(p < c) { //supponiamo tutta la serie crescente in base ai primi 2
    		crescenza = 1;
    	} else if(p > c) { //supponiamo tutta la serie decrescente
    		crescenza = -1;
    	} else {
    		crescenza = 0;
    	}
    	
    	for(i = 3; i <= n; ++i) {
    		p = c;
    		printf("N.%d: ", i);
    		scanf("%d", &c);
    		if(crescenza > 0) {
    			if(!(p < c)) {//se non e' come prima allora la serie non e' ne crescente ne decrescente
    				crescenza = 0;
    			}
    		} else if(crescenza < 0) {
    			if(!(p > c)) { // stesso principio di prima
    				crescenza = 0;
    			}
    		}
    		//non serve il caso 0, in quanto in quel caso l'ordine degli elementi correnti non cambia nulla
    	}
    	
    	if(crescenza > 0) {
    		puts("Crescente");
    	} else if(crescenza < 0) {
    		puts("Decrescente");
    	} else {
    		puts("Ne' crescente ne' decrescente");
    	}
    	return 0;
    }
    codice:
    #include <stdio.h>
    
    int main(void) {
    	int i, n, p, c;
    	int crescenza = 0; // -n+1 se decrescente, n-1 se crescente -n+1 < crescenza < n-1 altrimenti
    	printf("Quanti numeri vuoi inserire?");
    	scanf("%d", &n);
    
    
    	
    	for(i = 1; i <= n; ++i) {
    		p = c;
    		printf("N.%d: ", i);
    		scanf("%d", &c);
    		if(i>1) { //contiamo quante coppie sono in ordine crescente o decrescente
    			if(p > c) {
    				crescenza--;
    			} else if(p < c) {
    				crescenza++;
    			}
    		}
    	}
    	
    	//siccome ci sono n-1 comparazioni su n elementi a questo punto dobbiamo 
    	//controllare se crescanza vale n-1 o -n+1 per la crescenza o la decrescenza
    	
    	if(crescenza == n-1) {
    		puts("Crescente");
    	} else if(crescenza == -n+1) {
    		puts("Decrescente");
    	} else {
    		puts("Ne' crescente ne' decrescente");
    	}
    	return 0;
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  9. #9
    Grazie mille!! Finalmente sono riuscito a fare funzionare il programma. Ho preso spunto dal secondo codice che mi hai inviato e alla fine il codice che ho scritto è questo:
    codice:
    #include<stdio.h>
    main(){
    	int N, i, num=0, numprec=0;
    	int pari = 0, dispari = 0, positivi = 0, negativi = 0;
    	int crescenza = 0;
    	printf("Inserisci il numero di elementi da inserire: "); scanf("%d", &N);
    	
    	for (i = 1; i <= N; i++){
    		numprec = num;
    		printf("Inserisci il n.%d: ", i); scanf("%d", &num);
    		if (num >= 0) positivi += 1;
    		else negativi += 1;
    		if (num % 2 == 0) pari += 1;
    		else dispari += 1;
    		if (i > 1) {
    			if (num>numprec) crescenza++;
    			else if (num<numprec) crescenza--;
    		}
    	}
    	printf("pari: %d\ndispari: %d\npositivi: %d\nnegativi: %d\n", pari, dispari, positivi, negativi);
    	if (crescenza >0 ) printf("La sequenza e' crescente\n");
    	else if (crescenza < 0) printf("La sequenza e' decrescente\n");
    	else printf("La sequenza non e' ne' crescente ne' descrescente\n");
    }
    penso di aver capito tutto quello che ho scritto.. ancora grazie =)

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Ma il tuo risultato è sbagliato.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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 © 2025 vBulletin Solutions, Inc. All rights reserved.