Автор: Пользователь скрыл имя, 07 Марта 2013 в 02:12, курс лекций
Лекция 1. Представление алгоритмов на языке Программирования ПаскальАВС.
Лекция 2. Построение линейных алгоритмов
Лекция 3. Алгоритмы, содержащие структуру ветвления.
Лекция 4. Алгоритмы, содержащие структурные операторы циклов.
...
Лекция 9. Файловый тип данных
Задача. Дан массив вещественных чисел. Размер массива N<=35. Упорядочить элементы массива по убыванию (вставками).
Решение. Задачу разобьем на следующие части:
1.Ввод элементов массива.
2.Вывод на экран массива.
3.Сортировка элементов массива.
Сортировку массива произведем по следующей схеме. Сначала в массиве найдем самый большой элемент и поменяем его местами с первым элементом массива. Затем рассмотрим массив без первого элемента. Опять в оставшейся части массива найдем самый большой элемент и поменяем его местами с элементом, который стоит на первом месте в рассматриваемой части. Затем рассмотрим часть уже без двух первых элементов и т.д.
Такая сортировка называется сортировкой выбором.
Program a24;
{Раздел объявлений}
Uses Crt;
Type mas=Array[1..35] of Real;
{Процедура ввода элементов
Procedure Wwod( k:Integer; Var c:mas);
Var i:Integer;
Begin
For i:=1 to k do c[i]:=100*(Random-Random);
End;
{Процедура вывода элементов массива на экран}
Procedure Wuwod(k:Integer; c:mas);
Begin
Var i:Integer;
Begin
For i:=1 to k do Write(c[i]:6:2);
Writeln;
End;
{Процедура сортировки массива}
Procedure Sort(k:Integer; Var c:mas);
Var i,j,x:Integer;
Max:Real;
Begin
For i:=1 to k-1 do
Begin
max:=a[i];
x:=i;
For j:=i to n do
If a[j]>max Then Begin max:=a[j];x:=j;End;
a[x]:=a[i];
a[i]:=max;
End;
End;
{Основная программа}
Var a:mas;
n:Integer;
Begin
Randomize;
Writeln('Ввести размер массива');
Readln(n);
Wwod(n,a);
Writeln('Исходный массив :');
Wuwod(n,a);
Sort(n,a);
Writeln('Отсортированный массив :');
Wuwod(n,a);
End.
Задача. Дан массив вещественных чисел. Размер массива N<=35. Упорядочить элементы массива по убыванию.
Решение. Задачу разобьем на следующие части:
1.Ввод элементов массива.
2.Вывод на экран массива.
3.Сортировка элементов массива.
Сортировку массива произведем по следующей схеме.
1.Сравниваем первые два элемента. Если первый больше второго, то меняем их местами.
2. Сравниваем второй и третий, третий и четвертый, …, предпоследний и последний, при необходимости меняем их местами. После этого самый большой окажется на последнем месте.
3.Просматриваем опять массив сначала, но последний элемент уже не трогаем и повторяем 1 и 2 пункты.
4.Массив будет отсортирован после того, как в нем окажется только первый и второй элемент и они будут расставлены в нужном порядке.
Такой вид сортировки называется сортировка обменом или другое название пузырьковая сортировка.
Программа на языке Паскаль будет иметь следующий вид:
Program a25;
{Раздел объявлений}
Uses Crt;
Type mas=Array[1..35] of Real;
{Процедура ввода элементов массива}
Procedure Wwod(k:Integer; Var c:mas);
Var i:Integer;
Begin
For i:=1 to k do c[i]:=100*(Random-Random);
End;
{Процедура вывода элементов массива на экран}
Procedure Wuwod(k:Integer; c:mas);
Begin
Var i:Integer;
Begin
For i:=1 to k do Write(c[i]:6:2);
Writeln;
End;
{Процедура сортировки массива}
Procedure Sort(k:Integer; Var c:mas);
Var I,j:Integer;
X:Real;
Begin
For I:=1 to k-1 do
For j:=1 to k-1 do
If c[j]<c[j+1]
Then begin X:=c[j]; C[j]:=c[j+1]; C[j+1]:=x; End;
End;
{Основная программа}
Var a:mas;
n:Integer;
Begin
Randomize;
Writeln('Ввести размер массива');
Readln(n);
Wwod(n,a);
Writeln('Исходный массив :');
Wuwod(n,a);
Sort(n,a);
Writeln('Отсортированный массив :');
Wuwod(n,a);
End.
7.Циклическая перестановка элементов в одномерном массиве
Задача. Дан одномерный массив А, содержащий не более N<=50 элементов. Сдвинуть циклически все элементы массива на I позиций влево.
Решение. Запомним первые I элементов. Сдвинем влево оставшиеся n-I элементы массива. Дополним «хвост» массива элементами, которые запоминали.
Program a26;
{Раздел объявлений}
Uses Crt;
Type mas=Array[1..35] of Real;
{Процедура ввода элементов массива}
Procedure Wwod( k:Integer; Var c:mas);
Var i:Integer;
Begin
For i:=1 to k do c[i]:=100*(Random-Random);
End;
{Процедура вывода элементов массива на экран}
Procedure Wuwod(k:Integer; c:mas);
Begin
Var i:Integer;
Begin
For i:=1 to k do Write(c[i]:6:2);
Writeln;
End;
{Процедура сортировки массива}
Procedure Sort(k,z:Integer; Var c:mas);
{k – количество элементов в массиве}
{z – на сколько позиций сдвигать}
Var j,t,m:Integer; b:mas;
X:Real;
Begin
{Запомнили z элементов в массиве b}
For j:=1 to z do b[j]:=с[j];
{Сдвинули оставшиеся элементы массива с на z позиций вперед}
For t:=1 to k-z do с[t]:=с[t+z];
{На освободившиеся места в массиве с поставили элементы из массива b}
For m:=k-z+1 to k do с[m]:=b[m-k+z];
End;
{Основная программа}
Var a:mas;
n:Integer;
Begin
Writeln(‘ На сколько позиций сдвигать элементы массива’);
Readln(i);
Randomize;
Writeln('Ввести размер массива');
Readln(n);
Wwod(n,a);
Writeln('Исходный массив :');
Wuwod(n,a);
Sort(n,I,a);
Writeln('Полученный массив :');
Wuwod(n,a);
End.
Задача. Дан одномерный массив А, содержащий не более N<=35 элементов. Сдвинуть циклически все элементы массива на p позиций вправо.
Решение.
Чтобы не заводить нового массива поступим следующим образом: сдвинем вправо все элементы массива на одну позицию и повторим эту операцию p раз.
Program a27;
{Раздел объявлений}
Uses Crt;
Type mas=Array[1..35] of Real;
{Процедура ввода элементов массива}
Procedure Wwod(k:Integer; Var c:mas);
Var i:Integer;
Begin
For i:=1 to k do c[i]:=100*(Random-Random);
End;
{Процедура вывода элементов массива на экран}
Procedure Wuwod(k:Integer; c:mas);
Begin
Var i:Integer;
Begin
For i:=1 to k do Write(c[i]:6:2);
Writeln;
End;
{Процедура циклической
перестановки элементов
Procedure Sort(k,p:Integer; Var c:mas);
Var I,t:Integer;
x:Real;
Begin
For t:=1 to p do
Begin
x:=c[k];
For i:=k downto 2 do c[i]:=c[i-1];
c[1]:=x;
End;
End;
{Основная программа}
Var a:mas;
n:Integer;
Begin
Writeln(‘На сколько позиций сдвинуть элементы массива’);
Readln(p);
Randomize;
Writeln('Ввести размер массива');
Readln(n);
Wwod(n,a);
Writeln('Исходный массив :');
Wuwod(n,a);
Sort(n,p,a);
Writeln('Полученный массив :');
Wuwod(n,a);
End.
8.Одномерные массивы символов.
Тип Char может быть базовым типом одномерного массива, что можно использовать при решении разнообразных задач.
Задача. Есть некоторый текст, который содержит слова, которые разделены одним пробелом и в конце стоит точка. Подсчитать, сколько слов имеет данный текст.
Решение. Текст можно рассматривать как массив символов. Чтобы подсчитать количество слов, необходимо найти количество пробелов в этом массиве. Если пробелов в массиве нет, то считать, что имеем одно слово. Таким образом, в самом начале программы счетчик слов k в массиве будем полагать равным 1.
Program a28;
{Раздел объявлений}
Uses Crt;
Type mas=Array[1..35] of Char;
Var a:mas; n, I, k, m:Integer;
Begin
{Ввод слов данного текста организуем с помощью оператора цикла и заодно подсчитаем сколько символов будет содержать данный текст}
I:=0; {счетчик всех символов данного текста}
Repeat
I:=I+1;
Read(a[I]);
{Read без окончания ln позволяет текст набирать в строку}
Until a[I]=’.’;
{Подсчет количества слов в тексте}
k:=1; {Счетчик пробелов в тексте}
For m:=1 to I do If a[m]=’ ‘ Then k:=k+1;
{Вывод ответа на экран}
Writeln(‘В тексте ’,k,’ слов’);
End.
Задача. Дан текст, слова в нем разделяются одним пробелом, а заканчивается текст вопросительным знаком. Определить сколько слов в тексте начинается на букву w.
Решение. Поскольку каждое слово начинается с буквы следующей за пробелом, то нам нужно определить, сколько букв w следует за пробелом. Но поскольку первое слово тоже может начинаться на эту же букву и оно не следует за пробелом, то первый символ массива нужно проверить отдельно.
Program a29;
{Раздел объявлений}
Uses Crt;
Type mas=Array[1..35] of Char;
Var a:mas; n, I, k, m:Integer;
Begin
{Ввод слов данного текста организуем с помощью оператора цикла и заодно подсчитаем сколько символов будет содержать данный текст}
I:=0; {счетчик всех символов данного текста}
Repeat
I:=I+1;
Read(a[I]);
{Read без окончания ln позволяет текст набирать в строку}
Until a[I]=’?’;
{Подсчет количества слов в тексте, которые начинаются на букву w}
k:=0; {Счетчик начальных букв w в тексте}
If a[1]=’w’ Then k:=k+1; {}
For m:=1 to I do If (a[m]=’ ‘) and (Succ(a[m])=’w’) Then k:=k+1;
{Вывод ответа на экран}
Writeln(‘В тексте ’,k,’ слов, которые начинаются на букву w’);
End.
Задача. Дан массив букв латинского алфавита. Расположить эти буквы в алфавитном порядке.
Решение. В языке Паскаль оператор For можно использовать в следующем виде: For k:=’a’ do ‘z’ do тело цикла. Переменная k должна быть символьного типа. Она будет перебирать все значения от английской букв ‘a’ до английской буквы ‘z’, т.е. перебирает весь английский алфавит по порядку. Воспользуемся этим при составлении программы.
Program a30;
{Раздел объявлений}
Uses Crt;
Type mas=Array[1..35] of Char;
Var a:mas; I, m :Integer; t: char;
Begin
{Ввод массива букв
организуем с помощью
I:=0; {счетчик всех символов данного текста}
Repeat
I:=I+1;
Read(a[I]);
Until a[I]=’.’;
{Произведем одновременное расположение букв по алфавиту и вывод их на экран}
For t:=’a’ to ’z’ do
For m:=1 to I-1 do If a[m]=t Then Write(a[m]);
Еnd.
9.Понятие двумерного массива
В двумерном массиве каждый элемент должен иметь два индекса (два номера). Двумерные массивы состоят из элементов, которые образуют строки и столбцы. Примером записи двумерного массива в математике может служить матрица А следующего вида:
А11 А12 А13 А14
А21 А22 А23 А24
А31 А32 А33 А34
В этой матрице 3 строки и 4 столбца. Каждый элемент матрицы имеет два индекса – индекс строки и индекс столбца. В языке программирования Паскаль индексы элемента заключаются в квадратные скобки и перечисляются через запятую. Договорились, обязательно сначала писать индекс строки, а затем индекс столбца. Например, элемент А[2,3]. Эта запись говорит, что элемент массива А находится во 2 строке и в 3 столбце.
10.Объявление
двумерного массива в
Объявление типа двумерного массива производится по следующему формату:
1 способ Type Имя типа=Array[ n1..n2, m1..m2] of тип элементов; Var Имя массива : Имя типа; |
2 способ Var Имя массива : Array[n1..n2, m1..m2] of Тип элементов; |
n1,n2 – константы, которые указывают, в каких пределах может изменяться индекс строки, m1,m2 – константы, которые указывают, в каких пределах может изменяться индекс столбца, тип элементов может быть любым (кроме файлового типа), имя массива и имя типа придумывает пользователь.
11.Процедуры ввода и вывода элементов двумерного массива.
Задача. Создать двумерный массив целых чисел, который содержит не более 10 строк и не более 10 столбцов, с помощью функции случайных чисел. Полученный массив вывести на экран в виде матрицы.
Решение.
Решение задачи можно разбить на следующие части:
1.Создание двумерного массива.
2.Вывод двумерного массива на экран.
Для каждой из этих частей создадим процедуру.
Program а1;
Uses Crt;
Type tabl=array[1..10,1..10] of Integer;
{Процедура ввода элементов двумерного массива}
Procedure Wwod2(k,l:Integer; Var x:tabl);
Var I,j : Integer;
Begin
For I := 1 to k do
For j := 1 to l do
X[I,j]:=Random(100);
End;
{Процедура вывода элементов двумерного массива на экран в виде матрицы}
Procedure Vivod2(k,l:Integer; x:tabl);
Var I,j:Integer;
Begin
For I := 1 to k do
Begin
For j:=1 to l do Write(x[I,j]:5};
Writeln;
End;
End;
{Основная программа}
Var a:tabl; n,m:Integer;
Begin
ClrScr;
Randomize;
Writeln('Ввести количество строк и столбцов');
Readln(n,m);
{Задание элементов массива}
Wwod2(n,m,a);
{Вывод массива на экран}
Writeln('Массив А:');
Vivod2(n,m,a);
End.
Задача. Дан двумерный массив целых чисел, который содержит не более 10 строк и не более 10 столбцов. Элементы массива ввести с клавиатуры. Массив вывести на экран в виде матрицы. Создать новый массив, элементами которого будут суммы элементов данного массива по строкам и среди них найти наименьшую.
Program a2;
Type tabl=Array[1..10,1..10] of Integer;
mas=array[1..10] of Integer;
{Поскольку в задаче
будут и двумерный массив и
одномерный, то в разделе объявление
необходимо задать тип
{Процедура ввода элементов двумерного массива}
Procedure Wwod2(k,l:Integer; Var x:tabl);
Var I,j : Integer;
Begin
For I := 1 to k do
For j := 1 to l do
X[I,j]:=Random(100);
End;
{Процедура вывода элементов двумерного массива на экран в виде матрицы}
Procedure Vivod2(k,l:Integer; x:tabl);
Var I,j:Integer;
Begin
For I := 1 to k do
Begin
For j:=1 to l do Write(x[I,j]:5};
Writeln;
End;
End;
{Создание массива из сумм элементов по строкам}
Procedure Sosd(k,l:Integer; c:tabl; Var d:mas);
Var i,j,s:Integer;
Begin
For i:=1 to k do
Begin
s:=0;
For j:=1 to l do s:=s+a[i,j];
b[i]:=s;
End;
End;
{Вывод созданного массива}
Procedure Vivod1(k:Integer; y:mas);
Информация о работе Лекции по "Языкам и методам программирования" (PascalABC)