Варианты индивидуальных заданий



1.

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

2.

Дан текст. Словом текста является последовательность цифр; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, в которых все чётные цифры образуют неубывающую последовательность. Одну цифру не считать неубывающей последовательностью.

3.

Дан текст. Словом текста является последовательность цифр и букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, в которых цифры и буквы алфавита чередуются.

4.

Дан текст. Словом текста считается любая последовательность цифр и букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, в которых есть хотя бы одна цифра.

5.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке те слова, которые содержат только прописные буквы.

6.

Дан текст. Словом текста считается любая последовательность цифр; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, которые образованы неубывающей последовательностью символов.

7.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Удалить из каждой строки те слова, которые содержат двойные согласные буквы.

8.

Дан текст. Словом текста считается любая последовательность цифр; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Поменять местами в каждой строке первое и последнее слово.

9.

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

10.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, которые содержат одинаковое количество гласных и согласных букв алфавита.

11.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, количество гласных букв в которых превышает количество согласных.

12.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, которые начинаются с прописной буквы.

13.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, в которых первая буква слова входит в него еще один раз.

14.

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

15.

Дан текст. Словом текста считается любая последовательность букв латинского алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, которые совпадают с начальным отрезком латинского алфавита (a, ab, abc, abcd,…).

16.

Дан текст. Словом текста считается любая последовательность букв латинского алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, которые совпадают с конечным отрезком латинского алфавита (z, yz, xyz,…).

17.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, в которых нет повторяющихся букв.

18.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в строке только те слова, в которых каждая буква входит в это слово не менее двух раз.

19.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в строке только те слова, в которых гласные буквы чередуются с согласными.

20.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Перенести первую букву каждого слова в его конец.

21.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Перенести последнюю букву каждого слова в его начало.

22.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Удалить в каждом слове его первую букву.

23.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Удалить в каждом слове его последнюю букву.

24.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Удалить в каждом слове все последующие вхождения первой буквы.

25.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Удалить в каждом слове все предыдущие вхождения последней буквы.

26.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Оставить в каждом слове только первые вхождения каждой буквы.

27.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Если слово нечетной длины, то удалить его среднюю букву.

28.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Изменить в каждой строке порядок слов на обратный порядок.

29.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Оставив первое слово без изменения, удалить из строки лишние слова таким образом, чтобы оставшиеся слова были упорядочены по алфавиту.

30.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Сохранить в каждой строке только первые вхождения каждого слова.

31.

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, которые встречаются в ней по одному разу.

 


Примеры программ

Пример №1

 

//Пример использования стандартной функции для выделения лексем

//(в данном случае - слов) по перечисленным признакам.

//Дана строка, содержащая некоторый текст (включая пробелы и

//знаки препинания). Под словом понимается набор символов,

//не содержащий пробелов и знаков препинания и ограниченный

//знаками препинания, пробелами или началом/концом строки.

//Выделить и распечатать все слова строки.

#include<string.h>

#include<conio.h>

#include<iostream.h>

int main()

{char input[] = " abc de. ,f , g" ; //исходная строка

 char *p ;                  //указатель на выделенное слово

 clrscr() ;

 cout << "Исходная строка:" << endl ;

 cout << input << endl ;

 cout << "Результат работы:" << endl ;

 p = strtok(input, ",. ") ; //выделение первого слова

 while(p)

{cout << p << endl ;     //вывод найденного слова

p = strtok(NULL,",. ") ; //выделение последующих слов

}

 getch() ;

 return 0 ;

}

 

Результаты тестирования

 

 


Пример №2

 

//Программа создает файл строк. Признак окончания ввода -

//пустая строка. Затем файл построчно читается,

//и программа удаляет из каждой строки, содержащей слова,

//разделенные произвольным количеством пробелов, все слова с чётным номером.

//Обработанная строка записывается в новый файл

//Тема: ОБРАБОТКА С-СТРОК + ФАЙЛЫ (ПОТОКИ)

 

#include<stdio.h>

#include<iostream.h>

#include<string.h>

#include<stdlib.h>

#include<conio.h>

#define FNAME_I "D:\\st_i.txt\0" //имя исх. файла задано константной строкой

#define FNAME_R "D:\\st_r.txt\0" //имя рез. файла задано константной строкой

const int RAZ = 80 ;    //максимильная длина строки

const char PR_R[] = "r" ;     //признак открытия файла на чтение

const char PR_W[] = "w" ;     //признак открытия файла на запись

void make_file(char*) ;       //функция создания файла

int proverka_file(char*, const char*) ; //проверка наличия файла

void obrabotka_file(char*, char*) ; //обработка содержимого

void vivod_file(char*) ;        //вывод содержимого файла на печать

 

//main_Begin______________________________________________________________

int main()

{char fname_i[] = FNAME_I ;

 char fname_r[] = FNAME_R ;

 clrscr() ;

//создаем исходный файл

 make_file(fname_i) ;

 

//выводим его содержимое

 if(!proverka_file(fname_i, PR_R))

{cout << "Ошибка открытия файла " << fname_i << " на чтение" << endl ;

cout << "Нажмите <Enter>" << endl ;

getchar() ;

return 0 ;          //если исходный файл не создан

}

 cout << "Содержимое исходного файла:" << endl ;

 vivod_file(fname_i) ;

 

//обрабатываем файл

 obrabotka_file(fname_i, fname_r) ;

 

//выводим содержимое результата

 if(!proverka_file(fname_r, PR_R))

{cout << "Ошибка открытия файла " << fname_r << " на чтение" << endl ;

cout << "Нажмите <Enter>" << endl ;

getchar() ;

return 0 ;          //если результирующий файл не создан

}

 cout << "Результат (в каждой строке удалены слова с чётным номером):\n" ;

 vivod_file(fname_r) ;

 

 cout << endl << "Для завершения нажмите <Enter>" ;

 getchar() ;

 return 0 ;

}

//main_End________________________________________________________________

//make_file_ Begin________________________________________________________

void make_file(char *fname_i)

{char st[RAZ] ; //исходная строка

 FILE *in ;        //текстовый файл

 char otv ;  //ответ пользователя

//Открываем файл в режиме чтения (r)

//Если файл с таким именем уже есть, то либо пользователь вводит

//новое имя, либо новые записи будут дописаны поверх старых

 while(proverka_file(fname_i, PR_R))

{cout << "Такой файл уже есть! Зададите новое имя Y/N?" << endl ;

cin.get(otv) ;

if(otv == 'Y' || otv == 'y')

{cout << "Введите новое имя:" << endl ;

  cin >> fname_i;

  cin.get() ; //убираем символ '\n' из потока

}

else {cin.get() ; //убираем символ '\n' из потока

break ;

 }

}

//проверяем возможность открытия файла для записи

//поскольку полное имя файла могло быть задано с ошибкой

 if(!proverka_file(fname_i, PR_W))

{cout << "Ошибка открытия файла " << fname_i << " на запись" << endl ;

cout << "Нажмите <Enter>" << endl ;

getchar() ;

exit(0) ;

}

//Открываем файл в режиме записи (w) текста (по умолчанию)

//Если файл с таким именем уже есть, то новые данные

//будут дописаны поверх старых

 in = fopen(fname_i, PR_W) ;

 cout << "Создание файла." << endl ;

 cout << "Признак окончания ввода - ввод пустой строки" << endl ;

 cout << "Введите строку и нажмите <Enter>" << endl;

 cout << "->" ;

 cin.getline(st, RAZ) ; //функция вводит строку целиком, включая

             //пробелы и символ \n

 while(strlen(st))

{fprintf(in, "%s\n", st) ;

cout << "Введите строку и нажмите <Enter>" << endl ;

cout << "->" ;

otv++ ;

cin.getline(st, RAZ) ;

}

 fclose(in) ;      //закрываем файл

}

//make_file_End___________________________________________________________

 

//proverka_file_Begin_____________________________________________________

//проверка наличия файла

int proverka_file(char *fname, const char *pr)

{

//Открываем файл

 if((fopen(fname, pr)) == NULL) //если файл не существует

return(0) ;

 return(1) ;

}

//proverka_file_End_______________________________________________________

 

 

//obrabotka_file_Begin____________________________________________________

//обработка содержимого файла

void obrabotka_file(char *fname_i, char *fname_r)

{FILE *in, *out ;  //исходный и результирующий файлы (потоки)

 char st_in[RAZ] ;      //исходная строка

 char st_out[RAZ] ;     //результирующая строка

 int flag ;       //признак нечетного номера слова

 char *p = new char(RAZ) ;    //указатель на выделенное слово

 in = fopen(fname_i, PR_R) ;  //открываем файл на чтение

 out = fopen(fname_r, PR_W) ; //открываем файл на запись

 fgets(st_in, RAZ, in) ; //читаем строку из файла in

 while(!feof(in))

{flag = 1 ;          //признак нечетного слова

st_out[0] = '\0' ;

p = strtok(st_in, " ") ; //выделяем первое слово (лексему)

while(p)                  //если очередное слово выделено

{if(flag)               //если у слова нечетный номер -

 {flag = 0 ;            //заносим в результирующую строку:

strcat(st_out, p) ; //добавляем слово к результату

strcat(st_out, " ") ; //добавляем пробел между слов

 }

  else flag = 1 ;

  p = strtok(NULL," ") ; //выделение последующих слов

}//while(p)

st_out[strlen(st_out) - 1] = '\0' ; //убираем последний пробел

fprintf(out, "%s\n", st_out) ; //записываем обработанную строку в новый файл

fgets(st_in, RAZ, in) ;   //считываем новую строку из файла

}//while(!feof(in))

 fclose(in) ;                 //Закрываем файл in

 fclose(out) ;            //Закрываем файл out

}

//obrabotka_file_End______________________________________________________

 

//vivod_file_Begin________________________________________________________

//вывод содержимого файла на экран

void vivod_file(char *fname)

{FILE *in_out ;

 char st[RAZ] ;    //считанная строка

 

 in_out = fopen(fname, PR_R) ; //открываем файл на чтение

 fgets(st, RAZ, in_out) ; //читаем строку из файла in_out

 while(!feof(in_out))

{cout << st ;        //выводим очередную строку на экран

fgets(st, RAZ, in_out) ;

}

 fclose(in_out) ;

}

//vivod_file_End__________________________________________________________

 


Результаты тестирования

 

 


Лабораторная работа №13

Структуры и файлы структур

 

Цель лабораторной работы: изучение структурной организации, способов доступа к элементам и других особенностей структур и файлов структур; изучение стандартных средств языка C/C++ для работы с файлами; совершенствование навыков процедурного программирования на языке C/C++ при решении задач обработки файлов.

 

Задание на программирование: используя технологию процедурного программирования разработать программу обработки файлов структур с числом записей не менее пяти в соответствии с индивидуальным заданием.

 

Порядок выполнения работы:

 

1) Получить у преподавателя индивидуальное задание.

2) Построить схему алгоритма решения задачи с использованием функций создания, добавления новых элементов, просмотра, сортировки файла по числовому и строковому полю, поиска данных в файле.

3) Сформулировать условие поиска данных в файле и организовать поиск по условию с сохранением найденных записей в новом файле.

4) Составить спецификации функций.

5) Составить программу на языке C/C++.

6) Предусмотреть в программе возможность выбора варианта действия с помощью меню.

7) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов. Обеспечить одновременный показ на экране содержимого исходного и результирующего файлов.

8) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, спецификации функций, текст программы, контрольные примеры.

 


Дата добавления: 2018-04-05; просмотров: 1056; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!