2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 помогите пожалуйста написать программу на си
Сообщение17.12.2011, 18:55 


17/12/11
3
очень прошу помощи в написании программы на си:
Вводится последовательность строк символов не длиннее 50 символов.
Допустимые символы в строке - русские буквы, цифры и пробел.
Окончание входного потока - ввод строки, начинающейся с символа "/".
Максимальное количество строк равно 12. Шифрование состоит в том,
что в каждой входной строке символ обменивается местом с символом,
симметричным ему относительно середины строки.
При нечетном количестве символов в строке центральный символ не
изменяется. Формируется также статистическая информация. Примерный
вид выходной информации:

Входной текст:
(последовательность входных строк)
Введено К строк, всего N символов,
макс. четная длина строки М1 символов,
макс. НЕчетная длина строки М2 символов.
Получен шифрованный текст:
(последовательность обработанных строк)

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и легкую
замену в тексте программы числовых и символьных констант.
Обратите внимание, что алгоритм шифрования симметричен -
для дешифрования нужно применить его же.
РАЗВИТИЕ:
1. Предусмотреть режимы ввода/вывода: только экран и клавиатура,
ввод из текстового файла и вывод в текстовый файл с отображением
диалога на экране.
2. Предусмотреть ввод допустимых символов, символа-признака
окончания входного потока, числовых констант из текстового файла.

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение17.12.2011, 20:56 


17/12/11
3
есть эта программа ,но сделанная человеком,который знает с++.то есть ее надо еще немного переделать на си.вот собственно и она:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

//Глобальные константы для легкой замены в тексте программы числовых и символьных констант.
const int m = 12; //Сколько всего строк в массиве
const int n = 50; //Сколько всего символов в строке массива

int k; //Введено k строк
int count = 0; //Введено вего симолов

int m1; //Максимальная четная длина строки
int m2; //Максимальная нечетная длина строки

char rusbuf[256];

char *rus(const char *rus_text) //Вывод русских символов
{
CharToOemA(rus_text,rusbuf);
printf(rusbuf);
return rusbuf;
}

void output(char** text) //Функция вывода на экран текста
{

int i,j;
for(i = 0; i < k; i++)
{
for(j = 0; j < n; j++)
{
printf("%c",text[i][j]);
}
printf("\n");
}
}

void input(char ** text) //Функция считывания с клавиатуры
{
int i;
char *string = (char *)malloc(n); //Временное хранение строки

rus("\nВведите текст с клавиатуры:\n");
for(i = 0; i < m; i++)
{
scanf("%s",string);
k = i;
if(string[0] == '/')
{
free(string);
return;
}

strcpy(text[i], string);
}

rus("Массив заполнен полностью\n");

free(string);
return;
}

void encode(char **text) //Шифрование
{
int i,j;
int len; //Длина строки
char* string = (char*)malloc(n); //Временное хранение строки

for(i = 0; i < k; i++)
{
len = strlen(text[i]); //Запоминаем длину строки

//Узнаем максимальную длину четной и нечетной строк
//==========================================================================
if(len % 2 == 0) //Если четная //
{ //
if(m1 < len) //
m1 = len; //
} //
else //
if(m2 < len) //
m2 = len; //
//==========================================================================

count = count + len; //Считаем общее количество символов во всем тексте
strcpy(string, text[i]);

for(j = 0; j < len / 2; j++) //Сам алгоритм кодирования
{
text[i][j] = string[len - j - 1];
text[i][len - j - 1] = string[j];
}
}
free(string);
}

void main()
{
int i = 0, j = 0; //Используем в циклах
int menu; //Используем для выбора параметра в меню

char **text = (char **) malloc(m); //Создаем двумерный массив для хранения входного текста
for(i = 0; i < m; i++)
{
text[i] = (char *)malloc(n);
for(j = 0; j < n; j++)
{
text[i][j] = ' ';
}
}

//=================================================================================
//Делаем меню //
rus("1. Работа в консольном режиме (считываем с клавиатуры и вывод на экран)\n");//
rus("2. Работа в файловом режиме (считываем из файла и записываем в файл)\n"); //
rus("Выберите нужное действие: "); //
scanf("%i", &menu); //
//
switch(menu) //
{ //
case 1: //
input(text); //
rus("Введенный текст:\n"); //
output(text); //
break; //
case 2: //
break; //
} //
//=================================================================================

encode(text); //Кодируем

//Выводная информация
//================================================================================ //
rus("\n\n\nВыводная информация\n"); //
rus("Всего строк: "); //
printf("%i\n", k); //
rus("Всего символов: "); //
printf("%i\n", count); //
rus("Максимальная четная длина строки:"); //
printf("%i\n", m1); //
rus("Максимальная нечетная длина строки:"); //
printf("%i\n", m2); //
rus("\nКодированный текст\n"); //
//
output(text); //Выводим кодированный текст //
//================================================================================
}

/*
Доделать:
1) Ввод текста с пробелами
2) Исключительные ситуации
3) Перевести все в С
*/

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение17.12.2011, 22:02 


25/08/05
645
Україна
Напишите в maple а потом конвертируйте в С.. во всяком случае я так делаю :)

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение17.12.2011, 22:10 


17/12/11
3
к сожалению никогда не сталкивалась с maple(((

-- 17.12.2011, 23:18 --

помогите,пожалуйста,если не сложно(( сама пыталась сделать но не выходит( даже несмотря на то,что раньше учила с#

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение18.12.2011, 05:47 
Заслуженный участник


26/07/09
1559
Алматы
2pashik9198
Цитата:
который знает с++.то есть ее надо еще немного переделать на си

Неважно что он знает, кунг-фу или С++. Приведенный вами код и так написан на C (за исключением комментариев разве что :) ). Если вы просто распознать язык исходника не можете, то может быть стоит потратить немного времени на честное изучение C?

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение22.12.2011, 19:15 
Заслуженный участник


27/04/09
28128
pashik9198 в сообщении #516605 писал(а):
помогите,пожалуйста,если не сложно(( сама пыталась сделать но не выходит( даже несмотря на то,что раньше учила с#
Надо было учить их задом наперёд! C# вам тут мало поможет, он довольно далеко даже от C++, что уж говорить о C.

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение29.12.2011, 20:50 


29/12/11
5
Цитата:
Приведенный вами код и так написан на C (за исключением комментариев разве что :) ).
Ну и ещё const убрать или заменить переменную на #define

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение29.12.2011, 21:42 
Заслуженный участник


26/07/09
1559
Алматы
Почему? По-моему в C константы вполне употребимы. Да, в качестве статичной длины массива приходится макроопределения использовать, но и в C++ ситуация не лучше.

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение29.12.2011, 22:03 
Заслуженный участник


27/04/09
28128
В C нет ключевого слова const, однако.

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение29.12.2011, 22:15 
Заслуженный участник


26/07/09
1559
Алматы
О каком C мы говорим? :)

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение29.12.2011, 23:52 
Заслуженный участник


27/04/09
28128
О единственном?

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение30.12.2011, 00:09 
Заслуженный участник


09/08/09
3438
С.Петербург
arseniiv в сообщении #521461 писал(а):
В C нет ключевого слова const, однако.
Имеете в виду K&R? :)

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение30.12.2011, 00:25 
Заслуженный участник


27/04/09
28128
Так в ANSI C оно уже есть? Это хорошо! А так да, имел в виду их.

 Профиль  
                  
 
 Re: помогите пожалуйста написать программу на си
Сообщение30.12.2011, 08:00 
Заслуженный участник


26/07/09
1559
Алматы
В диалекте Кернигана и Риччи вроде-бы тоже есть это ключевое слово, только я не знаю дошло ли в те темные времена дело до стандартизации или нет, скорее нет. :) А вот насчет проблем с константами в C++ я погарячился -- проблем там нет, ну разве что если пытаться предварительно изменить константу магией const_cast...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group