2014 dxdy logo

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

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




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

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

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

 
 
 
 Re: помогите пожалуйста написать программу на си
Сообщение17.12.2011, 20:56 
есть эта программа ,но сделанная человеком,который знает с++.то есть ее надо еще немного переделать на си.вот собственно и она:
#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 
Напишите в maple а потом конвертируйте в С.. во всяком случае я так делаю :)

 
 
 
 Re: помогите пожалуйста написать программу на си
Сообщение17.12.2011, 22:10 
к сожалению никогда не сталкивалась с maple(((

-- 17.12.2011, 23:18 --

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

 
 
 
 Re: помогите пожалуйста написать программу на си
Сообщение18.12.2011, 05:47 
2pashik9198
Цитата:
который знает с++.то есть ее надо еще немного переделать на си

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

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

 
 
 
 Re: помогите пожалуйста написать программу на си
Сообщение29.12.2011, 20:50 
Цитата:
Приведенный вами код и так написан на C (за исключением комментариев разве что :) ).
Ну и ещё const убрать или заменить переменную на #define

 
 
 
 Re: помогите пожалуйста написать программу на си
Сообщение29.12.2011, 21:42 
Почему? По-моему в C константы вполне употребимы. Да, в качестве статичной длины массива приходится макроопределения использовать, но и в C++ ситуация не лучше.

 
 
 
 Re: помогите пожалуйста написать программу на си
Сообщение29.12.2011, 22:03 
В C нет ключевого слова const, однако.

 
 
 
 Re: помогите пожалуйста написать программу на си
Сообщение29.12.2011, 22:15 
О каком C мы говорим? :)

 
 
 
 Re: помогите пожалуйста написать программу на си
Сообщение29.12.2011, 23:52 
О единственном?

 
 
 
 Re: помогите пожалуйста написать программу на си
Сообщение30.12.2011, 00:09 
arseniiv в сообщении #521461 писал(а):
В C нет ключевого слова const, однако.
Имеете в виду K&R? :)

 
 
 
 Re: помогите пожалуйста написать программу на си
Сообщение30.12.2011, 00:25 
Так в ANSI C оно уже есть? Это хорошо! А так да, имел в виду их.

 
 
 
 Re: помогите пожалуйста написать программу на си
Сообщение30.12.2011, 08:00 
В диалекте Кернигана и Риччи вроде-бы тоже есть это ключевое слово, только я не знаю дошло ли в те темные времена дело до стандартизации или нет, скорее нет. :) А вот насчет проблем с константами в C++ я погарячился -- проблем там нет, ну разве что если пытаться предварительно изменить константу магией const_cast...

 
 
 [ Сообщений: 14 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group