Przekazanie tablicy do innej funkcji

waldeq

Użytkownik
Dołączył
Styczeń 21, 2007
Posty
70
Otoz mam taki problem, ze nie wiem jak przekazac tablice bedace wynikami funkcji 'int main' do innej funkcji, narazie chce do 'void nawiasy'.Chce je tam wykorzystac razem z wartosciami w nich sie znajdujacymi.Nie moge ich tak poprostu wrzucic do zmiennych globalnych.Ponizej przedstawiam caly kod pliku main.cpp.
Kod:
//PRZEKIEROWYWANIE ODCZYTANYCH ZNAKOW I LICZB DO TABLIC



#include<iostream>

#include<conio.h>

#include<math.h>

using namespace std;



#include "opcje.h"

#include "pomoc.h"

#include "nawiasy.h"



int main()

{

    int i=0; //zmienna calkowita do tablicy dzialanie

    int k=0; //zmienna calkowita do tablicy liczby

    int w=0; //zmienna calkowita do tablicy znaki

    int n=0; //ilosc wszystkich znakow w dzialaniu

    int j=0; //ilosc cyfr przed przecinkiem w poszczegolnej liczbie

    int z=0; //wartosc pomocnicza ktorej przypisywana jest wartosc i

    int mno; //wspolczynnik przemnazania wyliczonej potegi przez sprawdzana cyfre

    char dzialanie[i]; //tablica calego dzialania

    bool ujemna=false; //okresla czy liczba jest ujemna

    float liczba=0; //liczba

    

    do

    {

          system("cls");

          j=0;                           //ustawienie zmiennych na zero przed nowym dzialaniem

          ujemna=false;

          liczba=0;

          i=0;

          z=0;

          k=0;

          w=0;

          n=0;

          char dzialanie[i]; //tablica calego dzialania

          float liczby[k]; //tablica liczb

          char znaki[w]; //tablica znakow

          cout<<"q - wyjscie  o - opcje h - pomoc"<<endl;

          cout<<"Podaj dzialanie: ";

          cin>>dzialanie;

    

          switch(dzialanie[i])

          {

                              case 'q':cout<<"Koniec";return 0;break;  //zakonczenie programu

                              case 'o':opcje();break;                  //przejscie do opcji programu

                              case 'h':pomoc();break;                  //przejscie do pomocy programu

                              default:                                 //wykonywanie dzialania

          {

          while(dzialanie[i]!='0')              //zliczanie ilosci znakow w podanym dzialaniu

          {

                                                 i++;

                                                 n=n+1;

          }                    

          

          i=0;

          do

          {

              while(dzialanie[i]=='(')         //pomijanie nawiasow z dodaniem ich do wartosci i

              {

                                     i++;

              }

              

              while(dzialanie[i]=='|')              //dodanie napotkanej wartosci bezwglednej do tablicy

              {

                                                    znaki[w]=dzialanie[i];

                                                    i++;

                                                    w++;

              }

    

              z=i;

              if(dzialanie[i]=='-')                  //sprawdzenie czy liczba jest ujemna

              {

                                                     ujemna=true;

                                                     i=i+1;

              }              

    

              while(isdigit(dzialanie[i]))               //zliczanie cyfr przed przecinkiem

              {

                                                         i++;

                                                         j=j+1;

              }

    

              if(ujemna==true)

              i=1+z;

              else

              i=0+z;

    

              for(;i<n;i++)            //wykrywanie liczby w tablicy

              {

                                       if(dzialanie[i]=='.')

                                       continue;

                                       if(!isdigit(dzialanie[i]))    //sprawdzenie czy nie napotkano na znak inny niz cyfra

                                       break;

                                       mno=dzialanie[i]-'0';

                                       liczba=pow(10,j-1)*mno+liczba;

                                       j=j-1;

              }

    

              if(ujemna==true)

              liczba=liczba*-1;

               

              if(dzialanie[i]=='%')             //jesli napotkamy na procent

              {

                                                liczba=liczba/100;

                                                i++;

              }                      

              

              while(dzialanie[i]=='|')              //dodanie napotkanej wartosci bezwglednej do tablicy

              {

                                                    znaki[w]=dzialanie[i];

                                                    i++;

                                                    w++;

              }

              

              while(dzialanie[i]==')')         //pomijanie nawiasow z dodaniem ich do wartosci i

              {

                                     i++;

              }

              

              liczby[k]=liczba;                    //dodanie wyliczonej liczby do tablic

              if(i!=n)    

              {

                          znaki[w]=dzialanie[i];               //dodanie wykrytego znaku do tablicy

                          i++;

              }

    

              k++;

              w++;

              liczba=0;

              ujemna=false;

              j=0;

        }

        while(i!=n);           //wykonuj dopoki i nie osiagnie ilosci znakow w tablicy

        }

    nawiasy();    

    for(i=0;i<5;i++)

    cout<<" liczby "<<liczby[i];

    for(i=0;i<5;i++)

    cout<<" znaki "<<znaki[i];

    //for(i=0;i<5;i++)

    //cout<<" nawiasyh "<<nawiasyh[i];

   // for(i=0;i<5;i++)

    //cout<<" nawiasy "<<nawiasy[i];

    getch();

    }

    }

    while(dzialanie[i]!='q');

    

getch();                  

}
 

mr_psychoo

Użytkownik
Dołączył
Luty 10, 2007
Posty
81
obczaj

Kod:
#include <iostream>

#include <conio.h>

using namespace std;

void fun(int x[]);



int main()

{

   int tabl[] = {0, 1, 2, 3, 4};



   for(int i = 0; i < 5; i++)

   {

      cout << tabl[i] << " ";

   }



   cout << endl;



   fun(tabl);



   for(int i = 0; i < 5; i++)

   {

      cout << tabl[i] << " ";

   }



   getch();

}



void fun(int x[])

{

   for(int i = 0; i < 5; i++)

   {

      x[i] += 3;

   }

}

nazwa tablicy jest adresem jej zerowego elementu... jesli wysylasz do funkcji adres jakiegos obiektu to pracujesz na nim a nie na jego kopii... czyli funkcja zmienia jego wartosc... wyzej masz pokazane jak to dziala

pozdroo
 

waldeq

Użytkownik
Dołączył
Styczeń 21, 2007
Posty
70
Dzieki za to ze fatygowales sie mi pomoc.Sam jednak rozwiazalem jakos ten problem, dam ci jednak plusa za nauczenie mnie czegos nowego co moze okazac sie przydatne w przyszlosci.Postanowilem jeszzce bardziej rozbic moj program na funkcje by byl on troche bardziej czytelny.Blad byl w blednym zdefiniowaniu tablicy gdzie napisalem dzialanie a powinno byc dzialanie[0].Wrzucilem to jednak do globalnych co na poczatku odrzucalem.Tablicom znaki oraz liczby musialem przyznac dokladna ilosc elementow (100 chyba bedzie wystarczajace) poniewaz gdybym im dal ich 'n' to wtedy w nastepnej funkcji zrobilby mi sie prawdziwy bigos.Nie umiem jednak dokladnie wytlumaczyc czemu tak jest.Rzecz lezy pewnie w tym ze te tablice sa inaczej wykorzystywane niz tablica dzialanie, ktora wypelniamy juz w funkcji main().Ponizej kod zrodlowy programu.
plik main.cpp
Kod:
//ROZPOCZECIE PROGRAMU "CALC PRO"



#include<iostream>

#include<conio.h>

using namespace std;



//zmienne globalne

int i=0; //zmienna calkowita do tablicy dzialanie

int n=0; //ilosc wszystkich znakow w dzialaniu

int k=0; //zmienna calkowita do tablicy liczby

int w=0; //zmienna calkowita do tablicy znaki

char dzialanie[0]; //tablica calego dzialania

char znaki[100]; //tablica znakow

float liczby[100]; //tablica liczb



#include "przekierowanie.h"

#include "opcje.h"

#include "pomoc.h"

#include "nawiasy.h"



int main()

{



do

{

        

          system("cls");

          

          i=0;

          dzialanie[0]; //tablica calego dzialania

          cout<<"q - wyjscie  o - opcje h - pomoc"<<endl;

          cout<<"Podaj dzialanie: ";

          cin>>dzialanie;

    

          switch(dzialanie[i])

          {

                              case 'q':cout<<"Koniec";return 0;break;  //zakonczenie programu

                              case 'o':opcje();break;                  //przejscie do opcji programu

                              case 'h':pomoc();break;                  //przejscie do pomocy programu

                              default:{przekierowanie();nawiasy();break;}      //przejscie do wykonania dzialania

          }

          getch();

    

}

while(dzialanie[i]!='q');

    

}
plik przekierowanie.h
Kod:
//PRZEKIEROWYWANIE ODCZYTANYCH ZNAKOW I LICZB DO TABLIC



#include<iostream>

#include<math.h>

using namespace std;



void przekierowanie()  

{

     //zmienne lokalne

     int mno; //wspolczynnik przemnazania wyliczonej potegi przez sprawdzana cyfre

     int z=0; //wartosc pomocnicza ktorej przypisywana jest wartosc i

     int j=0; //ilosc cyfr przed przecinkiem w poszczegolnej liczbie

     bool ujemna=false; //okresla czy liczba jest ujemna

     float liczba=0; //liczba

     

     //ustawienie zmiennych na zero przed nowym dzialaniem

     j=0;                           

     ujemna=false;

     liczba=0;

     z=0;

     k=0;

     w=0;

     n=0;

     znaki[100]; //tablica znakow

     liczby[100]; //tablica liczb

     

     while(dzialanie[i]!='0')              //zliczanie ilosci znakow w podanym dzialaniu

     {

                                            i++;

                                            n=n+1;

     }                  

     

      

     i=0;

     do

     {

         

         while(dzialanie[i]=='(')         //pomijanie nawiasow z dodaniem ich do wartosci i

         {

                                          i++;

         }

              

         while(dzialanie[i]=='|')              //dodanie napotkanej wartosci bezwglednej do tablicy

         {

                                               znaki[w]=dzialanie[i];

                                               i++;

                                               w++;

         }

    

         z=i;

         if(dzialanie[i]=='-')                  //sprawdzenie czy liczba jest ujemna

         {

                                                ujemna=true;

                                                i++;

         }              

    

         while(isdigit(dzialanie[i]))               //zliczanie cyfr przed przecinkiem

         {

                                                    i++;

                                                    j=j+1;

         }

    

         if(ujemna==true)

         i=1+z;

         else

         i=0+z;

    

         for(;i<n;i++)            //wykrywanie liczby w tablicy

         {

                                  if(dzialanie[i]=='.')

                                  continue;

                                  if(!isdigit(dzialanie[i]))    //sprawdzenie czy nie napotkano na znak inny niz cyfra

                                  break;

                                  mno=dzialanie[i]-'0';

                                  liczba=pow(10,j-1)*mno+liczba;

                                  j=j-1;

         }

    

         if(ujemna==true)

         liczba=liczba*-1;

               

         if(dzialanie[i]=='%')             //jesli napotkamy na procent

         {

                                           liczba=liczba/100;

                                           i++;

         }                      

              

         while(dzialanie[i]=='|')              //dodanie napotkanej wartosci bezwglednej do tablicy

         {

                                               znaki[w]=dzialanie[i];

                                               i++;

                                               w++;

         }

              

         while(dzialanie[i]==')')         //pomijanie nawiasow z dodaniem ich do wartosci i

         {

                                          i++;

         }

              

         liczby[k]=liczba;                    //dodanie wyliczonej liczby do tablic

         if(i!=n)    

         {

                     znaki[w]=dzialanie[i];               //dodanie wykrytego znaku do tablicy

                     i++;

         }

    

         k++;

         w++;

         liczba=0;

         ujemna=false;

         j=0;

         

         }

    while(i!=n);           //wykonuj dopoki i nie osiagnie ilosci znakow w tablicy

    

    for(i=0;i<7;i++)

    cout<<" liczby "<<liczby[i];

    for(i=0;i<7;i++)

    cout<<" znaki "<<znaki[i];

}
 
Do góry Bottom