![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Построение массивов без повторенийСодержание книги Поиск на нашем сайте
Предположим, что в файле «input.txt» записана информация, содержащая количество студентов в списке, фамилию студента, название предмета и оценку по этому предмету. Фамилии студентов и названия предметов могут повторяться (рис. 6.3). Необходимо сформировать список студентов и вычислить общее количество пропусков занятий для каждого из них, а также общее число пропусков занятий по каждому предмету. Таким образом, для каждого студента и каждого предмета нужно суммировать число пропусков занятий.
Содержимое файла “input.txt”
Рис. 6.3. Информация, находящаяся в файле «input.txt»
Листинг 6.2. Сформировать список из неповторяющихся фамилий и список из неповторяющихся предметов. При вводе проверять, если среди раннее введенных фамилий (рис. 6.3) вводимые фамилии и предметы. Если их нет, то вводится новая запись, а если они уже есть, то добавляется число прогулов в уже существующую запись. //L6_2.cpp #include <string.h> #include <fstream> #include <iostream> using namespace std; int main() { setlocale(LC_CTYPE,"russian"); int n,i,j,*nname,*nsubject,mn=0,ms=0,f,aut; char**name,**subject,fam[30],sb[30]; fstream ff("input.txt"); ff>>n; // Читаем число записей name=new char*[n]; // Выделяем память под указатели // на фамилии. subject=new char*[n]; // Выделяем память под указатели // на названия предметов. nname=new int[n]; // Выделяем память под количество // пропусков длякаждого студента. nsubject=new int[n]; // Выделяем память под количество // под каждый предмет. for(i=0;i<n;i++) { ff>>fam; // Ввод фамилии студента ff>>sb; // Ввод предмета ff>>aut; // Ввод числа прогулов студента по этому //предмету. for(j=0;j<mn;j++) if(strcmp(name[j],fam)==0) break; if(j>=mn) { name[mn]=strdup(fam); nname[mn++]=aut; } else nname[j]+=aut; for(j=0;j<ms;j++) if(strcmp(subject[j],sb)==0) break; if(j>=ms) { subject[ms]=strdup(sb); nsubject[ms++]=aut; } else nsubject[j]+=aut; } ff.close(); cout<<"\nПолученные списки\nСТУДЕНТЫ\n\n"; for(i=0;i<mn;i++) { cout.width(10); cout<<name[i]; cout.width(5); cout<<nname[i]<<'\n'; } cout<<"\nПРЕДМЕТЫ\n\n"; for(i=0;i<ms;i++) { cout.width(10); cout<<subject[i]; cout.width(5); cout<<nsubject[i]<<'\n'; } cout<<'\n'; ff.open("input.txt",ios::app); ff<<"\nПолученные списки\nСТУДЕНТЫ\n\n"; for(i=0;i<mn;i++) { ff.width(10); ff<<name[i]; ff.width(5); ff<<nname[i]<<'\n'; } ff<<"\nПРЕДМЕТЫ\n\n"; for(i=0;i<ms;i++) { ff.width(10); ff<<subject[i]; ff.width(5); ff<<nsubject[i]<<'\n'; } ff<<'\n'; ff.close(); return 0; }
Результат работы программы листинга 6.2 приведен на рис. 6.4.
Рис. 6.4. Результат работы программы листинга 6.2
Листинг 6.3. В файле с именем «input.txt» содержится информация о количестве чисел и сами числа (рис. 6.5). Необходимо сформировать массив, не содержащий повторяющихся значений. Этот алгоритм был рассмотрен в главе 1. При работе с файлом он выглядит следующим образом.
//L6_3.cpp #include <string.h> #include <fstream> #include <iostream> using namespace std; int main() { setlocale(LC_CTYPE,"russian"); int n,i,m=0,*x,tmp; fstream ff("input.txt"),f1; // Открытие файла "input.txt" ff>>n; // Чтение n x=new int[n]; // Запрос памяти под массив ff>>tmp; while(!ff.eof()) { for(i=0;i<m;i++) if(x[i]==tmp) break; if(i==m) // Если такого элемента еще не было, // дополняем его и увеличиваем индекс //элемента массива. x[m++]=tmp; ff>>tmp; } ff.close(); // Закрытие файла // Открываем файл "input.txt" для пополнения f1.open("input.txt", ios::app); f1<<"\nПолученный вектор размерностью "<<m<<'\n'; for(i=0;i<m;i++) { f1.width(5); // Под выводимый объект выделяем 5 позиций f1.setf(ios::left); // В поле вывода значение прижать к левому краю f1<<x[i]; } f1.close(); // Закрытие файла return 0; }
Содержимое файла "input.txt"
Рис. 6.5. Информация, находящаяся в файле «input.txt»
На рис. 6.6 представлен результат выполнения программы листинга 6.3.
Рис. 6.6. Результат работы программы листинга 6.3 Упражнения
1. Даны два массива целых чисел a и b, каждый их которых не содержит повторяющихся элементов. Исходная информация записана в файле. Построить пересечение массивов a и b. 2. Даны два массива целых чисел a и b, каждый их которых не содержит повторяющихся элементов. Исходная информация записана в файле. Построить объединение массивов a и b. 3. Даны два массива целых чисел a и b, каждый их которых не содержит повторяющихся элементов. Исходная информация записана в файле. Построить симметричную разность массивов a и b. 4. Даны два массива целых чисел a и b, каждый их которых не содержит повторяющихся элементов. Исходная информация записана в файле. Построить дополнение массива a до массива b. 5. Задан произвольный массив. Исходная информация записана в файле. Построить массив только из значений, входящих в него один раз. 6. Задан произвольный массив. Исходная информация записана в файле. Построить массив только из значений, входящих в него более одного раза.
7. В файле задан список сотрудников с указанием фамилии, отдела, названия месяца и заработанной сотрудником за этот месяц заработнойя платы. Создать список отделов и вычислить общую сумму заработной платы сотрудников каждого отдела. 8. В файле задан список сотрудников с указанием фамилии, отдела, названия месяца и заработанной сотрудником за этот месяц заработной платы. Создать список сотрудников и вычислить общую сумму их заработной платы. 9. В файле задан список сотрудников с указанием фамилии, отдела, названия месяца и заработанной сотрудником за этот месяц заработной платы. Создать список отделов и вычислить общую сумму заработной платы за каждый месяц. 10. В файле задан список студентов с указанием предмета и оценки за экзамен. Составить список студентов с указанием их среднего балла за сессию. 11. В файле задан список студентов с указанием предмета и оценки за экзамен. Составить список предметов с указанием среднего балла по этому предмету в сессию. 12. Задан произвольный массив. Исходная информация записана в файле. Построить массив только из уникальных значений, с указанием, сколько раз элемент входит в исходный массив. 13. В файле задан список слов. Составить список уникальных слов с указанием, сколько раз они встречаются в исходном списке. 14. В файле задан список слов. Составить список слов, встречающихся в списке только один раз. 15. В файле задан список слов. Составить список слов, встречающихся в списке более одного раза. 16. В файле задан произвольный набор чисел. Создать массив неповторяющихся чисел с указанием о том, сколько раз число встречается в исходном массиве, и упорядочить числа по возрастанию частоты повторяемости. 17. В файле задан произвольный набор чисел. Создать массив неповторяющихся положительных чисел с указанием о том, сколько раз число встречается в исходном массиве, и упорядочить числа по убыванию частоты повторяемости. 18. Даны два массива целых чисел a и b, каждый их которых не содержит повторяющихся элементов. Исходная информация записана в файле. Построить симметричную разность массивов a и b и упорядочить ее по убыванию. 19. Даны два массива целых чисел a и b, каждый их которых не содержит повторяющихся элементов. Исходная информация записана в файле. Построить пересечение массивов a и b, исключая отрицательные элементы. 20. В файле содержится список налоговой инспекции с указанием фамилии, года и суммы задолженностей за указанный год. Построить список должников с указанием их суммарной задолженности. 21. В файле содержится список налоговой инспекции с указанием фамилии, года и суммы задолженностей за указанный год. Построить список годов с указанием суммарной задолженности и определить год с максимальной задолженностью. 22. В файле задан список студентов с указанием предмета и оценки за экзамен. Составить список оценок с указанием их повторяемости за сессию. Определить наиболее часто встречающиея оценки. 23. В файле задан список сотрудников с указанием фамилии, отдела, названия месяца и заработанной сотрудником за этот месяц заработной платы. Создать список отделов и общего количества сотрудников в отделе. Определить отдел с максимальным числом сотрудников. 24. В файле задан текст. Определить частоту повторяемости входящих в текст латинских букв. Строчные и прописные буквы считать одинаковыми.
25. В файле задан текст. Определить частоту повторяемости входящих в текст цифр.
|
|||||||
Последнее изменение этой страницы: 2016-07-11; просмотров: 514; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.76.111 (0.009 с.) |