Лабораторная работа №3
Структуры и перечисления.
1. Номер телефона, например (212) 767—8900, можно условно разделить на три части: код города (212), номер телефонной станции (767) и номер абонента (8900). Напишите программу с использованием структуры, позволяющую раздельно хранить эти три части телефонного номера. Назовите структуру phone. Создайте две структурные переменные типа phone. Инициализацию одной из них произведите сами, а значения для другой запросите с клавиатуры. Затем выведите содержимое обеих переменных на экран. Результат работы программы должен выглядеть приблизительно так:
Введите код города, номер станции и номер абонента:
415 555 1212
Мой номер (212) 767-8900
Ваш номер (415) 555-1212
// uses structure to store phone number
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
Struct phone
{
Int area; //area code (3 digits)
Int exchange; //exchange (3 digits)
Int number; //number (4 digits)
};
////////////////////////////////////////////////////////////////
Int main()
{
phone ph1 = { 212, 767, 8900 }; //initialize phone number
Phone ph2; //define phone number
// get phone no from user
cout << "\nEnter your area code, exchange, and number";
cout << "\n(Don't use leading zeros): ";
cin >> ph2.area >> ph2.exchange >> ph2.number;
cout << "\nMy number is " //display numbers
<< '(' << ph1.area << ") "
<< ph1.exchange << '-' << ph1.number;
cout << "\nYour number is "
<< '(' << ph2.area << ") "
<< ph2.exchange << '-' << ph2.number << endl;
return 0;
}
Расположение точки на плоскости можно задать с помощью двух координат: х и у. Например, если точка имеет координаты (4, 5), то это значит, что она отстоит на 4 единицы справа от вертикальной оси и на 5 единиц вверх от горизонтальной оси. Сумма двух точек определяется как точка, имеющая координаты, равные сумме соответствующих координат слагаемых.
Напишите программу, использующую для интерпретации точки на плоскости структуру с названием point. Определите три переменные типа point, и две из них инициализируйте с помощью значений, вводимых с клавиатуры. Затем присвойте третьей переменной значение суммы первых двух переменных и выведите результат на экран. Результат работы программы может выглядеть следующим образом:
Введите координаты точки p1: 3 4
Введите координаты точки р2: 5 7
Координаты точки p1+p2 равны 8.11
// structure models point on the plane
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
Struct point
{
Int xCo; //X coordinate
Int yCo; //Y coordinate
};
////////////////////////////////////////////////////////////////
Int main()
{
Point p1, p2, p3; //define 3 points
cout << "\nEnter coordinates for p1: "; //get 2 points
cin >> p1.xCo >> p1.yCo; //from user
cout << "Enter coordinates for p2: ";
cin >> p2.xCo >> p2.yCo;
p3.xCo = p1.xCo + p2.xCo; //find sum of
p3.yCo = p1.yCo + p2.yCo; //p1 and p2
cout << "Coordinates of p1+p2 are: " //display the sum
<< p3.xCo << ", " << p3.yCo << endl;
return 0;
}
Создайте структуру с именем Volume, содержащую три поля тина Distance из примера englstrc, для хранения трех измерений помещения. Определите переменную типа Volume, инициализируйте ее, вычислите объем, занимаемый помещением, и выведите результат на экран. Для подсчета объема переведите каждое из значений типа Distance в значение типа float, равное соответствующей длине в футах и хранимое в отдельной переменной. Затем для вычисления объема следует перемножить три полученные вещественные переменные.
// uses structure to model volume of room
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
Struct Distance
{
int feet;
float inches;
};
////////////////////////////////////////////////////////////////
Struct Volume
{
Distance length;
Distance width;
Distance height;
};
////////////////////////////////////////////////////////////////
Int main()
{
float l, w, h;
Volume room1 = { { 16, 3.5 }, { 12, 6.25 }, { 8, 1.75 } };
l = room1.length.feet + room1.length.inches/12.0;
w = room1.width.feet + room1.width.inches /12.0;
h = room1.height.feet + room1.height.inches/12.0;
cout << "Volume = " << l*w*h << " cubic feet\n";
return 0;
}
// englstrc.cpp
// demonstrates structures using English measurements
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
Struct Distance //English distance
{
int feet;
float inches;
};
////////////////////////////////////////////////////////////////
Int main()
{
Distance d1, d3; //define two lengths
Distance d2 = { 11, 6.25 }; //define & initialize one length
//get length d1 from user
cout << "\nEnter feet: "; cin >> d1.feet;
cout << "Enter inches: "; cin >> d1.inches;
//add lengths d1 and d2 to get d3
d3.inches = d1.inches + d2.inches; //add the inches
d3.feet = 0; //(for possible carry)
if(d3.inches >= 12.0) //if total exceeds 12.0,
{ //then decrease inches by 12.0
d3.inches -= 12.0; //and
d3.feet++; //increase feet by 1
}
d3.feet += d1.feet + d2.feet; //add the feet
//display all lengths
cout << d1.feet << "\'-" << d1.inches << "\" + ";
cout << d2.feet << "\'-" << d2.inches << "\" = ";
cout << d3.feet << "\'-" << d3.inches << "\"\n";
return 0;
}
Создайте структуру с именем employee, содержащую два поля: номер сотрудника типа int и величину его пособия в долларах типа float. Запросите с клавиатуры данные о трех сотрудниках, сохраните их в трех структурных переменных типа employee и выведите информацию о каждом из сотрудников на экран.
Создайте структуру типа date, содержащую три поля типа int: месяц, день и год. Попросите пользователя ввести день, месяц и год в формате 31/12/2002, сохраните введенное значение в структурной переменной, а затем извлеките данные из этой переменной и выведите их на экран в том же формате, в каком они вводились.
6. Как мы говорили, стандартные средства ввода/вывода C++ вместо значений перечисляемых типов данных выводят их внутреннее представление в виде целых чисел. Для того чтобы преодолеть это ограничение, вы можете использовать конструкцию switch, с помощью которой устанавливается соответствие между значением переменной перечисляемого типа и се внутренним представлением. Пусть, например, в программе определен перечисляемый тип данных etype, отражающий должность сотрудника:
enum etype { laborer, secretary, manager, accountant, executive, researcher };
Напишите программу, которая сначала по первой букве должности, введенной пользователем, определяет соответствующее значение переменной, помещает это значение в переменную типа etype, а затем выводит полностью название должности, первую букву которой ввел пользователь. Взаимодействие программы с пользователем может выглядеть следующим образом:
Введите первую букву должности
(laborer, secretary, manager, accountant, executive, researcher): a