41 / 47
Oct 2020

Poprawiłem apostrofy ,mam zapętlone na nieokreśloną liczbę testów , testowałem wyniki ale nadal pokazuje błędna odpowiedź , nie umiem zlokalizować problemu tego kodu

Inicjalizuj zmienne. Kropka.

Jakieś takie uwagi dla polepszenia kodu w trosce o mój komfort i zdrowie psychiczne innych użytkowników forum:

  • Formatuj czytelnie kod3
  • Włącz i czytaj ostrzeżenia kompilatora (rozwiązują większość problemów początkujących, a nawet zaawansowanych programistów)
  • <string.h> to zdeprecjonowany nagłówek dla funkcji typu strcpy, strlen z języka C (<cstring> dla C++). Natomiast chyba chciałeś dołączyć po prostu <string> dla klasy std::string.
  • Popracuj nad nazewnictwem zmiennych. Jak widzę “LiteraRzymska” to nie wiem z czym mam do czynienia.
  • Wypełnianie mapy w funkcji przy każdym jej użyciu jest strasznie czasochłonne. Wystarczy zrobić to raz :wink:
  • Nie musiałbyś dekrementować iteratorów gdybyś użył funkcji rbegin() / rend() (uwaga zwracają reverse_iterator!).

Super pomysł z linkiem formatera. Nigdy nie potrzebowałem dla siebie, ale aby chociaż spojrzeć na cudze kody to chyba stanie się mój niezbędnik. Wiem, że takich narzędzi jest bez liku [dobre IDE chyba mają wbudowane] ale naprawdę nie potrzebowałem i nie używałem. Aż nie mogłem się powstrzymać i nie wkleić przeformatowanego [styl LLVM] kodu:

#include <string.h>
#include <map>
#include <iostream>
using namespace std;

int ZamianaRzymskieNaArabskie(string LiteraRzymska) {
  map<char, int> wartosci;

  int DlogoscLiczby, wynik, WartoscPojedynczejCyfry, OstatniaWartosc;

  wartosci['I'] = 1;
  wartosci['V'] = 5;
  wartosci['X'] = 10;
  wartosci['L'] = 50;
  wartosci['C'] = 100;
  wartosci['D'] = 500;
  wartosci['M'] = 1000;

  DlogoscLiczby = LiteraRzymska.length();

  for (DlogoscLiczby; DlogoscLiczby >= 0; DlogoscLiczby--) {
    WartoscPojedynczejCyfry = wartosci[LiteraRzymska[DlogoscLiczby]];

    if (WartoscPojedynczejCyfry >= OstatniaWartosc) {
      OstatniaWartosc = WartoscPojedynczejCyfry;
      wynik += WartoscPojedynczejCyfry;
    } else
      wynik -= WartoscPojedynczejCyfry;
  }
  return wynik;
}

string ZamianaArabskaNaRzymska(int arabskaWejsciowa)

{
  map<int, string> liczbaArabskaRzymska;

  string liczbaRzymska = "";

  liczbaArabskaRzymska[1] = "I";
  liczbaArabskaRzymska[4] = "IV";
  liczbaArabskaRzymska[5] = "V";
  liczbaArabskaRzymska[9] = "IX";
  liczbaArabskaRzymska[10] = "X";
  liczbaArabskaRzymska[40] = "XL";
  liczbaArabskaRzymska[50] = "L";
  liczbaArabskaRzymska[90] = "XC";
  liczbaArabskaRzymska[100] = "C";
  liczbaArabskaRzymska[400] = "CD";
  liczbaArabskaRzymska[500] = "D";
  liczbaArabskaRzymska[900] = "CM";
  liczbaArabskaRzymska[1000] = "M";

  map<int, string>::iterator koniec = --liczbaArabskaRzymska.end();
  map<int, string>::iterator poczatek = --liczbaArabskaRzymska.begin();

  for (koniec; koniec != poczatek; koniec--) {
    while (arabskaWejsciowa % koniec->first < arabskaWejsciowa) {
      liczbaRzymska += koniec->second;
      arabskaWejsciowa -= koniec->first;
    }
  }

  return liczbaRzymska;
}

int main() {
  string LiteraRzymska;
  string LiteraRzymska2;

  while (cin >> LiteraRzymska >> LiteraRzymska2) {
    int suma = ZamianaRzymskieNaArabskie(LiteraRzymska) +
               ZamianaRzymskieNaArabskie(LiteraRzymska2);
    cout << ZamianaArabskaNaRzymska(suma);
    cout << endl;
  }
}

To nie załatwia fatalnie dobrany nazw zmiennych i funkcji oraz braku testów na ideone.

Warto też przeczytać podstawowe wskazówki: Jeśli zaczynasz, przeczytaj koniecznie! <--kliknij w to proszę!

2 years later

Kod w moim IDE dziala poprawnie, jednak jak testuje go na ideone to zawsze pomija pierwsza linijke. Nie mam pojecia dlaczego tak sie dzieje. Kod : tu byl kod

int wartosci(char s) {
	int result = 0;

Nie zainicjalizowałeś zmiennej result.

Dzięki wielkie. Nie sądziłem że to będzie sprawiało kłopot skoro w jednym ze switchow ta zmienna otrzyma jakąś wartość

Wcześniej to przeoczyłem, ale w funkcji zamien10 możesz odwołać do elementu, który jest poza łańcuchem (np. gdy n = 1). Dlatego switch nie rozpatruje wszystkich przypadków jakie mogą wystąpić.