PROBLEMA Aiuto Array in C++

dyn4mic

Nuovo Utente
54
2
Scheda Madre
Asus P8H61 MX USB3
HDD
Maxtor 160gb 7200rpm
RAM
Corsair 8gb 1600mhz ddr3
GPU
Nvidia Geforce 9800GT
Audio
Integrata
Monitor
Philips 170s
PSU
500w
OS
Windows 8 Professional 32bit
Salve a tutti ho da poco iniziato la programmazione in C++ ...
ho un problema con il seguente programma, in pratica devo fare la media di n elementi contenuti in un array.
il programma si avvia, il problema è che mi chiede sempre "Immetti numero: " come se la variabile " n " fosse infinita.
come posso risolvere? grazie

Codice:
#include <iostream>
#include <stdlib.h>
using namespace std;
class Vettore {
        private:
        int* V;
        int n;
        public:
            Vettore(int n);
            void nele();
            void memo();
            void stampa();
            void media();
        };
Vettore::Vettore(int n){
    V=new int[n];
    }
void Vettore::nele(){
    int n;
    cout<<"immetti numero elementi"<<"\n";
    cin>>n;
}
void Vettore::memo(){
    int i;
    for(i=0;i<n;i++){
        cout<<"Immetti numero: ";
        cin>>V[i];
    }
}
void Vettore::stampa(){
    int i;
    for(i=0;i<n;i++){
        cout<<V[i]<<"\n";
    }
}
void Vettore::media(){
    int i, s=0, m;
    for(i=0;i<n;i++){
        s=s+V[i];    
    }
    m=s/n;
    cout<<m<<"\n";
}
int main(){
    int n;    
    Vettore V1 = Vettore(n);
    V1.nele();
    cout<<"Memorizzazione vettore"<<"\n";
    V1.memo();
    cout<<"Visualizzazione vettore"<<"\n";
    V1.stampa();
    system("pause");
    return 0;
}
 
Ultima modifica:

barberino

Utente Attivo
769
46
CPU
i5 750
Scheda Madre
p55-ud4 rev 1
HDD
840 128gb
RAM
8gb vengeance
GPU
evga signature 2 ftx 3g gtx 660
Audio
5.1 yamaha
PSU
xfx 750W pro semi-modulare
Case
c70 black
OS
Windows/linux
ripensa completamente il codice ed evita tutti quei void. fallo tutto nel main...
 

dyn4mic

Nuovo Utente
54
2
Scheda Madre
Asus P8H61 MX USB3
HDD
Maxtor 160gb 7200rpm
RAM
Corsair 8gb 1600mhz ddr3
GPU
Nvidia Geforce 9800GT
Audio
Integrata
Monitor
Philips 170s
PSU
500w
OS
Windows 8 Professional 32bit
ripensa completamente il codice ed evita tutti quei void. fallo tutto nel main...
purtroppo la nostra prof ci dice di farlo così, non posso fare tutto nel main...
sto provando ma non ci riesco proprio, mi potresti aiutare gentilmente?
gli arrey in c++ sono un argomento nuovo per me e la mia prof non spiega.
 

barberino

Utente Attivo
769
46
CPU
i5 750
Scheda Madre
p55-ud4 rev 1
HDD
840 128gb
RAM
8gb vengeance
GPU
evga signature 2 ftx 3g gtx 660
Audio
5.1 yamaha
PSU
xfx 750W pro semi-modulare
Case
c70 black
OS
Windows/linux
sono anni che programmo c++ c# vb.net qt ecc... fatto in quel modo li fa schifo... nel main chiedi il dato, fai cin e lo passi alla void insieme all'indice n e lo memorizza, poi passi al secondo numero e cosi' via... al limite puoi passare al void anche il vettore tramite puntatore...

cmq pierotofy spiega molto bene queste cose... cercalo su google
 

dyn4mic

Nuovo Utente
54
2
Scheda Madre
Asus P8H61 MX USB3
HDD
Maxtor 160gb 7200rpm
RAM
Corsair 8gb 1600mhz ddr3
GPU
Nvidia Geforce 9800GT
Audio
Integrata
Monitor
Philips 170s
PSU
500w
OS
Windows 8 Professional 32bit
si me ne sono accorto anche io che in quel modo fa pena.
la prof ci ha dato un esempio ed è fatto proprio così...
su pierotofy in tutorial -> c++ mi dice che è offline

uff non ci riesco :(
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
@dyn4mic
L'errore è qui:
Codice:
void Vettore::nele(){    int n;    cout<<"immetti numero elementi"<<"\n";    cin>>n;}
Stai utilizzando una variabile automatica. Quando il costruttore crea l'array con gli elementi, utilizza come valore la "n" definita nelle variabili private della classe, non la "n" utilizza nella suddetta funzione.
Eliminando la dichiarazione di n nella funzione nele il programma funge. Comunque ti consiglio di utilizzare nomi per le funzioni più descrittive: aumenterai la leggibilità del codice per te e per chi lo legge. @barberino
Parliamo di C++ non C. Spero tu sappia le differenze. :rolleyes:
 

dyn4mic

Nuovo Utente
54
2
Scheda Madre
Asus P8H61 MX USB3
HDD
Maxtor 160gb 7200rpm
RAM
Corsair 8gb 1600mhz ddr3
GPU
Nvidia Geforce 9800GT
Audio
Integrata
Monitor
Philips 170s
PSU
500w
OS
Windows 8 Professional 32bit
Grazie ho risolto, va bene il programma così strutturato ?

Codice:
#include <iostream>
#include <stdlib.h>
using namespace std;
class Vettore {
	private:
		int* V;
		int l;
		public:
			Vettore(int n);
			void memo();
			void stampa();
			void media();
		};
Vettore::Vettore(int n){
	V=new int[n];
	l=n;
	}


void Vettore::memo(){
	int i;
	for(i=0;i<l;i++){
		cout<<"Immetti "<<i+1<<" numero: ";
		cin>>V[i];
	}
}
void Vettore::stampa(){
	int i;
	for(i=0;i<l;i++){
		cout<<V[i]<<"\t";
	}
}
void Vettore::media(){
	int i, s=0, m;
	for(i=0;i<l;i++){
		s=s+V[i];	
	}
	m=s/l;
	cout<<m<<"\n";
}
int main(){
	int n;
	cout<<"Immetti numero elementi ";
	cin>>n;	
	Vettore V1 = Vettore(n);
	cout<<"\nMemorizzazione vettore"<<"\n\n";
	V1.memo();
	cout<<"\nVisualizzazione vettore"<<"\n\n";
	V1.stampa();
	cout<<"\n\nLa media e' ";
	V1.media();
	cout<<"\n\n";
	system("pause");
	return 0;
}
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Beh io mi riferivo ai nomi delle funzioni, variabili.
Ad esempio la grandezza del vettore potrebbe chiamarsi size_array, magari qualificandola come costante.
Comunque ti consiglio di far verificare l'intero passato al costruttore. Per convenzione si usa endl anziché \n (stile C, ma nessuno ti vieta di utilizzare \n che in alcuni casi è utile):
Codice:
cout << "Inserisci valore: " << endl;
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili