306-5196820755 Качесова Л
Работа добавлена на сайт samzan.net:
Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
от 25%
Подписываем
договор
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
РОССИЙСКОЙ ФЕДЕРАЦИИ
АЛТАЙСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ ИМЕНИ И. И. ПОЛЗУНОВА
Л. Ю. Качесова
ПРОГРАММИРОВАНИЕ НА С++
Часть 1 Строки и структуры
Методические указания к лабораторным работам
по дисциплине “Программирование”
БАРНАУЛ 2011
УДК 681.3.06:519.682(0.75.5)
Качесова Л.Ю. Программирование на языке С++. Часть 1: Методические указания к лабораторным работам по дисциплине “Программирование” для студентов направления 23. 01.00 Информатика и вычислительная техника./Алт. гос. техн. ун-т им. И. И. Ползунова. Барнаул: Изд-во АлтГТУ, - 2011.- 13 с.
Рассмотрены и одобрены
на заседании кафедры САПР
Протокол № от
Содержание
[1] Порядок выполнения лабораторных работ
[2] Требования к оформлению лабораторных работ
[3] Требования к защите лабораторных работ
[4] Лабораторная работа №6. Строки и структуры
[5] 6.1 Работа со словами текста
[6] 6.2 Работа с предложениями текста
[7] 6.3 Работа со структурами и бинарными файлами
[8] 6.4. Задание 1
[9] 6.5 Задание 2
|
Порядок выполнения лабораторных работ
Для выполнения лабораторной работы нужна предварительная подготовка:
- знакомство с темой и целью лабораторной работы;
- изучение необходимых к выполнению лабораторной работы теоретических сведений и примеров программ;
- знакомство с заданием к лабораторной работе, постановка задачи индивидуального варианта, обдумывание алгоритма и программной реализации задачи.
Выполнение лабораторной работы означает: набор, отладка и тестирование программы на компьютере, а также демонстрация преподавателю блок схемы алгоритма решения задачи и безошибочного выполнения программы.
Оборудование, технические средства, инструмент
Лабораторные работы выполняются в компьютерном классе, оснащенном персональными компьютерами. На компьютерах должна быть установлена система программирования, поддерживающая создание консольных программ на С++, например, Geany, Visual C++ или другие.
Требования к оформлению лабораторных работ
Отчет по лабораторной работе оформляется в виде принтерных распечаток на сброшюрованных листах формата А4. Он должен содержать:
- титульный лист;
- задание к лабораторной работе;
- постановка задачи;
- алгоритм решения задачи в виде блок-схемы;
- листинг программы;
- тестовые примеры, иллюстрирующие все варианты работы программы.
Требования к защите лабораторных работ
После выполнения лабораторную работу защищают, т. е. поясняют алгоритм работы программы и отвечают на контрольные вопросы.
На защиту не допускаются студенты, не оформившие отчет о выполненной лабораторной работе.
Лабораторная работа №6. Строки и структуры
Цель работы: получить практический опыт написания программ по обработке информации с использованием строк и структур.
6.1 Работа со словами текста
В листинге 6.1 представлена программа, которая определяет, сколько раз встретилось заданное слово в текстовом файле, длина строки в котором не превышает 80 символов (рис. 6.1). Текст не содержит переноса слов. Слово это последовательность алфавитно-цифровых символов, после которых следует знак пунктуации, разделитель или признак конца строки. Результат выполнения программы представлен на рис. 6.2.
Первый вызов функции strtok в операторе 1 формирует адрес первого слова строки line. Он сохраняется в переменной tok. Функция strtok заменяет на NULL разделитель, находящийся после найденного слова, поэтому в операторе 2 можно сравнивать на равенство искомое и выделенное слово. В операторе 3 выполняется поиск следующего слова в той же строке. Для этого в функции strtok задается в качестве первого параметра NULL.
Листинг 6.1 Подсчет количества вхождений слова в текст
#include <iostream>
#include <string>
using namespace std;
int main(void)
{ const int len = 81;
char word[len], line[len];
char delims[]=",.!?/|)(*:; "; //разделители слов
FILE * f;
f=fopen("D:\\FileTXT\\text.txt","r");
if (f != NULL)
{ cout << "Вв. слово для поиска: \n";
cin >> word;
char *tok;
int kol = 0;
while(!feof(f))
{ fgets(line,sizeof(line), f);
tok=strtok(line, delims); //оператор 1
while (tok != NULL)
{ if (!strcmp(tok, word)) kol++;//оператор 2
tok= strtok(NULL,delims); //оператор 3
}
}
fclose(f);
cout<<"Кол-во вхождений заданного слова = "<<kol;
cout << endl;
} else cout << "Файл не найден!\n";
}
Рисунок 6.1 Файл с текстом
Рисунок 6.2 Результат выполнения программы.
6.2 Работа с предложениями текста
В листинге 6.2 представлена программа, которая считывает текст из файла (рис. 6.3) и выводит на экран только вопросительные предложения из этого текста (рис. 6.4).
Исходными данными в этой задачи является текстовый файл неизвестного размера, состоящий из неизвестного количества предложений. Предложение может занимать несколько строк, поэтому ограничиться буфером на одну строку в данной задаче нельзя. Нужно выделить буфер, в который поместиться весь файл. Алгоритм решения задачи следующий: 1. Открыть файл. 2. Определить его длину в байтах.
3. Выделить в динамической памяти буфер соответствующего размера.
4. Считать файл с диска в буфер. 5. Анализируя буфер посимвольно, выделять предложения. Если предложение оканчивается вопросительным знаком, вывести его на экран.
Детализируем последний пункт алгоритма. Для вывода предложения необходимо хранить позиции его начала и конца. Предложение может оканчиваться точкой, восклицательным или вопросительным знаком. В первых двух случаях предложение пропускается. Это выражается в том, что значение позиции начала предложения обновляется. Оно устанавливается равным символу, следующему за текущим, и просмотр продолжается. В случае обнаружения вопросительного знака предложение выводится на экран, после чего также устанавливается новое значение позиции начала предложения.
Листинг 6.2 Вывод вопросительных предложений
#include <stdio.h>
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
char bufRus[256];
char* Rus(char* mes)
{ AnsiToOem(mes, bufRus);
return bufRus;
}
int main(void)
{ char ch[2]; FILE * f;
f=fopen("D:\\FileTXT\\text2.txt","r");
if (f != NULL)
{ // определяем длину файла
fseek(f,0,SEEK_END);
long len = ftell(f);
// выделяем буфер необходимого размера
char *buf=new char[len+1];
// смещаем указатель на начало файла и
// считываем файл в буфер
fseek(f,0,SEEK_SET);
fread(buf, len,1, f); buf[len]='\0';
// выделение предложений из текста
long n = 0; // позиция начала предложения
long i=0, j=0;
while(buf[i])
{ if (buf[i]== '?')
{ // вывод символов вопросительного
// предложения
for(j=n; j<=i; j++)
{ ch[0]=buf[j]; ch[1]='\0';
cout << Rus(ch);
}
n=i+1;
}
if (buf[i]=='.' || buf[i]== '!')
n=i+1;
i++;
}
fclose(f);
cout << endl;
} else
cout << "Файл не найден!\n";
}
Рисунок 6.3 Файл с текстом
Рисунок 6.4 Результат выполнения программы.
6.3 Работа со структурами и бинарными файлами
В листинге 6.3 представлена программа, которая
- создает бинарный файл, в котором храниться информация о сотрудниках предприятия: фамилия и инициалы, год рождения, оклад.
- Выводит на экран информацию, хранимую в бинарном файле, а также сведения о сотруднике по заданной фамилии и инициалам (рис. 6.5).
Листинг 6.3 Создание и обработка бинарного файла
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
const int l_name = 30;
struct Man
{ char name[l_name];
int birth_year;
float pay;
};
int compare(const void *manl, const void *man2);
void create(void) // Создание файла
{ Man man; int pr; FILE *fbin;
if ((fbin =fopen("dbase.bin","wb")) == NULL)
puts("Ошибка создания файла\n ");
else
{ do
{ cout << "\n Фамилия и инициалы: ";
cin.get() ; gets (man.name) ;
cout << "\n Год рождения: ";
cin >> man.birth_year;
cout << "\n Оклад: ";
cin >> man.pay;
fwrite(&man, sizeof(man),1,fbin);
cout<< "\n Продолжить ввод? (1-да/0-нет)";
cin >> pr;
} while(pr == 1);
}
fclose(fbin);
}
void view(void) // Просмотр файла
{ FILE *fbin;
if ((fbin =fopen("dbase.bin","rb")) == NULL)
puts("Ошибка открытия файла\n");
else
{ fseek(fbin, 0, SEEK_END);
int n_record = ftell(fbin)/sizeof(Man);
Man *man = new Man[n_record];
fseek(fbin, 0, SEEK_SET);
fread(man, sizeof(Man),n_record, fbin);
fclose(fbin);
qsort(man, n_record, sizeof(Man), compare);
for (int i=0; i < n_record; i++)
cout << "\n" << man[i].name << " " <<
man[i].birth_year << " " << man[i].pay;
cout << "\n";
}
}
// Обработка файла
void work(void)
{ char z_name[l_name];
FILE *fbin;
if ((fbin =fopen("dbase.bin","rb")) == NULL)
puts("Ошибка открытия файла\n");
else
{ fseek(fbin, 0, SEEK_END);
int n_record = ftell(fbin)/sizeof(Man);
Man *man = new Man[n_record];
fseek(fbin, 0, SEEK_SET);
fread(man, sizeof(Man),n_record, fbin);
fclose(fbin);
qsort(man, n_record, sizeof(Man), compare);
cout<<"\nВведите фамилию и инициалы сотрудника:";
cin.get();gets(z_name);
for (int i=0; i < n_record; i++)
{ if (!strcmp(man[i].name,z_name))
cout << "\n" << man[i].name << " " <<
man[i].birth_year << " " << man[i].pay;
} cout << "\n";
}
}
int main(void)
{ int num;
do
{ cout << "\n 1 - Создание файла";
cout << "\n 2 - Просмотр файла";
cout << "\n 3 - Обработка файла";
cout << "\n 4 - Выход";
cout << "\n Ваш выбор: ";
cin >> num;
switch(num)
{ case 1: create();break;
case 2: view();break;
case 3: work();break;
}
} while (num != 4);
}
int compare(const void *manl, const void *man2)
{ return strcmp(((Man *)manl)->name,
((Man *)man2)->name);
}
Рисунок 6.5 Результат выполнения программы.
6.4. Задание 1
Написать программу, которая считывает текст из файла и обрабатывает его. Обработку текстовой информации нужно организовать с использованием С строк, т. е. массивов символов, завершающихся символом с кодом \0.
- Cчитать из текстового файла три предложения и вывести их в обратном порядке.
- Считать текст из файла и вывести на экран только предложения, содержащие введенное с клавиатуры слово.
- Считать текст из файла и вывести на экран только строки, содержащие двузначные числа.
- Считать английский текст из файла и вывести на экран слова, начинающиеся с гласных букв.
- Считать текст из файла и вывести его на экран, меняя местами каждые два соседних слова.
- Считать текст из файла и вывести на экран только предложения, не содержащие запятых.
- Считать текст из файла и определить, сколько в нем слов, состоящих из не более чем четырех букв.
- Считать текст из файла и вывести на экран цитаты, то есть предложения, заключенные в кавычки.
- Считать текст из файла и вывести на экран только предложения, состоящие из заданного количества слов.
- Считать английский текст из файла и вывести на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы.
- Считать английский текст из файла и вывести его на экран, заменив каждую первую букву слов, начинающихся с гласной буквы, на прописную.
- Считать текст из файла и вывести его на экран, заменив цифры от 0 до 9 на слова «ноль», «один», …, «девять», начиная каждое предложение с новой строки.
- Считать текст из файла, найти самое длинное слово и определяет, сколько раз оно встретилось в тексте.
- Считать текст из файла и вывести его на экран, после каждого предложения добавляя, сколько раз встретилось в нем введенное с клавиатуры слово.
- Считать текст из файла и вывести на экран сначала вопросительные, а затем восклицательные предложения.
6.5 Задание 2
Разработать алгоритм и написать программу решения задачи индивидуального варианта.
- Список товаров, имеющихся на складе, включает: наименование товара, количество единиц товара, цену единицы товара, дату поступления товара на склад. Для описания списка товаров в программе необходимо использовать тип данных структура. Для хранения списка товаров создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: вывести в порядке возрастания стоимости список товаров, хранящихся более одного месяца и стоимость которых превышает 1000 рублей.
- Для получения места в общежитии формируется список студентов, который включает: Ф. И. О. студента, номер группы (буква и четыре цифры), средний балл, доход на одного члена семьи. Общежитие в первую очередь предоставляется тем студентам, у которых доход на члена семьи меньше двух минимальных зарплат, затем остальным в порядке уменьшения среднего балла. Для описания списка студентов в программе необходимо использовать тип данных структура. Для хранения списка студентов создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: вывести список очередности предоставления мест в общежитии.
- В справочной автовокзала хранится расписание рейсов автобусов. Для каждого рейса указаны: номер рейса, тип автобуса, пункт назначения, время отправления, время прибытия в конечный пункт. Для описания рейса в программе необходимо использовать тип данных структура. Для хранения расписания рейсов автобусов создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: вывести отсортированную информацию о рейсах, которыми можно воспользоваться для прибытия в пункт назначения ранее заданного времени.
- На междугородней АТС информация о разговорах содержит: дату разговора, код и название города, время разговора, тариф, номер телефона в этом городе, номер телефона абонента. Для описания информации о разговорах в программе необходимо использовать тип данных структура. Для хранения информации о разговорах создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: вывести по каждому городу общее время разговоров и общую сумму. Вывод осуществите в порядке возрастания суммы.
- Информация о сотрудниках фирмы содержит: Ф. И. О. сотрудника, табельный номер, количество отработанных часов за месяц, почасовой тариф. Рабочее время свыше 144 часов считается сверхурочным и оплачивается в двойном размере. Для описания информации о сотрудниках фирмы в программе необходимо использовать тип данных структура. Для хранения информации о сотрудниках фирмы создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: вывести размер заработной платы каждого сотрудника фирмы за вычетом подоходного налога, который составляет 13% от суммы заработка. Информацию отсортируйте.
- Информация об участниках спортивных соревнований содержит: Ф. И. О. игрока, игровой номер, возраст, рост, вес. Для описания информации об участниках спортивных соревнований в программе необходимо использовать тип данных структура. Для хранения информации об участниках спортивных соревнований создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: вывести информацию о самых молодых, самых рослых и самых легких участниках соревнований.
- Для книг хранящихся в библиотеке задаются: регистрационный номер, Ф. И. О. автора, название, год издания, издательство, количество страниц. Для описания книг в программе необходимо использовать тип данных структура. Для хранения информации о книгах создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: вывести отсортированный список книг, изданных после заданного года
- Различные цеха завода выпускают продукцию нескольких наименований. Сведения о выпущенной продукции включают: наименование, количество, номер цеха. Для описания сведений о выпущенной продукции в программе необходимо использовать тип данных структура. Для хранения сведений о выпущенной продукции создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: для заданного цеха вывести информацию о выпущенной продукции в порядке убывания количества.
- Информация о сотрудниках предприятия содержит: Ф. И. О. сотрудника, номер отдела, должность, дату начала работы. Для описания информации о сотрудниках предприятия в программе необходимо использовать тип данных структура. Для хранения информации о сотрудниках создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: вывести список сотрудников по указанному отделу в порядке убывания стажа работы.
- Ведомость абитуриентов, сдавших вступительные экзамены, содержит: Ф. И. О. абитуриента, адрес, оценки по трем предметам. Для описания строки ведомости в программе необходимо использовать тип данных структура. Для хранения ведомости абитуриентов создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: определить количество абитуриентов, проживающих в г. Барнаул и сдавших экзамены со средним баллом не ниже 50. Вывести их фамилии в порядке возрастания среднего балла.
- Справочная служба содержит информацию о кинофильмах: название кинотеатра, стоимость билета, время сеанса, адрес. Для описания информации о кинофильмах в программе необходимо использовать тип данных структура. Для хранения информации о кинофильмах создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: вывести адреса всех кинотеатров в порядке возрастания стоимости билетов с указанным временем сеанса.
- Информация о городах России содержит: название города, количество жителей, количество школ, количество высших учебных заведений. Для описания информации о городах России в программе необходимо использовать тип данных структура. Для хранения информации о городах России создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: вывести названия городов и количество жителей, где не менее двух высших учебных заведений и количество школ не меньше заданного числа.
- Имеется информация о телевизорах на складе: наименование, фирма изготовитель, стоимость, размер экрана, количество на складе. Для описания информации о телевизорах на складе в программе необходимо использовать тип данных структура. Для хранения информации о телевизорах на складе создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла и выполнить его обработку: вывести в порядке возрастания стоимости названия телевизоров и их количество на складе.