» »

[C++][vaja] Rabim malo pomoči

[C++][vaja] Rabim malo pomoči

amaze646 ::

Ok najprej naj povem, da nisem se nek ekspert v programiranju. Se pa pridno ucim.

Delam en cist simpl programcek mal za vajo in mam en problem. Imam tri funkcije. Ena funkcija izracuna povprecje vnesenih podatkov. V drugi funkciji se vnesejo prvi podatki, v tretji funkciji pa je meni, ki vsebuje podatke. Zanima me kako se naredi, da bi lahko uporabnik ko bi iz menija v tretji funkciji izbral dolocen podatek, da bi se ta podatek prenesel v funkcijo za izracun? Podatki so vpisani v tabele.

Podatki za podatke tab[1]in tab[2] pridejo iz druge funkcije in delujejo.


Funkcija za izracun povprecja:
int vsota_porabe_sit(int tab[],int tab_gor[])
{
	int vr;
	vr=(tab_gor[] *tab[2])/tab[3];
// tukaj je problem ko je tab_gor[]
	return (vr);
}

In sicer iz prve funkcije bi moral spraviti podatek ki bi pac bil zbran iz menija v to funkcijo za izracun.

Meni goriva:
void meni_goriva()
{
	int izbor;
	int tab_gor[100];
	tab_gor[1]=250;
	tab_gor[2]=195;
	tab_gor[3]=245;

	do
	{
		cout<<"Meni goriva"<<endl;
		cout<<"~~~~~~~~~~~~~~~~~~"<<endl;
		cout<<"0. Izhod v glavni meni"<<endl;
		cout<<"1. Super 100"<<endl;
		cout<<"2. Disel"<<endl;
		cout<<"3. 95 Oktanski!"<<endl;
		cout<<"4. Posodobitev cen"<<endl;
		cout<<"~~~~~~~~~~~~~~~~~~"<<endl;
		cout<<"Izberi gorivo"<<endl;
		cin>>izbor;
		switch(izbor)
		{
			case 0:
			break;
			case 1:
				tab_gor[1];
			break;
			case 2:
				tab_gor[2];
			break;
			case 3:
				tab_gor[3];
			break;
		}
	}while(izbor!=0);
	
}



void meni()
{
	int tab[100];
	int tab_gor[100];
	int N;
	int izbira;
	do
	{
		cout<<"Meni programa:"<<endl;
		cout<<"_____________________"<<endl;
		cout<<endl;
		cout<<"0. Izhod iz programa"<<endl;
		cout<<"1. Vnos podatkov"<<endl;
		cout<<"2. Poraba goriva (v SIT)"<<endl;
		cout<<"3. Reset vnosov"<<endl;
		cout<<"4. Izbira goriva"<<endl;
		cout<<endl;
		cout<<"_____________________"<<endl;
		cout<<"Izberi eno od opcij:"<<endl;
		cout<<endl;
		cin>>izbira;
		switch (izbira)
		{
			case 0:
				exit(0);
			break;
			case 1:
				vnos(tab);
			break;
			case 2:
				cout<<"Porabili ste za "<<vsota_porabe_sit(tab,tab_gor)<<" goriva"<<endl;
			break;
			case 3:
				reset(tab);
			break;
			case 4:
				meni_goriva();
			break;
		}
	}while (izbira !=0);
}


Problem mi je torej iz menija goriva prenesti vrednost, ki jo je uporabnik izbral v funkcijo za izracun povprecja.


Hvala
  • spremenilo: CCfly ()

amaze646 ::

Ok zdej mam mal drugace sam se kr ne dela tak ko bi mogl



#include<iostream.h>




void vnos(int tab[])
{
   for (int i=0;i<1;i++)
   {
      cout<<endl;
      cout<<endl;
      cout<<"Vnesi stevilo prevozenih kilometrov:"<<endl;
      cin>>tab[2];
      cout<<"Vnesi povprecno porabo vozila:"<<endl;
      cin>>tab[3];
      cout<<endl;
   }
}



int vsota_porabe_sit(int tab[],int tab_gor[],int &izbor)
{
   int vr;
   vr=(tab_gor[izbor]*tab[2])/tab[3]; // tab_gor mi dela tezave
   return (vr);
}



void reset(int tab[])
{
   for(int i=0;i<3;i++)
   {
      tab[i]=0;
   }
}

   


void meni_goriva(int *izbor)
{
   
   int tab_gor[100];
   tab_gor[1]=250;
   tab_gor[2]=195;
   tab_gor[3]=245;

   
   do
   {
      cout<<"Meni goriva"<<endl;
      cout<<"~~~~~~~~~~~~~~~~~~"<<endl;
      cout<<"0. Izhod v glavni meni"<<endl;
      cout<<"1. Super 100"<<endl;
      cout<<"2. Disel"<<endl;
      cout<<"3. 95 Oktanski!"<<endl;
      cout<<"4. Posodobitev cen"<<endl;
      cout<<"~~~~~~~~~~~~~~~~~~"<<endl;
      cout<<"Izberi gorivo"<<endl;
      cin>>*izbor;
      switch(*izbor)
      {
         case 0:
         break;
         case 1:
            tab_gor[1];
         break;
         case 2:
            tab_gor[2];
         break;
         case 3:
            tab_gor[3];
         break;
      }
   }while(*izbor!=0);
   
}



void meni()
{
   int tab[100];
   int tab_gor[100];
   int N;
   int izbira;
   do
   {
      cout<<"Meni programa:"<<endl;
      cout<<"_____________________"<<endl;
      cout<<endl;
      cout<<"0. Izhod iz programa"<<endl;
      cout<<"1. Vnos podatkov"<<endl;
      cout<<"2. Poraba goriva (v SIT)"<<endl;
      cout<<"3. Reset vnosov"<<endl;
      cout<<"4. Izbira goriva"<<endl;
      cout<<endl;
      cout<<"_____________________"<<endl;
      cout<<"Izberi eno od opcij:"<<endl;
      cout<<endl;
      cin>>izbira;
      switch (izbira)
      {
         case 0:
            exit(0);
         break;
         case 1:
            vnos(tab);
         break;
         case 2:
            cout<<"Porabili ste za "<<vsota_porabe_sit(tab,tab_gor,N)<<" goriva"<<endl;
         break;
         case 3:
            reset(tab);
         break;
         case 4:
            meni_goriva(&N);
         break;
      }
   }while (izbira !=0);
}

   
int main()
{
   meni();
   return 0;
}

Gundolf ::

Napak kar mrgoli :)

prvič:
#include<iostream.h>
Tega se že 8 let ne uporablja več. Če ti še katerikoli učitelj kjerkoli pridiga o tem 'headerju' ga prosim pošlji na slo-tech na en pogovor. Problem je ker nekateri prevajalniki še vedno ohranjajo ta header zaradi kompatibilnosti, njegova vsebina pa morda ni povsem identična s tistim kar pravi c++ da mora biti v tem headerju:
#include<iostream> // pozor, to ni isti header kot zgoraj, tu se dejansnsko vključi fajl brez končnice!
Ponavadi se začetnikom svetuje da takoj za tem napišejo še:
using namespace std;
zato da se potem lahko namesko std::cout piše cout (in podobno za vse objekte, razrede in funkcije ki jih pridobiš z vključitvijo tega headerja) - oz. v tvojem primeru to pomeni da lahko le popraviš include, takoj za njim dodaš tisti using in ti bo vse delalo tako kot prej.

drugič:
> // tab_gor mi dela tezave
Ja lahko da ti jih ampak če ne razložiš teh težav, ti v primeru ne ravno trivialne in zelo kratke kode, nihče ne bo znal pomagati.

in tista prava težava:
V funkciji meni ne nastaviš vrednosti tvojih tabelic. Nastavitve premakni iz funkcije meni_goriva v meni in potem vsem funkcijam ki bodo kaj delale s katerokoli izmed teh tabelic, direktno podaj željeno(e) tabelico(e). Ker C++ je popolnoma zadovoljen da ima več tabelic z istim imenom v različnih funkcijah. Ga čisto nič ne motijo, vsako obravnava kot svojo spremenljivko, nobene povezave ni med njim zgolj zaradi imena. Še več, več popolnoma enako imenovanih spremenljivk imaš lahko znotraj iste funkcije ampak to naj ti bo le v informacijo. Tega se izogibaj.

Pa še nekaj kar mi sploh ni jasno:

case 3:
tab_gor[3];
break;

Kaj si hotel s tem narediti?

Še ena opomba
Izogibaj se temule kar delaš tu:
> void meni_goriva(int *izbor)
> ...
> cin>>*izbor;
> ...
Funkcije imajo tudi to funkcijo, da razdelijo pomensko različne dele kode. In na primer, funkcije, ki kliče 'meni_goriva', se prav nič ne tiče, katero tipko je uporabnik pritisnil ko je bil v meniju goriva. Torej naj bo tale izbor lokalna spremenljivka. Če želiš kaj posebnega sporočiti nazaj funkciji, ki je klicala meni_goriva lahko to storiš preko return vrednosti. S sedanjim načinom si delaš špageti kodo. To pomeni, da so funkcije, spremenljivke in še kaj bi se našlo pa raje ne omenjam, ker se pri tebi še ni pojavilo ;) tako prepletene med seboj, da čez čas še sam ne boš znal več razločiti njihovega pomena.

Zgodovina sprememb…

  • spremenil: Gundolf ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C (Izračun povprečja)

Oddelek: Programiranje
141528 (1162) joze67
»

problem s funkcijo-C++

Oddelek: Programiranje
8741 (530) Groove
»

Java Objekti

Oddelek: Programiranje
102128 (1822) Mavrik
»

Funkcije==>naloge

Oddelek: Programiranje
131675 (1515) brulc
»

[C++] Delo s *.txt datotekami

Oddelek: Programiranje
191966 (1442) Tr0n

Več podobnih tem