Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Задание на лабораторную работу.




1. Написать, отладить и протестировать программу, выполняющую операции с массивами символов в соответствии со своим вариантом (Таблица 9), используя при этом функции библиотеки «string.h».

2. Продемонстрировать выделение памяти под статические и динамические строковые переменные, а также корректное удаление динамических массивов символьного типа.

3. В тестовых строках обязательно должны содержаться те символы и подстроки, работа с которыми предусмотрена в задании. Переменные X, Y и Z – вещественного типа.

4. Производимые над строками операции оформить в виде подпрограмм. В теле подпрограмм допускается использование функций стандартных библиотек работы со строками «string.h» и т.п.

5. При демонстрации преподавателю работающей программы необходимо провести пошаговую трассировку указанного преподавателем участка программы. При трассировке адреса и значения строковых переменных необходимо выводить в окне Watch.

6. Результат работы программы выводить на экран и сохранять в виде скриншотов для отчета. По выполненной лабораторной работе подготовить отчет с результатами выполнения работы. Отчет без комментариев не принимается.

 

Таблица 9 Варианты индивидуальных заданий

Операции со строками Операции с данными
1. Найти в строке все подстроки, начинающие­ся с большой буквы и определить их пози­ции, последнюю такую подстроку заменить на слово «Кукушечка». Задать переменные, преобразовать выражение в строку, значения переменных выводить в 15 позициях: X= sin(3*Y)+16.5.
2. Найти в строке все цифры, определить их позиции и заменить их на текстовые представления: 1 – на «один», 2 – на «два» и т.д. Подсчитать количество замен. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 5 позициях после точки: X= Y-3.0/Z.
3. Каждый символ «@» в строке заменить на его номер позиции в строке. Подсчитать количество замен. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 3 позициях до и 4 после точки: X= Y+3*Z.
4. Определить порядковый номер последней буквы «а» в строке. Поиск осуществлять с учетом регистра. Заменить ее на «А». Задать переменные, преобразовать выражение в строку, значения переменных выводить в 12 позициях: X= cos(Y-3*Z).
5. В строке найти количество встречающихся рядом символов «соседних по алфавиту» - «а» и «б», «Ю» и «Я» и т.п. Дописать в конец строки слово «Ботаник». Задать переменные, преобразовать выражение в строку, значения переменных выводить в 3 позициях после точки: X= ln(Y+0.2*Z).
6. Вывести на экран «Да» или «Нет» в зависимости от того, найдена ли в строке числовая подстрока. Заменить все числа на нули. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 4 позициях до и 4 после точки: X= Y*exp(-3*Z).
7. В части строки, от начала и до первого символа «@» определить все вхождения символа «А» и заменить их на подстроку «A-a-a-a!». Подсчитать число замен. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 10 позициях: X= Y+3*exp(Z).
8. В строке заменить все символы «$» на подстроки «1 замена $», «2 замена $» и т.д. в конце строки дописать «Долой буржуйские $!» Задать переменные, преобразовать выражение в строку, значения переменных выводить в 6 позициях после точки: X= Y+3*tg(Z).
9. Дописать в начало строки количество вхождений подстроки «Опера» от начала исходной строки до первого вхождения символа «$». Задать переменные, преобразовать выражение в строку, значения переменных выводить в 2 позициях до и 8 после точки: X= pow(Y,-3*Z).
10. В части строки, начинающейся символом «#» до конца строки определить все вхождения символа «%» и заменить их на «процент». Подсчитать число замен. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 11 позициях: X= fabs(-Y-3*Z).
11. Удалить из введенной строки все символы, отличные от прописных (заглавных) латинских букв и пробелов. Подсчитать число замен. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 9 позициях после точки: X= sqrt(Y2+Z2).
12. После каждого вхождения символа «$» в строке вставлять подстроку «Поставьте мне зачет, пожалуйста!» Подсчитать число вставок. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 4 позициях до и 6 после точки: X= floor(Y-Z).
13. Во введенной строке заменить каждую точку и запятую на точку с запятой, подсчитать число замен и дописать его в конец строки. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 12 позициях: X= fmod(17,floor(3*Z)).
14. После каждого слова из введенного предложения вставить число букв в этом слове. Подсчитать количество вставок. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 7 позициях после точки: X= Y-2*Z.
15. Перед каждым вхождением символа «&» в строке вставить подстроку «Вот он, этот символ, нашелся:». Подсчитать число вставок. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 4 позициях до и 5 после точки: X= lg(Y+3*Z).
16. Дописать в конец строки список всех знаков препинания, встретившихся в строке и номера их позиций. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 13 позициях: X= pow(13*Y, -13*Z).
17. Удалить из строки все вхождения подстроки «5» или «4» заменить их на подстроки «Неудовлетворительно». Последнее вхождение заменить на «Ладно, тройка!» Задать переменные, преобразовать выражение в строку, значения переменных выводить в 8 позициях после точки: X= sin(Y2)+3*cos(Z).
18. Все слова введенного предложения взять в кавычки. Подсчитать число слов и дописать в начало строки текст «Было произведено N вставок». Задать переменные, преобразовать выражение в строку, значения переменных выводить в 3 позициях до и 5 после точки: X= log10(Y+3*Z)
19. В подстроке, начинающейся символом «&» до конца строки определить все вхождения символов-цифр и заменить их на «100500». Подсчитать число замен. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 14 позициях: X= 2*log(Y,3*Z) – 2*ln(3*Z).
20. В подстроке между первым и последним вхождением символа «#» заменить все строчные (маленькие) буквы на прописные (заглавные) и наоборот. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 4 позициях после точки: X= Y+exp(2*Z).
21. Дописать в начало строки количество вхождений подстроки «Аля-улю» в исходной строке. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 6 позициях до и 2 после точки: X= |Y+3.14/Z|.
22. Все слова во введенном предложении переставить в обратном порядке, порядок букв в словах не менять. Дописать в конец строки подстроку «Да пребудет с вами сила!». Задать переменные, преобразовать выражение в строку, значения переменных выводить в 9 позициях: X= exp(Y)-ln(4*Z).
23. В части строки, от начала и до последнего символа «%» определить количество вхождений подстроки «Ёпрст» и дописать в конец строки это количество. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 7 позициях после точки: X= floor(Y+Z3).
24. После каждой последовательности одинаковых символов в строке вставить в круглых скобках количество повторяющихся символов. Задать переменные, преобразовать выражение в строку, значения переменных выводить в 9 позициях до и 9 после точки: X= sqrt(Y+3*Z2).

 

Работа с файлами

Жили-были у программиста два сына.
И звали их: НовоеИмя1 и НовоеИмя2.

Большинство компьютерных программ работают с файлами, и поэтому возникает необходимость создавать, удалять, записывать читать, открывать файлы. Файл – это именованный набор байтов, который может быть сохранен на некотором накопителе. Под файлом понимается некоторая последовательность байтов, которая имеет своё, уникальное имя, например файл.txt. Полное имя файла – это полный адрес к директории файла с указанием имени файла, например: D:\\docs\\file.txt.

С точки зрения программирования, работа с файлами складывается из трех шагов.

1. Открытие файла. Получение пользовательской программой у операционной системы прав для работы с заданным по имени файлом. Данная операция проделывается, для исключения конфликтов, при которых несколько программ одновременно пытаются записывать информацию в один и тот же файл. Правда, считывать данные из файла допустимо одновременно множеством программ, поэтому в операции открытия файла обычно уточняется, что файл открывается "для чтения" (считывание информации, которая не меняется) либо "для записи" (данные в файле модифицируются). Операция открытия файла возвращает некий идентификатор (как правило, целое число), которое идентифицирует в программе в дальнейшем нужный открытый файл. Этот идентификатор запоминается в переменной; обычно такая переменная называется файловой переменной.

2. Работа с файлом. Считывание данных из файла, либо запись в него.

3. Закрытие файла. После этой операции файл снова доступен другим программам для обработки.

7.1. Файловые операции библиотеки <stdio>

Стандартные функции работы с файлами, существующие практически во всех реализациях языка С. Одна из библиотек, предлагающих подпрограммы работы с файлами - stdio.h.

Функция открытия файла называется fopen(). Она возвращает указатель на объект стандартного (определенного в данной библиотеке) типа FILE. Функция fopen() имеет два аргумента – путь_к_файлу (строка) и параметры_открытия_файла. Параметр открытия файла на запись в текстовом виде записывается строкой "wt". Буква w означает write, буква ttext. Если указанный файл в каталоге существует, он будет перезаписан (все старое содержимое в нем уничтожится), если он не существует, то будет создан исходно пустым.

FILE * F; // указатель на файловую переменную F = fopen("test.txt","wt"); // открыть файл для записи

После открытия файла в файловую переменную F занесется некоторое число. Если таким числом будет ноль, считается, что файл открыть не удалось. В языке С нередки записи вида:

if((fo=fopen("c:\\tmp\\test.txt","wt")) == 0) { cout << "файл открыть не удалось" << endl; } // сообщение об ошибке

где одновременно открывается файл и проверяется, успешно ли это сделано.

Закрывается файл с помощью функции fclose():

fclose(F);

После закрытия файла к файловой переменной обращаться уже нельзя.

Форматная запись текстовой строки в файл выполняется функцией fprintf():

fprintf(имя_файловой_переменной, формат, список_выводимых_переменных);

Здесь, как и в п. 1.5, формат – это текстовая строка, задающая формат записываемого в файл текста. Все, что содержится в этой строке, пишется в файл один‑в‑один. Чтобы вывести значение некоторой переменной, надо использовать элемент формата, который начинается с символа %. Так, формат %d задает вывод целочисленного значения, формат %s - вывод строки (Приложение B, Таблица 18).

int n = 10; char str[20] = "значение переменной n равно "; fprintf(F, "Вывод: %s %d", str, n);

В файл запишется строка " Вывод: значение переменной n равно 10 ". Вместо формата %s подставлено значение переменной str, а вместо формата %d - значение переменной n.

Для вывода дробных чисел используют формат %f, где перед f ставят число всех выводимых символов и число символов после запятой, разделенные точкой. Например: "%5.2f" означает вывод числа из пяти позиций, причем две из них будут отведены для дробного значения. Если оно не уместится в этих позициях, то вылезет за границу, а если займет меньше, то дополнится пробелами.

 

Пример: записать в файл 100 строк с числами.

FILE * fo; fo = fopen("test.txt","wt"); int i; for(i=0; i<100; i++) { fprintf(fo, "%d\n", i); } fclose(fo);

Для ввода данных (текстовой строки) используют функцию fscanf():

fscanf(файловая_переменная, формат_ввода, список_ссылок_на_переменные)

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

Операция & «взятие адреса переменной», примененная к имени переменной, возвращает адрес этой переменной в памяти (ссылку). Тогда операцию ввода числа из текстового файла F в целочисленную переменную n можно записать так:

fscanf(F, "%d", &n);

Полезная функция feof(файловая_переменная) возвращает 1 (истинное значение), если файл, открытый для считывания, закончился. Она возвращает 0, если из файла еще можно продолжать ввод.

Пример: считывание из файла всех строк с числами:

FILE * fi; fi = fopen("test.txt","rt"); // rt означает открытие файла для чтения int n; while(!feof(fi)) { fscanf(fi, "%d", &n); } fclose(fi);

7.2. Работа с файлами посредством библиотеки <fstream>

Для работы с файлами необходимо подключить заголовочный файл <fstream> библиотеки потоковой работы с файлами. В библиотеке <fstream> определены классы для файлового ввода <ifstream> и <ofstream> - для файлового вывода.

Для потоковой работы с файлами необходимо проделать следующие шаги:

1. Создать объект класса ofstream (или ifstream);

2. Связать объект класса с файлом операционной системы;

3. Записать информацию в файл/ или прочитать из него;

4. Закрыть файл.

// создаём объект для записи в файл ofstream fout; // объект класса ofstream fout.open("cpp_test.txt"); // связываем объект с именем файла на диске

Здесь операция "точка" обеспечивает доступ к методу open() класса, в круглых скобках указывается имя файла. Указанный файл будет создан в текущей директории с программой. Если файл с таким именем существует, то существующий фал будет заменён новым.

fout << "Работа с файлами в С++"; // запись строки в файл fout.close(); // закрываем файл

Здесь для записи строки в файл используется оператор << - передача в поток объекта fout. После чего файл закрывается при помощи метода close().

В одной строке можно создать объект и связать его с файлом. Делается это так:

ofstream fout("cpp_test.txt"); // создаём объект класса ofstream и связываем его с файлом

Чтение данных из файла производится аналогично:

#include "stdafx.h" #include <fstream> #include <iostream> using namespace std; int main(int argc, char* argv[ ]) { setlocale(LC_ALL, "rus"); // корректное отображение Кириллицы char buff[50]; // буфер для хранения считываемого из файла текста ifstream fin("cpp_tst.txt"); // открыли файл для чтения fin >> buff; // считать первое слово из файла cout << buff << endl; // напечатать это слово fin.getline(buff, 50); // считать строку из файла fin.close(); // закрыть файл cout << buff << endl; // напечатать строку system("pause"); return 0; }

В программе показаны два способа чтения из файла, первый – используя операцию >> передачи в поток, второй – используя функцию getline(). В первом случае считывается только первое слово, а во втором случае считывается строка, длинной 50 символов. Но если в файле осталось меньше 50 символов, то считываются символы включительно до последнего. Обратите внимание на то, что вторая операция считывания продолжилась после первого слова, а не с начала строки, так как первое слово уже было прочитано ранее.

В библиотеке fstream предусмотрена функция is_open(), которая возвращает целые значения: 1 — если файл был успешно открыт, 0 — если файл открыт не был.

ifstream fin("cppstudio.doc"); // ввели некорректное имя файла if (!fin.is_open()) // если файл не открыт cout << "Файл не может быть открыт!\n"; // сообщение об ошибке else {... // произвести считывание из файла }
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...