ТОП 10:

Выделение памяти под объект coat



Название полей name price percent date
Тип char* long float char[9]
Байты

 

 

Инициализация объектов типа структуры может быть осуществлена при объявлении объектов. Например,

 

struct goods cit={“Апельсины”, 56, 2.5, ”15.06.13”};

 

Сравнивая структуры с массивами, следует отметить одну особенность, связанную с операцией присваивания. Если заданы массивы одного и того же типа, то перенос значений из одного массива в другой возможен лишь с использованием оператора цикла. Например,

 

float x[5], y[5]={1.0, 5.7, 4.0, -6.2, 7.1};

for(int i=0; i<sizeof(x) / zizeof(x[0]); i++)

x[i]=y[i];

 

Стандарт языка Си разрешает присваивание структур. Например, если введен объект

 

goods frut;

 

то при выполнении операции присваивания

 

frut = cit;

 

полям объекта frut будут присвоены значения полей объекта cit.

Следует отметить, что поле name будет указывать на один и тот же адрес памяти. Доступ к полям структуры обеспечивается с помощью уточненных имен:

 

Имя_объекта.имя_поля

 

Листинг 10.1. В файле с именем "input.txt" задано количество студентов, список студентов с указанием фамилии и номера группы (рис. 10.1).

 

Содержимое файла "input.txt".

 

Рис. 10.1. Информация, находящаяся в файле «input.txt»

 

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

 

struct spisok

{

char *fam; //Фамилия студента

int group; //Номер группы студента

};

 

 

Файл “stdafx.h”

#pragma once

#define WIN32_LEAN_AND_MEAN

#include <stdio.h>

#include <tchar.h>

#include <string.h>

#include <fstream>

#include <iostream>

using namespace std;

 

 

//L10_1.cpp

#include "stdafx.h"

 

struct spisok //Структура для описания студентов

{

char *fam; //Поле структуры

int group; //Поле структуры

};

 

void sort(spisok*f, int n); //Прототип функции sort()

 

int _tmain( )

{

ifstream fin("input.txt"); //Задание объекта для ввода и его идентификация

ofstream fout("outout.txt") ;//Задание объекта для вывода и его идентификация

int n ,i;

char st[30];

spisok *f;

fin>>n; //Чтение числа записей в списке

f=new spisok[n];

//Формирование списка:

for(i=0; i<n; i++)

{

fin>>st;

f[i].fam=strdup(st);

fin>>f[i].group;

}

sort(f,n); //Сортировка списка в заданном порядке

//Вывод списка в файл "outout.txt":

for(i=0; i<n; i++)

{

fout.width(20);

fout<<f[i].fam;

fout.width(5);

fout<<f[i].group<<'\n';;

}

fout.close();

 

return 0;

}

 

void sort(spisok*f, int n)

{

spisok v;

int i, k=0, ff;

do

{

ff=0;

for(i=0; i<n-1-k; i++)

{

l=f[i].group > f[i+1].group||(f[i].group == f[i+1].group &&

strcmp(f[i].fam, f[i+1].fam)>0);

if (l)

{

v=f[i];

f[i]=f[i+1];

f[i+1]=v;

ff=1;

}

}

k++;

}while(ff);

}

Результат выполнения программы листинга 10.2 представлен на рис. 10.2.

Содержимое файла "outout.txt"

 

Рис. 10.2. Результат работы программы листинга 10.2

 

В случае, когда значение некоторого поля должно быть одинаковым для всех записей структуры, его следует объявить статическим. Статические компоненты не «дублируются» при создании новых объектов, то есть каждый статический компонент существует в единственном экземпляре. Доступ к статическому компоненту возможен лишь после его инициализации. Для инициализации используется следующая конструкция:

 

тип имя_структуры :: имя_компонента инициализатор;

 

Листинг 10.2. В программе описываются продукты, находящиеся на некоторой оптовой базе (рис. 10.3). В качестве статического компонента рассматривается торговая скидка.

 

Содержимое файла "input.txt"

 

Рис. 10.3. Информация, находящаяся в файле «input.txt»

//L10_2.cpp

#include <stdio.h>

#include <string.h>

#include <fstream>

#include <iostream>

using namespace std;

 

typedef struct date //Структура для описания даты

{

int dd,mm,yy;

};

struct baza // Структура для описания товара

{

char*name; //Наименование товара

float price; //Цена

static int percent; //Торговая скидка

date d; //Дата поступления

};

void print_date(date); //Печать даты в формате dd.mm.yy

int true_date(date); //Проверка правильности ввода даты

void print_baza(baza); //Печать содержимого объекта baza

int baza::percent=0; //Начальная инициализация компонента percent

int main()

{

date d1;

setlocale(LC_CTYPE,"russian");

baza *p;

int n, i, v;

ifstream fin("input.txt"); //Файл, описывающий содержимое базы

char st[30];

fin >> n;

fin>>v; //Введение значения торговой скидка

baza::percent=v; //Присваивание этого значения

p=new baza[n];

for(i=0;i<n;i++)

{

fin.get();

fin.getline(st,29); //Наименование товара

p[i].name=strdup(st);

fin>>p[i].price; //Цена товара

do

{

fin>>d1.dd>>d1.mm>>d1.yy;

if(!true_date(d1))

{

cout<<"Дата введена неправильно!\n";

return 1;

}

}while(!true_date(d1));

p[i].d=d1; //Дата поступления товара

}

fin.close();

for(i=0;i<n;i++) //Печать содержимого базы

{

print_baza(p[i]);

cout<<'\n';

}

cout<<"\nВведите новую скидку ";

cin>>v; //Ввод новой скидки

baza::percent=v;

cout<<"\n\n";

for(i=0;i<n;i++) //Печать содержимого базы

{

print_baza(p[i]);

cout<<'\n';

}

 

return 0;

}

void print_date(date d)

{

char s[9];

s[8]='\0';

s[0]='0'+d.dd/10;

s[1]='0'+d.dd%10;

s[2]='.';

s[3]='0'+d.mm/10;

s[4]='0'+d.mm%10;

s[5]='.';

int y=d.yy%100;

s[6]='0'+y/10;

s[7]='0'+y%10;

cout<<s;

}

int true_date(date d)

{

int dm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int v;

if((d.yy/4==0&&d.yy/100!=0)||d.yy%400==0)

v=1;

else

v=0;

if(d.yy<=0) return 0;

if(d.mm<1||d.mm>12) return 0;

if(d.mm!=2&&(d.dd<1||d.dd>dm[d.mm])) return 0;

if(d.mm==2&&(d.dd<1||d.dd>28+v)) return 0;

return 1;

}

void print_baza(baza p)

{

cout.width(20);

cout<<p.name;

cout.width(12);

cout<<p.price;

cout.width(5);

cout<<p.percent<<" ";

print_date(p.d);

}

 

 

Результат выполнения программы листинга 10.2 приведен на рис. 10.4.

 

 

Рис. 10.4. Результат работы программы листинга 10.2

 

 

Листинг 10.3. В программе задается массив структур, который содержит сведения об успеваемости студентов. На экран дисплея выводится список неуспевающих студентов [1].

 

//L10_3.cpp

#include "stdafx.h"

#include <iostream>

#include <locale>

using namespace std;

 

int _tmain()

{ setlocale (LC_ALL, "Russian");

const int f=5;

int i, n, m=1;

 

typedef struct

{char fio[35];

int mark[4];

}student;

 

student array[5]; //Массив структур

 

for (i=0; i<f; i++)

{cout<<"Введите фамилию студента: ";

cin>>array[i].fio;

for (n=0; n<4; n++)

{cout<<"Введите "<<n+1<<"-ю оценку студента: ";

cin>>array[i].mark[n];

}

}

 

cout<<endl<<"Список неуспевающих:"<<endl;

for (i=0; i<f; i++)

for (n=0;n<4;n++)

if (array[i].mark[n]==2)

{cout<<m++<<") "<<array[i].fio<<endl;

i++;

}

return 0;

}

 

Результат выполнения программы листинга 10.3 представлен на рис. 10.5.

 

 

Рис. 10.5. Результат работы программы листинга 10.3

 

Упражнения

 

1. В файле “input.txt” задано количество выпускников школ, желающих поступить на механико-математический факультет ННГУ, и их список. В списке для каждого абитуриента указаны фамилия, имя, отчество и сумма баллов ЕГЭ. Создать структуру, описывающую абитуриента, и создать массив из структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по убыванию суммы баллов. Полученный список записать в файл.

2. В файле “input.txt” задано количество записей каталога посадочного материала и его список. Каждая запись списка содержит название, вид посадочного материала (дерево, кустарник, овощи, ягоды), и цену единицы экземпляра. Создать структуру, описывающую каталог, и создать массив из структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по виду посадочного материала, а в случае его совпадения, по названиям. Полученный список записать в файл.

3. В файле “input.txt” задано количество записей работ, выполненных автомастерской, и их список. В каждой записи списка указаны фамилия, имя, отчество мастера и сумма за выполненную работу. Создать структуру, описывающую выполненные работы. Создать массив, который содержит фамилию, имя, отчество мастера и общую сумму заработанных им денег, используя информацию из файла “input.txt”. Массив упорядочить в алфавитном порядке. Полученный список записать в файл.

4. В файле “input.txt” задано количество записей инструментов, заказанных магазином на оптовой базе, и их список. Каждая запись списка содержит название инструмента, цену единицы товара и его количество. Создать структуру, описывающую данный заказ. Создать массив, который содержит название инструмента и его полную стоимость. Для заполнения массива использовать информацию из файла “input.txt”. Полученный массив упорядочить по названиям инструментов и определить общую стоимость заказа. Полученный результат записать в файл.

5. В файле “input.txt” задано количество записей выполненных работ фотоателье и их список. В каждой записи списка указаны фамилия, имя и отчество клиента, фамилия, имя и отчество мастера, сумма за выполненную мастером работу. Создать структуру, описывающую выполненные работы, и создать массив, который содержит фамилию, имя, отчество мастера и общую сумму заработанных им денег. Для заполнения массива использовать информацию из файла “input.txt”. Массив упорядочить в алфавитном порядке. Полученный список записать в файл.

6. В файле “input.txt” задано количество записей выполненных работ фотоателье и их список. В каждой записи списка указаны фамилия, имя и отчество клиента, фамилия, имя и отчество мастера, сумма за выполненную мастером работу. Создать структуру, описывающую выполненные работы, и создать массив, который содержит фамилию, имя, отчество клиента и общую стоимость всех его фотографий. Для заполнения массива использовать информацию из файла “input.txt”. Массив упорядочить в алфавитном порядке. Полученный список записать в файл.

7. В файле “input.txt” задано количество участников соревнований зимней спартакиады ННГУ и их список. В каждой строке списка указаны фамилия, имя, отчество участника, вид соревнования (лыжи, коньки и т.д.) и показанный результат. Создать структуру, описывающую участника спартакиады, и создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по видам соревнований, а внутри каждого вида по убыванию результата. Полученный список записать в файл.

8. В файле “input.txt” задано количество участников соревнований по прыжкам в воду и их список. В каждой строке списка указаны фамилия, имя, отчество участника, номер попытки и показанный результат. Создать структуру, описывающую участника соревнований (указывается фамилия, имя, отчество участника, средний балл по всем результатам), создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по убыванию результата. Полученный список записать в файл.

9. В файле “input.txt” задано количество записей о денежных выплатах сотрудникам некоторой фирмы. В каждой записи списка указаны фамилия, имя, отчество сотрудника и сумма выплат. Создать структуру, описывающую выплаты сотрудникам, и создать массив, который содержит фамилию, имя, отчество сотрудника и общую сумму выплат. Для заполнения массива использовать информацию из файла “input.txt”. Массив упорядочить в алфавитном порядке. Полученный список записать в файл.

10. В файле “input.txt” задано количество записей содержимого промтоварной базы и его список. Каждая запись списка содержит название продукции, цену единицы продукции и количество экземпляров. Создать структуру, описывающую содержимое базы, и создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив в алфавитном порядке по названиям продукции. Подсчитать общую стоимость всех товаров. Полученный список записать в файл.

11. В файле “input.txt” задано количество записей контрактов, заключенных страховой фирмой, и их список. В каждой записи списка указаны фамилия, имя, отчество агента и стоимость контракта. Создать структуру, описывающую заключенные контракты. Создать массив, который содержит фамилию, имя, отчество агента и общую стоимость всех контрактов, заключенных этим агентом. Для заполнения массива использовать информацию из файла “input.txt”. Массив упорядочить в алфавитном порядке. Полученный список записать в файл.

12. В файле “input.txt” задано количество записей выполненных сельскохозяйственных работ и их список. В каждой записи списка указаны фамилия, имя, отчество работника и сумма за выполненную работу. Создать структуру, описывающую выполненные работы, и создать массив, который содержит фамилию, имя, отчество работника и общую сумму заработанных денег. Для заполнения массива использовать информацию из файла “input.txt”. Массив упорядочить в алфавитном порядке. Полученный список записать в файл.

13. В файле “input.txt” задано количество студентов механико-математического факультета ННГУ и их список. В каждой строке списка содержатся фамилия, имя, отчество студента, название сдаваемого предмета и оценка, полученная во время последней экзаменационной сессии. Создать структуру, описывающую студента с указанием фамилии, имени, отчества и среднего балла за эту сессию. Создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по убыванию суммы баллов. Полученный список записать в файл.

14. В файле “input.txt” задано количество студентов механико-математического факультета ННГУ и их список. В каждой строке списка содержатся фамилия, имя, отчество студента, название сдаваемого предмета и оценка. Создать структуру, описывающую экзаменационную сессию, с указанием предмета и среднего балла за сессию по этому предмету, создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по убыванию суммы баллов. Полученный список записать в файл.

15. В файле “input.txt” задано количество участников соревнований летней спартакиады ННГУ и их список. В каждой строке списка указаны фамилия, имя, отчество участника, вид соревнования (прыжки, толкание ядра, метание молота) и показанный результат. Создать структуру, описывающую участника спартакиады. Создать массив структур, заполнив его информацией из файла “input.txt”, и упорядочить этот массив по видам соревнования, а внутри каждого вида по убыванию результата. Полученный список записать в файл.

16. В файле “input.txt” задано количество записей каталога обуви на осень 2013 года и список его содержимого. Каждая запись списка содержит название, цену за пару и количество пар обуви. Создать структуру, описывающую каталог. Создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по убыванию общей стоимости для каждой записи, а в случае равенства – в алфавитном порядке по названию обуви. Полученный список записать в файл.

17. В файле “input.txt” задано количество записей работ, выполненных строительной фирмой, и их список. В каждой записи списка указаны номер контракта и сумма за выполненную работу. Создать структуру, описывающую выполненные работы. Создать массив структур, для заполнения которого использовать информацию из файла “input.txt”. Массив упорядочить по убыванию суммы контракта. Полученный список записать в файл.

18. В файле “input.txt” задано количество записей списка, содержащего информацию о школьниках, отдыхающих в лагере ”Орленок”. В каждой записи списка указаны фамилия, имя, отчество школьника и номер отряда. Согласно данной информации создать структуру, описывающую школьников. Создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по возрастанию номера отряда, а внутри отряда упорядочить список в алфавитном порядке. Полученный список записать в файл.

19. В файле “input.txt” задано количество участников авторалли и их список. Каждая строка списка содержит фамилию, имя, отчество участника и показанный результат. Создать структуру, описывающую участника авторалли. Создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по убыванию результата, а в случае равенства результата – в алфавитном порядке участников соревнований. Полученный список записать в файл.

20. В файле “input.txt” задано количество записей содержимого овощной базы и её список. Каждая запись списка содержит название продукции, цену за килограмм и общий вес в килограммах. Создать структуру, описывающую содержимое базы, и создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив в алфавитном порядке по названиям продукции. Подсчитать общую стоимость всех товаров. Полученный список записать в файл.

21. В файле “input.txt” задано количество участников спартакиады по тяжелой атлетике и их список. В каждой строке списка указаны фамилия, имя, отчество участника, вид соревнования (жим, рывок и толчок) и показанный результат. Создать структуру, описывающую участника спартакиады. Создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по убыванию суммы результатов. Полученный список записать в файл.

22. В файле “input.txt” задано количество записей содержимого книжной базы и её список. Каждая запись списка содержит название книги, фамилию и инициалы автора, цену за экземпляр и число экземпляров. Создать структуру, описывающую содержимое базы, и создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив в алфавитном порядке по названиям книг. Подсчитать общую стоимость всех книг. Полученный список записать в файл.

23. В файле “input.txt” задано количество студентов механико-математического факультета ННГУ и их список. Каждая строка списка содержит фамилию, имя, отчество студента, название сдаваемого предмета и оценку. Создать структуру, описывающую экзаменационную сессию. Создать массив структур, заполнив его информацией из файла “input.txt”, и упорядочить его в алфавитном порядке. Создать список неуспевающих студентов. Полученный список записать в файл.

24. В файле “input.txt” задано количество студентов механико-математического факультета ННГУ и их список. Каждая строка списка содержит фамилию, имя, отчество студента, название сдаваемого предмета и оценку. Создать структуру, описывающую экзаменационную сессию. Создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить массив в алфавитном порядке. Создать список студентов-отличников. Полученный список записать в файл.

25. В файле “input.txt” задано количество записей содержимого книжной базы и её список. Каждая запись списка содержит название книги, фамилию и инициалы автора, цену за экземпляр и число экземпляров. Создать структуру, описывающую содержимое базы. Создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по общей стоимости всех экземпляров данной книги. Подсчитать общую стоимость всех книг. Полученный список записать в файл.

 







Последнее изменение этой страницы: 2016-07-11; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.237.186.116 (0.021 с.)