C++ [Linked error]

0

Witam.
Mam problem postaci:
user image
Przepisywałem program z Javy na C++, który konwertuje liczby arabskie na rzymskie i odwrotnie. Możliwe, ze coś zrobiłem nie tak i dlatego ten błąd się wyświetla.
Proszę o pomoc co się mogło stać lub co zrobiłem nie tak :)
Z góry dziękuję

#include <iostream>
#include <cstdlib>
#include <climits>
#include <cstring>
#include <sstream>

using namespace std;

 class RzymArab {

	void Konwersja(string liczba, bool czyArabska) {

		int a = 0, i = 30;
		int dl = 0, wynik = 0;
		int j, d, s, t;
		char znak;
		int tab[50];
		string wzor = "", zapis = "";
		stringstream out;

		string liczbyRzymskie[31] = { "M", "MM", "MMM", "C", "CC", "CCC", "CD",
				"D", "DC", "DCC", "DCCC", "CM", "X", "XX", "XXX", "XL", "L",
				"LX", "LXX", "LXXX", "XC", "I", "II", "III", "IV", "V", "VI",
				"VII", "VIII", "IX", "" };

		// KONWERSJA Z LICZBY rzymskiej NA arabsk¹

		if (czyArabska == false) {

			dl = liczba.length();

			for (int k = 0; k < dl; k++) {
				znak = liczba.at(k);
				znak = toupper(znak);

				tab[k] = 0;

				switch (znak) {
				case 'I':
					tab[k] = 1;
					break;
				case 'V':
					tab[k] = 5;
					break;
				case 'X':
					tab[k] = 10;
					break;
				case 'L':
					tab[k] = 50;
					break;
				case 'C':
					tab[k] = 100;
					break;
				case 'D':
					tab[k] = 500;
					break;
				case 'M':
					tab[k] = 1000;
					break;
				}

			}
			int k = 0;
			do {

				if (tab[k] < tab[k + 1])
					tab[k] = -tab[k];

				k++;

			} while (tab[k] != 0);

			k = 0;

			do {

				wynik += tab[k];
				k++;
			} while (tab[k] != 0);

			wzor = liczba;
			
			out << wynik;
			liczba = out.str();

			for (k = 0; k < 50; k++)
				tab[k] = 0;
		}
		;

		// KONWERSJA Z LICZBY arabskiej NA rzymsk¹

		if ((czyArabska == true) || (czyArabska == false)) {

			a = atoi(liczba.c_str());

			if ((a < 1) || (a > 3999))
				cout << "Liczba " << a
						<< " nie miesci sie w przedziale 1 - 3999\n";
			else {

				j = a % 10;
				d = (a % 100 - j) / 10;
				s = (a % 1000 - j - d) / 100;
				t = (a % 10000 - j - d - s) / 1000;

				switch (t) {
				case 0:
					break;
				case 1:
					i = 0;
					break;
				case 2:
					i = 1;
					break;
				case 3:
					i = 2;
					break;
				}

				zapis += liczbyRzymskie[i];
				i = 30;

				switch (s) {
				case 0:
					break;
				case 1:
					i = 3;
					break;
				case 2:
					i = 4;
					break;
				case 3:
					i = 5;
					break;
				case 4:
					i = 6;
					break;
				case 5:
					i = 7;
					break;
				case 6:
					i = 8;
					break;
				case 7:
					i = 9;
					break;
				case 8:
					i = 10;
					break;
				case 9:
					i = 11;
					break;
				}

				zapis += liczbyRzymskie[i];
				i = 30;

				switch (d) {
				case 0:
					break;
				case 1:
					i = 12;
					break;
				case 2:
					i = 13;
					break;
				case 3:
					i = 14;
					break;
				case 4:
					i = 15;
					break;
				case 5:
					i = 16;
					break;
				case 6:
					i = 17;
					break;
				case 7:
					i = 18;
					break;
				case 8:
					i = 19;
					break;
				case 9:
					i = 20;
					break;
				}

				zapis += liczbyRzymskie[i];
				i = 30;

				switch (j) {
				case 0:
					break;
				case 1:
					i = 21;
					break;
				case 2:
					i = 22;
					break;
				case 3:
					i = 23;
					break;
				case 4:
					i = 24;
					break;
				case 5:
					i = 25;
					break;
				case 6:
					i = 26;
					break;
				case 7:
					i = 27;
					break;
				case 8:
					i = 28;
					break;
				case 9:
					i = 29;
					break;
				}

				zapis += liczbyRzymskie[i];
				i = 30;

				if (czyArabska == false) {
					if (wzor == zapis)
						cout << "Liczba " << zapis << " w zapisie arabskim to: " << wynik;
					else
						cout << wzor << " - Niepoprawny zapis! Prawdopodobnie chodzilo Ci o: " << zapis << " (" << wynik << ")";
				} else
					cout << "Liczba " << a << " w zapisie rzymskim to: " << zapis;

			}
		}

	}

	int main(int argc, char* argv[]) {

		char z;
		bool czyArabska = false;
		string s;
		stringstream out;
		int i = 0, dl = 0, j = 0, n = 0, k = 0;

		for (i = 0; i < sizeof(argv); i++) {

			dl = 0;
			j = 0;

			s = argv[i];
			z = s.at(0);
			z = toupper(z);
			dl = s.length();

			if (dl > 15) { // obcinamy dlugosc liczby do 15 znakow jesli jest
							// wieksza, bo najdluzsza liczba rzymska ma 15
							// znakow
				s = s.substr(0, 15);
				dl = s.length();
			}

			if (isdigit(z)) {
				if (dl > 4) {
					s = s.substr(0, 4);
					dl = s.length();
				}

				do {
					j++;
					z = s.at(j);
					if (!isdigit(z))
						s = s.substr(0, j); // ucinamy argument tak by
												// pozostala tylko liczba

				} while ((isdigit(z)) && (j + 1 < dl));

				n = atoi(s.c_str());

				if ((n > 3999) || (n < 1)) {
					cout << "Liczba " << n << " miesci sie poza zakresem (1-3999). Nie mozna jej przekonwertowac na zapis rzymski!";
					continue;
				}

				czyArabska = true;
				Konwersja(s, czyArabska);

			}

			else if ((z == 'I') || (z == 'X') || (z == 'V') || (z == 'L')
					|| (z == 'C') || (z == 'D') || (z == 'M')) {

				do {
					j++;
					z = s.at(j - 1);
					z = toupper(z);

					if ((z == 'I') || (z == 'X') || (z == 'V') || (z == 'L')
							|| (z == 'C') || (z == 'D') || (z == 'M'))
						;
					else {
						s = s.substr(0, j - 1);
						k++;
					}
					;

				} while ((j + 1 <= dl) && (k == 0));

				czyArabska = false;
				Konwersja(s, czyArabska);

			} else
				cout << "\"" << s << "\" nie jest poprawnie zapisana liczba w zadnym z systemow: rzymski lub arabski!";

		}
		return 0;
	}
 };


 
1

Niepoprawnie założyłeś projekt. Powinien być konsolowy.
Oraz wywal class RzymArab {

0

Nie jestem w tym dobry więc: jak to zrobić żeby był konsolowy? ;p
I przy odpalaniu program działa dla arabskich ale dla rzymskich już nie :/

0

Okej, problem rozwiązany.
**Dzięki za pomoc :) **

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