Hirdetés

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

  • 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