x-kom hosting

Problem z programem

DarkLiquidus
utworzono
utworzono

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
komentarz (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
komentarz

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
komentarz (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.

  • Dobra wypowiedź 1
DarkLiquidus
komentarz
komentarz

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.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.