Помогите перевести с pascal -> C

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by advokat.holy, 24 Jun 2009.

  1. advokat.holy

    advokat.holy New Member

    Joined:
    5 Mar 2008
    Messages:
    11
    Likes Received:
    1
    Reputations:
    0
    Здрасте! У меня такая вот проблема, надо сдать лабу.
    Она у меня написана на паскале, мне надо перевести ее на сишку.
    вот кол: (программа проверка орфографии)
    Uses CRT;
    Const NameDict = 'dict.slo';
    Max = 100;

    Var Word1, Word2 : String[30];
    FileDict : Text;
    M : Array [1..Max] Of String[30];
    I,L : Word;
    Eq : Boolean;

    Function NonEqualLength(S1, S2 : String) : Boolean;
    Var I : Word;
    F,R : Boolean;

    Begin
    F := True;
    { begin }
    While F Do
    Begin
    If (S1[1] = S2[1])
    Then
    Begin
    Delete(S1, 1, 1);
    Delete(S2, 1, 1);
    End
    Else F := False;
    End;

    F := True;
    { end }
    While F Do
    Begin
    If (S1[Length(S1)] = S2[Length(S2)])
    Then
    Begin
    Delete(S1, Length(S1), 1);
    Delete(S2, Length(S2), 1);
    End
    Else F := False;
    End;

    If (Length(S1) = 0) OR (Length(S2) = 0)
    Then R := True
    Else R := False;

    NonEqualLength := R;
    End;

    Function EqualLength(S1, S2 : String) : Boolean;
    Var F : Boolean;
    I, R, Error1, Error2 : Word;

    Begin
    R := 0;
    For I := 1 To Length(S1) Do
    Begin
    If S1 <> S2 Then
    Begin
    R := R + 1;
    If R = 1 Then Error1 := I;
    If R = 2 Then Error2 := I;
    End;
    End;

    F := False;
    If R = 0
    Then F := True;

    If R = 1
    Then F := True;

    If ( (R = 2) and (S1[Error1] = S2[Error2]) and (S1[Error2] = S2[Error1]) )
    Then F := True;

    EqualLength := F;
    End;

    Function UpperCaseRus(RusChar : Char) : Char;
    Begin
    Case RusChar Of
    '*'..'Ї': UpperCaseRus := Chr(Ord(RusChar)-32);
    'а'..'п': UpperCaseRus := Chr(Ord(RusChar)-80);
    'с' : UpperCaseRus := 'р';
    Else UpperCaseRus := UpCase(RusChar);
    End;
    End;

    Function UpString(S : String) : String;
    Var I : Byte;
    NewString : String;
    Begin
    NewString:='';
    For I:=1 To Length(S) Do NewString := NewString + UpperCaseRus(S);
    UpString:=NewString;
    End;

    Procedure Orphography (W1, W2 : String);
    Var F : Boolean;
    Begin
    F := False;

    If (Length(W1) = Length(W2))
    Then F := EqualLength (W1, W2);

    If ( Abs(Length(W1)-Length(W2)) = 1)
    Then F := NonEqualLength (W1, W2);

    If (F)
    Then
    Begin
    M[L] := W1;
    Inc(L);
    End;
    End;

    Begin
    ClrScr;
    For I := 1 To Max Do M := '';
    L := 1;

    Write('‚ўҐ¤ЁвҐ б«®ў® ¤«п Їа®ўҐаЄЁ: ');
    ReadLn(Word2);
    Word2 := UpString(Word2);

    Eq := True;
    Assign (FileDict, NameDict);
    Reset (FileDict);
    While ( Not(EOF(FileDict)) and Eq) Do
    Begin
    ReadLn(FileDict, Word1);
    Word1 := UpString(Word1);
    If Word1 = Word2 Then Eq := False;
    Orphography (Word1, Word2);
    End;
    Close (FileDict);

    If Not(Eq)
    Then
    WriteLn ('Ћв«Ёз*®! ’*Є®Ґ б«®ў® Ґбвм ў б«®ў*аҐ!')
    Else
    If L <> 1
    Then
    Begin
    WriteLn ('‚®§¬®¦*® б«®ў® **ЇЁб**® *Ґ ўҐа*®.');
    WriteLn ('‚*аЁ**вл §*¬Ґ*л: ');
    For I := 1 To L Do Write(M, ' ');
    WriteLn;
    End;
    { Else WriteLn ('ЌҐЁ§ўҐбв*®Ґ б«®ў®. €§ўЁ*ЁвҐ.');
    }

    WriteLn('... **¦¬ЁвҐ Є«*ўЁиг ...');
    ReadLn;
    End.
     
  2. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Жесть ребятки пошли. Ты бы хоть "пожалуйста", что ли написал...
     
  3. advokat.holy

    advokat.holy New Member

    Joined:
    5 Mar 2008
    Messages:
    11
    Likes Received:
    1
    Reputations:
    0
    Пожалуйста, ну очень надо, если завтра не сдам то мне крантЫ
    Плиз помогите
     
    1 person likes this.
  4. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Code:
    #define NameDict 'dict.slo'
    #define Max 100
    
    char Word1[30], Word2[30];
    FILE* FileDict;
    char M[Max][30];
    int I, L;
    bool Eq;
    
    bool NonEqualLength(char* S1, char* S2) {
    bool F,R;
    F = True;
    While (F) {
    If (S1[1] == S2[1]) {
     //Delete(S1, 1, 1); ??
     //Delete(S2, 1, 1); ??
    }
    Else F = False;
    }
    
    F = True;
    While (F) {
    If (S1[strlen(S1)] == S2[strlen(S2)]) {
     //Delete(S1, Length(S1), 1); ??
     //Delete(S2, Length(S2), 1); ??
    }
    Else F = False;
    }
    
    If (strlen(S1) == 0) || (strlen(S2) == 0)
    R = True
    Else R = False;
    
    NonEqualLength = R;
    }
    
    bool EqualLength(char* S1, char* S2 ) {
    bool F;
    int I, R=0, Error1, Error2;
    
    For (I = 0; i<strlen(S1); i++) {
    If (S1[I] != S2[I]) {
    
    If ++R = 1  Error1 = I;
    If ++R = 2  Error2 = I; // Жеееесть, а не алгоритм ))
    }
    }
    
    F = False;
    If (R == 0)
     F = True;
     // do you know what is 'case'? )
    If (R == 1)
     F = True;
    
    If ( (R == 2) && (S1[Error1] == S2[Error2]) && (S1[Error2] == S2[Error1]) )
    F = True;
    
    EqualLength = F;
    }
    
    char UpperCaseRus(char RusChar) {
    
    switch(RusChar) {
    case '*'..'Ї': UpperCaseRus = //Chr(Ord(RusChar)-32); 
    case 'а'..'п': UpperCaseRus = //Chr(Ord(RusChar)-80);
    case 'с' : UpperCaseRus = 'р';
    default: UpperCaseRus = UpCase(RusChar);
    }
    }
    
    char* UpString(char* S) {
    char* NewString;
    NewString='';
    For (int I=0; I<strlen(S); I++)
    NewString += UpperCaseRus(S[I]);
    UpString = NewString;
    }
    
    void Orphography (char* W1, char* W2) {
    bool F=False;
    
    If (strlen(W1) == strlen(W2)) 
    F = EqualLength (W1, W2);
    
    If (Abs(strlen(W1)-strlen(W2)) ==1) 
    F = NonEqualLength (W1, W2);
    
    If (F)
    M[L++] = W1;
    }
    
    void main() {
    
    For (I = 0; I < Max; I++) M[I] = '';
    L = 1;
    
    printf("‚ўҐ¤ЁвҐ б«®ў® ¤«п Їа®ўҐаЄЁ: ");
    scanf("%s", Word2);
    Word2 = UpString(Word2);
    
    Eq = True;
    int c;
    
    if((FileDict = fopen(NameDict, "r")) { // read, write xz
    	while ((c=fgec(FileDict))!=EOF) {
    		fscanf(FileDictm "%s", &Word1)'
    		Word1 = UpString(Word1);
    		If (Word1==Word2) Eq=Flase;
    		Orphography (Word1, Word2);
    	}
    		fclose(FileDict);
    }	
    
    
    If (!Eq)
    WriteLn ('Ћв«Ёз*®! ’*Є®Ґ б«®ў® Ґбвм ў б«®ў*аҐ!');
    Else {
     If (L != 1)  {
    printf ("‚®§¬®¦*® б«®ў® **ЇЁб**® *Ґ ўҐа*®.");
    printf ("‚*аЁ**вл §*¬Ґ*л: ");
    For (I = 1; I < L; I++) printf('  %s', M[I]);
    printf("\n");
    }
     Else printf("ЌҐЁ§ўҐбв*®Ґ б«®ў®. €§ўЁ*ЁвҐ.");
    }
    
    printf("... **¦¬ЁвҐ Є«*ўЁиг ...");
    }
    
    Вот набросал. Врятли это будет компилиться, но этот код уже гораздо легче доработать, разумеется, если есть хоть какие-то знания в этой области.
     
    #4 Fata1ex, 24 Jun 2009
    Last edited: 25 Jun 2009
    1 person likes this.
  5. advokat.holy

    advokat.holy New Member

    Joined:
    5 Mar 2008
    Messages:
    11
    Likes Received:
    1
    Reputations:
    0
    спасибо агромное, +10, да вабщето знания в этой области есть, просто их больше в области пхп+скуль, кароче веб - моя стихия