ЛАБОРАТОРНЫЕ митп. Методические указания к лабораторным работам по дисциплине "технологии программирования" Караганда 2011
Скачать 0.63 Mb.
|
Тема: Обработка матриц ЦЕЛЬ РАБОТЫ – овладение навыками алгоритмизации и программирования структур с вложенными циклами, навыками использования приемов программирования во вложенных циклах, способами ввода и вывода матриц. Вопросы для самостоятельной подготовки 1. Изучить: правила организации вложенного цикла с учетом порядка перебора элементов матрицы; правила использования приемов программирования в структурах с вложенными циклами; способы ввода и вывода матриц, имеющиеся в языке программирования. Постановка задачи Обработать на ПК матрицу в соответствии с вариантом задания, указанным в таблице 4.1. Организовать вывод на экран элементов исходной матрицы в виде таблицы. Организовать вывод на экран полученных данных в общепринятом виде. Порядок выполнения работы Разработать алгоритм решения в соответствии с заданием. Составить программу решения задачи. Подготовить текстовый вариант программы и исходных данных. Провести отладку программы. Таблица 4.1 - Исходные данные для выполнения лабораторной работы №4
Продолжение таблицы 4.1
Дополнительные задания Реализовать решение задачи с диалоговым вводом данных с клавиатуры. Предусмотреть ограничение диапазона вводимых переменных в соответствии с условием задачи. Предусмотреть запрет на ввод заведомо ложных данных (букв, больших чисел, отрицательных значений подкоренного выражения и т.п.). Добавить в программу всплывающие подсказки. Контрольные вопросы 1. Указать основные правила организации вложенных циклов. 2. Указать способы выхода из внутреннего цикла. 3. Как организовать вывод матрицы в общепринятом виде? 4. Как организовать вывод нижней треугольной матрицы в общепринятом виде? 5. Как организовать ввод матрицы размером N*M элементов? Пример выполнения лабораторной работы № 4 Дана матрица D(K, K), k<=10. Записать на место отрицательных элементов матрицы нули и повторно вывести на экран матрицу D. Описание входных/выходных данных
Алгоритм решения Вводим с клавиатуры количество строк и столбцов матрицы D, учитывая ограничения – k<=10. Произвольным образом формируем элементы матрицы D(k,k). Выводим на экран исходную матрицу D. В двойном цикле анализируем матрицу D(k,k), проверяя, является ли текущий элемент матрицы отрицательным. Если условие выполняется, то заменяем текущее значение на нуль. Выводим на экран преобразованную матрицу D. Представим данный алгоритм в графическом виде: начало k>10 2 3 Нет i:=1,k 4 j:=1,k 5 d[i,j] Рисунок 4.1 – Алгоритм решения задачи (Лист 1) Рисунок 4.1 – Алгоритм решения задачи (Лист 2) На рисунке 4.2 показана форма задачи в режиме выполнения. Рисунок 4.2 – Форма задачи в среде Visual Basic Значения свойств объектов
Листингпрограммы Option Base 1 'Объявление переменных Dim D() As Single Dim i As Integer, j As Integer, k As Integer 'Процедура обработки события нажатия кнопки Private Sub Command1_Click() k = Val(Text1.Text) 'Присваиваем k значениеизполяввода 1 If k < 10 Then ReDim D(k, k) As Single 'Переопределяем размер массива D Flex1.Visible = True 'Делаем таблицы видимыми Flex2.Visible = True Flex1.Rows = k + 1 'Устанавливаем количество строк таблицы Flex1.Cols = k + 1 'Устанавливаем количество столбцов таблицы Flex2.Rows = k + 1 Flex2.Cols = k + 1 'Прописываем шапку таблицы Flex1.TextMatrix(0, 0) = "D(i)" Flex2.TextMatrix(0, 0) = "D(i)" 'Устанавливаем ширину столбцов и таблицы в целом Flex1.Width = 500 * k + 600 Flex2.Width = 500 * k + 600 For i = 0 To k Flex1.ColWidth(i) = 500 Flex2.ColWidth(i) = 500 Next i Randomize For i = 1 To k For j = 1 To k D(i, j) = 5 - Int(10 * Rnd) ' Формирование элементов массива Next j Next i For i = 1 To k Flex1.TextMatrix(i, 0) = i For j = 1 To k Flex1.TextMatrix(0, j) = j Flex1.TextMatrix(i, j) = D(i, j) ' Вывод исходного массива If D(i, j) < 0 Then D(i, j) = 0 ' Преобразование Next j Next i For i = 1 To k Flex2.TextMatrix(i, 0) = i For j = 1 To k Flex2.TextMatrix(0, j) = j Flex2.TextMatrix(i, j) = D(i, j) ' Вывод преобразованного массива Next j Next i Else i = MsgBox("Значение k должно быть не более 10", vbInformation, "Внимание!") Text1.Text = Empty Text1.SetFocus End If End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() Text1.Text = Empty End Sub Лабораторная работа №5 Тема: Программирование процессов вывода точечного и кусочно-линейного графиков на экран монитора ЦЕЛЬ РАБОТЫ – овладеть методологией и приобрести практические навыки программирования вывода графиков функций. Вопросы для самостоятельной подготовки Изучить: возможности языка программирования для обработки и вывода графической информации; графические режимы монитора и управление ими; отображение точки, отрезка, ломаной линии; вывод текстовых данных в графическом режиме; метод построения точечных и кусочно-линейных графиков на экране. Постановка задачи Построить на экране монитора точечный и кусочно-линейный график функции У= F(x) в соответствии с вариантом задания, приведенным в таблице 5.1. В заданном диапазоне изменения аргумента х от а до b с числом точек графика n<= 100. Обеспечить вычерчивание осей координат x, y с нанесением шкал делений, вывести значения масштабов по осям координат x, y. Организовать вывод на экран аргументов и значений функции в виде таблицы. Организовать вывод на экран полученных данных в виде графика. Порядок выполнения работы Разработать алгоритм решения в соответствии с заданием. Разработать программу решения задачи. Подготовить тестовый набор данных для контроля правильности вычисления значений функции. Провести отладку программы. Таблица 5.1 - Исходные данные для выполнения лабораторной работы №5
Продолжение таблицы 5.1
Дополнительные задания На поле с графиком функции добавить буквенные подписи осей, начала координат. Предусмотреть ограничение диапазона вводимых переменных в соответствии с условием задачи. Предусмотреть запрет на ввод заведомо ложных данных (букв, больших чисел, отрицательных значений подкоренного выражения и т.п.). Добавить в программу всплывающие подсказки. Контрольные вопросы 1. Укажите объекты Visual Basic, на которых возможно рисование графических образов. 2. В каком направлении возрастает вертикальная координата Y на форме или элементе PictureBox ? Горизонтальная координата X на форме или PictureBox ? 3. Какая единица измерения размеров рисунков зависит от разрешающей способности монитора? 4. Какой оператор определяет точку на экране текущей формы с координатами 450, 250? 5. Для какого объекта оператор Scale задает координатное поле размером (100х340): A) PictureBox2.Scale(0,10)-(100,120) B) Form3.Scale(0,0)-(101,341) C) Form1.Scale(340,100)-(10,12) D) PictureBox1.Scale(0,0)-(100,340) E) Form5.Scale(100,340)-(0,0) 6. Какой оператор Pset устанавливает на форме точку красного цвета: A) Form1.Pset(x,y), RGB(0,0,255) B) Form3.Pset(x,y), RGB(0,0,0) C) PictureBox2. Pset(x,y), RGB(0,255,255) D) Form4.Pset(x,y), RGB(255,0,0) E) Form2.Pset(x,y), RGB(0,255,0) 7. Для того чтобы графика, создаваемая графическими методами, появилась на поверхности формы после ее загрузки, необходим код, создающий графику, поместить в процедуру Form_Load , установив значение свойства формы AutoRedrew равным … ? 8. Какая фигура будет изображена посредством следующего оператора Circle (4000, 2800), 550,,,, 6/3 : A) Сектор круга B) Изображение дуги C) Эллипс, вытянутый вдоль оси Y D) Эллипс, вытянутый вдоль оси X E) Круг Пример выполнения лабораторной работы №5 Постановка задачи Построить на экране монитора точечный и кусочно-линейный графики функции Y=Sin(x). В диапазоне изменения аргумента х от а=-/2 до b=/2 с числом точек графика n=50. Обеспечить вычерчивание осей координат X, Y с нанесением шкал делений и подписей осей Х, Y. Организовать вывод на экран аргумента и значений функции в виде таблицы. Организовать вывод на экран полученных данных в виде графика. Организовать вывод в файл последовательного доступа значений аргумента и функции в виде таблицы. Алгоритм решения задания Вводим с клавиатуры диапазон изменения аргумента х и количество точек графика – a, b, n. Рассчитываем шаг (h) изменения аргумента х: h=(b-a)/(n-1). В цикле определяем значения функции Y(i) (i=1…50). Выводим на экран в табличном виде значение аргумента х и значения функции Y=Sin(x). Диапазон изменения функции Y неизвестен, поэтому в программе необходимо определить наибольшее Ymax и наименьшее Ymin значения среди вычисляемых значений Yi (i=1-50). Определяем наибольшее Ymax и наименьшее Ymin. Вычерчиваем координатные оси и наносим деления на них. Выводим на экран график функции Y= Sin(x) при изменении аргумента от -π/2 до +π/2. Число точек равно 50. Выводим в файл grafic.txt значения аргумента и функции в виде таблицы. Представим данный алгоритм в графическом виде: начало 10 Начало координат, вычерчивание осей, шкал. Установка первой точки графика конец i=2, n Option1.Value = True 12 Picture1.PSet (x,Y(i)) Нет 13 11 Y[i]=sin(x) x = x + h 4 Y(i) > ymax 5 i=1, n Нет 3 a=-3.14/2: b=3.14/2: h = (b-a)/(n-1): x = a: ymax = Sin(x): ymin = Sin(x) 2 ymax = Y(i) 6 Y(i) < ymin 7 Нет ymin = Y(i) 8 Picture1.Line -(x,Y(i)) 14 x = x + h 15 Рисунок 5.1 – Алгоритм решения задачи На рисунке 5.2 показана форма задачи в режиме выполнения. Рисунок 5.2 – Форма задачи в среде Visual Basic Значения свойств объектов
Листинг программы Option Base 1 Private Sub Command1_Click() 'Объявление переменных Dim Y() As Single, ymax As Single, ymin As Single Dim i As Integer, n As Integer, x As Single, j As Single Dim a As Single, b As Single, h As Single, dx As Single, dy As Single n = Val(Text1.Text) 'Присваиваем n значение из поля ввода 1 ReDim Y(n) As Single 'Переопределяем размер массива Y Flex1.Rows = n + 1 'Устанавливаем количество строк таблицы 'Прописываем шапку таблицы Flex1.TextMatrix(0, 0) = "D(i)" Flex1.TextMatrix(0, 0) = "N п/п" Flex1.TextMatrix(0, 1) = "x" Flex1.TextMatrix(0, 2) = "Y" a = -3.14 / 2: b = 3.14 / 2: h = (b - a) / (n -1) 'Присвоение значений границам интервала аргумента x = a: ymax = Sin(x): ymin = Sin(x) For i = 1 To n Y(i) = Sin(x) If Y(i) > ymax Then ymax = Y(i) 'Поиск минимального и максимального значения функции If Y(i) < ymin Then ymin = Y(i) Flex1.TextMatrix(i, 0) = Str(i) Flex1.TextMatrix(i, 1) = Str(x) Flex1.TextMatrix(i, 2) = Str(Y(i)) x = x + h Next i dx = b - a: dy = ymax – ymin ' Выборначаласистемыкоординат If ymin >= 0 And ymax >= 0 Then ymin = 0: ymax = ymax If ymin < 0 And ymax < 0 Then ymin = ymin: ymax = 0 If ymin < 0 And ymax > 0 Then ymin = ymin: ymax = ymax ' переопределению значений масштаба ширины и масштаба высоты Picture1.Scale (a - dx / 10, ymax + dy / 10)-(b + dx / 10, ymin - dy / 10) 'Вычерчиваем координатные оси и наносим деления на них. Picture1.Line (a, 0)-(b, 0) 'Горизонтальная ось Picture1.Line (b, 0)-(b - 0.05, 0 - 0.05) Picture1.Line (b, 0)-(b - 0.05, 0 + 0.05) Picture1.Line (0, ymax)-(0, ymin) 'Вертикальная ось Picture1.Line (0, ymax)-(0 - 0.05, ymax - 0.05) Picture1.Line (0, ymax)-(0 + 0.05, ymax - 0.05) For j = a To b Step dx / 10 Picture1.Line (j, -0.03)-(j, 0.03) 'Нанесение делений на ось x Next j For j = ymin To ymax Step dy / 10 Picture1.Line (-0.03, j)-(0.03, j) 'Нанесение делений на ось Y Next j Picture1.PSet (a, Y(1)) 'Установка первой точки графика x = a+h For i = 2 To n If Option1.Value = True Then 'Вычерчивается точечный график Picture1.PSet (x, Y(i)) Else Picture1.Line -(x, Y(i)) 'Вычерчивается кусочно-линейный график от 'координаты предыдущей точки до текущей End If x = x + h Next i Open "C:\grafic.txt" For Output As #1 'Созданиефайладлязаписиданных Print #1, Spc (7); "График функции Y=Sin(x)" Print #1, Print #1, Spc (5); "Аргумент X" Spc (5); "Функция Y=Sin(x)" Print #1, x = a For i = 1 To n Print #1, x; Tab (10); Y(i) 'Запись данных x = x + h Next i Close #1 'Закрытиефайла 'Запуск текстового редактора MSNotepad.exe для просмотра 'созданного файла grafic.txt Call Shell ("C:\Windows\Notepad.exe C:\grafic.txt", 1) End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Picture1.Cls 'Очисткаобластирисования End Sub Private Sub Form_Load() Option1.Value = True 'Установкавывода "поумолчанию" точечногографика Text1.Text = Empty End Sub Лабораторная работа №6 |