Analizzare valori di un array (quanti pari/disp/nulli? ecc)

di il
18 risposte

Analizzare valori di un array (quanti pari/disp/nulli? ecc)

Buongiorno, ho provato a creare il codice utilizzando di proposito l'array, e dopo vari tentativi sono riuscito a far partire il programma, il quale tuttavia non funziona e non capisco perchè.
1)Cosa ho sbagliato?
Di seguito testo del problema e relativo codice:
/*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.*/

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

int quantita, i;
int positivi, negativi,nulli,pari,dispari;

int main (){
	int positivi=0;
	int negativi=0; //2 ERRORI IN QUESTA RIGA (solo se uso ciclo For)!?
	int nulli=0;
	int pari=0;
	int dispari=0;
	int i=0;//se uso while devo dichiararlo e inizializzarlo uguale a 0 ?
	
	printf ("inserisci quanti numeri vuoi analizzare");
	scanf ("%d", &quantita);
	int vett[quantita];
	while (i>=0 && i<quantita){ //1 ERRORE IN QUESTA RIGA (solo uso il ciclo FOR)!?
		printf ("inserisci la sequenza da analizzare\n");//qui si riempie l'array
		scanf ("%d", &vett[i]);
		i++;
	}
	while (i>=0 && i<quantita){
	scanf ("%d", &vett[i]);
	if (vett[i]>0){positivi++;}//uso "++"
		else if (vett[i]<0){negativi=negativi+1;}//uso "+1"
		else {nulli=nulli+1;}
	i++;
}
	printf ("positivi %d, negativi %d, nulli %d", positivi, negativi, nulli);
	system ("pause");
	return 0;
}// 5 ERRORI IN QUESTA RIGA(solo se uso il ciclo For)!?
2)Leggete i commenti dentro il codice: inizialmente mi sembrava logico usare il FOR tanto quanto il WHILE, eppure solo con quest'ultimo riesco a creare ed eseguire l' .exe, perchè ?

3)Un'altra domanda: quando uso "i" per un conteggio va dichiarata assieme alle altre "int" e va inizializzata a 0? Oppure è tutto automatico (come se "i" fosse una sorta di keyword)?

Grazie

18 Risposte

  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    Ma il codice con il ciclo for dov'è?

    E perchè fai l'input del vettore due volte nelle due while ?
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    azoto ha scritto:


    2)Leggete i commenti dentro il codice: inizialmente mi sembrava logico usare il FOR tanto quanto il WHILE, eppure solo con quest'ultimo riesco a creare ed eseguire l' .exe, perchè ?
    prima di usare while avevo provato con for e mi dava 15-20 errori

    per quanto riguarda i due input mi sa che hai ragione, rimuovo lo scanf del secondo while
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    Sì, ma se non fai vedere il codice del for non puoi sapere dove sbagliavi ...

    Non c'è bisogno di due while ...
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    Per quanto riguarda i due input mi sa che hai ragione, rimuovo lo scanf del secondo while

    il for che utilizzavo prima era questo
    for (i=0, i<quantita, i++){ //1 ERRORE IN QUESTA RIGA  (tra il "i++" e la parentesi chiusa) !?
    		if (vett[i]>0){positivi++;}//uso "++"
    		else if (vett[i]<0){negativi=negativi+1;}//uso "+1"
    		else {nulli=nulli+1;}
    }
    "positivi++" e "negativi=negativi+1" sono stati scritti diversamente per vedere che usciva in output.
    Attualmente qualunque sia l'input, il programma mi da tutti i risultati uguali a zero
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    Nella for ci vanno i ; e non le ,

    for (i=0; i<quantita; i++){
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    Che figuraccia! grazie mille oregon, avevo l'errore proprio sotto il naso...
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    Può capitare ma la prossima volta, al primo messaggio, posta il for che non va così si fa prima ...
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    Certamente!
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    int quantita, i;
    int positivi, negativi,nulli,pari,dispari;
    
    int main (){
       int positivi=0;
       int negativi=0; //2 ERRORI IN QUESTA RIGA (solo se uso ciclo For)!?
       int nulli=0;
       int pari=0;
       int dispari=0;
       int i=0;//se uso while devo dichiararlo e inizializzarlo uguale a 0 ?
    Sono io a vedere doppio oppure qui le varibili sono definiti doppi?
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    Intendi perchè le ho dichiarate prima del main e poi le ho inizializzate a 0 dentro il main ?

    codice aggiornato
    int quantita;
    
    int main (){
    	int positivi=0;
    	int negativi=0; 
    	int nulli=0;
    	int pari=0;
    	int dispari=0;
    	int i=0;
    	
    	printf ("inserisci quanti numeri vuoi analizzare");
    	scanf ("%d", &quantita);
    	int vett[quantita];
    	while (i>=0 && i<quantita){
    		printf ("inserisci la sequenza da analizzare\n");
    		scanf ("%d", &vett[i]);
    		i++;
    	}
    	while (i>=0 && i<quantita){
    		if (vett[i]>0){positivi++;}//uso "++"
    		else if (vett[i]<0){negativi=negativi+1;}//uso "+1"
    		else {nulli=nulli+1;}// uso "+1"
    	i++;
    }
    	printf ("positivi %d, negativi %d, nulli %d", positivi, negativi, nulli);
    	system ("pause");
    	return 0;
    }
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    azoto ha scritto:


    intendi perchè le ho dichiarate prima del main e poi le ho inizializzate a 0 dentro il main ?
    Come avevi fatto tu, non erano inizializzate a 0 nel main ma proprio dichiarate nuovamente. Infatti avevi rimesso "int" davanti ai nomi delle variabili...
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    Ho riscritto il codice e sto correggendo altre cose, a tra poco
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    Rieccomi, ulteriori correzioni, ma l'output resta fisso a "positivi 3, negativi 0, nulli 2"
    #include <stdio.h>
    #include <stdlib.h>
    
    int quantita;//QUANTITA VA SCRITTO SENZA ACCENTO!!! (altrimenti error340 stray in program)
    
    int main (){
    	int positivi=0;
    	int negativi=0; 
    	int nulli=0;
    	int pari=0;
    	int dispari=0;
    	int i=0;
    	
    	printf ("inserisci quanti numeri vuoi analizzare");//dichiaro la quantita
    	scanf ("%d", &quantita);
    	
    	int vett[quantita]; //DICHIARO IL VETTORE
    
    	printf ("inserisci la sequenza da analizzare\n");
    	scanf ("%d", &vett[i]);// VETT[I] OPPURE VETT[QUANTITA] ??
    	
    	for (i>=0;i<quantita;i++){
    		if (vett[i]>0){positivi++;} //così va bene o devo puntare in qualche modo?
    		else if (vett[i]<0){negativi++;}
    		else {nulli++;}//uso "++"
    		}
    		
    	printf ("positivi %d, negativi %d, nulli %d", positivi, negativi, nulli);
    	system ("pause");
    	return 0;
    }
    nel ciclo for (subito prima del printf dell'output)devo usare VETT[I] oppure VETT[QUANTITA] ?
    ps. anche da voi se scrivete una parola accentata vi comprare error340 stray in program ?
  • Re: Analizzare valori di un array (quanti pari/disp/nulli? ecc)

    Vedo che c'è parecchia confusione... Le lettere accentate non vanno usate, e comunque sulle tastiere internazionali non ci sono nemmeno!

    Per quanto riguarda il codice, come riempi il vettore? Io questa parte non la vedo nel tuo codice... Dopo "inserisci la sequenza da analizzare" ci vuole un ciclo per riempire il vettore. Solo dopo che lo hai riempito, puoi fare un ciclo per analizzare i singoli elementi.

    P.S. In realtà puoi fare anche un'analisi on-line: contare gli elementi positivi, negativi e nulli intanto che li inserisci. In questa maniera risparmi un ciclo e quindi tempo di calcolo.
Devi accedere o registrarti per scrivere nel forum
18 risposte