Skocz do zawartości
mefisto262

[C] Program:alfabet morsa

Rekomendowane odpowiedzi

witam wszystkich, mam taki problem muszę zrobić program alfabet morsa, coś tam zrobiłem ale wyskakuje błąd od sysemu windows i nie wiem co jest źle !!. Oto jest mój program:

Wiem że program można zrobić ze switch case, ale wlaśnie musze zrobić innaczej.

Program jest troszeczke długi

#include <stdio.h>

 

int main()

{

typedef struct

{

char litera;

char mors[6];

} mors;

 

int i, z, k; // zmienne pomocnicze

char tabLiter[63]; //

char znak[127];

//ograniczenie do 127 znakow

mors tabMors[63];

 

tabLiter[0]=46; //kropka z kody ascii

for (i=1, z=48; i<11; i++, z++) //wpisywanie cyfr do tablicy

{

tabLiter=z;

}

 

z=65;

for (i=11; i<38; i++) //duze litery z kodu ascii

{

tabLiter=z;

z++;

}

 

z=97;

for (i=38; i<63; i++)

{

tabLiter=z; //male litery z kodu ascii

z++;

}

// interakcja z uzytkownikiem

for (i=0; i<1; i++);

for (k=0; k<6; k++);

printf("\nPodaj slowo do zakodowania: ");

printf("\nZnak: %s", tabMors.mors[k]);

 

tabMors[0].mors[0]='.'; //kropka

tabMors[0].mors[1]='-';

tabMors[0].mors[2]='.';

tabMors[0].mors[3]='-';

tabMors[0].mors[4]='.';

 

//duze litery z kodu ascii

tabMors[1].mors[0]='-';

tabMors[1].mors[1]='-';

tabMors[1].mors[2]='-';

tabMors[1].mors[3]='-';

tabMors[1].mors[4]='-';

 

tabMors[2].mors[0]='.';

tabMors[2].mors[1]='-';

tabMors[2].mors[2]='-';

tabMors[2].mors[3]='-';

 

 

tabMors[3].mors[0]='.';

tabMors[3].mors[1]='.';

tabMors[3].mors[2]='-';

tabMors[3].mors[3]='-';

tabMors[3].mors[4]='-';

 

 

tabMors[4].mors[0]='.';

tabMors[4].mors[1]='.';

tabMors[4].mors[2]='.';

tabMors[4].mors[3]='-';

tabMors[4].mors[4]='-';

 

tabMors[5].mors[0]='.';

tabMors[5].mors[1]='.';

tabMors[5].mors[2]='.';

tabMors[5].mors[3]='.';

tabMors[5].mors[4]='-';

 

 

tabMors[6].mors[0]='.';

tabMors[6].mors[1]='.';

tabMors[6].mors[2]='.';

tabMors[6].mors[3]='.';

tabMors[6].mors[4]='.';

 

tabMors[7].mors[0]='-';

tabMors[7].mors[1]='.';

tabMors[7].mors[2]='.';

tabMors[7].mors[3]='.';

tabMors[7].mors[4]='.';

 

 

tabMors[8].mors[0]='-';

tabMors[8].mors[1]='-';

tabMors[8].mors[2]='.';

tabMors[8].mors[3]='.';

tabMors[8].mors[4]='.';

 

 

tabMors[9].mors[0]='-';

tabMors[9].mors[1]='-';

tabMors[9].mors[2]='-';

tabMors[9].mors[3]='.';

tabMors[9].mors[4]='.';

 

tabMors[10].mors[0]='-';

tabMors[10].mors[1]='-';

tabMors[10].mors[2]='-';

tabMors[10].mors[3]='-';

tabMors[10].mors[4]='.';

 

tabMors[11].mors[0]='.';

tabMors[11].mors[1]='-';

 

tabMors[12].mors[0]='-';

tabMors[12].mors[1]='.';

tabMors[12].mors[2]='.';

tabMors[12].mors[3]='.';

 

tabMors[13].mors[0]='-';

tabMors[13].mors[1]='.';

tabMors[13].mors[2]='-';

tabMors[13].mors[3]='.';

 

tabMors[14].mors[0]='-';

tabMors[14].mors[1]='.';

tabMors[14].mors[2]='.';

 

tabMors[15].mors[0]='.';

 

tabMors[16].mors[0]='.';

tabMors[16].mors[1]='.';

tabMors[16].mors[2]='-';

 

tabMors[17].mors[0]='-';

tabMors[17].mors[1]='-';

tabMors[17].mors[2]='.';

 

tabMors[18].mors[0]='.';

tabMors[18].mors[1]='.';

tabMors[18].mors[2]='.';

tabMors[18].mors[3]='.';

 

tabMors[19].mors[0]='.';

tabMors[19].mors[1]='.';

 

tabMors[20].mors[0]='.';

tabMors[20].mors[1]='-';

tabMors[20].mors[2]='-';

tabMors[20].mors[3]='-';

 

tabMors[21].mors[0]='-';

tabMors[21].mors[1]='.';

tabMors[21].mors[2]='-';

 

tabMors[22].mors[0]='.';

tabMors[22].mors[1]='-';

tabMors[22].mors[2]='.';

tabMors[22].mors[3]='.';

 

tabMors[23].mors[0]='-';

tabMors[23].mors[1]='-';

 

 

tabMors[24].mors[0]='-';

tabMors[24].mors[1]='.';

 

tabMors[25].mors[0]='-';

tabMors[25].mors[1]='-';

tabMors[25].mors[2]='-';

 

tabMors[26].mors[0]='.';

tabMors[26].mors[1]='-';

tabMors[26].mors[2]='-';

tabMors[26].mors[3]='.';

 

tabMors[27].mors[0]='-';

tabMors[27].mors[1]='-';

tabMors[27].mors[2]='.';

tabMors[27].mors[3]='-';

 

tabMors[28].mors[0]='.';

tabMors[28].mors[1]='-';

tabMors[28].mors[2]='.';

 

tabMors[29].mors[0]='.';

tabMors[29].mors[1]='.';

tabMors[29].mors[2]='.';

 

tabMors[30].mors[0]='-';

 

tabMors[31].mors[0]='.';

tabMors[31].mors[1]='.';

tabMors[31].mors[2]='-';

 

tabMors[32].mors[0]='.';

tabMors[32].mors[1]='.';

tabMors[32].mors[2]='.';

tabMors[32].mors[3]='-';

 

tabMors[33].mors[0]='.';

tabMors[33].mors[1]='-';

tabMors[33].mors[2]='-';

 

tabMors[34].mors[0]='-';

tabMors[34].mors[1]='.';

tabMors[34].mors[2]='.';

tabMors[34].mors[3]='-';

 

tabMors[35].mors[0]='-';

tabMors[35].mors[1]='.';

tabMors[35].mors[2]='-';

tabMors[35].mors[3]='-';

 

tabMors[36].mors[0]='-';

tabMors[36].mors[1]='-';

tabMors[36].mors[2]='.';

tabMors[36].mors[3]='.';

 

 

tabMors[37].mors[0]='.'; //male litery

tabMors[37].mors[1]='-';

 

tabMors[38].mors[0]='-';

tabMors[38].mors[1]='.';

tabMors[38].mors[2]='.';

tabMors[38].mors[3]='.';

 

tabMors[39].mors[0]='-';

tabMors[39].mors[1]='.';

tabMors[39].mors[2]='-';

tabMors[39].mors[3]='.';

 

tabMors[40].mors[0]='-';

tabMors[40].mors[1]='.';

tabMors[40].mors[2]='.';

 

tabMors[41].mors[0]='.';

 

tabMors[42].mors[0]='.';

tabMors[42].mors[1]='.';

tabMors[42].mors[2]='-';

 

tabMors[43].mors[0]='-';

tabMors[43].mors[1]='-';

tabMors[43].mors[2]='.';

 

tabMors[44].mors[0]='.';

tabMors[44].mors[1]='.';

tabMors[44].mors[2]='.';

tabMors[44].mors[3]='.';

 

tabMors[45].mors[0]='.';

tabMors[45].mors[1]='.';

 

tabMors[46].mors[0]='.';

tabMors[46].mors[1]='-';

tabMors[46].mors[2]='-';

tabMors[46].mors[3]='-';

 

tabMors[47].mors[0]='-';

tabMors[47].mors[1]='.';

tabMors[47].mors[2]='-';

 

tabMors[48].mors[0]='.';

tabMors[48].mors[1]='-';

tabMors[48].mors[2]='.';

tabMors[48].mors[3]='.';

 

tabMors[49].mors[0]='-';

tabMors[49].mors[1]='-';

 

tabMors[50].mors[0]='-';

tabMors[50].mors[1]='.';

 

tabMors[51].mors[0]='-';

tabMors[51].mors[1]='-';

tabMors[51].mors[2]='-';

 

tabMors[52].mors[0]='.';

tabMors[52].mors[1]='-';

tabMors[52].mors[2]='-';

tabMors[52].mors[3]='.';

 

tabMors[53].mors[0]='-';

tabMors[53].mors[1]='-';

tabMors[53].mors[2]='.';

tabMors[53].mors[3]='-';

 

tabMors[54].mors[0]='.';

tabMors[54].mors[1]='-';

tabMors[54].mors[2]='.';

 

tabMors[55].mors[0]='.';

tabMors[55].mors[1]='.';

tabMors[55].mors[2]='.';

 

tabMors[56].mors[0]='-';

 

tabMors[57].mors[0]='.';

tabMors[57].mors[1]='.';

tabMors[57].mors[2]='-';

 

tabMors[58].mors[0]='.';

tabMors[58].mors[1]='.';

tabMors[58].mors[2]='.';

tabMors[58].mors[3]='-';

 

tabMors[59].mors[0]='.';

tabMors[59].mors[1]='-';

tabMors[59].mors[2]='-';

 

tabMors[60].mors[0]='-';

tabMors[60].mors[1]='.';

tabMors[60].mors[2]='.';

tabMors[60].mors[3]='-';

 

tabMors[61].mors[0]='-';

tabMors[61].mors[1]='.';

tabMors[61].mors[2]='-';

tabMors[61].mors[3]='-';

 

tabMors[62].mors[0]='-';

tabMors[62].mors[1]='-';

tabMors[62].mors[2]='.';

tabMors[62].mors[3]='.';

 

//procedura wyszukania odpowiedniego znaku z ascii z kodem morsa

i=0;

while(znak != '\0')

{

znak=(char)z;

//mi si wydaje ze cos z tym warunkiem jest nie tak

do

{

k = i;

i++;

} while (tabLiter!=z);

 

}

 

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

for (i=0; i<1; i++);for (k=0; k<6; k++);printf("\nPodaj slowo do zakodowania: ");printf("\nZnak: %s", tabMors[i].mors[k]);

Wywala ci błąd w tym momencie. Nie rozumiem co miałeś na myśli pisząc ten kawałek. Zakomentuj drugiego printf. Odwołujesz się do zmiennej nie zainicjowanej.

 

i=0;while(znak[i] != '\0')    // Musisz najpierw gdzieś pobrać słowo znaki !!!!!!!!!!!!!!!{znak[i]=(char)z;          //dlaczego niszczysz sobie pobrane słowo jakąś wartością z???//mi si wydaje ze cos z tym warunkiem jest nie takdo{k = i;i++;} while (tabLiter[i]!=z);}
Ta 'procedura' jak ty ją nazwałeś nie będzie ci działać, skąd ci się wzięło z.

Proponuję wywalić tablicę tabLiter. Zamiast tego litery wpisywać bezpośrednio do tabMors.litera, a później przypisywać im odpowiedniki morsa do tablicy tabMors.mors[]. Zadeklarowałeś sobie ją 6-elementową, a nigdzie tego nie wykorzystujesz, a także odpowiedniki morsa nie są jednakowej długości. Proponuję dlatego kończyć każdy znak morsa znakiem null(w innym przypadku będziesz odczytywał śmiecie z pamięci). Będziesz odczytywał znak tak jakby był to łańcuch.

 

Co do zamiany liter na morsa.

Pobieraj po kolei znaki z znaki dopóki jest różny od 0. Następną pętlą leć ten znak przez tablicę tabMors[x].litera jak jest równa to wypisuj tabMors[x].mors dopóki == 0.

Edytowane przez Adriano321

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

nie wiem czy to dobrze zrobiłem ale zrobiłem inaczej, i teraz zmniejszyłem ilość znaków bo wywaliłem małe litery i dałem strcmp(&znak, &tabLiter[z])

 

#define LENGTH 37

int i, z, k=6,j;

char tabLiter[37];

char znak[128];

mors tabMors[37];

gets(wiersz);

---------

 

for(i = 0; i < strlen(wiersz); i++)

{

j = 0;

char temp = toupper(wiersz);

while(temp != tabMors2[j].litera && j++ < LENGTH - 1) ;

if(j < LENGTH)

printf("%5s", tabMors2[j].mors);

else

printf(" ?? ");

 

a czy ktoś mógłby napisać mi ten program, bo już mi ręce opadają, ciągle te błędy już sam nie wiem jak to już zrobić. Jeżeli ktoś mi to napisze to będę bardzo wdzięczny

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

zrobiłem coś takiego, ale są błędy w strcmp, wydaje mi się że trzeba dodać znak '\0' do porównywanych liter, albo skorzystać z funkcji memcmp, tylko nie wiem jak.

 

#include <stdio.h>

#include <string.h>

#include <ctype.h>

typedef struct

{

char litera;

char mors[6];

} mors;

 

#define LENGTH 37

 

/*typedef struct

{

char litera;

char *mors;

}cos;*/

 

mors tabMors[LENGTH] =

{

'A', ".-", 'B', "-...", 'C', "_._.", 'D', "-..", 'E', ".", 'F', "..-.", 'G', "-..", 'H', "....", 'I', "..",

'J', ".---", 'K', "-.-", 'L', ".-..", 'M', "--", 'N', "-.", 'O', "---", 'P', ".--.", 'R', ".-.", 'S', "...",

'T', "-", 'U', "..-", 'W', ".--", 'V', "...-", 'X', "-..-", 'Y', "-.-", 'Z', "--..", '1', ".----", '2', "..---",

'3', "...--", '4', "....-", '5', ".....", '6', "-....", '7', "--...", '8', "---..", '9', "----.", '0', "-----",

'.', ".-.-.-",

};

int main()

{

 

 

int i, z, k=6, j; // zmienne pomocnicze

char koniec;

 

do

{

printf("\nPodaj slowo do zakodowania: ");

char wiersz[128];

gets(wiersz);

 

for(i = 0; i < strlen(wiersz); i++)

{

j = 0;

char temp = toupper(wiersz);

while(strcmp("tabMors[j].litera", "temp")!=0 && j++ < LENGTH - 1) ;

if(j < LENGTH)

printf("%5s", tabMors[j].mors);

else

printf(" ?? ");

}

printf("\n\nAby zakonczyc nacisnij K\nAby powtorzyc nacisnij dowolny inny klawisz ");

koniec=getchar();

koniec=toupper(koniec);

getchar();

}while (koniec!='K');

getchar();

 

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...