Witam. Jestem nowicjuszem jeśli chodzi o programowanie. Na studiach dostałem za zadanie napisać taki oto program:
"Napisz program, który będzie pobierał od użytkownika liczbę w jednym z kodów liczbowych i przeliczał ją na pozostałe. Użytkownik powinien mieć do wyboru następujące kody: dziesiętny, dwójkowy, trójkowy, ósemkowy i szesnastkowy."
Po morderczych próbach wyskrobałem w Dev-C++ program, jednak nie działa on prawidłowo. Użyłem w nim funkcji 'case' i to najprawdopodobniej z nią jest problem. Przy podaniu znaku innego niż 1, otrzymuję komunikat o wprowadzeniu błędnego znaku, który powinien występować tylko, gdy podamy coś innego niż 1 i 2. Nie mam pomysłu, w czym tkwi problem. Poszczególne komponenty, a więc pętle liczące z kodu dziesiętnego na dowolny i z dowolnego na dziesiętny działają bez problemu. Bardzo proszę o pomoc, program jest mi niezbędny do zaliczenia przedmiotu. Spakowany program umieszczam w załączniku. Z góry dziękuję za pomoc, pozdrawiam :)
Kod programu ze zmianami zaproponowanymi przez Woodoo, dzięki :)
Jednak teraz przypadek 2 nie wykonuje się, w kompilatorze wyskakuje komunikat o niezadeklarowaniu funkcji getch()
/* Program pozwalajacy na konwersje systemow liczbowych */
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <fstream>
using namespace std;
int main()
/* Sprawdzwenie , czy wpisujemy odrazu w kodzie dziesietnym */
{
int typ;
cout << "Czy wpisujesz liczbe w systemie dziesietnym? 1-tak 2-nie\n";
cin >> typ;
/* Wybor kroku - pierwszy gdy zaczynamy odrazu od liczby w systemie 10, drugi kiedy liczba jest w innym systemie */
switch (typ)
{
case 1: // Przypadek dla liczby w systemie dziesietnym
{
int licz=0, liczba ,podstawa; //Deklaracje zmiennych dla kroku 1
char hex[]="0123456789ABCDEF";
cout << "Podaj liczbe calkowita: "; //Prosba o liczbe, pobranie jej oraz utworzenie tablicy do jej zapisu
cin >> liczba;
int *tab=new int[liczba];
do {
cout << "Podaj podstawe systemu [2..16]: "; //Prosba o podanie podstawy, pobranie tej zmiennej
cin >> podstawa;
if (podstawa<2 || podstawa>16) // Zabezpieczenie przed wpisaniem niedozwolnej podstawy
cout << "Podano zla wartosc.\n";
} while (podstawa<2 || podstawa>16); //Warunki doboru podstawy i liczby
while (liczba>0)
{
*(tab+licz++)=liczba%podstawa; //Przeliczanie na wybrany system
liczba/=podstawa;
}
char *tab2=new char[licz]; //Dodatkowa tablica pozwalajaca wypisac poszczegolne znaki od konca
for (int q=licz-1;q>=0;--q) cout<<(*(tab2+q)=hex[*(tab+q)]);
delete [] tab;
delete [] tab2;
system("pause>nul"); break;
}
/* Przypadek drugi - dla liczby podawanej w systemie innym niz dziesietny */
case 2:
{
int wynik, liczba, wykladnik; // Deklaracja zmiennych
wynik = '1';
while (wykladnik > 0)
{
wynik *= liczba;
wykladnik--;
}
return wynik;
int main(int argc, char *argv[]);
{
string liczba; // liczba
int podstawa; // podstawa
int dlugoscLancucha;
int wynik = 0;
int potega(int podstawa, int i);
cout << "Podstawa systemu liczbowego: "; //Zapytanie o system liczbowy w ktorym wpisujemy
cin >> podstawa;
cout << "\nLiczba w systemie " << podstawa << ": "; //Prosba o wpisanie liczby
cin >> liczba;
dlugoscLancucha = liczba.size()-1; // ilosc cyfr liczby - 1, bo liczymy od zera
for (int i = dlugoscLancucha, j = 0; i >= 0; i--, j++)
wynik += int(liczba[j] - '0') * potega(podstawa,i); // konwersja znaku na liczbe int(liczba[j] - '0'), odejmujemy od znaku liczby kod ascii znaku 0
cout << "\nLiczba " << liczba << " w systemie 10: " << wynik << endl << endl; //Wypisuje liczbe w systemie dziesietnym
int licz=0,liczba2,podstawa2; //wprowadzenie nowych zmiennych do przel. na inne systemy
char hex[]="0123456789ABCDEF";
cout<<"\n\nPodaj liczbe uzyskana w systemie 10: "; // Prosba o przepisanie wczesniej podanej liczby
cin>>liczba2; // Zapisanie jej jako liczba2
int *tab=new int[liczba2]; // Utworzenie nowej tablicy, w której zapisujemy liczbe
do
{
cout<<"\nPodaj podstawe systemu [2..16]: "; // Prosba o podanie nowej, wyjsciowej podstawy systemu oraz jej zapis
cin>>podstawa2;
if (podstawa2<2 || podstawa2>16) cout<<"\nPodano zla wartosc.\n"; // Zabezpieczenie przed wprowadzeniem nieodpowiedniej podstawy
} while (podstawa2<2 || podstawa2>16); // Warunki poprawnosci podstaw i liczb
while (liczba2>0)
{
*(tab+licz++)=liczba2%podstawa2; // Pętla przeliczająca
liczba2/=podstawa2;
}
char *tab2=new char[licz]; // Utworzenie kolejnej tablicy w celu odczytania przeliczenia od konca
for (int q=licz-1;q>=0;--q) cout<<(*(tab2+q)=hex[*(tab+q)]); // Wypisanie liczby
delete [] tab;
delete [] tab2;
cin.get();
break;
}
default: cout << "Wpisales bledny znak!"; break;
}
getch();
}
}
Pastebin: http://4programmers.net/Pastebin/1217