program tłumaczący w C napisać

dejna
Użytkownik
Użytkownik
Posty: 52
Rejestracja: 7 lip 2006, o 22:45
Płeć: Mężczyzna
Lokalizacja: Halinów
Podziękował: 3 razy

program tłumaczący w C napisać

Post autor: dejna »

Program tłumaczący wyrazy. Program korzysta ze słownika-pliku tekstowego zawierajacego wpisy w postaci:

cat=kot

dog=pies

student=student

tree=drzewo


Po podaniu wyrazu program wyświetla jego odpowiednik w obcym języku.
Awatar użytkownika
`vekan
Użytkownik
Użytkownik
Posty: 875
Rejestracja: 23 sty 2006, o 21:34
Płeć: Mężczyzna
Lokalizacja: far away
Podziękował: 139 razy
Pomógł: 71 razy

program tłumaczący w C napisać

Post autor: `vekan »

to jest program który zamienia jeden wyraz na drugi. Modyfikujesz go pod swoje potrzeby i powinno być ok.

Kod: Zaznacz cały

// (c) 2007 - vekan
#include <stdio.h>
#include <string.h>

void funkcja(char *tekstWynikowy, const char *czytanyTekst, const char *wzorzec1, const char *wzorzec2)
{
    char *tekstWynikowyTemp = tekstWynikowy;
    const char *next = NULL;
    int dlugoscDrugiegoWzorca = strlen(wzorzec2);
    int dlugoscPierwszegoWzorca = strlen(wzorzec1);
    int shift;
    while(1)    
    {
        next = strstr(czytanyTekst, wzorzec1);
        if (next == NULL)
            break;
        shift = next - czytanyTekst;
        strncpy(tekstWynikowyTemp, czytanyTekst, shift);
        tekstWynikowyTemp += shift;
        czytanyTekst += shift;
        strncpy(tekstWynikowyTemp, wzorzec2, dlugoscDrugiegoWzorca);
        tekstWynikowyTemp += dlugoscDrugiegoWzorca;
        czytanyTekst += dlugoscPierwszegoWzorca;
    }    strcpy(tekstWynikowyTemp, czytanyTekst);
}

int main()
{       

    const char *tab1 = "To jest napis, w ktorym jest kotlet";
    const char *tab2 = "Ala ma kota, kot ma kotleta :-)";
    const char *wzorzec1 = "kot";
    const char *wzorzec2 = "pies";
    char tablicaWynikowa[256];
    funkcja(tablicaWynikowa, tab2, wzorzec1, wzorzec2);
    printf("%s
", tablicaWynikowa);
    
    getchar();
    return 0;
}

dejna
Użytkownik
Użytkownik
Posty: 52
Rejestracja: 7 lip 2006, o 22:45
Płeć: Mężczyzna
Lokalizacja: Halinów
Podziękował: 3 razy

program tłumaczący w C napisać

Post autor: dejna »

Zrobiłem to tak,nie jestem pewien czy dobrze bedzie,hmm dlaczego nie działa w C, tylko w C++


#include
#include

void funkcja(char *tekstWynikowy, const char *czytanyTekst, const char *wzorzec1, const char *wzorzec2)
{
char *tekstWynikowyTemp = tekstWynikowy;
const char *next = NULL;
int dlugoscDrugiegoWzorca = strlen(wzorzec2);
int dlugoscPierwszegoWzorca = strlen(wzorzec1);
int shift;
while(1)
{
next = strstr(czytanyTekst, wzorzec1);
if (next == NULL)
break;
shift = next - czytanyTekst;
strncpy(tekstWynikowyTemp, czytanyTekst, shift);
tekstWynikowyTemp += shift;
czytanyTekst += shift;
strncpy(tekstWynikowyTemp, wzorzec2, dlugoscDrugiegoWzorca);
tekstWynikowyTemp += dlugoscDrugiegoWzorca;
czytanyTekst += dlugoscPierwszegoWzorca;
} strcpy(tekstWynikowyTemp, czytanyTekst);
}

int main()
{

const char *tab1 = "cat";
const char *tab2 = "cat=kot";"dog=pies";"student=student";"tree=drzewo";

const char *wzorzec1 = "kot";
const char *wzorzec2 = "kot";
char tablicaWynikowa[256];
funkcja(tablicaWynikowa, tab2, wzorzec1, wzorzec2);
printf("%s
", tablicaWynikowa);

getchar();
return 0;
}
Awatar użytkownika
Calasilyar
Użytkownik
Użytkownik
Posty: 2656
Rejestracja: 2 maja 2006, o 21:42
Płeć: Mężczyzna
Lokalizacja: Wrocław/Sieradz
Podziękował: 29 razy
Pomógł: 410 razy

program tłumaczący w C napisać

Post autor: Calasilyar »

a tak a propos tego tematu, jak można np. w tym przypadku zamieszczać te słówka w oddzielnym pliku, czyli jak zmodyfikować powyższy program, który by pobierał słówka z zewnętrznego pliku?
Awatar użytkownika
Undre
Użytkownik
Użytkownik
Posty: 1430
Rejestracja: 15 lis 2004, o 02:05
Płeć: Mężczyzna
Lokalizacja:
Podziękował: 3 razy
Pomógł: 92 razy

program tłumaczący w C napisać

Post autor: Undre »

dejna pisze:hmm dlaczego nie działa w C, tylko w C++
Mi działa niezależnie, czy kompiluję to jako C czy jako C++
Calasilyar pisze:a tak a propos tego tematu, jak można np. w tym przypadku zamieszczać te słówka w oddzielnym pliku, czyli jak zmodyfikować powyższy program, który by pobierał słówka z zewnętrznego pliku?
Tworzysz sobie powiedzmy nawet w formie txt pliczek, następnie w programie tworzysz wskaźnik plikowy ... i zaczyna się w sumie myślenie twórcze.

Sam wskaźnik wygląda mniej więcej tak :

Kod: Zaznacz cały

FILE *filepointer;
if ((filepointer = fopen("nazwapliku.txt","r")) == NULL )  {
  printf("Error");
  exit(1);
}
Słownie - pierwsza linijka to sama deklaracja, następnie wewnątrz warunku mamy przypisanie, w funkcji fopen podaje się nazwę pliku, a jako drugi parametr sposób otwarcia ( tutaj starczy nam "r" jako "read" - czyli odczyt ). Jeżeli takie przypisanie nie wyjdzie, filepointer będzie mieć wartość NULL, zatem porównanie z tą wartością w razie błędów spowoduje wykonanie bloku zawartego w IF. Pozostaje wszak problem przeszukiwania pliku w celu znalezienia interesującego nas łańcucha, to wszak zostawię wam do wygooglowania ( algorytmów teraz wszędzie pełno a u mnie jak zawsze krucho z czasem ).
mat1989
Użytkownik
Użytkownik
Posty: 3393
Rejestracja: 29 sty 2006, o 14:15
Płeć: Mężczyzna
Podziękował: 466 razy
Pomógł: 197 razy

program tłumaczący w C napisać

Post autor: mat1989 »

ale jeszcze jest potrzebna funkja wyszukująca w danym pliku tekstowym jakiś wyraz potem musisz prejść o jeden znak w prawo i pobrać wyraz w innym języku. Wszystko zależy od tego jak jest ułożona lista.
Awatar użytkownika
Undre
Użytkownik
Użytkownik
Posty: 1430
Rejestracja: 15 lis 2004, o 02:05
Płeć: Mężczyzna
Lokalizacja:
Podziękował: 3 razy
Pomógł: 92 razy

program tłumaczący w C napisać

Post autor: Undre »

Jak pisałem kwestię przeszukiwania pliku pozostawiam do wygooglowania Taką funkcję da się imo znaleźć
dejna
Użytkownik
Użytkownik
Posty: 52
Rejestracja: 7 lip 2006, o 22:45
Płeć: Mężczyzna
Lokalizacja: Halinów
Podziękował: 3 razy

program tłumaczący w C napisać

Post autor: dejna »

program mam gotowy tylko niewiem co trzeba zrobić by pobierał słowka do tłumaczenia z zewnętrznego pliku.np.txt...niewiem co oznaczają poszcególne pojęcia.prosze o wytłumaczenie linijka po linijce.


#include
#include // dla strtok, strcmp


int main(){
FILE *plik_slownika;
char *oddzielnik="="; //separator slowek
char linia[80]; //dlugosci linii
char slowo[80]; //dlugosc slowka nalezy pozmieniac wartosci
char *slownik_ANG, *slownik_PL;

plik_slownika = fopen("slownik.txt","r"); //nazwa pliku slownika; plik wczytywany tylko do odczytu
printf("Podaj slowko do przetlumaczenia: ");
scanf("%s", slowo);

while (!feof(plik_slownika)){
fgets(linia, 80, plik_slownika);
slownik_PL=strtok(linia,oddzielnik);
slownik_ANG=strtok(NULL,oddzielnik);
if( strcmp(slowo, slownik_PL ) == 0){ /*gdy slowka sa takie same, jest zwrocone 0, wtedy wyswietl slowko angielskie */
printf("%s
", slownik_ANG );
}

}
fclose(plik_slownika); //zamknij plik

return 0;
}
ODPOWIEDZ