B
bri
Я вообще не понимаю Си, люди помогите в решении задачи!
Дан исходный текст только его нужно переделать так чтобы Слова вводимого предложения выводились в порядке возрастания их длины...вот текст
[codebox]#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 20
12
// ПРЕДВАРИТЕЛЬНОЕ ОБЪЯВЛЕНИЕ ФУНКЦИЙ
// Заголовок программы
void Title();
// Ввод предложения
void InpPredl (char predl[]);
// Выделение из предложения
void Select(const char *predl, char m[][N],char *sel, int *n);
// Сборка предложения
char *Constructor(char slova[][N], char razd[][N], int sl, int rz);
// Вывод результата
void OutPredl(char *s1, char *s2);
// ОСНОВНАЯ ФУНКЦИЯ
void main()
{
// ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ
char predl[80]; // Введенное предложение
char *res; // Результирующее предложение
char slova[N][N]; // Массив слов в предложении
char razd [N][N]; // Массив разделителей в предложении
int sl=-1, rz=-1; // Счетчики слов и разделителей
char *bm="йцукенгшщзхъфывапролджэячсмитьбю";// Буквы строчные
char *b ="ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";// Буквы за-
главные
char *r="`!;:,.?- "; // Разделительные знаки
// Заголовок программы
Title ();
// Ввод предложения
InpPredl (predl);
// Выделение из предложения слов
Select (predl, slova, r, &sl);
// Выделение из предложения разделителей
strcat (b, bm);
Select (predl, razd, b, &rz);
// Сборка предложения
res = Constructor(slova, razd, sl, rz);
// Вывод результата
OutPredl (predl, res);
free (res);
}
13
// ОПИСАНИЕ ИСПЛЬЗУЕМЫХ ФУНКЦИЙ
// Заголовок программы
void Title()
{
clrscr ();
puts (" Лабораторное задание N 8");
puts (" Во введенном предложении расположите слова");
puts (" в порядке возрастания их длины.");
puts(" Порядок следования знаков препинания не менять.");
puts(" В предложении используются русские буквы и знаки. \n");
}
// Ввод предложения
void InpPredl(char *s)
{
puts(" Введите предложение \n");
strcpy (s," Верите ли вы, что задача решена?");
// gets (s);
}
// Вывод результата
void OutPredl (char *s1, char *s2)
{
puts ("Исходное предложение");
puts (s1);
puts (" Результат ");
puts (s2);
getch ();
}
// Выделение из предложения
void Select(const char *predl, char m[][N], char *sel, int *n)
{
char *p, *s;
s=strdup (predl); // Сделать копию исходного предложения
// так как передается константа, strtok требует
// внесения изменений при своей работе
p = strtok (s, sel);
14
while (p)
{
(*n)++;
strcpy (m[*n],p);
p = strtok (NULL, sel);
}
free (s);
}
// Сборка предложения
char *Constructor(char slova[][N], char razd[][N], int sl, int rz)
{
int i, j;
char res[80];
char *s;
*res=0; // Начальное значение результата
i = sl;
j=-1;
while ((i>=0)||(j<=rz))
{
if ((i>=0)) strcat (res, slova); // Добавление слова
i--;
j++;
if ((j<=rz)) strcat (res, razd[j]); // Добавление знаков
}
s = strdup (res);
return s;
}[/codebox]
Дан исходный текст только его нужно переделать так чтобы Слова вводимого предложения выводились в порядке возрастания их длины...вот текст
[codebox]#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 20
12
// ПРЕДВАРИТЕЛЬНОЕ ОБЪЯВЛЕНИЕ ФУНКЦИЙ
// Заголовок программы
void Title();
// Ввод предложения
void InpPredl (char predl[]);
// Выделение из предложения
void Select(const char *predl, char m[][N],char *sel, int *n);
// Сборка предложения
char *Constructor(char slova[][N], char razd[][N], int sl, int rz);
// Вывод результата
void OutPredl(char *s1, char *s2);
// ОСНОВНАЯ ФУНКЦИЯ
void main()
{
// ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ
char predl[80]; // Введенное предложение
char *res; // Результирующее предложение
char slova[N][N]; // Массив слов в предложении
char razd [N][N]; // Массив разделителей в предложении
int sl=-1, rz=-1; // Счетчики слов и разделителей
char *bm="йцукенгшщзхъфывапролджэячсмитьбю";// Буквы строчные
char *b ="ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";// Буквы за-
главные
char *r="`!;:,.?- "; // Разделительные знаки
// Заголовок программы
Title ();
// Ввод предложения
InpPredl (predl);
// Выделение из предложения слов
Select (predl, slova, r, &sl);
// Выделение из предложения разделителей
strcat (b, bm);
Select (predl, razd, b, &rz);
// Сборка предложения
res = Constructor(slova, razd, sl, rz);
// Вывод результата
OutPredl (predl, res);
free (res);
}
13
// ОПИСАНИЕ ИСПЛЬЗУЕМЫХ ФУНКЦИЙ
// Заголовок программы
void Title()
{
clrscr ();
puts (" Лабораторное задание N 8");
puts (" Во введенном предложении расположите слова");
puts (" в порядке возрастания их длины.");
puts(" Порядок следования знаков препинания не менять.");
puts(" В предложении используются русские буквы и знаки. \n");
}
// Ввод предложения
void InpPredl(char *s)
{
puts(" Введите предложение \n");
strcpy (s," Верите ли вы, что задача решена?");
// gets (s);
}
// Вывод результата
void OutPredl (char *s1, char *s2)
{
puts ("Исходное предложение");
puts (s1);
puts (" Результат ");
puts (s2);
getch ();
}
// Выделение из предложения
void Select(const char *predl, char m[][N], char *sel, int *n)
{
char *p, *s;
s=strdup (predl); // Сделать копию исходного предложения
// так как передается константа, strtok требует
// внесения изменений при своей работе
p = strtok (s, sel);
14
while (p)
{
(*n)++;
strcpy (m[*n],p);
p = strtok (NULL, sel);
}
free (s);
}
// Сборка предложения
char *Constructor(char slova[][N], char razd[][N], int sl, int rz)
{
int i, j;
char res[80];
char *s;
*res=0; // Начальное значение результата
i = sl;
j=-1;
while ((i>=0)||(j<=rz))
{
if ((i>=0)) strcat (res, slova); // Добавление слова
i--;
j++;
if ((j<=rz)) strcat (res, razd[j]); // Добавление знаков
}
s = strdup (res);
return s;
}[/codebox]