DarkLiquidus utworzono 21 maja 2012 utworzono 21 maja 2012 Witam! Napisałem program, który ma szyfrować wyraz, zmieniając literę na literę o 3 pozycje dalej w alfabecie. Wielkość liter nie ma większego znaczenia. Przykład: wejście: 5 // to jest liczba znaków AzbYw dcebz Jednak mój kod nie działa. O to on: #include<stdio.h> #include<cstdlib> #include<cstdio> #include<iostream> using namespace std; int main() { int n; printf("Podaj ilosc znakow: "); scanf("%d", &n); char tab[n]; for(int i=0; i<=n; i++) { scanf("%c", &tab[i]); } for(int i=0; i<=n; i++) { if (tab[i]=(char)122) tab[i]=(char)99; if (tab[i]=(char)90) tab[i]=(char)67; if (tab[i]=(char)121) tab[i]=(char)98; if (tab[i]=(char)89) tab[i]=(char)66; if (tab[i]=(char)120) tab[i]=(char)97; if (tab[i]=(char)88) tab[i]=(char)65; else tab[i]=(char)tab[i]+3; } for(int i=0; i<=n; i++) { printf("%c", tab[i]); } system("Pause"); return 0; } Z góry dziękuję za pomoc!!!
leggo komentarz 21 maja 2012 komentarz 21 maja 2012 (edytowane) Błąd na pewno wyskoczy tutaj: [CODE] char tab[n]; [/CODE] W deklaracji tablicy statycznej nie można używać zmiennej do określenia rozmiaru! Tablica statyczna musi mieć z góry określony rozmiar. Wstawiając kod na forum używaj znacznika "code" i używaj wcięć.
Maly1990 komentarz 21 maja 2012 komentarz 21 maja 2012 oczywiscie ze mozna korzystac ze zmiennych, zaden blad nie wywali. w for masz błędy. Jesli zadeklarowales tablice tab[n] gdzie n=5 i trzeba pamietać ze tablice numerowane sa od 0, czyli beda 0,1,2,3,4 i jesli dales warunek wyjsca i<=n to tabeli o indeksie 5 nie ma poniewaz tab jest mniejsza, i wywala blad definicji poniewaz nie moze przypisac wartosci do tabeli, rowniez jest tak w przypadku odczytywania znakow. Zmien for-y na (int i=0; i<n; i++) i powinno smigac
leggo komentarz 21 maja 2012 komentarz 21 maja 2012 (edytowane) [quote name='Maly1990' timestamp='1337620100' post='1505226'] oczywiscie ze mozna korzystac ze zmiennych [/quote] Człowiek to się jednak całe życie uczy... edit. A tak poważnie to "śmigać" raczej nie będzie, bo poza tym co pisałem wcześniej (tablica) i tym o czym pisał [b]Maly1990[/b] (for-y) błędnie rozpisane są jeszcze if-y. Po pierwsze mylisz operację przypisania ([b]=[/b]) z porównaniem ([b]==[/b]). Po drugie pomiędzy if-ami brakuje [b]else[/b]. Gdy np. użytkownik poda "z" to litera ta zostanie przestawiona na "c", a później i tak zostanie do niej dodane 3. Przez to zarówno "z" jak i "c" zostaną zakodowane jako "f". Program powinien wyglądać tak: [CODE] #include<stdio.h> #include<cstdlib> #include<cstdio> #include<iostream> using namespace std; int main() { int n; printf("Podaj ilosc znakow: "); scanf("%d", &n); char *tab = new char[n]; for(int i=0; i<n; i++) { scanf("%c", &tab[i]); } for(int i=0; i<n; i++) { if (tab[i]==(char)122) tab[i]=(char)99; else if (tab[i]==(char)90) tab[i]=(char)67; else if (tab[i]==(char)121) tab[i]=(char)98; else if (tab[i]==(char)89) tab[i]=(char)66; else if (tab[i]==(char)120) tab[i]=(char)97; else if (tab[i]==(char)88) tab[i]=(char)65; else tab[i]=(char)tab[i]+3; } for(int i=0; i<n; i++) { printf("%c", tab[i]); } delete [] tab; system("Pause"); return 0; } [/CODE] Ze swojej strony polecałbym jeszcze zamianę if-ów na switch-a. 1
DarkLiquidus komentarz 23 maja 2012 Autor komentarz 23 maja 2012 Trochę poeksperymentowałem i rozwiązałem problem z waszymi wskazówkami. [CODE] #include<stdio.h> #include<cstdlib> #include<cstdio> #include<iostream> using namespace std; int main() { int n; printf("Podaj ilosc znakow: "); scanf("%d", &n); char tab[n]; for(int i=0; i<=n; i++) { scanf("%c", &tab[i]); } for(int i=0; i<=n; i++) { tab[i]+=3; if (tab[i]==91) tab[i]=65; if (tab[i]==92) tab[i]=66; if (tab[i]==93) tab[i]=67; if (tab[i]==123) tab[i]=97; if (tab[i]==124) tab[i]=98; if (tab[i]==125) tab[i]=99; } for(int i=0; i<=n; i++) { printf("%c", tab[i]); } system("Pause"); return 0; } [/CODE] Do każdej możliwej litery alfabetu dodaję 3. Rozpatruję po prostu znaki typu: { } [ ] itd. i zamieniam je na odpowiednie litery na początku alfabetu.
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.