Új hozzászólás Aktív témák

  • ArchElf

    addikt

    válasz Iolé #1018 üzenetére

    Nem akarom modani, de kicsit hibás is a program...
    - Negatív számokra nem ír ki semmit (egy hibaüzenet azért elkélne)
    - túl hosszú számokra hibát dob (puffer túlcsordulás miatt), ezt is illendő volna lekezelni
    - az alábbi sor elé kell egy i = 0;
    while(dec>=1000){
    mert jelen helyzetben egymás mögé konkatenálja a sztringeket (amiből sok jó nem származik):

    test.exe 1 2 3
    I III IIIIII

    test.exe 1 5 7
    I IV IVVII

    Amúgy nagyvonalakban:
    egesze fv: megnézi, hogy az n. argument egész számmá alakítható-e (az argumentum első része csak számokból áll-e)
    atoi fv: string integer-ré varázsolása...
    belső for ciklus: végigmegy az argumentumokon, kivonásos alapon "legyártja" római karakteres reprezentációt, kiírja a kimenetre

    AE

  • Iolé

    csendes tag

    Sziasztok!

    Szeretném a segítségeteket kérni! Lenne egy program, amit nem egészen értek, főleg utolsó rész nem tiszta. Esetleg valaki tudna egy kis kommentet írni hozzá, hogy hogyan működik, meg mikor mit csinál, nagyon fontos lenne!
    Ez volta feladat: A parancs a parancs sorban egy decimális számot (vagy decimális számok

    szóközökkel elválasztott sorozatát) vár(ja), amely(ek)nek kiírja római

    szám megfelelőjét az stdout-ra.

    Hibásan megadott parancs esetén a programnak rövid diagnosztikai

    üzenetben informálnia kell a felhasználót arról, hogy a parancsot

    hogyan kell használni. A diagnosztikai üzenetet az stderr-re kell

    küldeni.

    És a program:
    #include <stdio.h>

    int main(argc, argv)
    int argc;
    char *argv[];
    {
    int i = 0, x=0;
    int dec;
    char rom[50];
    if(argc == 1){
    fprintf(stderr, "Hianyzik a parameter!");
    exit( 1 );
    }

    for(x=1;x<argc;x++){
    if(egesze(argv[x])){
    dec = atoi(argv[x]);
    }else{
    fprintf(stderr, "A parameterlistaban nem megfelelo az egyik ertek!");
    exit( 1 );
    }

    while(dec>=1000){
    dec -= 1000;
    rom[i] = 'M';
    i++;
    }
    if (dec>=900){
    dec-=900;
    rom[i] = 'C';
    i++;
    rom[i] = 'M';
    i++;
    }
    if(dec>=500){
    dec -= 500;
    rom[i] = 'D';
    i++;
    }
    if (dec>=400){
    dec -= 400;
    rom[i] = 'C';
    i++;
    rom[i] = 'D';
    i++;
    }
    while(dec>=100){
    dec = dec-100;
    rom[i] = 'C';
    i++;
    }
    if(dec>=90){
    dec -= 90;
    rom[i] = 'X';
    i++;
    rom[i] = 'C';
    i++;
    }
    if(dec>=50){
    dec -= 50;
    rom[i] = 'L';
    i++;
    }
    if(dec>=40){
    dec -= 40;
    rom[i] = 'X';
    i++;
    rom[i] = 'L';
    i++;
    }
    while(dec>=10){
    dec -= 10;
    rom[i] ='X';
    i++;
    }
    if(dec == 9){
    rom[i] = 'I';
    i++;
    rom[i] = 'X';
    i++;
    }
    else{
    if(dec >= 5){
    dec -= 5;
    rom[i] = 'V';
    i++;
    }
    if(dec == 4){
    rom[i] = 'I';
    i++;
    rom[i] = 'V';
    i++;
    }
    else{
    while(dec > 0){
    dec -= 1;
    rom[i] = 'I';
    i++;
    }
    }
    }
    rom[i]='\0';
    printf(" %s", rom);
    }
    exit(0);
    }

    int egesze(s)
    char *s[];
    {
    int i=0, kezd;
    while (s[i]==' ' || s[i]=='\n' || s[i]=='\t')++i;
    if(s[i]=='+' || s[i]=='-')++i;
    kezd=i;
    while(s[i]>='0' && s[i]<='9')++i;
    if(i==kezd || s[i]!=' ' && s[i]!='\t' && s[i]!='\n' && s [i]!=0) return 0;
    else return 1;
    }

    int atoi(s)
    char s[];
    {
    int i, n;
    n = 0;
    for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
    n = 10 * n + (s[i] - '0');
    return n;
    }

Új hozzászólás Aktív témák