Informatika gyűjtemény

Egy szinttel feljebb uj_alien.cpp

2004050607080910

NézetNyomtat

uj_alien.cpp (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 2 KB
/*
    Informatika: algoritmus szakkor
    Idegen szamok
    Feladat: http://prog.berzsenyi.hu:8080/prog/View/szakkor/bdg/0910/01ora/aliennumbers
    Uray M. Janos, 2009. szeptember 18.
*/
#include <stdio.h>

#define MaxNum 100
#define MaxDig 94
#define MaxLen 35

// Egy teszteset
struct sTest {
    char Src[MaxLen + 1];       // Szam a forrasszamrendszerben
    char Des[MaxLen + 1];       // Szam a celszamrendszerben
    char SrcSys[MaxDig + 1];    // Forras szamrendszer
    char DesSys[MaxDig + 1];    // Cel szamrendszer
    int Number;                 // Szam
};

bool Input (const char *, sTest *, int &);
bool Output (const char *, const sTest *, int);

void ConvertFrom (sTest &);
void ConvertTo (sTest &);

int main (int AN, char * Args []) {
    sTest Test[MaxNum];
    int Num;
    
    // Argumentumok ellenorzese, forrasallomany betoltese
    if (AN < 3)
        return 1;
    if (!Input(Args[1], Test, Num))
        return 1;
    // Konvertalas
    for (int I = 0; I < Num; I++) {
        ConvertFrom(Test[I]);
        ConvertTo(Test[I]);
    }
    // Eredmeny kiirasa a celallomanyba
    Output(Args[2], Test, Num);
    return 0;
}

// Forrasallomany betoltese
bool Input (const char * FN, sTest * Test, int & Num) {
    FILE * F = fopen(FN, "r");
    if (== NULL)
        return false;
    fscanf(F, "%d\n", &Num);
    for (int I = 0; I < Num; I++)
        fscanf(F, "%s %s %s\n", Test[I].Src, Test[I].SrcSys, Test[I].DesSys);
    fclose(F);
    return true;
}
// Celallomany mentese
bool Output (const char * FN, const sTest * Test, int Num) {
    FILE * F = fopen(FN, "w");
    if (== NULL)
        return false;
    for (int I = 0; I < Num; I++)
        fprintf(F, "Case #%d: %s\n", I + 1, Test[I].Des);
    fclose(F);
    return true;
}

// Szam kinyerese a forrasszamrendszerbol
void ConvertFrom (sTest & Test) {
    int I, J, Sys;
    
    Test.Number = 0;
    // Szamrendszer valtoszamanak meghatarozasa
    for (Sys = 0; Test.SrcSys[Sys]; Sys++);
    // Dekodolas
    for (= 0; Test.Src[I]; I++) {
        for (= 0; J < Sys; J++)
            if (Test.SrcSys[J] == Test.Src[I])
                break;
        if (< Sys) {
            Test.Number *= Sys;
            Test.Number += J;
        }
    }
}
// Szam konvertalasa a celszamrendszerbe
void ConvertTo (sTest & Test) {
    int I, Sys, N;
    char Mirror[MaxLen + 1];
    
    // Szamrendszer valtoszamanak meghatarozasa
    for (Sys = 0; Test.DesSys[Sys]; Sys++);
    // Kodolas
    for (= 0; Test.Number; I++) {
        Mirror[I] = Test.DesSys[Test.Number % Sys];
        Test.Number /= Sys;
    }
    N = I;
    for (= 0; I < N; I++)
        Test.Des[I] = Mirror[- I - 1];
    Test.Des[N] = 0;
}
(Vissza)