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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2009, 07:47   #1
Quatro
 
Регистрация: 15.12.2009
Сообщений: 3
По умолчанию Курсовая "Морзянка"

Задание:
Разработать программу, которая считывает текст из файла (*.txt), выводит его в этом виде на экран, переводит его согласно азбуке Морзе, изображает последовательность полученных символов на экране и записывает их в новый файл. Имена файлов задаются пользователем.



Вобщем проблема такая, создал .exe проект, разместил 2 кнопки, 2 Edit Box все ништяк. В первой кнопке написал текст для открытия текстового документа, в котором содержится русский текст который, собственно , и нужно перевести в кодировку азбуки Морзе. Для открытия длина строки задана 1000 символов. Когда открываю текст в эдит бокс, он выводит текст, а вместо неиспользованных символов пишет буквы МММММ, и вторая кнопка переводит эти буквы ММММ тоже в азбуку морзе и как следствие программа работает не совсем корректно. Вобщем вопрос - Как определить конец строки? k = strlen(text) определил, а че дальше хз. Вот кусок кода :



Код:
void CNoviikursDlg::OnButton1() 
{
	char Filter[]="TextFile(*.txt),(*.doc) |*.txt; *.doc| All(*.*)|*.*||";
	CFileDialog fd(TRUE, ".txt","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, Filter);
	fd.DoModal();
	int k;

	CFile txt(fd.GetPathName(), CFile::modeReadWrite);
	txt.SeekToBegin();


char text[1000];


  

	
	txt.Read(&text, sizeof(text));
k = strlen(text);



    m_x1.Format("%.100s",text);  // вместо пустых символов выводит на экране ММММММММММММММММММММММ
    UpdateData(0);
В принципе тут можно закрыть кнопку --- } и кнопка один будет работать, но все так же некорректно и проблема останется проблемой.
Мне препод сказал \0 где то дописать надо или че, вобщем в этом моменте не врубился, а длину строки определил для будущего цикла
Код:
for(i=0;i<k;i++)   
{
	switch (text[i])
		{
	case 'А' :
		   fputs(morse[0],file);
		   fputs(" ",file);
		   break;
}
Помогите плиз

Последний раз редактировалось Stilet; 15.12.2009 в 08:23.
Quatro вне форума Ответить с цитированием
Старый 15.12.2009, 08:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не знаю как делаешь ты но я бы создал массив строк, где будут команды морзянки, а в цикле от кода каждого символа строки отнимал первый символ в алфавите, получая номер его кода морзянки, и уже из массива морзянки брал код
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.12.2009, 08:50   #3
Quatro
 
Регистрация: 15.12.2009
Сообщений: 3
По умолчанию Вота

Вот полный код , я просто новичок, поэтому делал как мог. Все работает. Нужно только что в эдит бокс выводилось все вплоть до конца строки, а пустые символы не печатались.Код простой, так как я новичок

Код:
void CNoviikursDlg::OnButton1() 
{
	char Filter[]="TextFile(*.txt),(*.doc) |*.txt; *.doc| All(*.*)|*.*||";
	CFileDialog fd(TRUE, ".txt","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, Filter);
	fd.DoModal();
	int k;

	CFile txt(fd.GetPathName(), CFile::modeReadWrite);
	txt.SeekToBegin();


char text[1000];


  

	
	txt.Read(&text, sizeof(text));
k = strlen(text);



    m_x1.Format("%.100s",text);  // вместо пустых символов выводит на экране ММММММММММММММММММММММ
    UpdateData(0);






char *morse[] =  {".-","-...",".---","--.",
		          "-..",".","...-","--..",
                  "..",".---","-.-",".-..",
		          "--","-.","---",".--.",
		          ".-.","...","-","..-",
		          "..-.","....","-.-.","---.",
		          "----","--.-","-..-","-.--",
		          "-..-","..-.","..--",".-.-"};

FILE *file = NULL;
char* file_name = "test";
file = fopen(file_name,"w");

int i,j;
j=0;

for(i=0;i<k;i++)   
{
	switch (text[i])
		{
	case 'А' :
		   fputs(morse[0],file);
		   fputs(" ",file);
		   break;
	case 'а':
			fputs(morse[0],file);
			fputs(" ",file);
			break;
	
	case 'Б':
			fputs(morse[1],file);
			fputs(" ",file);
			break;
	
	case 'б':
			fputs(morse[1],file);
			fputs(" ",file);
			break;
	case 'В':
			fputs(morse[2],file);
			fputs(" ",file);
			break;
	case 'в':
			fputs(morse[2],file);
			fputs(" ",file);
			break;
	case 'Г':
			fputs(morse[3],file);
			fputs(" ",file);
			break;
	case 'г':
			fputs(morse[3],file);
			fputs(" ",file);
			break;
	case 'Д':
			fputs(morse[4],file);
			fputs(" ",file);
			break;
	case 'д':
			fputs(morse[4],file);
			fputs(" ",file);
			break;
	case 'Е':
			fputs(morse[5],file);
			fputs(" ",file);
			break;
	case 'е':
			fputs(morse[5],file);
			fputs(" ",file);
			break;
	case 'Ё':
			fputs(morse[5],file);
			fputs(" ",file);
			break;
	case 'ё':
			fputs(morse[5],file);
			fputs(" ",file);
			break; // и так далее в этом же духе
	

			
		}
}


fclose(file);

}

void CNoviikursDlg::OnButton2() 
{
char Filter[]="TextFile(*.txt),(*.doc) |*.txt; *.doc| All(*.*)|*.*||";
CFileDialog fd(FALSE, ".txt","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, Filter);
fd.DoModal();
CFile txt(fd.GetPathName(), CFile::modeReadWrite|CFile::modeCreate); // Как дописать сюда мод Create?


    char text1[1000];

    
FILE *file = NULL;	

char* file_name = "test";
file = fopen(file_name,"r""w");
fgets(text1,1000,file);
fclose(file);

   txt.Write(&text1, sizeof(text1));
	
m_x2.Format("%.1000s",text1);
txt.Close();
UpdateData(0);
	
	
}


Код для двух кнопок где m_x1 и m_x2 - переменные связанные с эдит боксами. Нужно чтоб в Edit Box 1 определялся конец строки, вот и все, а программа работает, целиком и полностью. Где то в этом куске кода нужно его определить, я прошу чтоб помогли исправить : txt.Read(&text, sizeof(text));
k = strlen(text);



m_x1.Format("%.100s",text); // вместо пустых символов выводит на экране ММММММММММММММММММММММ
UpdateData(0);

Последний раз редактировалось Stilet; 15.12.2009 в 09:26.
Quatro вне форума Ответить с цитированием
Старый 15.12.2009, 09:30   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
switch (text[i])
{
case 'А' :
fputs(morse[0],file);
fputs(" ",file);
break;
А я бы этот весь switch заменил на :
fputs(morse[(int)(text[i]-'A')],file);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.12.2009, 12:13   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А я бы так сделал:
Код:
char text[1000];
memset(text, 0, sizeof(text));
txt.Read(&text, sizeof(text));
что решило бы проблему с MMMMMMM в конце строки
netrino вне форума Ответить с цитированием
Старый 15.12.2009, 12:41   #6
Quatro
 
Регистрация: 15.12.2009
Сообщений: 3
По умолчанию !!!

Цитата:
Сообщение от netrino Посмотреть сообщение
А я бы так сделал:
Код:
char text[1000];
memset(text, 0, sizeof(text));
txt.Read(&text, sizeof(text));
что решило бы проблему с MMMMMMM в конце строки

Огромное спасибо!!!!! Чтоб я без вас делал Спасибо, очень помог!!!
Quatro вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50
срочно!!!Курсовая "Проектирование ис учета и контроля успеваемости студентов (Delphi 7+MS Access)))" irrok Фриланс 2 09.01.2009 08:59
нужна небольшая курсовая по теме "Графика в Паскале". Win't Фриланс 2 18.12.2007 07:53