Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ИНФОРМАТИКА_2009.doc
Скачиваний:
17
Добавлен:
02.06.2015
Размер:
1.08 Mб
Скачать

Задание 10. Перечисления структуры и объединения

В результате выполнения задания должны быть разработаны алгоритм и программа управляемая с помощью меню Для организации меню необходимо использовать тип-перечисление и переключатель switch, в действиях с комплексными числами (первая часть задания) - тип-структура а для вычисления периметров площадей и объемов фигур и тел (вторая часть задания) – тип-объединение. Для фигуры вычисляются периметр и площадь, для тела – площадь поверхности и объём.

1

Возведение в целую степень

Квадрат тетраэдр

2

Деление двух чисел

Круговое кольцо додекаэдр

3

Умножение двух чисел

Треугольник усеч пирамида

4

Сложение и вычитание

Трапеция клин

5

Нахождение модуля числа

Равнобочная трапеция октаэдр

6

Нахождение аргумента числа

Прав. двадцатиуг-к шар. сектор

7

Извлечение квадратного корня

Трапеция параллелепипед

8

Возведение в дробную степень

Прямоугольник шар сегмент

9

Решение квадратного уравнения

Равностор. треуг-к прав. призма

10

Извлечение кубического корня

Сегмент пятиугольная пирамида

11

Возведение в квадрат

Параллелограмм цилиндр. труба

12

Возведение в куб

Сектор круговой конус

13

Возведение в целую степень

Круговое кольцо обелиск

14

Деление сопряженных чисел

Прав.семиугольник усеч. конус

15

Умножение

Правпятиуг-кусеч. круг. цилиндр

16

Умножение сопряженных чисел

Сегмент прав. пятиуг. призма

17

Нахождение модуля

Сектор шаровой слой

18

Нахождение аргумента

Часть круг. кольца усеч тетраэдр

19

Умножение трех чисел

Прав шестиугольник шар

20

Возведение в дробную степень

Прав. десятиуг-к шар сегмент

21

Извлечение квадратного корня

Прав восьмиуг-к прямая призма

22

Решение квадратного уравнения

Прямоугольник квадратная труба

23

Сложение и умножение

Равнобедр. треугольник конус

24

Извлечение кубического корня

Параллелограмм шарсектор

25

Вычитание и деление

Квадрат бочка

26

Умножение равных чисел

Сегмент прямоугольная труба

27

Деление двух чисел

Сектор усеченный конус

28

Решение квадратного уравнения

Ромб цилиндрическая труба

29

Умножение трех чисел

Вписанный четырехуг-к конус

30

Нахождение аргумента и модуля

Сегмент шаровой сегмент

Задание 11. Работа с экраном в текстовом режиме

Ниже дана программа которая до нажатия Esc повторяет действия: случайным образом выбирает размеры (соотношение 25х80) и положение окна на экране закрашивает его в случайный цвет помещает в него двойную рамку и текст “Привет!” со случайным цветом и включает источник звука со случайной частотой Все окна полностью размещаются на экране Задание: после нажатия Esc программа модифицируется по варианту а при повторном нажатии Esc прекращает свою работу

#include<iostream.h>

#include<conio.h>

#include<stdlib.h>

#include<dos.h>

char text[]="Привет!";

unsigned int textlen=7, //размер текста

pause=500, //задержка в мсек

maxx=80, maxy=25, //гориз. и верт. размеры экрана

x1, y1, x2, y2, background, color, setblink, freq;

void doubleframe(); //функция формирования двойной рамки

void main()

{

unsigned int minlen;

minlen=textlen+6; //минимальный размер окна по горизонтали

textbackground(0);

clrscr();

do{ //формирование окна

x1=1+random(maxx-minlen); //координата левого верхнего угла

x2=minlen+random(maxx-x1-minlen);//горизонтальный размер окна

y2=x2*maxy/maxx; //вертикальный размер окна

y1=1+random(maxy-y2); //координата левого верхнего угла

window(x1,y1,x1+x2-1,y1+y2-1);

background=random(8); //цвет фона

color=random(16); //цвет символов

setblink=random(2); //мигание

textbackground(background);

clrscr();

textcolor(color+setblink*128);

gotoxy((x2-textlen)/2+1,(y2-1)/2+1);

cout<<text;

doubleframe();

switch (background){ //частота звука связывается с цветом фона

case 0: freq=262;break; //До

case 1: freq=294;break; //Ре

case 2: freq=330;break; //Ми

case 3: freq=349;break; //Фа

case 4: freq=392;break; //Соль

case 5: freq=440;break; //Ля

case 6: freq=494;break; //Си

case 7: freq=524;break;}//До

sound(freq);

delay(pause);

nosound();

}while(!kbhit()); //цикл до нажатия клавиши

window(1,1,80,25); //полный размер экрана

textbackground(0);

textcolor(7);

clrscr();

}

void doubleframe() //формирование двойной рамки

{

int i;

gotoxy(2,1);

cout<<'╔'; //левый верхний угол рамки

for(i=3;i<=x2-2;i++)cout<<'═'; //верхняя часть рамки

cout<<'╗'; //правый верхний угол рамки

for(i=2;i<=y2-1;i++){

gotoxy(2,i);cout<<'║'; //боковые

gotoxy(x2-1,i);cout<<'║';} //части рамки

gotoxy(2,y2);cout<<'╚'; //левый нижний угол рамки

for(i=3;i<=x2-2;i++)cout<<'═'; //нижняя часть рамки

cout<<'╝'; //правый нижний угол рамки

}

  1. Окно всегда находится в центре экрана

  2. Окно из левого нижнего угла экрана движется в правый верхний угол экрана а затем скачком перемещается в левый нижний угол

  3. Окно из правого нижнего угла экрана движется в левый верхний угол экран, а затем движется обратно.

  4. Цвета фона не должен совпадать с цветом рамки и текста

  5. Текст из правого нижнего угла окон движется в левый верхний, а затем скачком – обратно.

  6. Текст заключить в одинарную рамку если цвет фона совпадет с цветом текста

  7. Окно из центра экрана движется в левый нижний угол экрана а затем - обратно

  8. Цвет символов изменяется по задаваемому закону

  9. Задать закон изменения площади окна

  10. Задать законы изменения цвета фона и цвета рамки

  11. Окно находится в верхней половине экрана и движется справа налево а затем скачком - обратно

  12. Связать законы изменения цвета фона и цвета символов

  13. Окно находится в нижней половине экрана и движется слева направо а затем - обратно

  14. Текст случайным образом перемещается в окне

  15. В окне находятся два удаляющихся друг от друга текста Достигнув границ окна они соединяются

  16. Размер строки с текстом изменяется пропорционально размеру окна по горизонтали

  17. В окне находятся два приближающихся друг к другу текста Соединившись раздвигаются до границ окна

  18. В каждый момент времени на экране видны только два окна

  19. Цвет текста не изменяется и текст всегда виден

  20. Вид рамки определяется цветом символов текста

  21. Окно располагается в левой половине экрана и движется сверху вниз а затем обратно

  22. Окно располагается в правой половине экрана и движется снизу вверх а затем обратно

  23. Текст движется вдоль рамки

  24. Текст движется по диагонали внутри окна а затем обратно

  25. Окно движется по прямой со случайным наклоном Достигнув границы окна движется обратно по другой прямой с другим случайным наклоном

  26. Направления движения окна и текста в окне противоположны

  27. Окно перемещается по вертикали а текст - по горизонтали

  28. На экране только два окна: одно - в левой части экрана другое - в правой

  29. Цвет рамки и цвет символов изменяются по разным законам

  30. Цвет рамки определяется размером окна по вертикали

ЗАДАНИЕ 12. РАБОТА С ЭКРАНОМ В ГРАФИЧЕСКОМ РЕЖИМЕ

Написать программу которая строит графики функции y=f(x,a) на интервале c x d аргумента x при значениях параметра a, взятых из интервала e a f отрисовывает сетку и оси, обозначает и оцифровывает оси снабжает графики пояснениями (выражение для функции, значений параметра с указанием связи с соответствующей кривой) и удовлетворяет требованию наиболее полного использования экрана.

N

y = f (x,a)

c

d

e

f

1

y = sin(3x)/(a+x)

0

0

3

2

y = cos(2x)/(a+x)

0

1

4

3

y = cos(3x)/ (ax2+1)

0

0

4

4

y = (1+ax)2/(1+x2)

-10

10

-5

5

5

y = ax2+3x-1

-2

1

0

4

6

y = (ax/2)sin(3x)

0

3/2

1

3

7

y = exp(-ax/2)sin(3x)

0

3/2

1

5

8

y = (1-exp(-ax))sin(2x)

0

3/2

0

3

9

y = 2x2-ax-1

-1

2

0

2

10

y = exp(-ax/2)cos(3x)

0

2

1

3

11

y = exp(-x/2)/(1-a sin(3x))

0

0.5

2

12

y = (1-exp(-ax))sin(3x)

0

3/2

0

3

13

y = exp(-ax/2)sin(2.5x)

0

3

0

2

14

y = exp(-ax2/2)cos(1.5x)

0

0

2

15

y = x2+ax+3

-1

3

0

3

16

y = (x/a)2exp(2(1-x/a))sin(2x)

0

3

2

7

17

y = (x/3) a exp(a(1-x/3))sin(2x)

0

3

1

3

18

y = ax2-5x+1

0

6

0

3

19

y = ax3-x2+3x-2

1

5

0

2

20

y = x a exp(a(1-x))sin(2x)

0

2

0

3

21

y = -ax2-5x+a

-10

10

0

10

22

y = (1-exp(-ax))sin(x)+x a

0

6

0.5

2

23

y = (x/2) a exp(a(1-x/2))sin(2x)

0

4

1

3

24

y = exp(ax) (1+x2)

0

10

0

0.5

25

y = sin(2x)/(a-sin(2x))

0

0

4

26

y = (1-exp(-x/a))cos(1.5x)

0

2

1

5

27

y = (exp(-ax)-1)sin(2x+0.5)

0

0

2

28

y = (x/2) a exp(a(1-x/2))sin(2x)

0

3

1

5

29

y = arctg(ax)+exp(ax)cos(x)

0

3

0.5

2.5

30

y = x arctg(x)+a - x

0

3

1

3

Пример

//Вывод на экран семейства кривых y=exp(-k*x)*sin(x),

//где 0 x  4 k=0.1*j, j=0,..,5;

#include<iostream.h>

#include<conio.h>

#include<stdlib.h>

#include<dos.h>

#include<math.h>

#include<graphics.h>

void init_graph() //функция инициализации графического режима

{ int gr_driver, //графический драйвер

gr_mode, //графический режим

er_code; //переменная для значения ошибки

gr_driver=DETECT; //автораспознавание драйвера

initgraph(&gr_driver,&gr_mode,"c:\\bc31\\bgi");

er_code=graphresult();

if(er_code!=grOk) //.., то произошла ошибка

{cout<<"Ошибка инициализации графики:"<<grapherrormsg(er_code);

exit(1);}

}

void main()

{ int i,j,

x0,y0, //начало координат

dx,dy; //шаги для сетки и оцифровки по осям X и Y

double x,y, //текущие значения аргумента и функции

k=0.1; //коэффициент в экспоненте функции

clrscr();

init_graph();

x0=20; y0=getmaxy()/2; //инициализация начала координат

setbkcolor(0);

dx=(getmaxx()-40)/4;

dy=(y0-20)/2;

setcolor(15);

for(i=0;i<=4;i++) //отрисовка сетки

{line(x0,20+i*dy,getmaxx()-20,20+i*dy);

line(x0+i*dx,20,x0+i*dx,getmaxy()-20);}

setlinestyle(0,0,3); //отрисовка осей,

// линия рисования – сплошная, в 3 пикселя толщиной

setcolor(2);

line(x0,20,x0,getmaxy()-20);

line(x0,y0,getmaxx()-20,y0);

settextstyle(0,0,2);

moveto(getmaxx()-30,y0-5);

settextjustify(RIGHT_TEXT,BOTTOM_TEXT);

//обозначение оси X слева и выше от указанной выше точки

outtext("x");

moveto(x0+5,20);

settextjustify(LEFT_TEXT,TOP_TEXT);

//обозначение оси Y справа и ниже от указанной выше точки

outtext("y");

settextjustify(CENTER_TEXT,TOP_TEXT);

settextstyle(DEFAULT_FONT,HORIZ_DIR,1);

setcolor(15);

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

{moveto(x0+i*dx,getmaxy()-20);

//оцифровка оси X по центру и ниже указываемых точек

switch(i)

{case 0: {outtext("0"); break;}

case 1: {outtext("M_PI"); break;}

case 2: {outtext("2M_PI"); break;}

case 3: {outtext("3M_PI"); break;}

case 4: {outtext("4M_PI"); break;}}

}

settextjustify(RIGHT_TEXT,CENTER_TEXT);

//оцифровка оси Y слева по центру от указанных ниже точек

settextstyle(DEFAULT_FONT,VERT_DIR,1);

setcolor(15);

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

{moveto(x0-5,20+i*dy);

switch(i)

{case 0: {outtext("1.0"); break;}

case 1: {outtext("0.5"); break;}

case 2: {outtext("0.0"); break;}

case 3: {outtext("-0.5"); break;}

case 4: {outtext("-1.0"); break;}}

}

getch();

setlinestyle(0,0,3);

settextstyle(DEFAULT_FONT,HORIZ_DIR,1);

for(j=0;j<=5;j++) //отрисовка семейства кривых

{moveto(x0,y0); //начальная точка кривых

setcolor(15-j); //установка цвета кривой

for(i=1;i<getmaxx()-40;i++) //отрисовка кривой

{x=i*4*M_PI/(getmaxx()-40);

y=exp(-k*j*x)*sin(x);

lineto(x0+i,y0-int(y*220));}

//вывод значения параметра функции на поле графиков

moveto(x0+dx/2,y0+20*(j+1));

switch(j)

{case 0: {outtext("k=0.0"); break;}

case 1: {outtext("k=0.1"); break;}

case 2: {outtext("k=0.2"); break;}

case 3: {outtext("k=0.3"); break;}

case 4: {outtext("k=0.4"); break;}

case 5: {outtext("k=0.5"); break;}}

getch();}

//вывод выражения функции на поле графиков

moveto(x0+3*dx/2,20+dy/2);

settextjustify(CENTER_TEXT,CENTER_TEXT);

settextstyle(SANS_SERIF_FONT,HORIZ_DIR,2);

outtext("y=exp(-kx)*sin(x)");

getch();

closegraph(); //графический режим закрыт

}