Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 506; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.60.132 (0.006 с.) |