Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2009, 16:05   #1
Alik-Soldier
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 38
По умолчанию C++,строка символов

8. Написать программу, которая позволяет зашифровывать и расшифровывать с помощью «шифра Цезаря» сообщение, написанное на русском языке. Этот шифр реализует следующее преобразование текста: каждая буква исходного текста заменяется третьей после нее буквой в алфавите, который считается написанным по кругу.

Подскажите пжл,почему неправильно кодируется???

Код:
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
	char buff[50]={0};
	cout<<"Введите сообщение,которое будет закодированно"<<endl;
	char n=0;
	int i=0;
	for(;;)
	{
		n=getch();
		if(n==13)break;
		printf("%c",n);
		buff[i]=n;
		i++;
	}
	printf("\n");
	for(int k=0;k<i;k++)
	{
		if(buff[k]<=char(162)&&buff[k]>=char(160))
			buff[k]=buff[k]+3;
		if(buff[k]<=char(130)&&buff[k]>=char(128))
			buff[k]=buff[k]+3;
		if(buff[k]==char(163))
			buff[k]=buff[k]+78;
		if(buff[k]==char(131))
			buff[k]=buff[k]+109;
		if(buff[k]<=char(165)&&buff[k]>=char(164))
			buff[k]=buff[k]+2;
		if(buff[k]<=char(133)&&buff[k]>=char(132))
			buff[k]=buff[k]+2;
		if(buff[k]==char(241))
			buff[k]=buff[k]-73;
		if(buff[k]==char(240))
			buff[k]=buff[k]-104;
		if(buff[k]<=char(156)&&buff[k]>=char(134))
			buff[k]=buff[k]+3;
		if(buff[k]<=char(172)&&buff[k]>=char(166))
			buff[k]=buff[k]+3;
		if(buff[k]<=char(175)&&buff[k]>=char(173))
			buff[k]=buff[k]+51;
		if(buff[k]<=char(236)&&buff[k]>=char(224))
			buff[k]=buff[k]+3;
		if(buff[k]<=char(239)&&buff[k]>=char(237))
			buff[k]=buff[k]-77;
		if(buff[k]<=char(159)&&buff[k]>=char(157))
			buff[k]=buff[k]-29;
	}
	for(int j=0;j<i;j++)
	{
		printf("%c",buff[j]);
	}
	printf("\n");
	getch();
	return 0;
}
Alik-Soldier вне форума Ответить с цитированием
Старый 01.05.2009, 16:57   #2
kAND
Пользователь
 
Аватар для kAND
 
Регистрация: 30.11.2006
Сообщений: 15
По умолчанию

У тебя вообще не кодируется сообщение. Это из-за того, что в условии перепутано и (&&) c или (||). Если вместо "и" поставить "или", то работает, но кодировка проходит не на 3 буквы...

P.S. И вообще не понятно, зачем так много условий. Для латинской раскладки, достаточно двух:
Код:
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
	char buff[50]={0};
	cout<<"Enter a message, you want to code"<<endl;
	char n=0;
	int i=0;
	for(;;)
	{
		n=getch();
		if(n==13)break;
		printf("%c",n);
		buff[i]=n;
		i++;
	}
	printf("\n");
	for(int k=0;k<i;k++)
	{
		if (buff[k]>=120) buff[k]-=23;
		else
		  if (buff[k]!=32) buff[k]+=3;
	}
	for(int j=0;j<i;j++)
	{
		printf("%c",buff[j]);
	}
	printf("\n");
	getch();
	return 0;
}

Последний раз редактировалось kAND; 01.05.2009 в 17:20.
kAND вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка символов. Удалить из исходной строки все цифры. Striker14 Помощь студентам 4 26.02.2009 15:50
Дана строка символов. Задача: удалить из строки все цифры. Striker14 Помощь студентам 1 25.02.2009 20:23
Строка состаяния или загрузачная строка Sergeu Мультимедиа в Delphi 8 27.08.2008 10:32
как сохранить содержимое memo1 так чтобы строка начиналась с определённых символов.... aesoem Общие вопросы Delphi 17 29.02.2008 20:52
Строка символов в виде байтов Blondinka Общие вопросы Delphi 17 14.09.2007 19:06