Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Nagima_gostin_barlik_jauaptari 2.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
887.84 Кб
Скачать

5 Билет

Компьютерные программы обрабатывают (изменяют) различные данные. Программа получает данные, что-то делает с ними и выводит их в измененной форме или выводит другие данные.

Следовательно, любой язык программирования должен иметь инструменты как для ввода данных, так и их вывода. В Паскале ввод осуществляется с помощью процедур read() и readln(), а вывод - благодаряwrite() и writeln(). Процедуры, которые имеют окончание ln, после своего выполнения переводят указатель на новую строку.

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

ввод:  Read( [ f ], P1, P2, P3, ..., Pn )   или   ReadLn( [ f ], P1, P2, P3, ..., Pn )

вывод:  Write( [ f ], P1, P2, P3, ..., Pn )   или   WriteLn( [ f ], P1, P2, P3, ..., Pn )

где f - файловая переменная, указывающая логическое имя файла; P1, P2, ... Pn - список ввода-вывода.

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

Если имя файловой переменной опущено, то считается, что ввод сопряжен с логическим файлом Input (под ним подразумевается клавиатура с "эхом" ввода на экране), а вывод - с логическим файлом Output (что соответствует выводу на экран). Имена Input и Output являются предопределенными в системной библиотеке (модуле System).

Таким образом, вызов процедуры Read(a, b) полностью эквивалентен вызову Read(Input, a, b), а вызов процедуры Write(b, c) - вызову Write(Output, b, c).

6 Билет

Простейшие операторы языка Паскаль В языке Паскаль есть простые и структурированные операторы- Рассмотрим сначала первые. 3.2.1. оператор присаевания

В операторе присваивания слева всегда стоит имя переменной, а справа - зна­чение,например: a:=b; где а - имя переменной или элемента массива, Ь - значение как таковое, выражение, переменная, константа или функция. Типы переменных а и Ъ должны совпадать или быть совместимыми для при­сваивания, то есть тип, к которому принадлежит переменная Ь, должен нахо­диться в границах типа переменной а. В результате выполнения оператора а: =b переменной а присваивается зна­чение Ъ, например: var a,b,с,d: real; begin c:=pi/2;  d:=sin(pi*c)*cos(c)*ln(c); a:=(c+d)/(c-d)*exp(-c);  d:=sqrt(c)*exp(l/9*ln(c)); end.

7 Билет

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

Проектировать структуры данных для функциональных языков более сложно, чем для императивных, как минимум по двум причинам[1]:

  1. Почти все структуры данных интенсивно используют присваивание, которое в чисто функциональном стиле не используется;

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

Массивы

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

Количество используемых индексов массива может быть различным. Массивы с одним индексом называютодномерными, с двумя — двумерными и т. д. Одномерный массив нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.

Пример фиксированного массива на языке Паскаль

{Одномерный массив целых чисел.

Нумерация элементов от 1 до 15}

a: array [1..15] of Integer;

{Двумерный массив символов.

Нумерация по столбцам по типу Byte (от 0 до 255)

по строкам от 1 до 5}

multiArray : array [Byte, 1..5] of Char;

{Одномерный массив из строк.

Нумерация по типу word (от 0 до 65536)}

rangeArray : array [Word] of String;

Пример фиксированного массива на С/С++

int Array[10]; // Одномерный массив целых чисел размера 10

// Нумерация элементов от 0 до 9

double Array[12][15]; // Двумерный массив вещественных чисел двойной точности

// размера 12 на 15.

// Нумерация по строкам от 0 до 11, по столбцам от 0 до 14

8-билет

Сортировка методом парных перестановок

Самый простой вариант этого метода сортировки массива основан

на принципе сравнения и обмена пары соседних элементов.

Процесс перестановок пар повторяется просмотром массива с начала

до тех пор, пока не будут отсортированы все элементы, т. е. во время

очередного просмотра не произойдет ни одной перестановки. Для подсчета

количества перестановок целесообразно использовать счетчик –

специальную переменную В.

Если при просмотре элементов массива значение счетчика

перестановок осталось равным нулю, то это означает, что все элементы

отсортированы (см. рис. 21).

НАЧАЛО

ВВОД N,

A(N)

B:= 0

K := 1 K=0 ВЫВОД

А(1..n)

+

A(K)

A(K+1) КОНЕЦ

Q := A(K),

A(K) :=

A(K+1),

B := B + 1

K := K + 1

+

NK

Рис. 21. Алгоритм сортировки методом парных перестановок

Структуры и алгоритмы компьютерной обработки данных

 | 

Двумерные массивы: задачи сортировок и перестановок в двумерных массивах

A

 | 

Аннотация: В лекции рассматриваются типовые задачи на обработку двумерных массивов, приводятся примеры алгоритмизации задач сортировок и перестановок в двумерных массивах.

Ключевые слова: линейное уравнениефункциональные зависимостиоператорыметод Гауссаалгоритмсортировка,одномерный массивпоискмассивзначениематрицавыводиндексацияинициализацияадресная арифметикаиндексцикла,время выполнениятипы задачдвумерный массиввходные данныедиапазонвещественное число

Цель лекции: изучить особенности применения алгоритмов сортировок и перестановок в двумерных массивах, научиться решать задачи сортировок и перестановок в двумерных массивах на языке C++.

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

Однако, по сравнению с одномерными массивами, в матрицах перестановки и сортировки имеют немного другой смысл и алгоритмвыполнения.

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

Пример 1Сортировка в двумерном целочисленном массиве элементов k-той строки по невозрастанию.

void sort_dn(int k,int slb, int m[max][max]) {

int i,j,buf;

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

for (j=slb-1;j>i;j--)

if (m[k][j]>m[k][j-1]){

//фиксированная строка с номером k

buf= m[k][j];

m[k][j]= m[k][j-1];

m[k][j-1]=buf;

}

}

Для поиска максимальных (минимальных) элементов с целью их дальнейшего упорядочивания удобно выделять отдельноодномерный массив, в котором хранить не значения элементов, а номера столбцов или строк, в которых они располагаются. Например, чтобы найти минимальные элементы в каждом столбце массива n x m отдельно, удобно выделить одномерный массив min[m], в котором число элементов равно числу столбцов. Значениями элементов такого массива будут номера строк, в которых располагаются минимальные элементы каждого столбца. Если же минимальных элементов в столбце несколько, то будет найден первый (или последний) минимальный, что не скажется на значении.

Пример 2Поиск номеров минимальных элементов в каждом столбце двумерного массива.

void minimum(int str,int slb, int m[max][max],int min[max_y]){

int i,j;

for (j=0;j<slb;j++){//фиксируем номер столбца

min[j]=0;

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

//пробег по столбцу, меняется номер строки

if (m[i][j]<m[min[j]][j]) min[j]=i;

Azima

9.Подпрограммы, их классификация. Рекурсия Способы оформления подпрограмм. Обращение к подпрограммам. Передача фактических параметров. Использование общих областей памяти. Формальные параметры. Параметры-значения и параметры-переменные. Локальные и глобальные переменные. Рекурсия.

Подпрограмма - это именованная логически законченная группа операторов языка, которую можно вызвать для выполнения любое количество раз из различных мест программы. В языке Turbo Pascal существуют две разновидности подпрограмм: процедуры и функции. Классификация подпрограмм При работе с Макроассемблером подпрограммы (процедуры) делятся на ближние и дальние, внутренние и внешние. Два первых термина характеризуют способ вызова подпрограммы и возврата из нее, а два вторых - локализацию подпрограмм по отношению к тексту задачи

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

Функция аналогична процедуре, но имеет два отличия:

1) функция передает в программу результат своей работы в виде значения простого типа;

2) имя функции может находиться в выражении как операнд.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]