25 ! ! нужно составить программу на языке с++! : реализовать программу «телефонный справочник» с использованием двусвязного списка требования к программе: ● максимальное количество записей в справочнике ограничено. ● каждый запись должна содержать следующую информацию: им 'я (до 10 символов включительно), фамилия (до 20 символов), номер телефона (до 12 цифр). все поля обязательно 'обязательными (не могут быть пустыми). ● ключевое поле - номер телефона (в справочнике может существовать только одна запись с указанным номером). ● структура хранения записей в справочнике - двозвьязний список. ● после запуска программа выводит на экран меню: 1. добавить запись 2. удалить запись 3. найти запись 4. показать все записи 5. сортировать записи 6. сохранить в файле 7. скачать с файла 8. выйти из программы и просит пользователя сделать выбор. ● после выбора пользователя программа при необходимости может пригласить дополнительную информацию (например, номер телефона для удаления записи). ● после выполнения операции по запросу пользователя программа сообщает о ее результат (успешное завершение или ошибка), просит пользователя нажать любую клавишу для продолжения. затем снова выводит на экран меню. ● для удаления записи необходимо указать номер телефона. ● для поиска записи необходимо указать фамилию или номер телефона. ● сортировка записей выполняется по фамилии и имени. ● имя 'я файла для хранения данных справочника - phone.dat программа должна контролировать ввода пользователем и хранить работо при введении сознательно неверных данных (например, слишком длинной строки как имени или неразрешенных символов в номере телефона).
{Программа
СВОБОДНЫЕ КОЛЕБАНИЯ КРУГОВОГО МАТЕМАТИЧЕСКОГО МАЯТНИКА}
Program Math_01;
{Подключение модулей подпрограмм}
Uses Crt, Graph;
{Описание констант}
Const phi0=30; // Начальный угол наклона маятника
w0=0; // Начальная угловая скорость маятника
l=400; // Длина нити
r=8; // Радиус груза
light=2; // Радиус блика
k=0.02; // Коэффициент сопротивления
m=1; // Масса груза
xp=320; // Координата x точки подвеса
yp=10; // Координата y точки подвеса
g=9.8; // Ускорение свободного падения
tau=0.4; // Шаг по времени
{Описание переменных}
Var x, y, xx, yy, w, eps, phi: Real;
{Процедура инициализации графического режима 640x480}
Procedure OpenGraph;
Var Driver, Mode, ErrorCode: Integer;
Begin
Driver:=Detect;
InitGraph(Driver, Mode, 'c:\bp\bgi');
ErrorCode:=GraphResult;
If ErrorCode <> grOK Then Halt(1);
End;
{Процедура исключения мерцаний изображений}
Procedure Glimmer;
Begin
Repeat
Until Port[$3da] And 8 <> 0;
End;
{Процедура вывода изображения маятника на экран}
Procedure Display;
Begin
Glimmer;
SetColor(Black);
SetFillStyle(SolidFill, Black);
Line(xp, yp, Round(xx), Round(yy));
FillEllipse(Round(xx), Round(yy), r, r);
SetLineStyle(SolidLn, 0, NormWidth);
SetColor(DarkGray);
Line(xp, yp, Round(x), Round(y));
SetLineStyle(SolidLn, 0, NormWidth);
SetColor(DarkGray);
SetFillStyle(SolidFill, DarkGray);
FillEllipse(Round(x), Round(y), r, r);
SetColor(LightGray);
SetFillStyle(SolidFill, White);
FillEllipse(Round(x)-3, Round(y)-3, light, light);
End;
{Основная часть программы}
Begin
OpenGraph;
SetFillStyle(SolidFill, DarkGray);
Bar(xp-20, yp-5, xp+20, yp-1);
phi:=phi0*Pi/180;
w:=w0;
x:=xp+l*sin(phi);
y:=yp+l*cos(phi);
Repeat
Begin
xx:=x;
yy:=y;
eps:=-k*w/m-g*sin(phi)/l;
w:=w+eps*tau;
phi:=phi+w*tau;
x:=xp+l*sin(phi);
y:=yp+l*cos(phi);
Display;
End;
Until KeyPressed;
CloseGraph;
End.
var
velichina_vklada, srok_vklada, godovaya_procentnaya_stavka: integer;
vklad_s_procentami: real;
vklad_s_procentami_rub, vklad_s_procentami_kop: integer;
dohod_rub, dohod_kop: integer;
begin
write('Величина вклада (р.) - ');
readln();
write('Срок вклада (дней) - ');
readln(srok_vklada);
write('Годовая процентная ставка (%) - ');
readln(godovaya_procentnaya_stavka);
vklad_s_procentami := velichina_vklada * ((real(100) + real(godovaya_procentnaya_stavka)*real(srok_vklada)/365)/100);
dohod_rub := (velichina_vklada - integer(vklad_s_procentami));
dohod_kop := (velichina_vklada*100 - integer(vklad_s_procentami*100)) mod 100;
vklad_s_procentami_rub := integer(vklad_s_procentami);
vklad_s_procentami_kop := integer((vklad_s_procentami*100)) mod 100;
writeln('Доход: ', dohod_rub,' р. ', dohod_kop, ' 80 коп.');
writeln('Сумма по окончании срока вклада: ', vklad_s_procentami_rub, ' р. ', vklad_s_procentami_kop, ' коп.');
end.