Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a programban?...

Mi a hiba a programban? (romai szamokat alakit at arab szamokka)

Figyelt kérdés

a foprogram elottt mutat hibat, de nem tudom, hogy mi lehet az..


elore is koszonom a segitseget :) !!!



#római #szám #foprogram
2017. febr. 2. 22:11
 1/9 A kérdező kommentje:

#include <iostream>

#include <fstream>

#include <cstring>


using namespace std;


int atalakit( char r[], int i, int l)

{

int a=0;


int z[50];


for(int i=0;i<l;i++)

{

if(r[i]=='M') z[i]=1000;

if(r[i]=='D') z[i]=500;

if(r[i]=='C') z[i]=100;

if(r[i]=='L') z[i]=50;

if(r[i]=='X') z[i]=10;

if(r[i]=='V') z[i]=5;

if(r[i]=='I') z[i]=1;

}

for(int i=0;i<l;i++)

{

if(i==l-1) a=a+z[i];

else

{

if(z[i]<z[i+1]) a=a-z[i] ;

else a=a+z[i];

}

return a;

}



int main()

{

cout << "Hello world!" << endl;

ifstream f("adatok.txt");

char R[50][50];

int N;

for(int i=1; i<=N;i++)

{

f>>R[i];

}

int A[50];

for(int i=1; i<=N;i++)

{

int L=strlen(R[i]);

A[i]=atalakit(R[i],i,L);

}

for(int i=1; i<=N;i++) cout<<R[i]<<"-->"<<A[i]<<endl;



return 0;

}

2017. febr. 2. 22:12
 2/9 anonim ***** válasza:

A függvényedből lemaradt az utolsó for ciklus lezárása.


Amúgy elég sok ponton sántít a kód, az egyik amit kiemelnék, hogy karaktertömb helyett használhatnál stringet, az számontartja a saját hosszát, így nem kell a függvénybe külön paraméterként megadni azt. Valamint a függvényeden belül miért 50 hosszúra deklarálod a 'z' tömböt, miért nem olyan hosszúra, mint a kapott string? Meg eleve, használhatnál picit beszédesebb változóneveket.

2017. febr. 2. 22:18
Hasznos számodra ez a válasz?
 3/9 tabaki ***** válasza:
N az mennyi?
2017. febr. 3. 07:17
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:
Tényleg, az N-et létrehozod, de nem adsz neki semmilyen értéket. Ez is egy hibaforrás.
2017. febr. 3. 12:49
Hasznos számodra ez a válasz?
 5/9 SimkoL ***** válasza:
Ez így ebben a formában szemét, nem kicsit, nagyon. Mint írták is tessék normális változó neveket használni, átgondoltan. i, j, n, k, t, v ciklusváltozónak az olvashatóság kedvéért, - nem kis 'L' ami keverhető az egyessel, szerintem más is ezeket használja :), a többi pedig legyen beszédes. Lehet magyar, lehet angol csak lehessen következtetni a funkciójára, programban elfoglalt helyére.
2017. febr. 3. 14:03
Hasznos számodra ez a válasz?
 6/9 tabaki ***** válasza:

A kódod egy rettenet, de a módszered maga a jelek szerint működik:

[link]


Mivel én nem ismerem a C++-t, nem kísérleteztem azzal, hogy tényleg gatyába rázzam a programodat, csak addig kínoztam, hogy egyáltalán leforduljon. A kép jobb oldalán látható ellenor.txt fájlról annyit kell tudni, hogy azt egészen más módon hoztam létre egy pascal-programmal, az adatok.txt fájl elkészítése közben (azt ugyanis elfelejtetted mellékelni). Abban tehát a látszat ellenére nem a rómaiból arabra konvertálás eredménye van, hanem pont fordítva, az eredetileg generált arab- és a belőlük nyert római számokat írattam ki olyan sorrendben, ahogyan a te programodban meg kéne jelennie. Így első blikkre úgy látom, hogy tökéletes a visszafordítás, gratulálok!


Az eddig elmondottakon kívül: Ha a nyelv megengedi is, szerintem marhára zavaró, hogy az átalakítófüggvényben ugyanolyan nevű ciklusváltozót használsz, mint a mainben. Miért nem lehetett oda más bötűt kiagyalni? Egyébként meg, ha már az i-nél tartunk, pompás ötlet átadni az értékét a függvénynek, legalább van mit azonnal lenulláznia. Azt sem értem, mire jó, hogy minden nyomorult forban meg kell adni, hogy i az bizony integer, nem egyéb, ahelyett, hogy előtte deklarálnád, és békében használgatnád akárhányszor. A pascalon nevelkedett mimózalelkemet meg bántja ez a sok szöveg mélyén létrehozott változó, szerintem sokkal átláthatóbb volna kigyűjteni az elejére, hogy na, itt a készlet, ezeket fogom használni. Ami a fájlkezelést illeti, nem tudom, hogyan szokás C++-ben korrekt módon intézni, de én hiányolok valami más nyelvekben szokásos megnyitást és lezárást.

2017. febr. 4. 01:04
Hasznos számodra ez a válasz?
 7/9 tabaki ***** válasza:

Egy kísérlet, az említetteken túli néhány módosítással -- érzékenyebb idegrendszerű C++-programozók takarják el a szemüket:


#include <iostream>

#include <fstream>

#include <string>


using namespace std;


const string romaiSzamjegyek = "MDCLXVI";

const int arabErtekek[7] = {1000, 500, 100, 50, 10, 5, 1};


int arabra(char romaiSzamjegy)

{

int a = 0;

for(int c = 0; c < 7; c++)

      if(romaiSzamjegyek[c] == romaiSzamjegy) a = arabErtekek[c];

return a;

}


int atalakit( string szam)

{

int hossz = szam.length();

int arabErtek = 0;

for(int j = 0; j < hossz; j++)

      {

      int soros = arabra(szam[j]);

      if(j == hossz - 1)

            arabErtek += soros;

      else

            {

            int kovetkezo = arabra(szam[j + 1]);

            if(soros < kovetkezo) arabErtek -= soros ;

            else arabErtek += soros;

            }

      }

return arabErtek;

}


int main()

{

string romai[50];

int arab[50];

int N = 50;

int i;

ifstream f;

cout << "Mi a fenenek kell ideirni, hogy Hello world!?\n";

f.open("adatok.txt");

for(i = 0; i < N; i++) f >> romai[i];

f.close();

for(i = 0; i < N; i++) arab[i] = atalakit(romai[i]);

for(i = 0; i < N; i++) cout << romai[i] << " --> " << arab[i] << "\n";

return 0;

}

2017. febr. 5. 01:33
Hasznos számodra ez a válasz?
 8/9 tabaki ***** válasza:
A fenébe, egy csúfságot máris észrevettem az arabra() függvényben... Ha már megtalálta, minek megy végig a ciklus további részén? Pardony.
2017. febr. 5. 01:37
Hasznos számodra ez a válasz?
 9/9 tabaki ***** válasza:

Esetleg így?


int arabra(char romaiSzamjegy)

{

int a = 0;

for(int c = 0; c < 7 && a == 0; c++)

      if(romaiSzamjegyek[c] == romaiSzamjegy) a = arabErtekek[c];

return a;

}

2017. febr. 5. 01:51
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!