Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-01-2014, 22:53   #1
amicoalbi
Member
 
L'Avatar di amicoalbi
 
Iscritto dal: Mar 2008
Città: Trani
Messaggi: 92
[C] Esercizio Vettore -principiante

Salve ragazzi ho bisogno di una mano con un programmino. Vi riporto la traccia:

Acquisire da tastiera elementi non nulli che compongono il vettore V (il valore nullo blocca l'acquisizione e non il programma e non appartiene al vettore acquisito). Ricercare, in un unico ciclo, la media dei soli valori pari (non di posto pari) presenti nel vettore.


Codice:
#include "stdio.h"

void input_vett (int x,int V[])
{
    int i;
    do
    {
        printf("inserire dimensione del vettore V\nDimensione Vettore =");
        scanf("%d",&x);
    }
    while (x<2);
    for (i=0;i<x;i++)
    {
        printf("V[%d]=",i);
        scanf("%d",&V[i]);
    }
}

void media_numeri_pari (int x, int V[])
        {
            int i,n=0,c=0;
        for(i=0;i<x-1;i++)
        if (V[i]%2==0);
        {
            n=V[i]+n;
            c++;
        }
    //media aritmetica//
    float m; m=(n/c);
    printf("La media dei numeri pari inseriti è %f",m);
    }
void main()
{
    int x,V;float m;
    void input_vett(int x, int V[]);
    void media_numeri_pari(int x, int V[]);
}
Il programma non funge e credo che i problemi siano nel passaggio delle variabili alle procedure del main ma purtroppo non ne sono venuto a capo.

PS idee su come bloccare l'acquisizione dei valori all'immissione di un valore nullo?

Vi ringrazio in anticipo
amicoalbi è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2014, 06:51   #2
amicoalbi
Member
 
L'Avatar di amicoalbi
 
Iscritto dal: Mar 2008
Città: Trani
Messaggi: 92
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
aprire un libro di C e studiare il concetto di funzione, cosa sono i parametri attuali e i parametri formali, e come avviene il passaggio dei parametri.
Ahia è davvero così grave?
Ho cercato di scrivere qualcosa basandomi sugli appunti presi in aula.
amicoalbi è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2014, 08:31   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da amicoalbi Guarda i messaggi
Ahia è davvero così grave?
Ho cercato di scrivere qualcosa basandomi sugli appunti presi in aula.
No, non credo che sia cosi' grave, anzi mi sembra che abbia lavorato bene. Sei sulla buona strada.
Alcuni dettagli:

Codice:
void input_vett (int x,int V[])
In questo modo, il valore di x puo' essere solo letto da input_vett(): le modifiche che fai al suo interno, verranno perse in uscita da questa funzione.
Dovrai quindi cambiare questo "prototipo" di funzione e specificare che il valore x sara' modificato dalla funzione. Non so se hai bisogno che te lo scriva o se vuoi far da solo (per ora non lo scrivo, fammi sapere se hai bisogno che invece lo faccia)

Codice:
    for (i=0;i<x;i++)
    {
        printf("V[%d]=",i);
        scanf("%d",&V[i]);
    }
E' corretto e funziona, ma ci sono due problemi:
1 - l'utente potrebbe continuare ad inserire fino a superare la dimensione del vettore;
2 - la traccia, se ho capito bene, diceva che l'acquisizione termina quando viene inserito uno zero (il quale non deve far parte della sequenza) e non c'e' traccia di questa cosa.
Il mio suggerimento e' quello di modificare questo ciclo, magari utilizzando un ciclo while, in modo da rispettare la condizione di uscita all'introduzione di uno zero ed in modo che non sia possibile inserire elementi una volta che il vettore e' riempito correttamente;

Codice:
void media_numeri_pari (int x, int V[])
{
    int i,n=0,c=0;
    for(i=0;i<x-1;i++)
        if (V[i]%2==0);
    {
        n=V[i]+n;
        c++;
    }
    //media aritmetica//
    float m; m=(n/c);
    printf("La media dei numeri pari inseriti è %f",m);
}
Va benissimo, a parte quell' i < x-1: non ti piace l'ultimo elemento inserito?
(devi arrivare fino a x, cioe' i < x)

Codice:
void main()
{
    int x,V;float m;
    void input_vett(int x, int V[]);
    void media_numeri_pari(int x, int V[]);
}
Non si compila, vero?
Hai dichiarato V come un intero, non come un vettore di interi. Lo sai come si fa?
Una volta sistemate le dichiarazioni, devi sistemare le chiamate alle funzioni che hai definito. Ti ricordi come si chiamano? La chiamata di una funzione e' stata disegnata in modo che risulti "naturale", come se fosse un qualsiasi altro comando del linguaggio, quindi non hai bisogno di passare il tipo delle variabili e specificare il tipo del valore di ritorno (i.e. void).

Spero di esserti stato utile
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2014, 15:12   #4
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3938
poi l'esame lo passi quest'altr'anno

cmq la dichiarazione di dimensioni va fatta sulla main: le funzioni per un programmino cosi' puoi anche evitarle visto che le metti in fila una dopo l'altra

per dimensionare l'array ci vorrebbe la malloc() con parametro gli inserimenti moltiplicati per sizeof
tuttavia se già troppo avanti puoi limitarti per adesso a fare un array di massima a 1000 elementi
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2014, 16:08   #5
amicoalbi
Member
 
L'Avatar di amicoalbi
 
Iscritto dal: Mar 2008
Città: Trani
Messaggi: 92
Prima di tutto grazie a tutti.

Mi metto a lavoro manuale alla mano. Posterò i risultati più tardi
amicoalbi è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 16:36   #6
amicoalbi
Member
 
L'Avatar di amicoalbi
 
Iscritto dal: Mar 2008
Città: Trani
Messaggi: 92
Mi sono dedicato allo studio in questo tempo.
Non mi è però ben chiaro come passare per indirizzo la variabile m. In questo caso rimane nel blocco dopo l'if e non ritorna niente nel main?
Questo codice viene compilato ma l'eseguibile si blocca appena dopo l'inserimento del primo elemento del vettore.

PS sono "obbligato" ad usare le funzioni nonostante il programma sia oggettivamente semplice perché nell'esame il prof vuole vedere i passaggi, le chiamate ecc...

Grazie a chi risponderà


Codice:
#include "stdio.h"
#define MAX 100

void input_vett (int V[])
{
    int i;
    for (i=0;i<MAX;i++)
    do
        {
        printf("Inserire elementi vettore\nV[%d]=",i);
        scanf("%d",&V[i]);
        }
        while (V[i]!=0);
}

float media_numeri_pari (int V[])
        {
        int i,n=0,c=0;float m;
        for(i=0;i<MAX;i++)
        if (V[i]%2==0);
        {
            n+=V[i];
            c++;
            m=(n/c);
        }
        return m;
    }

main ()
{
    int V[MAX]; float p;
    input_vett(V[MAX]);
    p=media_numeri_pari(V[MAX]);
    printf("La media dei numeri pari è %f,p");
}
amicoalbi è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 18:44   #7
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3938
si ma V nella main è sciolto... non è assegnato a niente

invece di void input_vett fai int* input_vett()
e ritorna il puntatore al vettore interi

quindi nella main fai V=input_vett(V);
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 19:10   #8
amicoalbi
Member
 
L'Avatar di amicoalbi
 
Iscritto dal: Mar 2008
Città: Trani
Messaggi: 92
Quote:
Originariamente inviato da bancodeipugni Guarda i messaggi
si ma V nella main è sciolto... non è assegnato a niente

invece di void input_vett fai int* input_vett()
e ritorna il puntatore al vettore interi

quindi nella main fai V=input_vett(V);
Codice:
#include "stdio.h"
#define MAX 100

int* input_vett (int V[])
{
    int i;
    for (i=0;i<MAX;i++)
    do
        {
        printf("Inserire elementi vettore\nV[%d]=",i);
        scanf("%d",&V[i]);
        }
        while (V[i]!=0);
        return &V;
}

float media_numeri_pari (int V[])
        {
        int i,n=0,c=0;float m;
        for(i=0;i<MAX;i++)
        if (V[i]%2==0);
        {
            n+=V[i];
            c++;
            m=(n/c);
        }
        return m;
    }

main ()
{
    int V[MAX]; float p;
    V=*input_vett(V);
    p=media_numeri_pari(V);
    printf("La media dei numeri pari è %f",p);
}
Così? Sbaglio sicuro perché non compila.
Definendo int* input_vett (int V[]) sto dicendo che input_vett è puntatore al vettore di interi. Devo fare ritornare l'indirizzo del primo elemento del vettore? Come?

alla riga V=*input_vett(V); ho un bel error: incompatible types when assigning to type 'int[100]' from type 'int'|

Scusate l'incompetenza
amicoalbi è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 19:32   #9
amicoalbi
Member
 
L'Avatar di amicoalbi
 
Iscritto dal: Mar 2008
Città: Trani
Messaggi: 92
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
media_numeri_pari() ha bisogno di ricevere in ingresso un puntatore al primo elemento dell'array, mentre tu gli passi l'elemento numero 100 dell'array stesso e lo stesso vale per input_vett()
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
cosa vuol dire non e' assegnato a niente? nel main definisce un vettore allocato nello stack MAX int che chiama V e lo vuole passare alla funzione per farlo riempire..
In effetti l'idea è proprio questa, far riempire il vettore. Non ho capito però come definire un puntatore al primo elemento dell'array. Qualcosa del tipo int *V[0]? Mi pare troppo brutto
amicoalbi è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 19:37   #10
amicoalbi
Member
 
L'Avatar di amicoalbi
 
Iscritto dal: Mar 2008
Città: Trani
Messaggi: 92
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
puoi usare benissimo il programma originale passando semplicemente V invece che V[MAX]
In effetti adesso non crasha al primo elemento
Però non blocca l'acquisizione degli elementi quando inserisco zero. Come mai?
amicoalbi è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 19:44   #11
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da amicoalbi Guarda i messaggi
Codice:
#include "stdio.h"
#define MAX 100

int* input_vett (int V[])
{
    int i;
    for (i=0;i<MAX;i++)
    do
        {
        printf("Inserire elementi vettore\nV[%d]=",i);
        scanf("%d",&V[i]);
        }
        while (V[i]!=0);
        return &V;
}

float media_numeri_pari (int V[])
        {
        int i,n=0,c=0;float m;
        for(i=0;i<MAX;i++)
        if (V[i]%2==0);
        {
            n+=V[i];
            c++;
            m=(n/c);
        }
        return m;
    }

main ()
{
    int V[MAX]; float p;
    V=*input_vett(V);
    p=media_numeri_pari(V);
    printf("La media dei numeri pari è %f",p);
}
Così? Sbaglio sicuro perché non compila.
Definendo int* input_vett (int V[]) sto dicendo che input_vett è puntatore al vettore di interi. Devo fare ritornare l'indirizzo del primo elemento del vettore? Come?

alla riga V=*input_vett(V); ho un bel error: incompatible types when assigning to type 'int[100]' from type 'int'|

Scusate l'incompetenza
Errore madornale: input_vett non è un puntatore ad un vettore di interi, è una funzione che restituisce un puntatore ad interi e prende in argomento un vettore di interi.
Errore davvero grave questo, devi distinguere funzioni da variabili...
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 19:55   #12
amicoalbi
Member
 
L'Avatar di amicoalbi
 
Iscritto dal: Mar 2008
Città: Trani
Messaggi: 92
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Errore madornale: input_vett non è un puntatore ad un vettore di interi, è una funzione che restituisce un puntatore ad interi e prende in argomento un vettore di interi.
Errore davvero grave questo, devi distinguere funzioni da variabili...
Me lo segno. Stavo cercando di interpretare quanto suggeritomi da un altro utente

Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
ti conviene stampare di volta in volta il carattere che hai effettivamente salvato dopo ogni acquisizione dentro V[i], la newline che aggiungi quando premi invio ma non leggi esplicitamente puo' creare problemi.

per definire un puntatore basta semplicemente una cosa di questo tipo:

Codice:
int * pInt = &V[0];
Allora sì, se stampo i valori effettivamente li prende.
Ho capito anche qual è la logica: acquisisce sempre il valore dell'elemento i-esimo sostituendolo col precedente e termina l'acquisizione dei dati da tastiera per l'elemento i-esimo soltanto se inserisco 0 fino a riempire tutto il vettore.
Cioè all'avvio se continuo a scrivere valori questi diventano ogni volta il valore di V[0] a meno che non inserisca 0. Così passa a V[1] fino a V[MAX].

La traccia richiede invece che l'acquisizione si fermi proprio al primo valore nullo inserito. Ma in quel caso varierebbe anche la dimensione del vettore in base al numero di valori inseriti fino a quel momento. Consigli su come risolvere questo problema? Cerco di farlo da solo
amicoalbi è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 20:31   #13
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3938
Quote:
Originariamente inviato da amicoalbi Guarda i messaggi
[code]

alla riga V=*input_vett(V); ho un bel error: incompatible types when assigning to type 'int[100]' from type 'int'|

Scusate l'incompetenza
V = input....

per dirla in parole poverem assegnando l'asterisco, assegni a un vettore un solo valore
invece devi assegnare a vettore un vettore cioè puntatore a puntatore
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2014, 20:31   #14
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da amicoalbi Guarda i messaggi
Me lo segno. Stavo cercando di interpretare quanto suggeritomi da un altro utente
Scrivere poi
V = *input_vett(V);
significa:
1) Chiamo la funzione input_vett passandogli V come argomento
2) Prendo il suo valore di ritorno (un int*) e lo dereferenzio usando *
3) Assegno l'int (quando dereferenzi un puntatore, ottieni il valore puntato) a V. E qua c'è l'errore: V è di tipo int[] (cioè int*, ma per ora non chiedere perchè), quindi non puoi assegnargli un int.
Ricapitolando, il tuo codice equivale a:
Codice:
int* valoreDiRitorno = input_vett(V);
int valorePuntatoDalValoreDiRitorno = *valoreDiRitorno; // Passo da int* a int usando *
// Notare che questo equivale a:
int valorePuntatoDalValoreDiRitorno = operator*(valoreDiRitorno);
// Poichè gli operatori sono alla fin fine delle funzioni (unarie, come in questo caso, o binarie, come il +)
V = valorePuntatoDalValoreDiRitorno; // Errore: assegno un int ad un int[]
Ti consiglio di usare, almeno all'inizio quando devi ancora capire come funziona tutto, di scrivere i passaggi uno ad uno, di modo che capisci bene cosa succede e non fai due operazioni nella stessa riga.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 01:26   #15
amicoalbi
Member
 
L'Avatar di amicoalbi
 
Iscritto dal: Mar 2008
Città: Trani
Messaggi: 92
Grazie vendettaaaaa e bancodeipugni per il vostro intervento: è davvero più chiaro adesso.
Chiaro tanto che mi sono ingegnato per cercare di soddisfare la richiesta in maniera più precisa (acquisizione si ferma al primo 0 e questo 0 non fa parte del vettore) e ci sono riuscito... purtroppo solo in parte.
Mi spiego

Codice:
#include "stdio.h"
#define MAX 10

void input_vett (int V[])

    {int i,t;
        for(i=0;i<MAX;i++)
        {
            printf("Inserire elementi del vettore V\n   V[%d]=",i);
            scanf("%d",&t);
            if(t!=0) V[i]=t; else break;
        }

    }

main()
    {   int V[MAX],i;
        input_vett(V);
        for(i=0;i<MAX;i++) printf("V[%d]=%d\n",i,V[i]);
    }
Inserendo anche la funzione media mi vengono fuori valori strani così ho verificato con delle stampe (PS sono già soddisfatto perché ciò che scrivo venga compilato quasi al primo colpo ).

Ciò che voglio è che il vettore abbia dimensione pari al valore della i dell'ultimo elemento inserito. Il codice che ho scritto non risponde evidentemente alla mia volontà perché il programma riempie il vettore fino a i=MAX con dei valori random (?) o mi mostra gli indirizzi di ogni elemento (?). D'altro canto non specificare la dimensione dell'array vettore nel main vuol dire veder comparire un bel errore...

Qualche dritta anche su questo punto?

PS sto imparando più grazie a voi che alle lezioni in aula praticamente
Birra pagata se passate dalle mie parti
amicoalbi è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 10:20   #16
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da amicoalbi Guarda i messaggi
Ciò che voglio è che il vettore abbia dimensione pari al valore della i dell'ultimo elemento inserito. Il codice che ho scritto non risponde evidentemente alla mia volontà perché il programma riempie il vettore fino a i=MAX con dei valori random (?) o mi mostra gli indirizzi di ogni elemento (?). D'altro canto non specificare la dimensione dell'array vettore nel main vuol dire veder comparire un bel errore...
qui o usi l'allocazione dinamica della memoria (vedi malloc e affini), oppure dopo aver riempito il primo vettore (grande a sufficienza ma più del necessario) ne copi il contenuto in uno grande il giusto e butti il primo.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 11:05   #17
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3938
questo perché non sono probabilmente settati a 0
o usi calloc() o memset() e poi interrompi la stampa al primo NULL che incontra
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 12:21   #18
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da amicoalbi Guarda i messaggi
Grazie vendettaaaaa e bancodeipugni per il vostro intervento: è davvero più chiaro adesso.
Chiaro tanto che mi sono ingegnato per cercare di soddisfare la richiesta in maniera più precisa (acquisizione si ferma al primo 0 e questo 0 non fa parte del vettore) e ci sono riuscito... purtroppo solo in parte.
Mi spiego

Codice:
#include "stdio.h"
#define MAX 10

void input_vett (int V[])

    {int i,t;
        for(i=0;i<MAX;i++)
        {
            printf("Inserire elementi del vettore V\n   V[%d]=",i);
            scanf("%d",&t);
            if(t!=0) V[i]=t; else break;
        }

    }

main()
    {   int V[MAX],i;
        input_vett(V);
        for(i=0;i<MAX;i++) printf("V[%d]=%d\n",i,V[i]);
    }
Inserendo anche la funzione media mi vengono fuori valori strani così ho verificato con delle stampe (PS sono già soddisfatto perché ciò che scrivo venga compilato quasi al primo colpo ).

Ciò che voglio è che il vettore abbia dimensione pari al valore della i dell'ultimo elemento inserito. Il codice che ho scritto non risponde evidentemente alla mia volontà perché il programma riempie il vettore fino a i=MAX con dei valori random (?) o mi mostra gli indirizzi di ogni elemento (?). D'altro canto non specificare la dimensione dell'array vettore nel main vuol dire veder comparire un bel errore...

Qualche dritta anche su questo punto?

PS sto imparando più grazie a voi che alle lezioni in aula praticamente
Birra pagata se passate dalle mie parti
Codice:
#include "stdio.h"

#define MAX 10

void input_vett(int V[])
{
	int i, t;

	for (i = 0; i < MAX; ++i)
	{
		printf("Inserire elementi del vettore V\n   V[%d] = ", i);
		scanf("%d", &t);

		if (t != 0)
			V[i] = t;
		else
			break;
	}

}

void main()
{
	int V[MAX] = { 0 };
	int i;

	input_vett(V);

	for (i = 0; i < MAX; ++i)
		printf("V[%d] = %d\n", i, V[i]);
}
Come dice bancodeipugni, il valore dei MAX elementi del vettore è casuale e non settato ad uno specifico valore iniziale.
Questo perchè ogni volta che in C e C++ si alloca spazio in memoria per una variabile di tipo built-in, tale variabile viene inizializzata con un valore casuale (o quasi casuale), ma non a 0 come ci si potrebbe aspettare.
Che la variabile sia una o più (un array) il risultato non cambia, quindi se aggiungi la parte che ti ho messo in rosso tutti i MAX valori saranno inizializzati a 0.

Questo però non risponde alla tua domanda: tu vuoi che nella stampa dopo la chiamata ad input_vett vengano visualizzati solo 6 numeri se ne hai inseriti 6.
Di certo la tua frase "voglio che il vettore abbia dimensione pari all'ultimo numero inserito" contrasta col codice scritto finora: tu dimensioni l'array in modo statico (avrà sempre dimensione MAX: gli array built-in hanno dimensione decisa a compile-time, non puoi cambiarla a runtime; cioè fare
Codice:
int main()
{
    int n;
    // Leggi n da console
    int V[n] = { 0 };
}
non compila: n dev'essere conosciuto in fase di compilazione). Hai allora due opzioni:
- Fai come ti dice Oceans11, e devi cmq usare malloc per allocare a runtime un vettore del giusto numero di elementi
- Il vettore rimane di dimensione MAX ma lo inizializzi (parte in rosso) con un valore "improbabile", tipo -987654321, e in fase di stampa, dopo input_vett, se V[i] == -987654321 (perchè, in lettura, l'utente aveva inserito uno 0 all'iterazione i-esima) interrompi.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 12:32   #19
amicoalbi
Member
 
L'Avatar di amicoalbi
 
Iscritto dal: Mar 2008
Città: Trani
Messaggi: 92
Sì infatti mi sono tirato fuori dall'inghippo in una maniera simile.

Codice:
#include "stdio.h"
#define MAX 10

main()

    {int i,n,t,V[MAX],N=0; float media=0.; //N è contatore//
        for(i=0;i<MAX;i++)
        {
            printf("Inserire elementi del vettore V\n   V[%d]=",i);
            scanf("%d",&t);
            if(t!=0) V[i]=t; else break;
        }

        for(n=0;n<i;n++)
           {
               if((V[n]%2==0) && (V[n]!=0))
               {
                    media+=V[n];
                    N ++;
               }

           }
            printf("La media dei numeri pari inseriti = %f",media/N);
    }
Semplicemente faccio in questo modo che credo sia l'unico alla mia portata.

Grazie a tutti
amicoalbi è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 12:37   #20
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Indentazione orribile cmq
Ma ne cambierai un po' prima di arrivare a quella che più ti aggrada...
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Un gruppo di ladri ha usato Google Maps ...
Apple non si fida di Samsung per la real...
Windows 11: un nuovo driver nativo mette...
Vi hanno regalato buoni Amazon? Intanto ...
Via acari, polvere e sporco da materassi...
Cuffie Beats in super offerta su Amazon,...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
Windows 11 è diventato più...
Apple cambia strategia a causa della cri...
007 First Light: uscita rimandata di due...
Samsung Galaxy A37 e A57: il comparto fo...
DAZN lancia la sua offerta di Natale: My...
Gigabyte fa marcia indietro? Sparito il ...
Alcuni rivenditori giapponesi bloccano l...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:34.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v