Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_ПВМ.doc
Скачиваний:
5094
Добавлен:
21.02.2016
Размер:
2.79 Mб
Скачать

Рекомендуемая литература.

1осн[425-444],2осн[437-450], 5доп[51-54],6доп[235-242], 8доп[16-23]

Тема 15. Алгоритмизация графических построений.

Форма проведения: Решение задач.

Задание 1. Задав конкретную функцию F(x), построить на символьном экране дисплея ее график и графически найти все возможные решения, не применяя никаких численных методов. При реализации учесть, что вид функции и интервал могут быть любыми (в конкретных вариантах задан тестовый интервал и значение корня на этом интервале – для проверки правильности построения графика данной функции).

Варианты заданий:

  1. F(x) = 3*sin + 0.35*x- 3.8. На интервале [2,3] ответ:x=2.2985.

  2. F(x) = -cos. На интервале [0,1] ответ:x=0.4538.

  3. F(x) =x- 2 +sin . На интервале [1.2,2] ответ:x=1.3077.

  4. F(x) =x*tgx- . На интервале [0.2,1] ответ:x=0.5472.

  5. F(x) =x*x-ln(1+x) - 3. На интервале [2,3] ответ:x=2.0267.

Задание 2. Используя константы, процедуры и функции графической библиотеки, реализовать следующие визуальные эффекты.

Варианты заданий:

  1. Движение планеты (планет) вокруг солнца.

  2. Запуск ракеты в космос.

  3. Растущий цветок.

  4. Домик, у которого открываются и закрываются окна и двери.

  5. Бег ежа с яблоком и грибами на спине.

Методические рекомендации по проведению СРСП.

Контрольный пример 1. Построить кривую Астроида по заданному параметрическому представлению (параметрическое представление кривой l на плоскости с координатами x, y – это две функции , определенные на одном и том же числовом множестве) (рисунок 13):,.

Контрольный пример 2. Изобразить на экране движение прямоугольника.

/* пример 1 */

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

main()

{

int gdriver = DETECT, gmode, errorcode;

int b,x,y; float t;

initgraph(&gdriver, &gmode, "");

errorcode = graphresult();

if (errorcode != grOk)

{

printf("Graphics error: %s\n",

grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);

}

setbkcolor(WHITE);

setcolor(BLUE);

line(getmaxx()/2,0,getmaxx()/2,getmaxy());

line(0,getmaxy()/2,getmaxx(),getmaxy()/2);

t=0; b=150;

while (t<=2*M_PI)

{

x=ceil(b*pow(cos(t),3));

y=ceil(b*pow(sin(t),3));

x+=getmaxx()/2; y=getmaxy()/2-y;

putpixel(x,y,61);

t+=0.00001;

}

getch(); closegraph(); return 0;

}

/* пример 2 */

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <dos.h>

main()

{

int gdriver = DETECT, gmode, errorcode;

int i;

float t;

initgraph(&gdriver, &gmode, "");

errorcode = graphresult();

if (errorcode != grOk)

{

printf("Graphics error: %s\n",

grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);

}

setbkcolor(WHITE);

setcolor(BLUE);

for(i=1;i<=600;i++)

{

setcolor(GREEN);

rectangle(i,200,i+100,250);

delay(10);

setcolor(WHITE);

rectangle(i,200,i+100,250);

}

getch();

closegraph();

return 0;

}

Тестовые задания для самоконтроля с указанием ключей правильных ответов

1. Назовите директиву препроцессора для определения констант

A) #include B) #define C) typedef D) union E) extern

2. Выберите спецификатор преобразования для вывода значений с плавающей точкой

A) %f B) %d C) %x D) %o E) %u

3. Выберите правильный вариант фрагмента для решения задачи

A) ;

B) ;

C) ;

D) ;

E) ;

4. Выберите правильный вариант фрагмента для решения задачи .

A) if (x>-2 & x<5) f=5pow(x,2)+6 else if (x>=5) f=pow(x,3)+7;

B) if (x>-2 && x<5) f=5*pow(x,2)+6; else if (x>=5) f=pow(x,3)+7;

C) if (x>-2 || x<5) f=5*sqr(x)+6; else if (x>=5) f=pow(3,x)+7;

D) if (x>-2 ! x<5) f=5*pow(x,2)+6 else if (x>=5) f=pow(3,x)+7;

E) if (x>-2) && (x<5) f=5*sqr(x)+6; else if (x>=5) f=pow(x,3)+7;

5. Выберите правильное описание условного оператора для решения задачи: даны x и y, если отрицательно одно из них, то числа увеличить на 0,5

A) if ( x<0 & y<0) {x+=0.5; y+=0.5;}

B) if ( x<0 || y<0) {x+=0.5; y+=0.5;}

C) if ( x<0 && y<0) {x+=0.5; y+=0.5;}

D) if ( x<0 ! y<0) {x+=0.5; y+=0.5;}

E) if ( x<0 || y<0) x+=0.5; y+=0.5;

6. Выберите правильное описание цикла WHILE для решения задачи:

A) k=p=f=1;

while (k<=n)

{ f*=k;

p*=(1+sin(k*x)/f);

k--;}

B) k=p=f=1;

while k<=n

{ f*=k;

p*=(1+sin(k*x)/f);

k++;}

C) k=p=f=1;

while (k<=n)

{ f*=k;

p*=(1+sin(k*x)/f);

k++;}

D) k=p=f=1;

while (k<=n)

f*=k;

p*=(1+sin(k*x)/f);

k++;

E) k=p=f=1;

while (k<=n)

{ f*=k;

p*=(1+sin(k*x)/f*k);}

k++;

7. Какой из вариантов использования оператора DOWHILEявляется правильным?

A) k=15; x=1;

do

{ x*=5;

printf(“%d”,x);}

while (k-->=7);

B) k=15; x=1;

do

{ x*=5;

printf(“%d”,x);}

while (k--<=7);

C) k=15; x=1;

do

{ x*=5;

printf(“%d”,x);}

while (k>=7);

D) k=15; x=1;

do

x*=5;

printf(“%d”,x);

while (k-->=7);

E) k=15; x=1;

do

{ x*=5;

printf(“%d”,x);}

while(k++>7);

8. Что будет напечатано в результате выполнения следующей программы

main()

{int i=5,p=1;

while (--i>1) p*=i;

printf("i=%d, p=%d\n", i, p);}

A) i=1, p=120 B) i=1, p=24 C) i=0, p=24 D) i=24, p=1 E) i=0, p=120

9. Что будет напечатано в результате выполнения следующей программы

main()

{int a=20,b=3,c=4,x,y,z;

x=a++;

y=!(++b<c);

z=x--+y;

printf("x=%d, y=%d, z=%d", x, y, z); }

A) x=20, y=1, z=22 B) x=19, y=1, z=21 C) x=19, y=0, z=20

D) x=19, y=1, z=20 E) x=20, y=0, z=20

10. Что будет напечатано программой с использованием указателей массивов (где 65410 и 65426 - начальные адреса массивов a[2] иb[2])

main()

{int i, a[2],*pa;

short b[2],*pb;

pa=a; pb=b;

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

printf("указатели+%d: %u %u\n",i,pa+i,pb+i);}

A) указатели+0: 65410 65426

указатели+1: 65412 65434

B) указатели+0: 65410 65426

указатели+1: 65412 65428

C) указатели+0: 65410 65426

указатели+1: 65411 65428

D) указатели+0: 65410 65426

указатели+1: 65411 65427

E) указатели+0: 65410 65426

указатели+1: 65414 65430

11. Выберите правильный фрагмент программы для решения следующей задачи: даны целые числа x1, x2, x3, x4; вычислитьx1x4+x2x3+x3x2+x4x1

A) p=x; s=0;

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

s+=*(p+i)**(p+3);

B) p=x; s=1;

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

s*=*(p+i)**(p+3-i);

C) p=x; s=0;

for(i=1;i<=4;i++)

s+=*(p+i)**(p+3-i);

D) p=x; s=0;

for(i=1;i<=4;i++)

s+=*(p+i)**(p+3+i);

E) p=x; s=0;

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

s+=*(p+i)**(p+3-i);

12. Выберите правильный фрагмент программы для решения следующей задачи: даны целые числа a1,…,a10; вычислитьmin(a1+a6, a2+a7, a3+a8, a4+a9, a5+a10)

A) px=x; min=*px+*(px+5);

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

if (*(px+i)+*(px+5+i)<min) min=*(px+i)+*(px+5+i);

B) px=*x; min=*px+*(px+5);

for(i=1;i<10;i++)

if (*(px+i)+*(px+5+i)<min) min=*(px+i)+*(px+5+i);

C) px=x; min=*px+*(px+5);

for(i=1;i<10;i+=2)

if (*(px+i)+*(px+5+i)<min) min=*(px+i)+*(px+5+i);

D) px=x; min=*px+*(px+5);

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

if (*(px+i)+*(px+5-i)<min) min=*(px+i)+*(px+5-i);

E) px=x; min=*px+*(px+5);

for(i=1;i<5;i+=2)

if (*(px+i)+*(px+5-i)<min) min=*(px+i)+*(px+5-i);

13. Что будет напечатано следующей программой

int a[10]={2,4,5,7,8,6,3,12,19,9};

main()

{ int i, max=2;

for(i=0;i<10;i+=2)

if (a[i]>max) max=a[i];

printf(“%d”, max); }

A) 12B) 19C) 9D) 8E) 6

14. Что будет напечатано в результате выполнения следующей программы

main()

{int a[8]={5,-3,4,7,6,-2,9,12},i,k,s;

i=k=s=0;

while (a[i]%3!=0)

{s+=a[i]; k++; i++; }

printf("s=%d, k=%d",s,k); }

A) 14, 4 B) s=14, k=4 C) 5, 1 D) s=24, k=4 E)s=5,k=1

15. Укажите тип данных для описания данных целого типа без знака

A) long B) short C) char D) unsigned int E) double

16. Выберите правильный фрагмент ввода строковых данных str1,str2

A) scanf(“%s%s“, str1, str2); B) scanf(“%s%c“, &str1, &str2);

C) scanf(“%s%c“, str1, str2); D) scanf(“%c%c“, str1, str2);

E) scanf(“%u%u“, str1, str2);

17. Укажите из приведенных ниже операций операцию с наименьшим приоритетом

A) &&B) !!C) <=D) = =E) !

18. Выберите операцию доступа к элементу структуры при помощи указателя

A) >> B) -> C) << D) & E) *

19. Что будет напечатано следующей программой

main()

{ staticinta[4][4]={{2,3,4,5};

{7,5,9,8};

{1,0,6,7};

{-2,4,5,3}; };

int i, k=0;

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

if (a[i][3-i]>0) k++;

printf(“%d”, k); }

A) 4B) 2C) 1D) 3E) 0

20. Выберите правильный результат выполнения следующей программы

main()

{ staticcharL[ ] = “Сведения о результатах сессии”;

puts(L);

flen(L,8);

puts(L); }

flen(char *stroka, int size)

{ if (strlen(stroka)>size )

*(stroka+size) = ‘\o’; }

A) Сведения о результатах сессии