К основному контенту

4 глава, Лафоре Р.

*1. Номер телефона, например (212) 767—8900, можно условно разделить на
три части: код города (212), номер телефонной станции (767) и номер
абонента (8900). Напишите программу с использованием структуры, поз-
воляющую раздельно хранить эти три части телефонного номера. Назо-
вите структуру phone. Создайте две структурные переменные типа phone.
Инициализацию одной из них произведите сами, а значения для другой
запросите с клавиатуры. Затем выведите содержимое обеих переменных
на экран. Результат работы программы должен выглядеть приблизитель-
но так:
Введите код города, номер станции и номер абонента:
415 555 1212
Мой номер (212) 767-8900
Ваш номер (415) 555-1212



*2. Расположение точки на плоскости можно задать с помощью двух коорди-
нат: x и y. Например, если точка имеет координаты (4, 5), то это значит, что
она отстоит на 4 единицы справа от вертикальной оси и на 5 единиц вверх

от горизонтальной оси. Сумма двух точек определяется как точка, име-
ющая координаты, равные сумме соответствующих координат слагаемых.
Напишите программу, использующую для интерпретации точки на плоско-
сти структуру с названием point. Определите три переменные типа point,
и две из них инициализируйте с помощью значений, вводимых с клавиа-
туры. Затем присвойте третьей переменной значение суммы первых двух
переменных и выведите результат на экран. Результат работы программы
может выглядеть следующим образом:
Введите координаты точки p1: 3 4
Введите координаты точки p2: 5 7
Координаты точки p1 + p2 равны 8.11
*3. Создайте структуру с именем Volume, содержащую три поля типа Distance
из примера englstrc, для хранения трех измерений помещения. Определи-
те переменную типа Volume, инициализируйте ее, вычислите объем, зани-
маемый помещением, и выведите результат на экран. Для подсчета объема
переведите каждое из значений типа Distance в значение типа float, равное
соответствующей длине в футах и хранимое в отдельной переменной. За-
тем для вычисления объема следует перемножить три полученные веще-
ственные переменные.
4. Создайте структуру с именем employee, содержащую два поля: номер со-
трудника типа int и величину его пособия в долларах типа float. Запроси-
те с клавиатуры данные о трех сотрудниках, сохраните их в трех струк-
турных переменных типа employee и выведите информацию о каждом из
сотрудников на экран.
5. Создайте структуру типа 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
полное название должности: accountant
Возможно, вам понадобится два ветвления switch: одно — для ввода значе-
ния, другое — для вывода.
7. Добавьте поля типа enum etype (см. упражнение 6) и struct date (см. упраж-
нение 5) в структуру employee из упражнения 4. Организуйте программу
таким образом, чтобы пользователь вводил 4 пункта данных о каждом из
трех сотрудников: его номер, величину зарплаты, его должность и дату
принятия на работу. Программа должна хранить введенные значения в трех
переменных типа employee и выводить их содержимое на экран.
8. Вернитесь к упражнению 9 главы 2 «Основы программирования на C++».
В этом упражнении требуется написать программу, которая хранит значе-
ния двух дробей в виде числителя и знаменателя, а затем складывает эти
дроби согласно арифметическому правилу. Измените эту программу так,
чтобы значения дробей хранились в струкtype fraction, состоящей из двух
полей типа int, предназначенных для хранения числителя и знаменателя.
Все значения дробей должны храниться в переменных типа fraction.
9. Создайте структуру с именем time. Три ее поля, имеющие тип int, будут
называться hours, minutes и seconds. Напишите программу, которая просит
пользователя ввести время в формате часы, минуты, секунды. Можно
запрашивать на ввод как три значения сразу, так и выводить для каж-
дой величины отдельное приглашение. Программа должна хранить время
в структурной переменной типа time и выводить количество секунд в вве-
денном времени, определяемое следующим образом:
long totalseсs = t1.hours * 3600 + t1.minutes * 60 + t1.seconds
10. Создайте структуру с именем sterling, хранящую денежные суммы в старой
английской системе, описанной в упражнениях 8 и 11 главы 3 «Циклы и
ветвления». Поля структуры могут быть названы pounds, shillings и pence
и иметь тип int. Программа должна запрашивать у пользователя значение
денежной суммы в новых десятичных фунтах (значение должно хранить-
ся в переменной типа double), затем переводить эту сумму в старую систе-
му, сохранять переведенное значение в переменной типа sterling и выво-
дить на экран полученную сумму в фунтах, шиллингах и пенсах.
11. Используя структуру time из упражнения 9, напишите программу, кото-
рая получает от пользователя два значения времени в формате 12:59:59,
сохраняет их в переменных типа struct time, затем переводит оба значения
в секунды, складывает их, переводит сумму в исходный формат, сохраня-
ет его в переменной типа time и выводит полученный результат на экран
в формате 12:59:59.
12. Переработайте программу-калькулятор для дробей, описанную в упраж-
нении 12 главы 3 так, чтобы каждая из дробей хранилась как значение пе-
ременной типа struct fraction, по аналогии с упражнением 8 этой главы.



1)




#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
struct phone
{
int citycode;
int numstation;
int numsub;
};
int main()
{
setlocale (0, "");
char ch;
phone subi = {212, 767, 8900};
phone sub1;
cout << "введите код города, номер станции и номер абонента:" << endl;
cin >> sub1.citycode >> ch >> sub1.numstation >> ch >> sub1.numsub;
cout << "Мой номер (" << subi.citycode << ") " << subi.numstation << "-" << subi.numsub << endl;
cout << "Ваш номер (" << sub1.citycode << ") " << sub1.numstation << "-" << sub1.numsub << endl;
system ("pause");
return 0;                                                    
}





2)




#include "stdafx.h"
#include <iostream>

using namespace std;
struct point
{
int x;
int y;
};
int main()
{
setlocale (0, "");
point p1, p2, p3;
cout << "Введите координаты р1" << endl;
cin >> p1.x >> p1.y;
cout << "Введите координаты р2" << endl;
cin >> p2.x >> p2.y;
p3.x = p1.x + p2.x;
p3.y = p1.y + p2.y;
cout << "Координаты точки р1+р2 = " << p3.x << "." << p3.y << endl;
system ("pause");

return 0;                                                    
}



3)




#include "stdafx.h"
#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 = {{6, 3.23}, {7, 8.45}, {7, 9.57}};
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 << "V = " << l*w*h << " sqr feets" << endl;
system ("pause");
return 0;
}






4)





#include "stdafx.h"
#include <iostream>
using namespace std;

struct employee
{
char empl[15];
double salary;
};
int main()
{
employee empl_1, empl_2, empl_3;
cout << "name of the employee 1" << endl;
cin >> empl_1.empl;
cout << "salary of the enployee 1" << endl;
cin >> empl_1.salary;
cout << "name of the employee 2" << endl;
cin >> empl_2.empl;
cout << "salary of the enployee 2" << endl;
cin >> empl_2.salary;
cout << "name of the employee 3" << endl;
cin >> empl_3.empl;
cout << "salary of the enployee 3" << endl;
cin >> empl_3.salary;
cout << "1-st employee " <<  empl_1.empl << ", " << empl_1.salary << "$" << endl
<< "2-nd employee " <<  empl_2.empl << ", " << empl_2.salary << "$" << endl
<< "3-rd employee " <<  empl_3.empl << ", " << empl_3.salary << "$" << endl;
system ("pause");
return 0;
}



5)





#include "stdafx.h"
#include <iostream>
using namespace std;

struct date
{
int day, month, year;
};
int main()
{
date date_1;
char ch = '/';
cout << "enter day, month and year (XX/XX/XXXX) " << endl;
cin >> date_1.day >> ch >> date_1.month >> ch >> date_1.year;

cout << "You entered the date: " <<  date_1.day << ch << date_1.month << ch << date_1.year << endl;
system ("pause");
return 0;
}



6)



#include <iostream>
using namespace std;

enum etype {laborer, secretary, manager, accountant, executive, researcher};


int main()
{
    char letter;
    etype post;
setlocale (0, "");

    cout << "(laborer, secretary, manager, accountant, executive, researcher)"
    <<"\nВведите первую букву должности: ";
    cin>> letter;

    switch (letter)
    {
        case 'l':
            post = laborer;
            break;
        case 's':
            post = secretary;
            break;

        case 'm':
           post = manager;
            break;
        case 'a':
            post = accountant;
            break;

        case 'e':
           post = executive;
            break;

        case 'r':
            post = researcher;
            break;
    }

    switch(post)
    {
        case laborer:
           cout << "Полное название должности: laborer";
            break;

        case secretary:
            cout << "Полное название должности: secretary";
            break;
        case manager:
            cout << "Полное название должности: manager";
            break;
        case accountant:
            cout << "Полное название должности: accountant";
            break;
        case executive:
            cout << "Полное название должности: executive";
            break;
        case researcher:
            cout << "Полное название должности: researcher";
            break;
    }
cout << endl;
system ("pause");
    return 0;
}




7)





#include <iostream>
using namespace std;

struct date
{
int day, month, year;
};
enum etype
{
laborer, secretary, manager, accountant, executive, researcher
};
struct employee
{
char empl[15];
double salary;
etype post;
date data;
};

int main()
{
employee empl_1, empl_2, empl_3;
char ch = '/', s;
cout << "name of the employee 1, salary, date of employment (xx/xx/xxxx), post (1-st letter)" << endl;
cin >> empl_1.empl >> empl_1.salary >> empl_1.data.day >> ch >> empl_1.data.month >> ch >> empl_1.data.year >> s;
switch(s)
    {
case 'l':{empl_1.post=laborer;break;}
case 's':{empl_1.post=secretary;break;}
case 'm':{empl_1.post=manager;break;}
case 'a':{empl_1.post=accountant;break;}
case 'e':{empl_1.post=executive;break;}
case 'r':{empl_1.post=researcher;break;}
default:cout << "Не корректный ввод";
    }
cout << "name of the employee 2, salary, date of employment, post (1-st letter)" << endl;
cin >> empl_2.empl >> empl_2.salary >> empl_2.data.day >> ch >> empl_2.data.month >> ch >> empl_2.data.year >> s;
switch(s)
    {
case 'l':{empl_2.post=laborer;break;}
case 's':{empl_2.post=secretary;break;}
case 'm':{empl_2.post=manager;break;}
case 'a':{empl_2.post=accountant;break;}
case 'e':{empl_2.post=executive;break;}
case 'r':{empl_2.post=researcher;break;}
default:cout << "Не корректный ввод";
    }
cout << "name of the employee 3, salary, date of employment, post (1-st letter)" << endl;
cin >> empl_3.empl >> empl_3.salary >> empl_3.data.day >> ch >> empl_3.data.month >> ch >> empl_3.data.year >> s;
switch(s)
    {
case 'l':{empl_3.post=laborer;break;}
case 's':{empl_3.post=secretary;break;}
case 'm':{empl_3.post=manager;break;}
case 'a':{empl_3.post=accountant;break;}
case 'e':{empl_3.post=executive;break;}
case 'r':{empl_3.post=researcher;break;}
default:cout << "Не корректный ввод";
    }

cout << "1-st employee " <<  empl_1.empl << ", " << empl_1.salary << "$, " << empl_1.data.day << ch << empl_1.data.month << ch << empl_1.data.year << " date of employment, " << endl;
cout << "post" << endl;
 switch(empl_1.post)
    {
case laborer:{cout << "laborer\n";break;}
case secretary:{cout << "secretary\n";break;}
case manager:{cout << "manager\n";break;}
case accountant:{cout << "accountant\n";break;}
case executive:{cout << "executive\n";break;}
case researcher:{cout << "researcher\n";break;}
    };
cout << "2-nd employee " <<  empl_2.empl << ", " << empl_2.salary << "$, " << empl_2.data.day << ch << empl_2.data.month << ch << empl_2.data.year << " date of employment, " << endl;
cout << "post" << endl;
 switch(empl_2.post)
    {
case laborer:{cout << "laborer\n";break;}
case secretary:{cout << "secretary\n";break;}
case manager:{cout << "manager\n";break;}
case accountant:{cout << "accountant\n";break;}
case executive:{cout << "executive\n";break;}
case researcher:{cout << "researcher\n";break;}
    };
cout << "3-rd employee " <<  empl_3.empl << ", " << empl_3.salary << "$, " << empl_3.data.day << ch << empl_3.data.month << ch << empl_3.data.year << " date of employment, " << endl;
cout << "post" << endl;
 switch(empl_3.post)
    {
case laborer:{cout << "laborer\n";break;}
case secretary:{cout << "secretary\n";break;}
case manager:{cout << "manager\n";break;}
case accountant:{cout << "accountant\n";break;}
case executive:{cout << "executive\n";break;}
case researcher:{cout << "researcher\n";break;}
    };
system ("pause");
return 0;
}

    {
    case laborer:{cout << "laborer\n";break;}
    case secretary:{cout << "secretary\n";break;}
    case manager:{cout << "manager\n";break;}
    case accountant:{cout << "accountant\n";break;}
    case executive:{cout << "executive\n";break;}
    case researcher:{cout << "researcher\n";break;}
    };
system ("pause");
return 0;
}




8)    




#include <iostream>
#include <iomanip>
using namespace std;
struct fraction
{
int numerator;
int denominator;
};
int main()
{
fraction f1, f2;
char charvar = '/';
cout << "enter 1-st fraction" << endl;
cin >> f1.numerator >> charvar >> f1.denominator;
cout << "enter 2-nd fraction" << endl;
cin >> f2.numerator >> charvar >> f2.denominator;
cout << (f1.numerator * f2.denominator) + (f1.denominator * f2.numerator) << charvar << f1.denominator * f2.denominator << endl;
  system ("pause");
return 0;                                                    
}




9)





#include "stdafx.h"
#include <iostream>
using namespace std;
struct Time
{
int hours;
int minutes;
int seconds;
};
int main()
{
Time t1;
cout << "Enter the time through the gap (hours, minutes, seconds)" << endl;
cin >> t1.hours >> t1.minutes >> t1.seconds;
long totalsecs = (t1.hours * 3600) + (t1.minutes * 60) + t1.seconds;
cout << "number of seconds: " << totalsecs << endl;
system ("pause");
return 0;                                                    
}



10)





#include "stdafx.h"
#include <iostream>
using namespace std;
struct sterling
{
int pounds;
int shilling;
int pens;
};
int main()
{
sterling newp, oldp;
char ch = '.';
int sumpens;
cout << "Enter decimal pounds" << endl;
cin >> newp.pounds >> ch >> newp.pens;
sumpens = ((newp.pounds * 100) + newp.pens) * 2.4;
newp.pounds = sumpens/(20*12);
newp.shilling = sumpens % (20*12)/12;
newp.pens = sumpens%(20*12)%12;
cout << "Old pounds: J" << newp.pounds << ch << newp.shilling << ch << newp.pens << endl;
system ("pause");
return 0;                                                    
}



11)






#include "stdafx.h"
#include <iostream>
using namespace std;
struct Time
{
int hours;
int minutes;
int seconds;
};
int main()
{
Time t1, t2, tsum;
char ch;
cout << "Enter the 1-st time (hours. minutes. seconds)" << endl;
cin >> t1.hours >> ch >> t1.minutes >> ch >>  t1.seconds;
cout << "Enter the 2-nd time (hours. minutes. seconds)" << endl;
cin >> t2.hours >> ch >> t2.minutes >> ch >>  t2.seconds;
long totalsecs = ((t1.hours * 3600) + (t1.minutes * 60) + t1.seconds) + ((t2.hours * 3600) + (t2.minutes * 60) + t2.seconds);
tsum.hours = totalsecs/(60*60);
tsum.minutes = totalsecs % (60*60)/60;
tsum.seconds = totalsecs % (60*60) % 60;
cout << "Time: " << tsum.hours << ch << tsum.minutes << ch << tsum.seconds << endl;
system ("pause");
return 0;                                                    
}





12)



#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
struct fraction
{
int numerator;
int denominator;
};
int main()
{
fraction f1, f2, sumf;
char ch = '/', zn;
do
{
cout << "enter 1-st fraction" << endl;
cin >> f1.numerator >> ch >> f1.denominator;
cout << "Enter symbol" << endl;
cin >> zn;
cout << "enter 2-nd fraction" << endl;
cin >> f2.numerator >> ch >> f2.denominator;
switch (zn)
{
case '+': sumf.numerator =f1.numerator * f2.denominator + f1.denominator * f2.numerator;
sumf.denominator = f1.denominator * f2.denominator; break;
case '-':  sumf.numerator = f1.numerator * f2.denominator - f1.denominator * f2.numerator;
sumf.denominator = f1.denominator * f2.denominator; break;
case '*': sumf.numerator = f1.numerator * f2.denominator;
sumf.denominator = f1.denominator * f2.denominator; break;
case '/': sumf.numerator = f1.numerator * f2.denominator;
sumf.denominator = f1.denominator * f2.numerator; break;
}
cout << sumf.numerator << ch << sumf.denominator << endl;
cout << "esche raz? (y,n)" << endl;
cin >> ch;
}
while (ch != 'n');
return 0;                                                    
}

Комментарии

  1. В задаче 11 забыли значение переменной totalsecs разделить на два перед обратным переводом в час.мин.сек. Объяснять зачем не буду (долго писать), скомпилируйте и сами поймете.

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

ВОПРОС К ЧИТАТЕЛЯМ

Уважаемые читатели моего блога и просто проходящие мимо! У меня появилась идея заняться созданием уроков по интересующим вас темам. Предпочтительно на C++, но не ограничиваясь ими, я хочу поделиться своими знаниями не только в виде готового кода но и подробными объяснениями что к чему. Прошу вас, если вы имеете идею и хотели бы разобраться в какой-то теме - отпишитесь в комментариях, что было бы вам интересно. Постараюсь помочь. 

7 глава, Лафоре Р

*1. Напишите функцию reversit(), которая переворачивает строку (массив типа char). Используйте цикл for, который меняет местами первый и последний символы, затем следующие и т. д. до предпоследнего. Строка должна пере- даваться в функцию reversit() как аргумент. Напишите программу для выполнения функции reversit(). Программа долж- на принимать строку от пользователя, вызывать функцию reversit(), а за- тем выводить полученный результат. Используйте метод ввода, который позволяет использовать внутренние пробелы. Протестируйте программу на примере фразы «Аргентина манит негра».

6 глава, Лафоре Р

*1. Создайте класс Int, имитирующий стандартный тип int. Единственное поле этого класса должно иметь тип int. Создайте методы, которые будут устанавливать значение поля, равным нулю, инициализировать его целым значением, выводить значение поля на экран и складывать два значения типа Int. Напишите программу, в которой будут созданы три объекта класса Int, два из которых будут инициализированы. Сложите два инициализирован- ных объекта, присвойте результат третьему, а затем отобразите результат на экране.