Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
part1.doc
Скачиваний:
6
Добавлен:
14.04.2019
Размер:
337.41 Кб
Скачать
  1. Примеры программных реализаций

Пример 1. Строка содержит не более 10 слов, каждое из которых длиной не более 15 символов. Элементом слова являются русские и латинские буквы и цифры. Разделители между словами и их количество могут быть любые. Необходимо отсортировать слова в строке по возрастанию их длин. Программа должна содержать следующие функции:

  • разбиения исходной строки на массив слов-строк;

  • сортировки массива слов;

  • объединения отсортированного массива слов в строку результата;

  • определения, является ли символ элементом слова.

#include<stdio.h>

#include<ctype.h>

#include<string.h>

#include<stdlib.h>

int Letter(char ch)

{

if (isalnum(ch)>0) return 1;

if (((ch>='А')&&(ch<='п'))||

((ch>='р')&&(ch<='я')))return 1;

return 0;

}

int Words(char *str,

char w[][15])

{

int i=0,j,k=0,key=0,

n = strlen(str);

for (j=0; j<=n; j++)

if(Letter(str[j]))

{w[k][i]=str[j];

i++; key=1; }

else

if(key)

{w[k][i]='\0';

i=0; k++;key=0;}

return k;

}

void Sort(char w[][15],

int n)

{

int i, j, l, imin, min;

char temp[15] ;

for (i=0; i<n-1; i++)

{ min=strlen(w[i]);

imin=i;

for(j=i+1; j<n; j++)

{

l=strlen(w[j]);

if (l<min)

{min=l; imin=j;}

}

strcpy(temp,w[i]);

strcpy(w[i],w[imin]);

strcpy(w[imin],temp);

}

}

void Result(char w[][15],

int n,char *res)

{

int i;

strset(res,'\0');

for(i=0; i<n; i++)

{ strcat(res,w[i]);

strcat(res," ");

}

}

void main()

{

int n;

char string[80],word[10][15];

puts("\n Enter string:");

gets(string);

n=Words(string,word);

sort (word,n);

Result(word,n,string);

puts("Result:");

puts(string);

}

Пример 2. Текст задается через массив указателей на начало строк, последний указатель – NULL. Функция ввода строк возвращает адрес начала массива указателей как результат. Подсчитать количество слов в строке и вывести статистику по каждой строке, используя функцию позиционирования курсора на экране gotoxy().

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <alloc.h>

#include <ctype.h>

// Ввод текста

char **Enter()

{

char tmp[80];

char **p =(char**)new char*;

int n = 0; //счетчик строк

while (1)

{

gets (tmp);

if(tmp[0]==0)break;

if(strlen(tmp)>60)tmp[60]=0;

p[n] = (char *)malloc

(strlen(tmp)+1);

strcpy(p[n],tmp);

n++;

p = (char**)realloc

(p, sizeof(char*)*(n+1));

}

p[n]=NULL;

return p;

}

// Подсчёт слов в строке

int Count(char *p)

{

int n = 1;

if (*p =='\0') return 0;

for (p++; *p !='\0'; p++)

if(!Letter(p[0])&&

Letter (p[-1]))n++;

return(n);

}

//Создание массива статистики

int *Stat(char **txt)

{

int i, *count;

// Подсчёт количества строк

for(i=0; txt[i]!=NULL; i++);

//Выделение памяти для

массива статистики

count = (int *)new [i+1];

for (i=0;txt[i]!=NULL;i++)

count[i] = Count(txt[i]);

count[i] = 0;

return count;

}

void Print(char **txt,

int *stat)

{

int i;

for(i=0;txt[i]!=NULL; i++)

{

printf ("%s", txt[i]);

gotoxy (65,i+1);

printf("- %d\n",stat[i]);

}

}

void main ()

{

char **text;

int *stat;

clrscr();

printf ("Введите текст:\n");

text = Enter();

stat = Stat(text);

clrscr();

Print(text, stat);

getch();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]