Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Создание движущихся изображений



Общим принципом создания движущихся изображений является рисование какого-либо объекта, закраска его цветом фона (стирание) и последующее рисование уже с новыми координатами. При этом необходимо отметить, что эффект движения возникает не всегда. Если частота появления

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

Ниже приведена программа, в которой организовано перемещение по экрану окружности, В данном случае частоту обновления изображения можно регулировать варьированием продолжительности задержки (time) и величины перемещения (delta), а также размером объекта – переменная radius (чем меньше радиус окружности, тем меньше времени необходимо на ее прорисовку). Перед выполнением примера скопируйте в свой каталог драйвер egavga. bgi;

Program Multik;

Uses Graph, Crt;

Var

X,у,dy,dx,time,delta,radius,Gd,Gm: integer;

Begin

Gd := Detect;

InitGraph(Gd,Gm,11)?{Включаем графический режим}

i f QraphReault <> grOk then Halt(l);

Rectangle(0,0,GetMaxX,GetMaxY);(Рисуем рамку вокруг экрана}

Xi=100; ys=100;{ Начальные координаты центра окружности}

deltas« 1 0 ;{ Зеличина перемещения }

dxssdelta;{ Зеличина перемещения по х }

dy:=delta;{ Величина перемещения по у }

radiusJ=15 ;{ Радиус окружности }

timetHlOOOO;{ Продолжительность задержки }

Repeat

SetColor( 1 5 ) ;{ Задание белого цвета ДЛИ ЛИНИЙ }

Circle (зс,у, radius) ;{ Рисование белой окружности}

{ Смена направления гьижения при достижении края экрана }

{ и включение звукового сигнала }

i f y>=GetMaxY-radius then{ Нижний край }



begin dy:=-delta; Sound(2000); end;

it y<=radiua then{ Верхний край }

begin dy: = delta; flound(30Q0) j end;

i f x>»GetMaxX-radius then (Правый край }

begin dx:=-delta; Sound(5000); end;

i f x<;=radiue then { ЛЕВЫЙ край }

begin dx:= delta; Sound(4000); end;

Delay(timet;{ Задержка выполнения программы }

NoSound;

SetColor(0);{ Задание черного цвета }

Circle(x,y,radius);{ Рисование черной окружности }

xs^x+dx; y:=y+dy;{ Расчет новых координат }

{ Цыход иэ программы при нажатта любой к.лаэии:и }

Ontil KeyPreased;

CloaseGraph; {Выход из г-рафическогс режима }

End.

Следующая программа рисует окружности, координаты которых, радиус и цвет определяются значениями функции синуса или косинуса. Параметры синусоид задаются случайными числами, поэтому образующаяся на экране фигура каждый раз будет отличаться от предыдущих. В первом цикле For присходиг прорисовка 200 окружностей различными цветами, а во втором закраска их черным цветом. Внутри первого цикла организована задержка с помощью процедуры Delay, для того чтобы между прорисовкой окружностей проходило некоторое время. Также задержка доставлена перед затиранием фигуры черным цветом. Завершение работы программы произойдет при нажатии любой клавиши.

Program Salut;

Uses Graph, Crt;

Var

n.j y,x, а,Ь, c, f, e, i , Gd, Gm: integer;



Begin

Randomize;{ Инициируем генератор случайных чисел }

Gd := Detect;

InitGraph (Gd, ara, 1 1 ) ;{Вклкчасм графический режим}

i f GraphSeault <> grOk then Halt(l);

y:=round(GetMaxY72);{ Координаты центра экрана }

xi=round(GetMaxX/2) ,-

n:=200;{ Количество повторов }

c:=50;

Repeat

a :=random(с)+10;

b: =randoni(c) + 10;

e:=5+random(20);

f:=random(12 0)г

For i:=l to n do

Begin

Delay(50);

SetColor<round(i/10)+1);

Circle(round!(y-i/e)*sin <i/a))+x,

round((у/2-i/e)*coa(i/b))+y,

f-round(c*ein(i/e)));

End;

Delay(65535);

for i:»l to n do

Begin

SetColor(0);

Circle (round ( (y-i/e) * sin (i/a) ) +x,

round((у/2-i/e)*cos(i/b)}+y,

f-round(c*sin(i/e)));

End;

Until KeyPreaaed;

CloeeGraph;

End.

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №16

HАИМЕНОВАНИЕ:Составление простейших программ на языке С++

1.ЦЕЛЬ РАБОТЫ: Изучить основы языка С++

2.ПОДГОТОВКА К ЗАНЯТИЮ:

2.1. Изучить предложенную литературу.

2.2. Подготовить бланк отчёта.

3.ЛИТЕРАТУРА:

3.1 Белов В.В., Чистякова В.И. Программирование в Delphi: процедурное, объектно-ориентированное, визуальное. Учебное пособие. – М.: Горячая линия – Телеком, 2009

3.2 Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. – Форум, 2010

3.3Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. – М.: Издательский центр «Академия», 2008

3.4Семакин И.Г., Шестаков А.П. Основы программирования. – М.: Издательский центр «Академия», 2008

 

4. ПЕРЕЧЕНЬ ОБОРУДОВАНИЯ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ:
4.1. Персональный IBM PC.

5.ЗАДАНИЕ:

5.1 При выполнении программы

•include <stdio.h>

void main()

{ floata,b,c;

intm,n;

skanf("%f%d%f%d%f",&a,&m,&b,&n,&c);

p r i n t f ( " \ n a = % 8 . 3 f d = % 7 . 2 f c = % 1 2 . 3 e " , a , b , c ) ;

printf("\nm=%10dn=%5d",m,n);

}

с клавиатуры была введена следующая символьная последовательность:

32.4 87 0.05 4567 2314.45 <Enter>

Как будет выглядеть на экране результат работы программы?

5.2 Приведенная ниже программа решает следующую задачу: идет к-я секунда суток. Определить, сколько целых часов (h) и целых минут (М) прошло с начала суток. Например, если к= 13257 = 3 х 36000 + 40 х 60 + 57, то h= 3, М= 40. Вывести на экран фразу: «Это...часов...минут». Вместо многоточий поставить вычисленные значения Ни М.

•include <stdio.h>

voidmain()

{long k;

Int h,m;

printf("Введите текущее время в секундах:");

scanf("%ld",&k) ;

h=k/3600;

m=(k%3600) /60;

printf("3TO %d часов %d минут.\n", h,m) ;

}

Разобрать, как работает данная программа. Переписать ее с использованием потокового ввода-вывода Си++.

5.3 Составить программу решения обратной задачи по отношению к предыдущей: дано количество часов и минут, прошедших от начала суток. Определить количество секунд.

5.4 Составить программу вычисления объема и площади поверхности куба по данной длине ребра.

5.5 Составить программу для вычисления корней квадратного уравнения.

6. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

6.1 По предложенной литературе изучить необходимый материал;

6.2 Выполнить задания практического занятия и записать листинг программы;

6.3 Дать ответы на контрольные вопросы;

7. СОДЕРЖАНИЕ ОТЧЕТА:

7.1 Наименование и цель работы

7.2 Код программы

7.3 Записать результат (листинг) выполненых заданий.

7.4 Ответы на контрольные вопросы

7.5 Вывод о проделанной работе

 

8. КОНТРОЛЬНЫЕ ВОПРОСЫ:

8.1 Структура программы?

8.2 Как производится вывод значений с клавиатуры (описать)?

8.3 Как производится ввод значений с клавиатуры (описать)?

8.4 Оператор выражения?

ПРИЛОЖЕНИЕ:

Структура программы.Общая структура программы на Си/Си++ следующая:

директивы_препроцессора

определение_функции_1

определение_функции_2

определение_функции_Ы

Среди функций обязательно присутствует главная функция с именем main.Простейшая программа содержит только главную функцию и имеет следующую структуру:

директивы_препроцессора

void main()

{ определения_объектов;

ислолняемые_операторы;

}

Пока мы будем составлять только простейшие программы такого вида. Рассмотрим все необходимые средства языка для составления линейных вычислительных программ. В качестве опорного примера рассмотрим программу для вычисления площади треугольника по формуле Герона.

Пример 1.Дано: а, Ь, с — стороны треугольника. Вычислить S —площадь треугольника. По формуле Герона:

S= -Jpip-aXp-bXp-c),

где р — полупериметр треугольника.

•include <stdio.h>

finclude <math.h>

voidmain()

{floata,b,c,p,s;

printf("\na="); scanf("%f",&a);

printf("\nb="); scanf("%f",&b);

printf("\nc=") ; scanf ("%f",&c);

p=(a+b+c)/2;

s=sqrt(p*(p-a)*(p-b)*(p-c));

printf("ХпПлощадь тpeyгoльникa=%f",s);

}

Разберемся более подробно, чем это делалось раньше, во всех элементах данной программы. Как уже было сказано, программа состоит из одной главной функции со стандартным именем main.

Слово void обозначает отсутствие какого-либо возвращаемого этой функцией результата, а пустые скобки — отсутствие у нее аргументов. Все, что следует после заголовка функции и заключено в фигурные скобки, можно назвать телом функции. Первая строка — объявление используемых переменных. Все они плавающего типа double. Обратите внимание на то, что объявление переменных заканчивается точкой с запятой.

Дальнейшая часть программы — исполняемые операторы. Среди них операторы вывода на экран, ввода данных с клавиатуры, операторы присваивания. Понятие «оператор» в Си трактуется следующим образом: любое выражение, после которого стоит точка с запятой, воспринимается компилятором как отдельный оператор. Оператор определяет законченное действие на очередном шаге выполнения программы. С точки зрения данного выше определения следующая конструкция в программе является оператором: i++;

Его называют оператором-выражением. Если вычисление выражения заканчивается присваиванием, то его можно назвать оператором присваивания. В рассматриваемой программе присутствуют два оператора присваивания: вычисления полупериметра (р) и вычисления площади треугольника (S). В выражении для вычисления площади используется библиотечная функция s q r t () — квадратный корень (как и в Паскале). Данная функция относится к библиотеке математических функций. Для подключения этой библиотеки к нашей программе используется директива препроцессора #include <math.h>. Здесь math.h — имя заголовочного файла этой библиотеки. В табл. 1 даны описания некоторых наиболее часто используемых функций математической библиотеки Си.

Т а б л и ц а 1

Математические функции (заголовочный файл math. h)

 

В рассматриваемой программе операторы p r i n t f (...) ; и scanf (...) ; реализуют соответственно вывод на экран и ввод исходных данных с клавиатуры. Они осуществляют обращение к соответствующим функциям стандартной библиотеки ввода-вывода Си, заголовочный файл которой имеет имя stdio.h.

Форматированный вывод на экран.Оператор вызова функции printf () имеет следующую структуру: printf(форматная_строка, список_аргументов);

Форматная строка ограничена двойными кавычками (т.е. является текстовой константой) и может включать в себя произвольный текст, управляющие символы и спецификаторы формата. Список аргументов может отсутствовать или же состоять из выражений, значения которых выводятся на экран (в частном случае из констант и переменных).

В примере 1 оператор printf ("\nа=") ; содержит текст ("а=") и управляющие символы ("\n"). Текст выводится на экран в том виде, в котором он записан. Управляющие символы влияют на расположение на экране выводимых знаков. В результате выполнения этого оператора на экран с новой строки выведутся символы а=. Признаком управляющего символа является значок \. Ниже приводится их список:

\n — перевод строки;

\ t — горизонтальная табуляция;

\ г — возврат курсора к началу новой строки;

\а — сигнал-звонок;

\Ь — возврат на один символ (одну позицию);

\f — перевод (прогон) страницы;

\ v — вертикальная табуляция.

Оператор printf ("ХпПлощадь треугольника=%.", s) ; содержит все виды параметров функции printf. Список аргументов состоит из одной переменной s. Ее значение выводится на экран.

Пара символов % f является спецификацией формата выводимого значения переменной s. Значок % — признак формата, а буква f указывает на то, что выводимое число имеет вещественный (плавающий) тип и выводится на экран в форме с фиксированной точкой. Например, если в результате вычислений переменная s получит значение 32,435621, то на экран выведется:

Площадь треугольника=32.435621

Спецификатор формата определяет форму внешнего представления выводимой величины. Вот некоторые спецификаторы формата:

%с — символ;

%s — строка;

%d — целое десятичное число (тип int);

%u — целое десятичное число без знака (тип unsigned);

%f — вещественные числа в форме с фиксированной точкой;

%е — вещественные числа в форме с плавающей точкой (с мантиссой и порядком).

Например, после выполнения следующих операторов

floatm,p;

intk ;

m=84.3; k=-12; p=32.15;

printf("\nm=%f\tk=%d\tp=%e",m, k,p) ;

на экран выведется строка:

m=84.299999 k=-12 p=3.21500e+01

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

К спецификатору формата могут быть добавлены числовые параметры:

ширина поля и точность. Ширина — это число позиций, отводимых на экране под величину, а точность — число позиций под дробную часть (после точки). Параметры записываются между значком % и символом формата и отделяются друг от друга точкой. Внесем изменения в оператор вывода для рассмотренного выше примера.

p r i n t f ( " \ n m = % 5 . 2 f \ t k = % 5 d \ t p = % 8 . 2 e \ t p = % l l . 4 e " , m , k , p , p ) ;

В результате на экране получим:

m=84.30 k= -12 р= 32.15 р= 3.2150е+01

Если в пределы указанной ширины поля выводимое значение не помещается, то этот параметр игнорируется и величина будет выводиться полностью.

К спецификаторам формата могут быть добавлены модификаторы

в следующих вариантах:

%ld — вывод long i n t;

%hu — вывод s h o r t unsigned;

%Lf — вывод long double.

Форматированный ввод с клавиатуры.Оператор вызова функции

scanf () имеет следующую структуру:

scanf(форматная_строка, список_аргументов);

Данная функция осуществляет чтение символов, вводимых с клавиатуры, и преобразование их во внутреннее представление в соответствии с типом величин. В функции scanf () форматная строка и список аргументов присутствуют обязательно. В программе из примера 1 имеется оператор:

scanf ("%f",&a);

Здесь "%f" - форматная строка; &a — список аргументов, состоящий из одного элемента. Этот оператор производит ввод числового значения в переменную а.

Символьную последовательность, вводимую с клавиатуры и воспринимаемую функцией scanf (), принято называть входным потоком. Функция scanf () разделяет этот поток на отдельные вводимые величины, интерпретирует их в соответствии с указанным типом и форматом и присваивает переменным, содержащимся в списке аргументов.

Список аргументов — это перечень вводимых переменных, причем перед именем каждой переменной ставится значок &. Это знак операции «взятие адреса переменной». Подробнее смысл этого действия будет объяснен позже, а пока примем это правило формально.

Форматная строка заключается в кавычки (как и для printf) и состоит из списка спецификаций. Каждая спецификация начинается со знака %, после которого могут следовать *ширина_поля модификатор спецификатор

Из них обязательным элементом является лишь спецификатор.

Для ввода числовых данных используются следующие спецификаторы:

d — для целых десятичных чисел (тип int);

и — для целых десятичных чисел без знака (тип unsigned int);

f — для вещественных чисел (тип float) в форме с фиксированной точкой;

е — для вещественных чисел (тип f l o a t ) в форме с плавающей точкой.

Звездочка в спецификации позволяет пропустить во входном потоке определенное количество символов. Ширина поля — целое положительное число, позволяющее определить число символов из входного потока, принадлежащих значению соответствующей вводимой переменной. Как и в спецификациях вывода для функции p r i n t f {), в спецификациях ввода функции scanf () допустимо использование модификаторов hf 1, L. Они применяются при вводе значений модифицированных типов:

hd — для ввода значений типа short int;

Id — для ввода значений типа long int;

If, le — для ввода значений типа double в форме с фиксированной и плавающей точкой;

Lf, Le — для ввода значений типа long double в форме с фиксированной и плавающей точкой.

В программе из примера 1 все три величины а, Ь, с можно ввести одним оператором:

scanf ("%f%f%f",&a,&b,&c);

Если последовательность ввода будет такой:

5 3.2 2.4 <Enter>

то переменные получат следующие значения: а = 5,0, 6 = 3,2,

с= 2,4. Разделителем в потоке ввода между различными значениями может быть любое количество пробелов, а также другие пробельные символы: знак табуляции, конец строки. Только после нажатия на клавишу Enterвводимые значения присвоятся соответствующим переменным. До этого входной поток помещается в буфер клавиатуры и может редактироваться.

Потоковый ввод-вывод в Си++.

Программируя на языке Си++, можно пользоваться средствами ввода-вывода стандартной библиотеки Си, подключаемой с помощью заголовочного файла stdio.h, как это делалось выше. Однако в Си++ имеются свои специфические средства ввода-вывода. Это библиотека классов, подключаемая к программе с помощью файла iostream.h. В этой библиотеке определены в качестве объектов стандартные символьные потоки со следующими именами:

cin — стандартный поток ввода с клавиатуры;

cout — стандартный поток вывода на экран.

Ввод данных интерпретируется как извлечение из потока cin и присваивание значений соответствующим переменным. В Си++ определена операция извлечения из стандартного потока, знак которой » . Например, ввод значений в переменную х реализуется оператором c i n » x ;

Вывод данных интерпретируется как помещение в стандартный поток cout выводимых значений. Выводиться могут тексты, заключенные в двойные кавычки, и значения выражений. Знак операции помещения в поток « . Примеры использования потокового вывода:

Из приведенных примеров видно, что в выходном потокеИз приведенных примеров видно, что в выходном потоке можно использовать управляющие символы, как и при использовании функции p r i n t f (); перед каждым элементом вывода нужно ставить знак операции « . Элемент вывода endl является так называемым манипулятором, определяющим перевод курсора на новую строку (действует аналогично управляющему символу \n). В процессе потокового ввода-вывода происходит преобразование из формы внешнего символьного представления во внутренний формат и обратно. Тип данных и необходимый формат определяются автоматически. Стандартные форматы задаются специальными флагами форматирования, которые устанавливаются с помощью функции setf О . Кроме того, на формат отдельных выводимых данных можно влиять путем применения специальных манипуляторов. Здесь мы не будем подробно разбирать эти вопросы. Перепишем программу из примера I в варианте с использованием потокового ввода-вывода Си++.

•include <iostream.h>

•include <math.h>

voidmain()

{floata,b,c,p,s;

cout«"\na="; cin»a;

cout«"\nb="; cin»b;

cout«"\nc="; cin»c;

p=(a+b+c) /2;

s = s q r t ( p * ( p - a ) * ( p - b ) * ( p - c ) ) ;

соut;«"\n Площадь треугольника="«з;

}__

 


ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №17

HАИМЕНОВАНИЕ:Составление и отладка программ с применением условных операторов

1.ЦЕЛЬ РАБОТЫ: Научится писать программы с использованием условных операторов

2.ПОДГОТОВКА К ЗАНЯТИЮ:

2.1. Изучить предложенную литературу.

2.2. Подготовить бланк отчёта.

3.ЛИТЕРАТУРА:

3.1 Белов В.В., Чистякова В.И. Программирование в Delphi: процедурное, объектно-ориентированное, визуальное. Учебное пособие. – М.: Горячая линия – Телеком, 2009

3.2 Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. – Форум, 2010

3.3Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. – М.: Издательский центр «Академия», 2008

3.4Семакин И.Г., Шестаков А.П. Основы программирования. – М.: Издательский центр «Академия», 2008

 

4. ПЕРЕЧЕНЬ ОБОРУДОВАНИЯ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ:
4.1. Персональный IBM PC.

5.ЗАДАНИЕ:

5.1Составить программу упорядочения по возрастанию значений в трех переменных.

5.2 Составить программу, которая выводит на экран меню:

1. Первое

2. Второе

3. Третье

и в зависимости от выбранного пункта выдает одну из надписей:

«Получите суп», «Получите картошку», «Получите компот», «Оставайтесь голодным». Написать два варианта программы: с использованием условного оператора if и с использованием переключателя.

5.3 Составить программу решения квадратного уравнения , учитывающую все возможные варианты исходных данных:

В каждом случае должно выводиться соответствующее решение или сообщение.

6. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

6.1 По предложенной литературе изучить необходимый материал;

6.2 Выполнить задания практического занятия и записать листинг программы;

6.3 Дать ответы на контрольные вопросы;

7. СОДЕРЖАНИЕ ОТЧЕТА:

7.1 Наименование и цель работы

7.2 Код программы

7.3 Записать результат (листинг) выполненых заданий.

7.4 Ответы на контрольные вопросы

7.5 Вывод о проделанной работе

 

8. КОНТРОЛЬНЫЕ ВОПРОСЫ:

8.1 Что такое ветвящейся алгоритм?

8.2 Выражение это?

8.3 Алгоритм с полными вложенными ветвлениями?

8.4 Оператор switch (описать)?

ПРИЛОЖЕНИЕ:

Для программирования ветвящихся алгоритмов в языке Си имеется несколько различных средств. К ним относятся рассмотренная выше операция условия - условный оператор if и оператор выбора switch.

Условный оператор.Формат условного оператора следующий:

if (выражение) оператор].; else оператор2;

Это полная форма оператора, программирующая структуру полного ветвления. Обычно выражение — это некоторое условие, содержащее операции отношения и логические операции. Значение выражения приводится к целому и интерпретируется в соответствии с правилом: равно нулю — ложь, не равно нулю — истина.

Если выражение истинно, выполняется оператор1, если ложно —оператор2.

Необходимо обратить внимание на следующие особенности синтаксиса условного оператора:

• выражение записывается в круглых скобках;

• точка с запятой после оператора 1 ставится обязательно.

Последнее обозначает, что правило Паскаля — не ставить точку с запятой перед else — здесь не работает.

Возможно использование неполной формы условного оператора if (выражение) оператор;

Вот пример использования полной формы условного оператора для нахождения большего значения из двух переменных а и Ь:

if(a>b) max=a; else max=b;

Та же самая задача может быть решена с использованием неполного ветвления следующим образом:

Напомним, что эту же задачу можно решить с помощью операции «условие» Теперь рассмотрим примеры программирования вложенных ветвящихся структур. Требуется вычислить функцию sign(x) — знак х, которая определена следующим образом:

Пример 1.Алгоритм с полными вложенными ветвлениями:

if(х<=0)

if(x==0) y=0;

e l s e у=-1;

e l s e у=1;

Пример 2. Алгоритм с неполным ветвлением:

у=1;

if(х<=0)

if(x==0) y=0;

e l s e y=-l;

Пример 3.Упорядочить по возрастанию значения в двух переменных

а, Ь:

Да

' '

с.-а

а:=Ь

Ь:=с

а>Ь Нет

if(a>b)

{с=а; a=b; b=c;}

c o u t « " a = " « a « " b = " « b ;

/Вывод a,b/

В данном примере использован составной оператор — последовательность операторов, заключенная в фигурные скобки. В Си фигурные скобки выполняют роль операторных скобок по аналогии с Begin, Endв Паскале.

Обратите внимание на то, что перед закрывающей фигурной скобкой точку с запятой надо ставить обязательно, а после скобки точка с запятой не ставится. В следующем примере вернемся к задаче вычисления площади треугольника по длинам трех сторон. Добавим в программу проверку условия правильности исходных данных: а, Ь, с должны быть положительными, а сумма длин каждой пары сторон треугольника должна быть больше длины третьей стороны .

Пример 4.

// Площадь треугольника

•include <iostream.h>

•include <math.h>

voidmain()

{floata,b,c,p,s;

cout«"\na="; cin»a;

cout«"\nb=";

cout«"\nc=";

if(a>0 && b>0

{ p=(a+b+c)/2;

s=sqrt(p*(p-a)*(p-b)*(p-c));

сои1;<<"\пПлощадь треугольника="«з;

cin»b;

cin»c;

&& c>0 && a+b>c && a+c>b && b+c>a)

}

elsecout("\n Неверные исходные данные.");

Оператор выбора (переключатель).Формат оператора выбора:

switch(целочисленное_выражение)

{ caseконстанта1: список_операторов;

caseконстанта2: список_операторов;

default:список_операторов;

}

Последняя строка (default) может отсутствовать.

Выполнение оператора происходит в следующем порядке:

1. Вычисляется выражение.

2. Полученное значение последовательно сравнивается с константами, помещенными после служебного слова case; при первом совпадении значений выполняются операторы, стоящие после двоеточия.

3. Если ни с одной из констант совпадения не произошло, то выполнятся операторы после слова default. Для того чтобы «обойти» выполнение операторов на последующих ветвях, нужно принять специальные меры, используя операторы выхода или перехода. Рассмотрим фрагмент программы, который переводит числовую оценку знаний ученика в ее словесный эквивалент. Согласно вузовской системе: 5 — «отлично», 4 — «хорошо», 3 — «удовлетворительно », 2 — «неудовлетворительно».

Пример 5.

#include <iostream.h>

voidmain()

{intball;

cout«"\nBBeflHTe оценку: "; cin»ball;

switch(ball)

{ case2: cout«"\t3To неудовлетворительно!^";

Break;

case3: cout«"\t3TO удовлетворительно! \n";

Break;

case4: cout<<"\t Это хорошо!\n"; break;

case5: cout«"\t3TO отлично !\n"; break;

default:cout<<"\tHeT такой оценки!\п";

}

}

Здесь используется еще один новый для нас оператор break— оператор выхода. Его исполнение завершает работу оператора выбора, т.е. происходит «обход» других ветвей. Вот два варианта результатов выполнения этой программы:

Введите оценку: 3 Это удовлетворительно!

Введите оценку: 7 Нет такой оценки!

Если на всех ветвях убрать оператор break, то результат может выглядеть следующим образом:

Введите оценку: 3 Это удовлетворительно!

Это хорошо!

Это отлично!

Нет такой оценки!

В этом случае выполнились операторы на всех ветвях, начиная с той, которая помечена константой 3. Возможны задачи, в которых такой порядок выполнения ветвей оператора выбора может оказаться полезным. В следующем фрагменте программы происходит возведение вещественного числа х в целую степень п, где п изменяется в диапазоне от 1 до 5.

у=1.0;

Switch(n)

{ case 5

Case 4

Case 3

Case 2

case1

y=y*x;

y=y*x;

y=y*x;

y=y*x; cout«"y="«y; break;

default:соиЪ«"Степень больше 5";__}

 


ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №18

HАИМЕНОВАНИЕ:Составление и отладка программ с применением операторов цикла

1.ЦЕЛЬ РАБОТЫ: Научится использовать циклические операторы

2.ПОДГОТОВКА К ЗАНЯТИЮ:

2.1. Изучить предложенную литературу.

2.2. Подготовить бланк отчёта.

3.ЛИТЕРАТУРА:

3.1 Белов В.В., Чистякова В.И. Программирование в Delphi: процедурное, объектно-ориентированное, визуальное. Учебное пособие. – М.: Горячая линия – Телеком, 2009

3.2 Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. – Форум, 2010

3.3Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. – М.: Издательский центр «Академия», 2008

3.4Семакин И.Г., Шестаков А.П. Основы программирования. – М.: Издательский центр «Академия», 2008

 

4. ПЕРЕЧЕНЬ ОБОРУДОВАНИЯ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ:
4.1. Персональный IBM PC.

5.ЗАДАНИЕ:

5.1 Используя циклы while, do - while и for, написать три варианта программы получения на экране таблицы синусов для значений аргумента в диапазоне от 0 до π/2 с заданным числом шагов.

5.2 Вычислить и вывести все члены числового ряда

значение которых превышает 10 в -5.

5.3 Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр.

6. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

6.1 По предложенной литературе изучить необходимый материал;

6.2 Выполнить задания практического занятия и записать листинг программы;

6.3 Дать ответы на контрольные вопросы;

7. СОДЕРЖАНИЕ ОТЧЕТА:

7.1 Наименование и цель работы

7.2 Код программы

7.3 Записать результат (листинг) выполненых заданий.

7.4 Ответы на контрольные вопросы

7.5 Вывод о проделанной работе

 

8. КОНТРОЛЬНЫЕ ВОПРОСЫ:

8.1 Зачем нужен фаил l i m i t s. h?

8.2 Когда программа будет «топтаться на месте»?

8.3 Что делает-« i++» ?

8.4 Отличие do ... while от repeat... u n t i l?

ПРИЛОЖЕНИЕ:

В Си, как и в Паскале, существуют все три типа операторов цикла: цикл с предусловием, цикл с постусловием и цикл с параметром.

Цикл с предусловием.Формат оператора цикла с предусловием:

while(выражение) оператор;

Цикл повторяет свое выполнение, пока значение выражения отлично от нуля, т. е. заключенное в нем условие цикла истинно.

В качестве примера использования оператора цикла рассмотрим программу вычисления факториала целого положительного числа N!. Сопоставим программу решения этой задачи, написанную

на Паскале, с программой на Си.

Обратите внимание на операторы в теле цикла. Конечно, и в Си-программе можно было написать два оператора присваивания, объединив их фигурными скобками. Однако использованный способ записи более лаконичен и более характерен для Си. Этот же самый оператор можно было записать еще короче: F*=i++ .

При практическом использовании этой программы не следует забывать, что факториал - очень быстро растущая функция, и поэтому при определенных значениях N выйдет из диапазона, соответствующего типу long int. Задав для переменной F тип unsigned long, можно сдвинуть эту границу, но этого может оказаться недостаточно. Предлагаем в качестве самостоятельного задания исследовать предельные значения N для двух указанных типов переменной F.

Интересно свойство следующего оператора: while (1);

Это бесконечный пустой цикл. Использование в качестве выражения константы 1 приводит к тому, что условие повторения цикла все время остается истинным и работа цикла никогда не заканчивается. Тело в этом цикле представляет собой пустой оператор. При исполнении такого оператора программа будет «топтаться на месте».

Рассмотрим еще один пример использования оператора цикла while.Вернемся к задаче итерационного вычисления суммы гармонического ряда: 1 +1/2+1/3+... с заданной точностью ε. Снова сопоставим программу на Си с программой на Паскале.

Файл l i m i t s . h, подключаемый препроцессором, содержит определения предельных констант для целых типов данных. В частности, константа с именем INT_MAX равна максимальному значению типа i n t в данной реализации компилятора. Если для типа int используется двухбайтовое представление, то INT_MAX=327 67.

В этом же заголовочном файле определены и другие константы:

INT_MIN=-327 68; LONG_MAX=2147483647 ИТ.Д.

Цикл с постусловием. Формат оператора цикла с постусловием:

do оператор while (выражение);

Цикл выполняется до тех пор, пока выражение отлично от Нуля, т.е. заключенное в нем условие цикла истинно. Выход из Цикла происходит после того, как значение выражения станет ложным, иными словами равным нулю. Таким образом, в отличие от оператора repeat... u n t i l ,используемого в Паскале, где в конце пишется условие выхода из цикла, в операторе do... while

в Си в конце пишется условие повторения цикла. В качестве примера рассмотрим программу вычисления N!, в которой используется цикл с постусловием, и сопоставим ее с аналогичной программой на Паскале.


ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №19

HАИМЕНОВАНИЕ:Вложенные циклы

1.ЦЕЛЬ РАБОТЫ: Научится применять вложенные циклы при программирование на C++

2.ПОДГОТОВКА К ЗАНЯТИЮ:

2.1. Изучить предложенную литературу.

2.2. Подготовить бланк отчёта.

3.ЛИТЕРАТУРА:

3.1 Белов В.В., Чистякова В.И. Программирование в Delphi: процедурное, объектно-ориентированное, визуальное. Учебное пособие. – М.: Горячая линия – Телеком, 2009

3.2 Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. – Форум, 2010

3.3Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. – М.: Издательский центр «Академия», 2008

3.4Семакин И.Г., Шестаков А.П. Основы программирования. – М.: Издательский центр «Академия», 2008

 

4. ПЕРЕЧЕНЬ ОБОРУДОВАНИЯ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ:
4.1. Персональный IBM PC.

5.ЗАДАНИЕ:

5.1 Дано целое п > 2. Напечатать все простые числа из диапазона [2,п].

5.2 Составить программу перевода целого десятичного числа в двоичную систему счисления.

5.3 Составить программу перевода целого десятичного числа в шестнадцатеричную систему счисления.

6. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

6.1 По предложенной литературе изучить необходимый материал;

6.2 Выполнить задания практического занятия и записать листинг программы;

6.3 Дать ответы на контрольные вопросы;

7. СОДЕРЖАНИЕ ОТЧЕТА:

7.1 Наименование и цель работы

7.2 Код программы

7.3 Записать результат (листинг) выполненых заданий.

7.4 Ответы на контрольные вопросы

7.5 Вывод о проделанной работе

 

8. КОНТРОЛЬНЫЕ ВОПРОСЫ:

8.1 Описать цикл с параметром?

8.2 Зачем нужен оператор continue?

8.3 Оператор goto?

8.4 Выход из цикла?

ПРИЛОЖЕНИЕ:

щие их точки с запятой обязательно должны присутствовать. В следующем примере инициализирующая часть вынесена из оператора

for:

F=l; i = l ;

for(;i<=N;i++) F=F*i;

Ниже показан еще один вариант вычисления N!. В нем на месте тела цикла находится пустой оператор, а вычислительная часть внесена в выражение 3.

for(F=l,i=l;i<=N;F=F*i,i++);

Этот же оператор можно записать в следующей форме:

for(F=l,i=l;i<=N;F*=i++) ;

В языке Си оператор forявляется достаточно универсальным средством для организации циклов. С его помощью можно программировать даже итерационные циклы, что невозможно в Паскале. Вот пример вычисления суммы элементов гармонического ряда, превышающих заданную величину е:

for(n=l,S=0;1.0/n>eps && n<INT_MAX;n++) S+=1.0/n;

И наконец, эта же самая задача с пустым телом цикла:

for(n=l,S=0;1.0/n>eps && n<INT_MAX;S+=l.0/n++);

Следующий фрагмент программы на Си++ содержит два вложенных цикла for. В нем запрограммировано получение на экране таблицы умножения.

for(х=2;х<=9;х++)

for(y=2;y<=9;y++)

c o u t < < " \ n " « x « " * " « y « " = "<<x*y;

На экране будет получен следующий результат:

2*2=4

2*3=6

9*8=72

9*9=81

Оператор continue.Если выполнение очередного шага цикла требуется завершить до того, как будет достигнут конец тела цикла, используется оператор continue.Следующий фрагмент программы обеспечивает вывод на экран всех четных чисел в диапазоне

от 1 до 100.

for(i=l;i<=100;i++)

{if(i%2) continue;cout«"\t"«i; }

Для нечетных значений переменной / остаток от деления на 2 будет равен единице, этот результат воспринимается как значение «истина» в условии ветвления, и выполняется оператор сontinue. Он завершит очередной шаг цикла, выполнение цикла перейдет к следующему шагу.

Оператор goto.Оператор безусловного перехода gotoсуществует в языке Си, как и во всех других языках программирования высокого уровня. Однако с точки зрения структурного подхода к программированию его использование рекомендуется ограничить. Формат оператора:

gotoметка;

Метка представляет собой идентификатор с последующим двоеточием, ставится перед помечаемым оператором. Одна из ситуаций, в которых использование gotoявляется оправданным — это необходимость «досрочного» выхода из вложенного цикла. Вот пример такой ситуации:

for(...)

{ while (...)

{ for(...)

{... gotoexit ...}

}

}

e x i t : cout«"Bыход из цикла";

При использовании оператора безусловного перехода необходимо учитывать следующие ограничения:

• нельзя входить внутрь блока извне;

• нельзя входить внутрь условного оператора (if ...else...);

• нельзя входить внутрь переключателя;

• нельзя входить внутрь цикла.

 


ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №20

HАИМЕНОВАНИЕ:Решение задач на одномерные массивы

1.ЦЕЛЬ РАБОТЫ: Научится использовать одномерные массивы при программирование на С++

2.ПОДГОТОВКА К ЗАНЯТИЮ:

2.1. Изучить предложенную литературу.

2.2. Подготовить бланк отчёта.

3.ЛИТЕРАТУРА:

3.1 Белов В.В., Чистякова В.И. Программирование в Delphi: процедурное, объектно-ориентированное, визуальное. Учебное пособие. – М.: Горячая линия – Телеком, 2009

3.2 Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. – Форум, 2010

3.3Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. – М.: Издательский центр «Академия», 2008

3.4Семакин И.Г., Шестаков А.П. Основы программирования. – М.: Издательский центр «Академия», 2008

 

4. ПЕРЕЧЕНЬ ОБОРУДОВАНИЯ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ:
4.1. Персональный IBM PC.

5.ЗАДАНИЕ:

5.1 Дан вектор {z,}', i = 1, ••-, 50. Вычислить длину этого вектора:

5.2 Вычислить полином 10-й степени по формуле Горнера:

й10х10+ а9х9+ ... + а{х + а0= ((...(ai0x + а9)х + д8)х + ... + а^х + a0.

5.3 Для вектора {х,}, / = 1, ..., 20, подсчитать количество компонент, значения которых лежат в интервале [0,1].

5.4 Даны два вектора {х,}, {у,}, / = 1, ..., 10, упорядоченные по возрастанию. Слить их в один вектор {z,), / = 1, ..., 20 так, чтобы сохранилась упорядоченность.

5.5 Дан массив, состоящий из 100 целых чисел.

а) Вывести все числа, которые встречаются в" этом массиве несколько раз.

б) Вывести все числа, которые встречаются в массиве только по одному разу.

6. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

6.1 По предложенной литературе изучить необходимый материал;

6.2 Выполнить задания практического занятия и записать листинг программы;

6.3 Дать ответы на контрольные вопросы;

7. СОДЕРЖАНИЕ ОТЧЕТА:

7.1 Наименование и цель работы

7.2 Код программы

7.3 Записать результат (листинг) выполненых заданий.

7.4 Ответы на контрольные вопросы

7.5 Вывод о проделанной работе

 

8. КОНТРОЛЬНЫЕ ВОПРОСЫ:

8.1 Массив это?

8.2 Операция sizeof де используется?

8.3 Где происходит объявление переменных?

8.4 Зачем нужен оператор c l r s c r?

ПРИЛОЖЕНИИ:

Понятие массива знакомо из Паскаля. Массив — это структура однотипных элементов, занимающих непрерывную область памяти. С массивом связаны следующие его свойства: имя, тип, размерность, размер. Формат описания массива следующий:

тип элементов имя [константное выражение]

Константное выражение определяет размер массива, т. е. числе элементов этого массива. Например, согласно описанию i n t A[10]; объявлен массив с именем А, содержащий 10 элементов целого типа. Элементы массива обозначаются индексированными именами. Нижнее значение индекса равно 0:

А [ 0 ] , А [ 1 ] , А [ 2 ] , А [ 3 ] , А [ 4 ] , А [ 5 ] , А [ 6 ] , А [ 7 ],

А [ 8 ] , А[9]

В отличие от Паскаля в Си нельзя определять произвольные диапазоны для индексов. Размер массива, указанный в описании, всегда на единицу больше максимального значения индекса.

Размер массива может явно не указываться, если при его объявлении производится инициализация значений элементов.

Например:

i n t p [ ] = { 2 , 4, б, 10, 1 };

В этом случае создается массив из пяти элементов со следующими значениями:

р [ 0 ] = 2 , р [ 1 ] = 4 , р [ 2 ] = б , р [ 3 ] = 1 0 , р [ 4 ] =1

В результате следующего объявления массива i n t М[б]={5, 3, 2 };

будет создан массив из шести элементов. Первые три элемента получат инициализированные значения. Значения остальных будут либо неопределенными, либо равны нулю, если массив внешний или статический. Рассмотрим несколько примеров программ обработки одномерных массивов.

Пример 1.Ввод с клавиатуры и вывод на экран одномерного массива.

//Ввод и вывод массива

tinclude <iostream.h>

•include <conio.h>

voidmain()

{ inti, A [ 5 ] ;

c l r s c r ( ) ;

f o r ( i = 0 ; i<5; i++)

{ c o u t « " A [ " « i « " ] = " ; c i n » A [ i ] ;}

f o r ( i = 0 ; i<5; i++)

c o u t « " A [ " « i « " ] = " « A [ i ] « "

}

Пример 2. Ввод вещественного массива и вычислениесреднего значения.

//Среднее значение массива

•include <iostream.h>

•include <conio.h>

voidmain()

{ constn=10;

int i; doubleA[n], SA;

clrscr () ;

for(i=0;i<n; i++) {cout«"A["«i«" ]=" ;

cin»A[i] ; }

SA=0;

for(i=0;i<n;i++) SA=SA+A[i];

SA=SA/n;

cout<<"/переднее значение="«SА;

}

В этой программе обратите внимание на определение размера массива через константу.

Пример 3.Сортировка массива «методом пузырька».

//Сортировка массива

•include <iostream.h>

•include <conio.h>

voidmain()

{ intX[]={6,4,9,3,2,1,5,7,8,10};

inti,j,n,A;

clrscr();

n=sizeof(X)/sizeof(X[0] ) ;

for(i=0;i<n-l; i++)

f o r ( j = 0 ; j < n - l - i ; j++)

i f ( X [ j ] > X [ j + l ] ) {A=X[j]; X [ j ] = X [ j + l ] ; X[j+1]=A;}

f o r ( i = 0 ; i<n; i++) c o u t « X [ i ] « " " ;

}

В данной программе массив инициализирован. Его размер равен числу заданных значений. Чтобы сделать программу универсальной по отношению к размеру массива, значение размера вычисляется автоматически и заносится в переменную n. Для этого используется операция sizeof () — определение размера в байтах. Результат sizeof (X) равен размеру в памяти всего массива х — 20 байтам. Результат sizeof (Х[0] ) равен размеру одного элемента массива — 2 байтам. Отношение этих величин равно 10 — числу элементов массива. Внимательно проанализируйте

организацию перебора значений параметров вложенных циклов — i , j .В результате выполнения этой программы на экран выведется упорядоченная числовая последовательность

1 2 3 4 5 6 7 8 9 10

 


ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №21

HАИМЕНОВАНИЕ:Решение задач по многомерным динамическим массивам

1.ЦЕЛЬ РАБОТЫ: Научится использовать двумерные массивы при программирование на С++

2.ПОДГОТОВКА К ЗАНЯТИЮ:

2.1. Изучить предложенную литературу.

2.2. Подготовить бланк отчёта.

3.ЛИТЕРАТУРА:

3.1 Белов В.В., Чистякова В.И. Программирование в Delphi: процедурное, объектно-ориентированное, визуальное. Учебное пособие. – М.: Горячая линия – Телеком, 2009

3.2 Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. – Форум, 2010

3.3Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. – М.: Издательский центр «Академия», 2008

3.4Семакин И.Г., Шестаков А.П. Основы программирования. – М.: Издательский центр «Академия», 2008

 

4. ПЕРЕЧЕНЬ ОБОРУДОВАНИЯ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ:
4.1. Персональный IBM PC.

5.ЗАДАНИЕ:

5.1 С помощью датчика случайных чисел заполнить двоичную матрицу 5x10. Определить номер строки с наибольшим количеством нулей.

5.2 Транспонировать целочисленную матрицу 5x5, т.е. отразить относительно главной диагонали.

5.3 В двоичной матрице 10х 10 найти совпадающие строки.

6. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

6.1 По предложенной литературе изучить необходимый материал;

6.2 Выполнить задания практического занятия и записать листинг программы;

6.3 Дать ответы на контрольные вопросы;

7. СОДЕРЖАНИЕ ОТЧЕТА:

7.1 Наименование и цель работы

7.2 Код программы

7.3 Записать результат (листинг) выполненых заданий.

7.4 Ответы на контрольные вопросы

7.5 Вывод о проделанной работе

 

8. КОНТРОЛЬНЫЕ ВОПРОСЫ:

8.1 В чем разница при объявление двумерных массивов в Паскале и Си?

8.2 Как инициализируются элементы массива?

8.3 Что такое –манипулятор?

8.4 Что делает функция – rand?

ПРИЛОЖЕНИЕ:

Многомерные массивы.Двумерный массив трактуется как одномерный массив, элементами которого является массив с указанным в описании типом элементов. Например, оператор f l o a tR[5][10]; объявляет массив из пяти элементов, каждый из которых есть массив из десяти вещественных чисел. Отдельные величины этого массива обозначаются именами с двумя индексами: R [ 0 ] [0], R [ 0 ] [ 1 ] , ..., R [ 4 ] [ 9]. Объединять индексы в одну пару скобок нельзя, т.е. запись R[2, 3] ошибочна. Пример описания трехмерного массива:

doubleX[3][7][20];

Как и в Паскале, порядок расположения элементов многомерного массива в памяти такой, что прежде всего меняется последний индекс, затем предпоследний и т.д., и лишь один раз пробегает свои значения первый индекс. При описании многомерных массивов их также можно инициализировать. Делать это удобно так:

i n t M[3][3]={ 11,12,13,21,22,23,31,32,33 };

Рассмотрим примеры программ обработки матриц — числовых двумерных массивов.

Пример 4.Вычисление и вывод на экран таблицы умножения в форме матрицы Пифагора.

// Матрица Пифагора

•include <stdio.h>

•include <conio.h>

voidmain()

{ inti,j, A[10][10];

clrscr ();

for(i=l;i<=9; i++)

{ for(j=l;j<=9; j++)

{ A[i][j]=i*j;

printf("%5d",A[i][j]);

}

printf ("\n");

}

}

По данной программе в двумерном массиве А не будут заполнены нулевая строка и нулевой столбец. По-прежнему интерпретируем первый индекс двумерного массива как номер строки матрицы, а второй индекс — как номер столбца.

Пример 5.Заполнение матрицы случайными числами в диапазоне

от 0 до 99 и поиск в ней максимального значения.

# i n c l u d e <iostream.h>

# i n c l u d e <iomanip.h>

# i n c l u d e <conio.h>

# i n c l u d e < s t d l i b . h>

#define n 5

v o i dmain()

{ i n ti , j , ImaxA,JmaxA,A[n] [ n ];

c l r s c r ( ) ;

r a n d o m i z e ( ) ; //Установка датчика случайных чисел

f o r ( i = 0 ;i<n; i++)

{ for(j=0;j<n; j++)

{ A[i] [j]=rand()%100;

cout<<setw(6) « A [ i ] [ j ];

}

c o u t « e n d l ;

}

ImaxA=JmaxA=0;

f o r ( i = 0 ;i<n; i++)

{ f o r ( j = 0 ; j<n; j++)

i f (A[i][j]>A[ImaxA][JmaxA])

{ ImaxA=i; JmaxA=j; }

}

соии<"Максимальное_значение: ["<<ImaxA«"] ["

<<JmaxA<<"]=" <<A[ImaxA][JmaxA];

}

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

результат:

46 23 57 35 18

8 48 68 4 70

56 98 16 71 40

70 84 66 67 11

20 44 37 57 38

Максимальное значение: А[2][1]=98

В данной программе имеются новые элементы, использование которых требует пояснения. В стандартной библиотеке с заголовочным файлом s t d l i b . h содержится функция, прототип которой имеет вид: i n trand ( v o i d ). Результатом этой функции является целое случайное число из диапазона от 0 до RAND_MAX. Значение константы RAND_MAX определено в заголовочном файле s t d l i b . h и обычно равно 32767 — максимально допустимому целому числу. Для получения случайных чисел в диапазоне от 0 до N- 1 достаточно вычислить остаток от целого деления rand () на N. Функция с прототипом void randomize (void) выполняет первоначальную настройку датчика случайных чисел так, чтобы последовательность чисел не повторялась при повторном выполнении программы. Другим новым элементом в данной программе является использование манипуляторов для управления потоковым выводом с помощью стандартного объекта cout. Манипуляторы объявляются в заголовочном файле iomanip.h. Манипулятор setw(n) влияет на формат следующего элемента выходного потока. Он указывает на то, что значение будет выводиться в п позиций на экране (в программе п = б). Другой использованный манипулятор — endl — обозначает конец строки и переводит экранный курсор на начало новой строки. Его действие аналогично действию управляющего символа \n.


Просмотров 582

Эта страница нарушает авторские права

allrefrs.ru - 2021 год. Все права принадлежат их авторам!