mefisto262 Opublikowano 24 Czerwca 2010 Zgłoś Opublikowano 24 Czerwca 2010 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); } } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Adriano321 Opublikowano 24 Czerwca 2010 Zgłoś Opublikowano 24 Czerwca 2010 (edytowane) 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 24 Czerwca 2010 przez Adriano321 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
mefisto262 Opublikowano 26 Czerwca 2010 Zgłoś Opublikowano 26 Czerwca 2010 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
mefisto262 Opublikowano 2 Lipca 2010 Zgłoś Opublikowano 2 Lipca 2010 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(); } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...