PDA

View Full Version : ARRAY C++ - Ho un problema con un programma che sto facendo...


Riccardo_Paccagnella
14-01-2015, 20:38
Tralasciamo il fatto che io non mi sia ancora presentato, ma è da dieci minuti che cerco la sezione presentazioni e non la trovo quindi mi sono arreso :doh:

Chi volesse saltare la presentazione vada più giù saltando lo spoiler:

Presentazione:

Mi chiamo Riccardo ho 17 anni compiuti da sei mesi circa, io ho sempre avuto la voglia di programmare ma per questioni legate allo studio i miei non mi hanno voluto far fare la scuola informatica.
Dopo due anni di superiori essendo che non era la scuola che avevo scelto l'ho lasciata.
Da circa due settimane vado con un mio amico, frequentante l'università informatica, a sentire le lezioni d'informatica all'università di Parma, essendo una scuola aperta a tutti.
Vedendo quel'università mi è venuta voglia di ritornare a scuola ma non riuscirò mai a convincere i miei quindi lascio perdere a priori!
Io programmo solitamente java, e una volta ero anche abbastanza bravo (Dico una volta perché ho smesso di programmare circa un'annetto fa per problemi legati al pc)
Ora mi piacerebbe riprendere e iniziare anche con c++
Salve!

Ora torniamo al mio problema, io e altri due miei amici stiamo facendo un progetto legato alle formiche, nel senso vogliamo fare un formicaio.
A me, essendo l'unico che se ne intende un po di programmazione, hanno chiesto di fare un programma che calcola temperature medie settimanali giornaliere la massima la minima ecc...
Io l'ho fatto mettendo che per giorno bisogna inserire due temperature e quindi per settimana 14...
Solamente che io vorrei fare in modo che non debba scrivere tutti gli int e tutte le volte la media e vorrei sapere se con gli Array sia possibile fare la media tra i primi due numeri inseriti, tra il terzo e il quarto e cosi via senza dover scrivere ogni volta come ho fatto qua!

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <fstream.h>

using namespace std;

int leggi()

{

int para;
cout << "Benvenuto, le temperature della scorsa settimana sono" << endl <<endl;

ifstream myfile;
myfile.open ("temperature.txt");
char c;
while (!myfile.eof())
{c=myfile.get();
cout << c;
}
myfile.close();
goto ciao;

ciao:
cout << endl <<endl << "Inserisci le temperature della settimana\n" << endl;
do
{
cin >> para;
if (para<-20) cout << "Errore la temperatura inserita è troppo bassa\n";
}
while (para<-20);
return para;
}


float media (int para, int parb)

{
int g1 = para+parb;
float gg1 = (float) g1/2;
return gg1;
}

float media1 (int parc, int pard)

{
int g2 = parc+pard;
float gg2 = (float) g2/2;
return gg2;
}

float media2 (int pare, int parf)

{
int g3 = pare+parf;
float gg3 = (float) g3/2;
return gg3;
}

float media3 (int parg, int parh)

{
int g4 = parg+parh;
float gg4 = (float) g4/2;
return gg4;
}

float media4 (int pari, int parj)

{
int g5 = pari+parj;
float gg5 = (float) g5/2;
return gg5;
}

float media5 (int park, int parl)

{
int g6 = park+parl;
float gg6 = (float) g6/2;
return gg6;
}

float media6 (int parm, int parn)

{
int g7 = parm+parn;
float gg7 = (float) g7/2;
return gg7;
}


float media15 (int para, int parb, int parc, int pard, int pare, int parf, int parg, int parh, int pari, int parj, int park, int parl, int parm, int parn,)

{
int s = para+parb+parc+pard+pare+parf+parg+parh+pari+parj+park+parl+parm+parn;
float m = (float) s/14;
return m;
}

int massimo (int para, int parb, int parc, int pard, int pare, int parf, int parg, int parh, int pari, int parj, int park, int parl, int parm, int parn,)

{
int max=para;
if (max<parb) max=parb;
if (max<parc) max=parc;
if (max<pard) max=pard;
if (max<pare) max=pare;
if (max<parf) max=parf;
if (max<parg) max=parg;
if (max<parh) max=parh;
if (max<pari) max=pari;
if (max<parj) max=parj;
if (max<park) max=park;
if (max<parl) max=parl;
if (max<parm) max=parm;
if (max<parn) max=parn;


return max;
}

int minimo (int para, int parb, int parc, int pard, int pare, int parf, int parg, int parh, int pari, int parj, int park, int parl, int parm, int parn)

{
int min=para;
if (min>parb) min=parb;
if (min>parc) min=parc;
if (min>pard) min=pard;
if (min>pare) min=pare;
if (min>parf) min=parf;
if (min>parg) min=parg;
if (min>parh) min=parh;
if (min>pari) min=pari;
if (min>parj) min=parj;
if (min>park) min=park;
if (min>parl) min=parl;
if (min>parm) min=parm;
if (min>parn) min=parn;


return min;
}

int main()

{
int q, para, parb, parc, pard, pare, parf, parg, parh, pari, parj, park, parl, parm, parn,;
float m;
float gg1;
float gg2;
float gg3;
float gg4;
float gg5;
float gg6;
float gg7;

para=leggi();
parb=leggi();
parc=leggi();
pard=leggi();
pare=leggi();
parf=leggi();
parg=leggi();
parh=leggi();
pari=leggi();
parj=leggi();
park=leggi();
parl=leggi();
parm=leggi();
parn=leggi();


system("CLS");

gg1=media (para, parb);
cout << "La media di Lunedi e' " << gg1 << endl;

gg2=media1 (parc, pard);
cout << "La media di Martedi e' " << gg2 << endl;

gg3=media2 (pare, parf);
cout << "La media di Mercoledi e' " << gg3 << endl;

gg4=media3 (parg, parh);
cout << "La media di Giovedi e' " << gg4 << endl;

gg5=media4 (pari, parj);
cout << "La media di Venerdi e' " << gg5 << endl;

gg6=media5 (park, parl);
cout << "La media di Sabato e' " << gg6 << endl;

gg7=media6 (parm, parn);
cout << "La media di Domenica e' " << gg7 << endl;



m=media15 (para, parb, parc, pard, pare, parf, parg, parh, pari, parj, park, parl, parm, parn);
cout << endl << "La media settimanale e' " << m << endl;

int max=massimo (para, parb, parc, pard, pare, parf, parg, parh, pari, parj, park, parl, parm, parn);
cout << "La massima settimanale e' " << max << endl;

int min=minimo (para, parb, parc, pard, pare, parf, parg, parh, pari, parj, park, parl, parm, parn);
cout << "La minima settimanale e' " << min << endl << endl;



cout << "Premere una lettera e invio per uscire dal programma" << endl << endl;
cout << "Grazie mille e Arrivederci" << endl;
cout << "Copyright Paccagnella Riccardo" << endl;
cin>>q;
return EXIT_SUCCESS;
}

ingframin
15-01-2015, 05:37
Tralasciamo il fatto che io non mi sia ancora presentato, ma è da dieci minuti che cerco la sezione presentazioni e non la trovo quindi mi sono arreso :doh:

Chi volesse saltare la presentazione vada più giù saltando lo spoiler:

Presentazione:

Mi chiamo Riccardo ho 17 anni compiuti da sei mesi circa, io ho sempre avuto la voglia di programmare ma per questioni legate allo studio i miei non mi hanno voluto far fare la scuola informatica.
Dopo due anni di superiori essendo che non era la scuola che avevo scelto l'ho lasciata.
Da circa due settimane vado con un mio amico, frequentante l'università informatica, a sentire le lezioni d'informatica all'università di Parma, essendo una scuola aperta a tutti.
Vedendo quel'università mi è venuta voglia di ritornare a scuola ma non riuscirò mai a convincere i miei quindi lascio perdere a priori!
Io programmo solitamente java, e una volta ero anche abbastanza bravo (Dico una volta perché ho smesso di programmare circa un'annetto fa per problemi legati al pc)
Ora mi piacerebbe riprendere e iniziare anche con c++
Salve!

Ora torniamo al mio problema, io e altri due miei amici stiamo facendo un progetto legato alle formiche, nel senso vogliamo fare un formicaio.
A me, essendo l'unico che se ne intende un po di programmazione, hanno chiesto di fare un programma che calcola temperature medie settimanali giornaliere la massima la minima ecc...
Io l'ho fatto mettendo che per giorno bisogna inserire due temperature e quindi per settimana 14...
Solamente che io vorrei fare in modo che non debba scrivere tutti gli int e tutte le volte la media e vorrei sapere se con gli Array sia possibile fare la media tra i primi due numeri inseriti, tra il terzo e il quarto e cosi via senza dover scrivere ogni volta come ho fatto qua!

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <fstream.h>

using namespace std;

int leggi()

{

int para;
cout << "Benvenuto, le temperature della scorsa settimana sono" << endl <<endl;

ifstream myfile;
myfile.open ("temperature.txt");
char c;
while (!myfile.eof())
{c=myfile.get();
cout << c;
}
myfile.close();
goto ciao;

ciao:
cout << endl <<endl << "Inserisci le temperature della settimana\n" << endl;
do
{
cin >> para;
if (para<-20) cout << "Errore la temperatura inserita è troppo bassa\n";
}
while (para<-20);
return para;
}


float media (int para, int parb)

{
int g1 = para+parb;
float gg1 = (float) g1/2;
return gg1;
}

float media1 (int parc, int pard)

{
int g2 = parc+pard;
float gg2 = (float) g2/2;
return gg2;
}

float media2 (int pare, int parf)

{
int g3 = pare+parf;
float gg3 = (float) g3/2;
return gg3;
}

float media3 (int parg, int parh)

{
int g4 = parg+parh;
float gg4 = (float) g4/2;
return gg4;
}

float media4 (int pari, int parj)

{
int g5 = pari+parj;
float gg5 = (float) g5/2;
return gg5;
}

float media5 (int park, int parl)

{
int g6 = park+parl;
float gg6 = (float) g6/2;
return gg6;
}

float media6 (int parm, int parn)

{
int g7 = parm+parn;
float gg7 = (float) g7/2;
return gg7;
}


float media15 (int para, int parb, int parc, int pard, int pare, int parf, int parg, int parh, int pari, int parj, int park, int parl, int parm, int parn,)

{
int s = para+parb+parc+pard+pare+parf+parg+parh+pari+parj+park+parl+parm+parn;
float m = (float) s/14;
return m;
}

int massimo (int para, int parb, int parc, int pard, int pare, int parf, int parg, int parh, int pari, int parj, int park, int parl, int parm, int parn,)

{
int max=para;
if (max<parb) max=parb;
if (max<parc) max=parc;
if (max<pard) max=pard;
if (max<pare) max=pare;
if (max<parf) max=parf;
if (max<parg) max=parg;
if (max<parh) max=parh;
if (max<pari) max=pari;
if (max<parj) max=parj;
if (max<park) max=park;
if (max<parl) max=parl;
if (max<parm) max=parm;
if (max<parn) max=parn;


return max;
}

int minimo (int para, int parb, int parc, int pard, int pare, int parf, int parg, int parh, int pari, int parj, int park, int parl, int parm, int parn)

{
int min=para;
if (min>parb) min=parb;
if (min>parc) min=parc;
if (min>pard) min=pard;
if (min>pare) min=pare;
if (min>parf) min=parf;
if (min>parg) min=parg;
if (min>parh) min=parh;
if (min>pari) min=pari;
if (min>parj) min=parj;
if (min>park) min=park;
if (min>parl) min=parl;
if (min>parm) min=parm;
if (min>parn) min=parn;


return min;
}

int main()

{
int q, para, parb, parc, pard, pare, parf, parg, parh, pari, parj, park, parl, parm, parn,;
float m;
float gg1;
float gg2;
float gg3;
float gg4;
float gg5;
float gg6;
float gg7;

para=leggi();
parb=leggi();
parc=leggi();
pard=leggi();
pare=leggi();
parf=leggi();
parg=leggi();
parh=leggi();
pari=leggi();
parj=leggi();
park=leggi();
parl=leggi();
parm=leggi();
parn=leggi();


system("CLS");

gg1=media (para, parb);
cout << "La media di Lunedi e' " << gg1 << endl;

gg2=media1 (parc, pard);
cout << "La media di Martedi e' " << gg2 << endl;

gg3=media2 (pare, parf);
cout << "La media di Mercoledi e' " << gg3 << endl;

gg4=media3 (parg, parh);
cout << "La media di Giovedi e' " << gg4 << endl;

gg5=media4 (pari, parj);
cout << "La media di Venerdi e' " << gg5 << endl;

gg6=media5 (park, parl);
cout << "La media di Sabato e' " << gg6 << endl;

gg7=media6 (parm, parn);
cout << "La media di Domenica e' " << gg7 << endl;



m=media15 (para, parb, parc, pard, pare, parf, parg, parh, pari, parj, park, parl, parm, parn);
cout << endl << "La media settimanale e' " << m << endl;

int max=massimo (para, parb, parc, pard, pare, parf, parg, parh, pari, parj, park, parl, parm, parn);
cout << "La massima settimanale e' " << max << endl;

int min=minimo (para, parb, parc, pard, pare, parf, parg, parh, pari, parj, park, parl, parm, parn);
cout << "La minima settimanale e' " << min << endl << endl;



cout << "Premere una lettera e invio per uscire dal programma" << endl << endl;
cout << "Grazie mille e Arrivederci" << endl;
cout << "Copyright Paccagnella Riccardo" << endl;
cin>>q;
return EXIT_SUCCESS;
}

Posso farti un paio di domande?
1) Perché leggi un file per stamparlo a video? Non faresti prima a mettere le temperature in quel file di testo e a leggerle da li?

2)A che serve questa linea?
goto ciao;

ciao: ...
Non c'è niente in mezzo!

3) Che senso ha ridefinire la funzione media 15 volte?
Per altro il cast da int a float in quel modo non è per nulla assodato che funzioni... stai rischiando di perdere parecchio in precisione...

4) Perché la funzione "minimo" fa così tante cose?

5) Cosa hai contro array e cicli for?

Rispondi a queste domande e avrai la chiave di lettura del tuo problema.

Riccardo_Paccagnella
15-01-2015, 10:38
Si, in effetti il "goto" non ha senso, una volta li in mezzo c'era un codice ora non più quindi lo tolgo.

La funzione media l'ho dichiarata più di una volta per il fatto che io non sempre faccio la stessa media e quindi i risultati sono sempre diversi e quindi deve essere dichiarata una nuova media, o sbaglio?

Per il fatto degli array e i cicli non utilizzati è per il semplice fatto che non credo che con un array posso fare più medie con numeri diversi però contenuti all'interno, o sbaglio?

La funzione min e max fanno cosi tante cose perché deve calcolare quella di ogni giorno e quella settimanale. Quindi è per questo..

Aspetto una tua risposta, ciao!

!fazz
15-01-2015, 11:15
Si, in effetti il "goto" non ha senso, una volta li in mezzo c'era un codice ora non più quindi lo tolgo.

La funzione media l'ho dichiarata più di una volta per il fatto che io non sempre faccio la stessa media e quindi i risultati sono sempre diversi e quindi deve essere dichiarata una nuova media, o sbaglio?

Per il fatto degli array e i cicli non utilizzati è per il semplice fatto che non credo che con un array posso fare più medie con numeri diversi però contenuti all'interno, o sbaglio?

La funzione min e max fanno cosi tante cose perché deve calcolare quella di ogni giorno e quella settimanale. Quindi è per questo..

Aspetto una tua risposta, ciao!

esistono anche i parametri xd una cosa del genere

float media (int vett[], int indA, int indB)
{
float media=0;
media= (media+vett[indA]+vett[indB])/2;
return media;
}
oppure se vuoi calcolare tutte le medie insieme lo puoi fare con esattamente 2 righe di codice;




float vettMedia[7];
float temp[14]; //metti già le temperature in float così puoi segnare i decimali;
for (int c=0;c<7;c++)
{
media(c)= (temp(c*2)+temp(c*2+1)) /2;
}

per i massimi e minimi il gioco è similare

Riccardo_Paccagnella
15-01-2015, 20:42
Grazie mille, ora provo.
Intanto che ci sono chiedo una cosa.

Ora ho avviato il pc e non so il motivo non c'è piu niente. Il problema che la memoria è rimasta come se ci fosse tutto ma non c'è niente. File eliminati programmi cancellati ecc..
Cosa puo essere accaduto?

ingframin
16-01-2015, 10:01
O hai beccato un virus bello potente o hai un bel guasto all'Hard disk o hai per sbaglio avviato un punto di ripristino di windows

Riccardo_Paccagnella
16-01-2015, 15:40
Alla fine con il pc ho risolto, ho fatto fare una scansione completa e ha rivelato 7 virus, li ha rimossi poi riavviato il pc ha controllato tutti i file e cancellato circa 100 file e dopo si è avviato normalmente.

Però adesso c'è un problema con il Programma dev c++ quando compilo qualche cosa non me lo compila mi da sempre lo stesso errore in tutti i programmi che creo. Perché? l'errore è tipo "Il file contenuto nella cartella non è valido" o una cosa del genere.

!fazz
16-01-2015, 15:57
Alla fine con il pc ho risolto, ho fatto fare una scansione completa e ha rivelato 7 virus, li ha rimossi poi riavviato il pc ha controllato tutti i file e cancellato circa 100 file e dopo si è avviato normalmente.

Però adesso c'è un problema con il Programma dev c++ quando compilo qualche cosa non me lo compila mi da sempre lo stesso errore in tutti i programmi che creo. Perché? l'errore è tipo "Il file contenuto nella cartella non è valido" o una cosa del genere.

reinstalla probabilmente il virus ha rovinato alcuni file essenziali ps l'argomento è ot esistono le apposite sezioni

Riccardo_Paccagnella
16-01-2015, 16:27
Si scusa hai ragione, è che sono nuovo e devo ancora ambientarmi bene... :D

Comunque tornando al vero argomento del thread.
Io adesso sto provando a rifare il programma con gli array ma non ho capito come posso non fare la media di tutti ma solo di alcuni numeri inseriti negli array :)

!fazz
16-01-2015, 16:30
Si scusa hai ragione, è che sono nuovo e devo ancora ambientarmi bene... :D

Comunque tornando al vero argomento del thread.
Io adesso sto provando a rifare il programma con gli array ma non ho capito come posso non fare la media di tutti ma solo di alcuni numeri inseriti negli array :)

su dai che non è complicato, se sommi tutti gli elementi del vettore e dividi per 14 che ottieni?

Riccardo_Paccagnella
16-01-2015, 18:02
Si, questo lo sapevo fare ma quello che volevo fare io era fare la media di soli due numeri contenuti dall'array.
Tipo se l'array contiene:
21 22 3 21 43 23 87 34

io volevo fare la media di

(21+22)/2

(3+21)/2

(43+23)/2

(87+34)/2

e alla fine:

(21+22+3+21+43+23+87+34)/8

Riccardo_Paccagnella
17-01-2015, 13:22
RISOLTO, GRAZIE MILLE A TUTTI
APPENA FINISCO IL PROGRAMMA POSTO UNA COPIA IN UN NUOVO THREAD

CIAO A TUTTI, CHIUDEREI SE SAPESSI FARLO!

Riccardo_Paccagnella
25-02-2015, 22:06
Dopo piu di un mese, programma completato siiii :sofico:

lishi
26-02-2015, 19:00
Hai imparato qualcosa, ma se aveva uno scopo pratico il progetto facevi prima usare un file excel :sofico:

Riccardo_Paccagnella
31-03-2015, 14:34
Si, alla fine il programma è stato completamente inutile e inutilizzato, lo scopo era quello di mettere due gradi al giorno e a fine settimana calcolare la media dei gradi (Perché io e dei miei amici stiamo facendo un formicaio e serve sapere questi dati) però alla fine prendiamo un solo dato al giorno quindi...

71106
01-04-2015, 14:12
Due osservazioni da parte mia.

Dev-C++...? Nel 2015? Che Dio t'aiuti.
Quanto scrivi nello spoiler, ossia l'impossibilità di intraprendere una carriera di studi che ti possa realizzare, è molto triste. Ti rideranno appresso se andrai a scuola o all'Università a 40 anni, o lo fai ora o ti perdi qualcosa per sempre, qualcosa che potrebbe fare la differenza tra due vite totalmente diverse. Non ci sono genitori che tengano di fronte a una cosa del genere, quando giungerà il tramonto della tua vita i tuoi genitori non saranno più lì a subire le tue (giuste) lamentele. Insisti o muori provando.


Ciao!

PS: usa clang (http://clang.llvm.org/).

vendettaaaaa
01-04-2015, 19:56
Due osservazioni da parte mia.

Dev-C++...? Nel 2015? Che Dio t'aiuti.
Quanto scrivi nello spoiler, ossia l'impossibilità di intraprendere una carriera di studi che ti possa realizzare, è molto triste. Ti rideranno appresso se andrai a scuola o all'Università a 40 anni, o lo fai ora o ti perdi qualcosa per sempre, qualcosa che potrebbe fare la differenza tra due vite totalmente diverse. Non ci sono genitori che tengano di fronte a una cosa del genere, quando giungerà il tramonto della tua vita i tuoi genitori non saranno più lì a subire le tue (giuste) lamentele. Insisti o muori provando.


Ciao!

PS: usa clang (http://clang.llvm.org/).
Wow, parole forti... ma che condivido

Riccardo_Paccagnella
09-05-2015, 11:10
71106

Non sai quante volte ho provato :(
Io e dei miei amici abbiamo messo su un laboratorio dove studiamo gli animali e insetti, quando l'ho detto ai miei sono scoppiati a ridere dicendo che io non studio assolutamente niente perché altrimenti sarei andato a scuola.
Quando, però, io gli dico che vorrei andare a scuola mi ridono in faccia dicendo che non è una cosa per me!

WarDuck
09-05-2015, 16:07
L'informatica è una delle poche cose in questo momento che ti darà un mestiere sicuro.

L'alternativa è?

Riesci a trovare lavoro?

wingman87
09-05-2015, 16:29
Potresti valutare di fare il serale, non so se è sempre così ma so che è possibile fare 3 anni in 2. E' dura ma ce la puoi fare visto che comunque faresti quello che ti piace. E male che vada ci metti 3 anni... in ogni caso nel frattempo puoi lavorare o cercare lavoro e studiare di più.

Riccardo_Paccagnella
24-05-2015, 10:13
WarDuck

Lo so che in questo periodo solo l'informatico trova lavoro più facilmente, ma tutto dipende dai miei finché non compio 18 anni :)

wingman87

Avevo già pensato alle serali, ma come sempre dipende dai miei :)

wingman87
24-05-2015, 11:07
I genitori ci sono anche per aiutarti. Forse non sei stato abbastanza convincente. Comunque male che vada aspetti un anno e sarai libero di fare come vuoi.
Io penso comunque che se gli spieghi le tue intenzioni loro non ti faranno perdere un anno di tempo solo perché non vogliono metterti una firma. Se così fosse potresti rinfacciarglielo per tutta l'estate parlandone anche con i conoscenti finché non sbroccano e si arrendono.
Non è che perché non hai ancora 18 anni sei solo un burattino dei tuoi genitori, inventati qualcosa, fatti valere se ci credi davvero.

Riccardo_Paccagnella
25-05-2015, 11:12
Adesso provo, vedrò quello che dicono!
Comunque avevo intenzione di rinfacciarglielo tutta la vita :)