Здрасте! У меня такая вот проблема, надо сдать лабу. Она у меня написана на паскале, мне надо перевести ее на сишку. вот кол: (программа проверка орфографии) 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.
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("... **¦¬ЁвҐ Є«*ўЁиг ..."); } Вот набросал. Врятли это будет компилиться, но этот код уже гораздо легче доработать, разумеется, если есть хоть какие-то знания в этой области.
спасибо агромное, +10, да вабщето знания в этой области есть, просто их больше в области пхп+скуль, кароче веб - моя стихия