kłopot z funkcjami i przekazywaniem przez nich wartosci do

0

Halo mam kłopot program idzie uruchomić jednak niczego nie zlicza w programie są 2 wartośći do inkrementoawania które mają się też inkrementować w funkcji i w funkcji która jest w funkcji i ich nowe wartości mają zapamiętane i przekazane do programu main oraz nie chce modyfikować pozostałych zmiennych.


void wypisz_liczby_na_ekran(int* tab1,int ilosc_gier1,int i1);

void liczenie_czestosci_liczb_w_zbiorze(long int* tabliczb1,int* tabprzedsortowaniem1,int ILOSC1,int k1);

void sort(int* tab, int n);

void poszukiwanie(int* tabprzedsortowaniem1,int* tabposortowana1,int* tab11,int* tabnumerow1);

void wczypisz_na_ekr(int* tab1,long int* tabliczb1,int i1,int k1);

int metoda_2(int* tab1,int *b1,int *przegrana1,int *przegrana12,int *przegrana13 ,
                     int *sum11,int *sum12,int *sum13,int *stawka_przegr1,int *stawka_wygr1,
                     int*wygrana1,int *wygrana12,int *wygrana13,int *k1 ,int *i1,int *ilosc_gier1,
                     long int* tabliczb1,int *METODA1,int *zliczaj11,int *zliczaj12,int *zliczaj13,int *zliczaj14,
                     int *zliczaj15,int *zliczaj16,int *zliczaj17,int *zliczaj18,int *zliczaj19);

int _tmain(int argc, _TCHAR* argv[])
{

	cout <<"podaj ILOSC liczb do sprawdzania czestosci wystepowania w zbiorze np 120 kolejnych  losowan -k"<<endl;
	cin>>ILOSC;
	cout <<"podaj ilosc gier -->   ilosc_gier=ilosc_gier-ILOSC-10"<<endl;
	cin>>ilosc_gier;

........

       for (k=0; k<ilosc_gier+ILOSC+5; ++k)
        {


                  fscanf(plik1,"%d", &z1 );
                  tabliczb[k]=z1;
                  srednia[k]=0.0;
          }

          fclose(plik1);


           k=ILOSC;

          //////
          //petla glowna
           ////////

	   for(i=0;i<ilosc_gier;i++)
	  {

liczenie_czestosci_liczb_w_zbiorze(tabliczb,tabprzedsortowaniem,ILOSC,k);

          for(j=0;j<37;j++)
          {
                 tabposortowana[j]=tabprzedsortowaniem[j];

          }


    sort( tabposortowana,  n);


           //poszukanie numerow ktore wystepowaly najczesciej

    poszukiwanie(tabprzedsortowaniem,tabposortowana,tab1,tabnumerow);

.........


    wypisz_liczby_na_ekran(tab,ilosc_gier,i);


	  if((tabposortowana[36]+tabposortowana[35])>SREDNIA)
	  {
		  goto koniec1;
	  }

...............

WYNIK=metoda_2(tab,&b,&przegrana,&przegrana2,&przegrana3 ,
                            &sum1,&sum2,&sum3,&stawka_przegr,&stawka_wygr,
                            &wygrana,&wygrana2,&wygrana3,&k ,&i,&ilosc_gier,
                            tabliczb,&METODA,&zliczaj1,&zliczaj2,&zliczaj3,&zliczaj4,
                            &zliczaj5,&zliczaj6,&zliczaj7,&zliczaj8,&zliczaj9);

          if (WYNIK==100)
          {
                goto koniec;
          }

/////////////////


         koniec1:
         k++;
         koniec:

  } //koniec glownej petli

	cout <<"przegranych     -"<<przegrana<< endl;
	cout <<"ile razy wygrano="<<wygrana<< endl;
	cout <<"ile razy wypadly te same pod rzad="<<zliczaj1<< endl;
	cout <<"ile razy wypadly prawie te same pod rzad="<<zliczaj2<< endl;
	cout <<"ile razy wypadly 3 same pod rzad="<<zliczaj3<< endl;
	cout <<"suma1="<<sum1<< endl;

} //koniec main

/////////////////////////////////////////
///////////////////////////////////////

int metoda_2(int* tab1,int *b1,int *przegrana1,int *przegrana12,int *przegrana13 ,
                    int *sum11,int *sum12,int *sum13,int *stawka_przegr1,int *stawka_wygr1,
                    int *wygrana1,int *wygrana12,int *wygrana13,int *k1 ,int *i1,int *ilosc_gier1,
                    long int* tabliczb1,int *METODA1,int *zliczaj11,int *zliczaj12,int *zliczaj13,int *zliczaj14,
                    int *zliczaj15,int *zliczaj16,int *zliczaj17,int *zliczaj18,int *zliczaj19)
{

       int j,i2;


......

       f(tab1[0]==tab1[1]||tab1[0]==tab1[2])
       {

            cout<<"*przegrana12 dla *METODA1="<<*METODA1<<endl;

 wczypisz_na_ekr(tab1,tabliczb1,*i1,*k1);

           *przegrana12++;
           *sum12=*sum12-*stawka_przegr1*2;

	    for (j=37;j>0;j--)
           {
	         tab1[j]=tab1[j-1] ;

           }

          *k1++;
           *i1++;

            if(*k1>=*ilosc_gier1||*i1>=*ilosc_gier1 )
            {
	          return 100;
             }

            *b1=tabliczb1[*k1];
              tab1[0]=*b1;
              i2=*i1;

 wypisz_liczby_na_ekran(tab1,*ilosc_gier1,i2);

             //dwa takie same numery pod rzad
         if(tab1[0]==tab1[1])
        {

              *zliczaj17++;

         }

        //dwa takie same numery prawie pod rzad
        if(tab1[0]==tab1[2]&&tab1[0]!=tab1[1])
       {

              *zliczaj18++;

        }

        //3 pod rzad
        if(tab1[0]==tab1[2]&&tab1[0]==tab1[1])
         {

             *zliczaj19++;

         }

     }

     else
     {

           *sum13=*sum13+*stawka_wygr1*3;
           *wygrana13++;

      }

.........

}//koniec funkcji


	void wypisz_liczby_na_ekran(int* tab1,int ilosc_gier1,int i1)
  {

         if( ilosc_gier1 <10000)
         {
          if(i1%500==0)
                  {
	          cout<< endl;
                 cout<<"ilosc gier- "<<i1<<endl;
	          cout <<" tab1[0]- "<<tab1[0]<<" tab1[1]- "<<tab1[1]<<" tab1[2]- "<<tab1[2]<< endl;
	          cout <<" tab1[3]- "<<tab1[3]<<" tab1[4]- "<<tab1[4]<<" tab1[5]- "<<tab1[5]<< endl;
	          cout <<" tab1[6]- "<<tab1[6]<<" tab1[7]- "<<tab1[7]<<" tab1[8]- "<<tab1[8]<< endl;
	          cout <<" tab1[9]- "<<tab1[9]<<" tab1[10]- "<<tab1[10]<<" tab1[11]- "<<tab1[11]<< endl;
	          cout <<" tab1[12]- "<<tab1[12]<<" tab1[13]- "<<tab1[13]<<" tab1[14]- "<<tab1[14]<< endl;
	         cout<< endl;
	         Sleep(500);
	            }
          } 
         else
          {
          if(i1%1500==0)
                    {
	              cout<< endl;
	              cout<<"ilosc gier- "<<i1<<endl;
		      cout <<" tab1[0]- "<<tab1[0]<<" tab1[1]- "<<tab1[1]<<" tab1[2]- "<<tab1[2]<< endl;
	              cout <<" tab1[3]- "<<tab1[3]<<" tab1[4]- "<<tab1[4]<<" tab1[5]- "<<tab1[5]<< endl;
	              cout <<" tab1[6]- "<<tab1[6]<<" tab1[7]- "<<tab1[7]<<" tab1[8]- "<<tab1[8]<< endl;
	              cout <<" tab1[9]- "<<tab1[9]<<" tab1[10]- "<<tab1[10]<<" tab1[11]- "<<tab1[11]<< endl;
	               cout <<" tab1[12]- "<<tab1[12]<<" tab1[13]- "<<tab1[13]<<" tab1[14]- "<<tab1[14]<< endl;
	              cout<< endl;
	              Sleep(200);

                     }
            }

 }

poprawiłem formatowanie

zmienna k jest poczebna po to żeby pobierać co pętlem głowną nastempnąliczbęz tablicy
w tym programie jest ważne żeby pamiętało k oraz i z funkcji w których też się zmieniają.
k-do tablicy
i - do ilości powtórzeń pętli głównej do ilosc_gier

program działał prawidłowo jak to co jest w metoda2 było w funkcji main

chcę to zrobić w funkcji bo chcętakich funkcji zrobić z 10 ktore będąróżniły się metodą analizowania kolejnych cyfr w tabelach czyli tym:
if(tab1[0]==tab1[1]||tab1[0]==tab1[2])
bedzie np tak :
if(tab1[0]==tab1[1]||tab1[0]==tab1[2]||tab1[0]==tab1[3])
if(tab1[0]==tab1[1]||tab1[0]==tab1[2]||tab1[0]==tab1[3]||tab1[0]==tab1[4])

czyli czy aktualnie wylosowany numer z tablicy tabliczb[k] nie jest w jakies z tych tablic

0

Sorry, ale co to ma być? Co to za język? Swoją drogą sądząc po _tmain kod pisany pod Visualem, jak można tam tak formatowanie spierdolić? Chyba, że to wina tych spieprzonych nawisów i totalnej nieznajomości języka...

0

Zrobiłes funkcje która ma ze 30 argumentów <lol> brawo.

0

@mm002:
Na razie mogę Ci dać dobrą radę: zainwestuj trochę czasu w naukę formatowania kodu. ŻADEN choćby w miarę dobry programista nie pisze w ten sposób. Mimo że skompiluje i zadziała kod w stylu:

#include <iostream>
int main(int argc, char** argv) { if (argc > 0) { cout << "Nie podano argumentów" << endl; } else {
    cout << "Liczba podanych argumentów: " << argc << endl; }


  return 0;
}

To jednak każdy w miarę ogarnięty programista napisze to jakoś tak:

#include <iostream>

int main(int argc, char** argv)
{
  if (argc > 0) {
    cout << "Nie podano argumentów" << endl;
  } else {
    cout << "Liczba podanych argumentów: " << argc << endl;
  }
  return 0;
}

Jest różnica w czytelności? Jest. A czytelność to jedna z najważniejszych cech kodu. Wiesz kiedy się przydaje? Np. wtedy gdy prosisz kogoś, by przejrzał Ci kod i poprawił błąd. Lub gdy sam chcesz to zrobić.

Źródła na temat formatowania kodu możesz znaleźć googlując takie frazy jak: coding standards (standardy kodowania), czy code formatting (formatowanie kodu). Np. http://en.wikipedia.org/wiki/Coding_standards.

Sorki, ale tak niechlujnie napisanego kodu, jaki dałeś, to ja nie tknę kijem przez szmatę. A jednak jakoś chciałem Ci pomóc, skoro poświęciłem czas i napisałem ten komentarz. Czas ten mógłbym poświęcić na rozwiązanie Twojego problemu z konkretnym programem. Na tę chwilę Twoim większym problemem jest jednak słabiusieńkie formatowanie kodu, a nie jakiś jeden bug.

Nie mówię, że jesteś jakiś głupi, czy nienormalny. To (niestety) normalka, że początkujący mają problem z formatowaniem kodu. Ale im szybciej się do tego przyłożysz, tym lepiej. Tak samo konstrukcja typu funkcja z 30 argumentami od razu śmierdzi, ale taka przesada to kolejny w miarę typowy błąd początkującego. Nie masz się co zaraz wstydzić czy załamywać, bo chyba każdy z nas napisał kiedyś jakieś głupsze rzeczy, ale ważne by sobie uświadomić swoje programistyczne problemy/braki i stopniowo, na spokojnie je sobie nadrabiać.

0

rozumiem że przed main() deklarujesz tylko jedna funkcję metoda_2 ?? A co to jest K?? Doszedłem do pętli for... jeżeli będzie kiedyś konkurs na najbardziej nieczytelny kod to masz duże szanse na wygraną. Nie masz najmniejszego pojęcia o tym jak pisać kod żeby zminimalizować ryzyko błędów. Formatuj kod! Nawet gdybym chciał nie jestem w stanie Ci pomóc bo mam odruch wymiotny na widok Twojego kodu [glowa]

0

Wiecie co, muszę to napisać - po kolejnym zobaczeniu tego kodu zatęskniłem za COBOLem.

0

Dobra dobra, chłopaki, pamiętajcie że to najwyraźniej bardzo początkujący programista. Nie wiem, może Wy od razu mieliście śliczne formatowanie i stosowaliście KISS, DRY i cholera wie co jeszcze. Ale moje pierwsze kody przypominały raczej ten z pierwszego posta :). To, że od czasów gdy byliśmy początkujący minęło np. paręnaście lat nie oznacza, że mamy o tym zapomnieć i nie rozumieć, czemu nowicjusze piszą tak, a nie inaczej.

Błędy trzeba wytknąć dla dobra mm002, bo to może mu pomóc wybrać właściwe kierunki nauki. Ja np. na jego miejscu pouczyłbym się formatowania kodu i programowania strukturalnego + podstaw zasady DRY (Don't Repeat Yourself), bo widać, że gdzieniegdzie zamiast stosować iterację, po prostu klepie 20 prawie takich samych instrukcji. Potem brałbym się za bardziej skomplikowane programy, teraz takie na paręnaście-parędziesiąt linii do nauki powinny być lepsze. Łatwiej je ogarnąć i dopieścić.

Starajmy się jednak nie być niemili tylko dlatego, że ktoś na początku przygody z kodowaniem tworzy "mało optymalny" kod. Ba, nawet jak stworzy kretyński, to cóż... nie ma co się dziwić, umiejętności przychodzą tu z czasem, nauką i praktyką.

Piszę to po to, by @mm002 się nie zniechęcił. Każdy miał na początku... dziwne przypadki z kodem. Zresztą nawet będąc zawodowcem je ma, tyle że dziwność w miarę upływu lat i tysięcy linii kodu osiągnęła zupełnie inny wymiar :D.

0

Dobra zacznijmy od początku: co dokładnie ten program ma robić?

0

program bez funkcji działa dobrze jednak chcę poszczególne segmenty wpakować w funkcje.
program najpierw wczytuje np 100 kolejnych cyfr od 0 do 100 z pliku za kazda iteracja wczytuje kolejne cyfry o jedna dalej też 100 z do tablicy k .
Ta funkcja void liczenie_czestosci_liczb_w_zbiorze ma policzyć jak często dana liczba występuje w zbiorze i zapisuje wynik do tabeli zapisany wynik w tabeli zapisuje jeszcze raz do pomocniczej tabeli żeby tamtą tabelę można było posortować i jest złączony z tabeląszablonów w ktorej każdy indeks odpowiada swojej liczbie gdy wyjdzie juz z funkcji void sort to wchodzi do funkcji void poszukiwanie gdzie sprawdeza takie coś:

for(m=0;m<37;m++)
{
if(tabprzedsortowaniem[m]==tabposortowana[33])
{
if(tabnumerow[m]!= tab1[0]&&tabnumerow[m]!= tab1[1]&&tabnumerow[m]!= tab1[2])
{
tab1[3]=tabnumerow[m];
}
}
}

czyli w tabl1 jest zapisana liczba która najczęściej wystepowała w zbiorze 100 elementowym

a funkcja int metoda_2( analizuje zebrane dane kod jest zrobiony dobrze tylko nie wiem jak dobrze przekazywać wartości do funkcji tak żeby sięmodyfikowały globalnie do całego programu.

0

Moja rada:
Wywal ten program i zapomnij o nim zupełnie. Zacznij pisać od nowa. Póki nie opanujesz podstawowych operacji na tablicach, funkcjach i sensownego komponowania kodu masz zakaz pisania programów dłuższych niż 20 linijek.

0

Chciałbym jakoś poukładać części tego programu w funkcje jednak na razie nieumię.

0

A i widzisz, to jest główny problem takich dziwnych kodów na tym forum.
Że ktoś zabiera sie za pisanie programu który ma więcej niz 20 linijek, zanim porządnie opanuje podstawy języka. Tak sie nie da. Bo potem ktoś robi taki właśnie kod, którego po prostu nie da sie poprawić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1