c++ problem w czasie kompilacji programu

piters101
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 18 wrz 2010, o 18:01
Płeć: Mężczyzna
Lokalizacja: Poland

c++ problem w czasie kompilacji programu

Post autor: piters101 »

Mam problem zrobiłem program zamieniający z dziesiętnego na binarne i na odwrót ale pojawia się błąd w czasie kompilacji i nie wiem o co chodzi był bym wdzięczny za każdą pomoc

oto kod:

Kod: Zaznacz cały

#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
    int nOpcja;
    cout << " Wybierz opcje:" << endl;
    cout << "1. Zdziesietnego na binarny" << endl;
    cout << "2. Z twujkowego na dziesietny" << endl;
    cin >> nOpcja; 
    
switch(nOpcja)
{
case 1:

int liczba;
cout << "Podaj liczbe: " ;
cin >> liczba;
int liczba2=0;
bool tablica[10]; // <--- deklaracja tablicy 10-elementowej typu bool (przyjmuje wartosci 0 lub 1)
int index=0; // <---- indeks tablicy ustawiamy na zero
// dzieli przez 2 liczbe i oblicza reszte
while(liczba>0)
{
int iloczyn= liczba/2;
int reszta= liczba%2;
tablica[index++]=reszta; //<---- zapisujemy reszte do tablicy o indeksie "index" i zwiekszamy zmienna index o 1
liczba = iloczyn;
}
// odwraca liczbe uzyskano w pierwszej p?tli
cout<< "Oto liczba ktora podales w systemie BINARNYM: ";
//w tej petli cofamy: wypisujemy wszystkie elementy tablicy
//od konca (czyli od wartosci index, na ktorej skonczylismy) az do 0
while (index>0) 
{
  cout << tablica[index-1]; //wypisz kolejny element tablicy
  index--; break;  //zmniejsz index o 1
}
}
switch(nOpcja)
{

case 2: 
  
  int bin_to_dec(const string & bin) //zwraca 0 jesli string jest pusty
{
  int dec = 0;
  string::size_type i = bin.size();
  while(i--)
    if(bin[i] == '1')
      dec += 1 << (bin.size() - i - 1);
    else
      if(bin[i] != '0') //jesli cos w stringu znajduje sie cos innego niz 0 lub 1 fk. zwraca 0
        return 0;

  return dec;
}

int main()
{
  cout << "Podaj liczbe binarnie: ";
  string bin;
  getline(cin, bin);

  cout << "Liczba binarna " + bin + " to dziesietnie: " << bin_to_dec(bin) << endl;

  string s;
  getline(cin, s);
}

}
}
Ostatnio zmieniony 18 wrz 2010, o 19:32 przez Nakahed90, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

c++ problem w czasie kompilacji programu

Post autor: Afish »

Kompilator stwierdził: "local function definitions are illegal", co jest chyba zrozumiałe.
piters101
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 18 wrz 2010, o 18:01
Płeć: Mężczyzna
Lokalizacja: Poland

c++ problem w czasie kompilacji programu

Post autor: piters101 »

w takim razie jakieś pomysły jak to mogę poprawić?
Awatar użytkownika
etyre
Użytkownik
Użytkownik
Posty: 91
Rejestracja: 24 gru 2008, o 20:47
Płeć: Mężczyzna
Lokalizacja: Oz
Podziękował: 14 razy
Pomógł: 5 razy

c++ problem w czasie kompilacji programu

Post autor: etyre »

piters101 pisze:w takim razie jakieś pomysły jak to mogę poprawić?
Po pierwsze, nie wydaje mi się dobrą praktyką umieszczanie 2 razy funkcji

Kod: Zaznacz cały

int main()
Po drugie, dziwnie używasz instrukcji

Kod: Zaznacz cały

switch()
- znów się podwajasz. Zamiast tego wystarczy pisać:

Kod: Zaznacz cały

switch(variable)
{
    case 1:
        // instrukcje
    case 2:
        // instrukcje
}
itd.

Po trzecie natomiast, najlepiej będzie, jeśli rozbijesz kod na funkcje, np.:

Kod: Zaznacz cały

std::string dec2bin( int decNum )
int bin2dec( std::string binNum )
Oczywiście są to przykładowe prototypy (pamiętaj, że w przypadku prototypów funkcji stawia się średnik po nawiasie kończącym argumenty; tu tego nie pisałem, aby nie zbijać z tropu), możesz dla wygody używać innych typów, korzystać z rzutowania etc.

To tylko kilka porad, które pozwalają na pisanie dobrego kodu, który będziesz w stanie po jakimś czasie zrozumieć. I jeśli zastosujesz te punkty do Twojego programu, bez większych problemów zidentyfikujesz błąd. Ale - jeśli nadal będziesz miał problem - pokaż nowy kod, wtedy z pewnością łatwiej będzie Ci pomóc (bo - nie obraź się - obecny kod jest tragiczny w czytaniu).
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

c++ problem w czasie kompilacji programu

Post autor: kadiii »

Oczywiście główny błąd powoduje definiowanie funkcji wewnątrz funkcji. Napisał Ci o tym Afish lecz zignorowałeś jego wskazówkę - nie zrozumiałeś zdania w języku angielskim.
Struktura programu ma wyglądać tak(jedna z możliwości, chyba najprostsza):

Kod: Zaznacz cały

(...)
... fun1(...)
{

}
... fun2(...)
{

}
(...)
int main() <-tej funkcji nie wywołujesz, system wywoła ja za Ciebie
{
    int nOpcja;
    cout << " Wybierz opcje:" << endl;
    cout << "1. Zdziesietnego na binarny" << endl;
    cout << "2. Z twujkowego na dziesietny" << endl;
    cin >> nOpcja; 
   (...)
 fun1(...); <-wywołanie funkcji
 fun2(...); <-wywołanie funkcji
   (...)
 return 0;
}
W programie jest oczywiście wiele innych błędów, które jednak nie spowoduja błędu kompilacji jeśli zastosujesz sie do powyższej struktury. Proponuję lekturę jakiegoś kursu C++ - jest tego sporo(darmowego) w sieci.
sirpietros
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 30 sie 2007, o 19:17
Płeć: Mężczyzna
Lokalizacja: trzebinia
Pomógł: 3 razy

c++ problem w czasie kompilacji programu

Post autor: sirpietros »

W zasadzie nie widzę w takich wypadkach sensu, aby tłumaczyć co jest źle, bo szybciej da się wymienić co jest dobrze...
Zanim zabierzesz się za pisanie czegokolwiek, zapoznaj się z podstawami podstaw składni danego języka programowania . To co wyprodukowałeś to pisanie "na czuja"(nie wiem co piszę, ale sobie napiszę) - a nuż tym razem kompilator wywali tylko 20 błędów a nie 40... Składni nikt za ciebie się nie nauczy, a zamieszczając takie posty powodujesz załamanie rąk u reszty czytelników...
ODPOWIEDZ