Программы циклической структуры. Массивы данных

Основные программы циклической структуры. Операторы цикла: цикл с предусловием while, с постусловием repeat, с параметром for. Массивы данных: ввод (заполнение) и вывод элементов массива, их сортировка. Практическое применение теории циклических структур.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 31.05.2015
Размер файла 98,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Оглавление

  • Введение
  • Глава 1. Программы циклической структуры. Массивы данных
  • 1.1 Операторы цикла
    • 1.1.1 Цикл с предусловием while
      • 1.1.2 Цикл с постусловием repeat
      • 1.1.3 Цикл с параметром for
    • 1.2 Массивы
      • 1.2.1 Ввод(заполнение) и вывод элементов массива
      • 1.2.2 Сортировка массивов
  • Глава 2. Практическое применение теории циклических структур и массивов данных
    • Задача №1
    • Задача №2
    • Задача №3
    • Задача №4
    • Задача №5
    • Задача №6
    • Задача №7
    • Задача №8
    • Задача №9
    • Задача №10
    • Задача №11
    • Задача №12
  • Заключение
  • Список использованной литературы

Введение

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

Массивы очень широко используются при разработке различного рода приложений. Массивы являются распространенным и полезным способом сохранения многих различных частей связанных данных. Массивы полезны при создании отсортированных и неотсортированных списков данных при сохранении таблиц данных и для выполнения многих других задач. С понятием «массив» приходится работать и при решении научно-технических и экономических задач связанных с обработкой совокупностей большого количества значений. Массив является удобным способом хранения нескольких связанных элементов данных в едином контейнере для большего удобства и эффективности программирования. Массив позволяет сохранять и манипулировать многими элементами данных посредством единственной переменной. циклический программа массив

Предмет исследования.

Программирование циклических структур и массивов данных

Объект исследования.

Теория циклических структур и массивов данных.

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

Задачи:

· изучить литературу по данной теме;

· научиться работать с циклами;

· разобрать при каких условиях необходимо применять тот или иной вид циклической структуры что бы избежать логической ошибки;

· научиться использовать массивы;

· изучить ввод и вывод массивов.

Обзор источников. Рассмотрим основные использованные источники.

Так Павловская Т.А. в книге «Паскаль. Программирование не языке высокого уровня» рассматривает вопросы разработки программы, уделяя большое внимание основным понятиям, операторам ввода и вывода данных, составлению программ, реализующих ветвление, циклические процессы, работе с массивами, процедурами и записями. Понятия циклов и их основные условия применения, использования и ограничения, что позволяет безошибочно действовать при создании программы.

В своей книге «Методы программирования» Угольницкий Г.А. и др. изложили детальное и формальное изложение всех конструкций языка, а приведенные примеры изложены доступным языком с использованием различных приемов программирования. Подробно расписаны работа с массивами, ввод и вывод массивов, сортировка с приведение подробных примеров, которые позволяют легко обрабатывать большое количество информации и сортировать её.

Глава 1. Программы циклической структуры. Массивы данных

1.1 Операторы цикла

Операторы цикла используются для вычислений, повторяющихся многократно. В паскале имеется три вида циклов: цикл с предусловием while, цикл с постусловием repeat и цикл с параметром for. Каждый из них состоит из определенной последовательности операторов.

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

Рис.1

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

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

Параметром цикла называется переменная, которая используется при проверке условия цикла и принудительно изменяется на каждой итерации, причем, как правило, на одну и ту же величину(цикл с параметром, рис.1, в). Если параметр цикла целочисленный, он называется счетчиком цикла. Количество повторений такого цикла можно определить заранее. Параметр есть не у всякого цикла. В так называемом итеративном цикле условие продолжения содержит переменные, значения которых изменяются в цикле по рекуррентным формулам1.

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат процедуры break, continue и оператор goto. Передавать управление извне внутрь цикла не рекомендуется, потому что при этом могут не выполниться начальные установки.

1.1.1 Цикл с предусловием while

Формат оператора прост:

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

Выражение должно быть логического типа. Например, это может быть операция отношения или просто логическая переменная. Если результат вычисления выражения равен true, выполняется расположенный после служебного слова do простой или составной оператор2. Эти действия повторяются до того момента, пока результатом выражения не станет значение false. После окончания цикла управление передается па следующий за ним оператор.

Если в теле цикла требуется выполнить более одного оператора, необходимо заключить их в блок с помощью ключевых слов begin и end.

Пример. При помощи цикла вывести слово «привет» 5 раз.

Текст программы

program pr;

var x:string;

i:byte;

begin

i:=1;x:='привет'; {Начальные параметры}

while i<=5 do begin{Заголовок цикла}

writeln(x); {Вывод текста}

inc(i); {увеличение на единицу}

end;

end.

1.1.2 Цикл с постусловием repeat

Тело цикла с постусловием заключено между служебными словами repeat и until, поэтому заключать его в блок не требуется.

repeat

тело цикла

until выражение

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

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

Пример. При помощи цикла вывести слово «привет» 5 раз.

Текст программы

program pr;

var x:string;

i:byte;

begin

i:=0;x:='привет'; {Начальные параметры}

repeat

writeln(x); {Вывод текста}

inc(i); {увеличение на единицу}

until i=5

end.

1.1.3 Цикл с параметром for

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

for <параметр>:=<начальное значение> to <конечное значение> dо <оператор>

for <параметр>:=<конечное значение> downto <начальное значение> do <оператор>

Выражения должны быть того же типа, что и переменная цикла1, оператор -- простым или составным.

Пример 1. Программа выводит на экран в столбик числа от 1 до 10.

var i:integer;

begin

for i:=1 to 10 do writeln (i);

end.

Цикл будет выполнен 10 раз на каждом проходе счетчик цикла переменная i увеличивается на 1.

Пример 2. Программа выводит на экран в столбик числа от 10 до 1 и подсчитывает их сумму.

var i,sum:integer;

begin

sum:=0;

for i:=10 downto 1 do

begin

writeln(i);

sum:=sum+i;

end;

writeln('сумма чисел=',sum);

end.

В этом цикле переменная 1 автоматически уменьшается на 1.

Пример 3. Программа выводит на экран символы от 'a' до 'z'.

var c:char;

begin

for c:='a' to 'z' do write(c:3);

end.

Здесь счетчик цикла c символьного тина поочередно принимает значение каждого символа от 'a' до 'z'.

Если в теле цикла требуется выполнить более одного оператора, необходимо заключить их в блок с помощью ключевых слов begin и end.

1.2 Массивы

Массивы относят к структурированным типам данных. Все элементы (компоненты) массива принадлежат одному типу. Тип компонент массива может быть любым, число компонент массива задаётся при его описании и в дальнейшем не изменяется.

Массив -- структура с так называемым случайным доступом, все его компоненты могут выбираться произвольно и являются одинаково доступными. К любому элементу массива можно обратиться, задав индекс (индексы), который однозначно определяет относительную позицию элемента в массиве. Тип индексов задаёт тип значений, которые используются для обращения к отдельным элементам массива. Он неявно определяет число элементов в массиве. Тип индекса может быть одним из упорядоченных типов, т.е. любым скалярным типом, кроме real. Следовательно, элементы массива всегда упорядочены.

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

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

Примером одномерного массива может служить линейная таблица или вектор:

Линейная таблица - одномерный массив с именем А.

2 -9 7 12 6 -35

Пример двумерного массива - это прямоугольная таблица или матрица.

Прямоугольная таблица - двумерный массив с именем В:

8 5 2 -5 0

3 11 -5 -7 4

12 45 9 10 23

При этом первый индекс показывает номер строки, а второй индекс-столбца. Например: значение элемента В[2,3] равно - 5, а значение элемента В[3,2] равно 45.

Таким образом, массив имеет следующие основные характеристики:

1. Размер - число элементов в массиве;

2. Имя массива;

3. Индексы элементов;

4. Значение элементов.

Имя массива и размерность характеризуют массив в целом.

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

При описании массива надо:

· определить имя массива

· определить тип элементов массива

· определить число элементов

· выделить место в памяти.

При описании массива указывается максимально возможное значение элементов, причем это число первоначально определяется в разделе констант или непосредственно указывается в диапазоне индексов:

Массив целых чисел:

Var A: array[1..5] of integer;

Размер через константу

const N=5;

var A: array [1..N] of integer;

Массив можно описать либо введя в раздел type соответствующий тип, либо непосредственно в разделе переменных var.

Общий формат описания:

Type

<имя типа>=array [<диапазонов индексов>] of <тип элементов массива>;

или

var

<имя массива>: array [<диапазон индексов>] of <тип элементов массива>;

Тип индекса - ShortInt, Byte, Char, Boolean или интервальный тип. Тип элементов массива может быть любым, кроме файлового - целочисленным, вещественным, символьным, логическим, интервальным.

В программе вы можете использовать как массивы целиком, так и отдельные элементы массивов. Элемент одномерного массива записывается в виде:

имя массива [ индексное выражение ]

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

Примеры описания массивов:

Type

mas1=array [1..30] of integer;

mas2=array [1..10, 1..15] of real;

var

a: mas1;

b: mas2;

или без предварительного описания типа:

var a: array [1..30] of integer;

b: array [1..10, 1..15] of real;

Массивы разных типов:

var x,y: array [1..10] of real;

c: array [1..20] of char;

Другой диапазон индексов:

Var Q: array [0..9] of real;

C: array [-5..13] of char;

Индексы других типов:

var A: array [`A'..'Z'] of real;

1.2.1 Ввод(заполнение) и вывод элементов массива

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

Ввод (заполнение) элементов массива.

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

Для реализации этих действий удобно использовать цикл с заданным числом повторений («для»), в котором параметром цикла будет переменная - индекс массива.

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

1)с клавиатуры;

2)с помощью датчика случайных чисел;

3)с помощью формулы.

Пример: Заполнить массив А с клавиатуры

for i:=1 to 5 do

begin

write (`a[` , i, ']= ');

read (a[i]);

end;

a[1]=13

a[2]=10

a[3]=15

a[4]=20

a[5]=25

Заполнение массива случайными числами.

Число из интервала [0, M-1]: random (M)

Вещественное число от 0 до 1: Random

Числа из интервала [a,b]: random(b-a+1)+a

for i:=1 to 10 do

begin

a[i]:=random(101); {числа от 0 до 100}

end;

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

Заполнение массива с помощью формулы

Пример. Заполнить одномерный массив из 10 чисел по формуле b[i]:=i*3

Var b:= array [1..10] of integer;

i:integer;

begin

for i;=1 to 10 do

f[i]:=i*3;

end;

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

Для одномерного массива А из 3 элементов:

writeln(`Массив А:');

for i: = 1 to 3 do

write (A[i]:4); {конец цикла}

writeln; {перевод курсора на следующую строку}

Для двумерных массивов:

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

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

Рассмотрим процедуру формирования элементов двумерного массива b с помощью случайных чисел.

Считаем, что тип массива описан в основной программе:

type

mas2=array [1..10, 1..15] of real;

procedure vvod_dvum_sluch(n, m:byte; var b:mas2)

var i,j:byte;

begin

for i:=1 to n do

for j:=1 to m do

f[i,j]:=random(101);

end;

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

Procedure print_dvum_mas(n,m: byte; var b: mas2);

var i, j: byte;

begin

for i:= 1 to n do {внешний цикл}

begin

for j:=1 to m do

write(b[i,j]:5); {вывод одной строки - внутренний цикл}

writeln {перевод строки}

end; {конец внешнего цикла}

end; {конец процедуры}

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

Под сортировкой массивов понимают процесс перестановки элементов массива в определённом порядке.

Цель сортировки -- облегчить последующий поиск элементов в отсортированном массиве.

Методы сортировки важны при обработке данных, с ними связаны многие фундаментальные приёмы построения алгоритмов.

Сортировки могут быть выполнены с использованием различных алгоритмов: как простых, так и усложнённых (но более эффективных). Основное требование к методам сортировки: экономное использование памяти и быстродействие. Первое требование может быть выполнено, если переупорядочение элементов будет выполняться in situ (на том же месте). Хорошие алгоритмы сортировки требуют порядка п*log 2 n сравнений.

Простые методы сортировки можно разбить на три основных класса в зависимости от лежащего в их основе приёма:

1. сортировка выбором;

2. сортировка обменом;

3. сортировка включением.

Простые методы сортировки требуют порядка п*п сравнений элементов (ключей).

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

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

type vector=array[l..nmax] of real;

здесь nmax -- максимально-возможный размер вектора.

Простые методы сортировки.

Сортировка посредством простого выбора.

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

1. найти элемент с наибольшим значением;

2. поменять значениями найденный элемент и последний;

3. уменьшить на единицу количество просматриваемых элементов;

4. если <количество элементов для следующего просмотра больше единицы>то<повторить пункты, начиная с 1-го>.

Алгоритм:

Цикл по количеству просматриваемых элементов {i:= п,п- 1, ...,2}

{

Найти номер k максимального элемента среди а[1], а[2], ...,a[i];

Поменять местами значения элементов а[k] и а[i]

}

Процедура на Паскале:

procedure sort_choice (var а : vector; n : integer) ;

var x : real;

i,j,k : integer;

begin

for i :=n downto 2 do

begin

k:=l;

for j : =2 to i do

if a [ j ] >a [k] then к:=j ;

x:=a[k] ;

a[k] :=a[i] ;

a [i] :=x

end;end;

Сортировка обменом (методом пузырька).

Сортировка обменам предусматривает систематический обмен значениями (местами) тех пар, в которых нарушается упорядоченность, до тех пор, пока таких пар не останется.

Алгоритм:

Цикл по количеству просмотров

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

Если <упорядоченность в паре нарушена>то

<выполнить обмен значениями>.

Количество просмотров (повторений) во внешнем цикле равно п-1. Оно может быть уменьшено, если i-й шаг показал, что массив уже упорядочен (во внутреннем цикле не было перестановок).

Процедура на Паскале:

procedure sort_exghange (var а:vector; n:integer);

var i,j:integer;

x: real;

bound:boolean;

begin

bound:=true; i:=l;

while bound do

begin

bound:=false;

for j:=1 to n-i do

if a[j]>a[j+1] then

begin bound: =true ;

x:=a[j] ;

a[j] :=a[j+l] ;

a[j+l] :=x

end;

if bound then i:=i+1

end;

Сортировка включением.

Сортировка основана на следующем: предполагается, что элементы a[1], a[2], …, a[i-1] упорядочены, a[i] вставляется на соответствующее место, не нарушая свойства упорядоченности. Для этого a[i] сравнивается по очереди с a[i-1], a[i-2], ... до тех пор, пока не будет обнаружено, что элемент a[i] следует вставить между а[j] и а[j+1] (j - номер элемента в а[1 ... i-1], за которым следует вставить a[i]). Тогда элементы а[j+1], ..., а[i-1] сдвигаются на одну позицию вправо, а новая запись помещается в позицию j+1. Удобно совмещать сравнение и перемещение.

Procedure sort_include (var а:vector; n: integer);

var i, j : integer ;

x: real;

begin

for i:=2 to n do

begin

x: =a[i]; j:=i-1;

while (j> = l) and (x<a[j]) do

begin

a[j+1]:=a[j]; j:=j-l

end;

a[j+l]:=x

end

end;

Можно уменьшить количество сравнений при организации внутреннего цикла. Для этого используется метод барьера: вставляемое значение помещается в начало массива на дополнительное 0-е место (а[0]: = а [i]), диапазон индексов в определении типа vector расширяется:

type vector = array [о . . nmax] of real;

Получаем другой вариант сортировки методом включения:

procedure sort includel (var а:vector; n:integer);

var i,j:integer;

x : real;

begin

for i: =2 to n do

begin

x:=a[i]; a[0] :=x; j:=i-l;

while x<a[j] do

begin

a[j+l] :=a[j] ; j :=j-l

end;

a[j+1]:=x

end

end;

Глава 2. Практическое применение теории циклических структур и массивов данных

Задача №1

Используя все три вида операторов цикла составить программы табулирования функции y=tg(x/2)+cos(x) на отрезке [a, b] с шагом a=pi/2, b=pi, m=20 (m+1 - число повторений цикла).

1. Цикл «пока».

Алгоритм решения задачи

1. Взять первое значение аргумента.

2. Проверить удовлетворяет ли условию.

3.Если да, то

§ вычислить функцию;

§ вывести значение;

§ добавить шаг.

4.Завершить программу.

Текст программы

program z1_poka;

var x,y,a,b,h:real;m:byte;

begin

a:=pi/2;b:=pi;m:=20;

x:=a;

h:=(b-a)/m;

writeln('x':3,'y':10);

while x<=b do

begin

y:=sin(x/2)/cos(x/2)+cos(x);

writeln(x:5:3,y:10:3);

x:=x+h;

end;

end.

2. Цикл «до».

Алгоритм решения задачи

1. Взять первое значение аргумента.

2. Вычислить функцию.

3. Вывести значение функции.

4. Добавить шаг.

5. Проверить удовлетворяет ли условию.

§ если да, то перейти к шагу 2;

§ если нет, то завершить программу.;

Текст программы

program z1_do;

uses crt;

var x,y,a,b,h:real;m:byte;

begin

a:=pi/2;b:=pi;m:=20;

x:=a;

h:=(b-a)/m;

writeln('x':3,'y':10);

repeat

y:=sin(x/2)/cos(x/2)+cos(x);

writeln(x:5:3,y:10:3);

x:=x+h;

until x>b

end.

3. Цикл «для».

Алгоритм решения задачи

1. Взять первое значение аргумента.

2. Вычислить функцию.

3. Вывести значение функции.

4. Добавить шаг.

5. Перейти к следующему значению аргумента.

6. Если оно не превышает конечное значение, то повторить 2-5 шаги.

Текст программы.

program z1_dlya;

var x,y,a,b,h:real;m:byte;

begin

a:=pi/2;b:=pi;m:=20;

x:=a;

h:=(b-a)/m;

writeln('x':3,'y':10);

for m:=1 to 21 do

begin

y:=sin(x/2)/cos(x/2)+cos(x);

writeln(x:5:3,y:10:3);

x:=x+h;

end;

end.

Протокол программы

x y

1.571 1.000

1.649 1.003

1.728 1.014

1.806 1.035

1.885 1.067

1.963 1.114

2.042 1.178

2.121 1.263

2.199 1.375

2.278 1.520

2.356 1.707

2.435 1.950

2.513 2.269

2.592 2.693

2.670 3.274

2.749 4.103

2.827 5.363

2.906 7.477

2.985 11.719

3.063 24.455

3.142 44.000

Задача №2

Программа, печатающая таблицу значений функции

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

Алгоритм решения задачи.

1. Ввести исходные данные.

2. Взять первое значение аргумента.

3. Определить, какому из интервалов оно принадлежит.

4. Вычислить значение функции по соответствующей формуле.

5. Вывести строку таблицы.

6. Перейти к следующему значению аргумента.

7. Если оно не превышает конечное значение, повторить шаги 3-6, иначе закончить.

Шаги 3-6 повторяются многократно, поэтому для их выполнения надо организовать цикл. Назовем необходимые нам переменные так: начальное значение аргумента -- Хn, конечное значение аргумента -- Хk, шаг изменения аргумента -- dX, параметр -- t. Все величины вещественные. Программа выводит таблицу, состоящую из двух столбцов: значений аргумента и соответствующих им значений функции1.

var Xn,Xk,dX,t,x,y:real;

begin

writeln('введите Xn,Xk,dX,t');

readln(Xn,Xk,dX,t);

writeln( '-------------------' );

writeln('| X | Y |');

writeln( '-------------------');

x:=Xn;{Начальные установки}

while x<=Xk do begin{Заголовок цикла}

if x<0 then y:=t;

if (x>=0) and (x<10) then y:=t*x;

if x>=10 then y:=2 * t;

writeln( '|', x:7:2,'|',y:7:2,' |');

x := x + dX; {Модификация параметра цикла}

end;

writeln('-------------------');

end.

Задача №3

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

Алгоритм решения задачи.

1. Взять первое значение аргумента.

2. Проверить условия:

· трехзначные натуральные числа состоят из разных цифр

· число делится на 3.

3. Если число удовлетворяет условию, то значение k увеличиваем на единицу.

4. Перейти к следующему значению аргумента.

5. Если оно не превышает конечное значение, повторить шаги 2-4, иначе вывести количество чисел.

6. Завершить программу.

Текст программы

var i,k:integer;

begin

for i:=100 to 999 do

if (i div 100<> i div 10 mod 10)and(i div 100<>i mod 10)and (i div 10 mod 10<>i mod 10) and (i mod 3=0) then inc(k);

writeln(' количество ',k)

end.

Протокол программы

количество 228

Задача №4

Найти все такие тройки натуральных чисел x, y, z из интервала от 1 до 30, для которых выполняется равенство x*x-y*y+z*z=0.

Организуем вложенные циклы. Каждому значению первого аргумента подставляем все значения второго аргумента, каждому значению второго аргумента подставляем все значения третьего аргумента. Проверяем условие. Если оно выполняется, то выводим эти числа.

Текст программы

var x,y,z:1..30;

begin

for x:=1 to 30 do

for y:=1 to 30 do

for z:=1 to 30 do

if (x*x-y*y+z*z=0) then writeln(x:4,y:4,z:4); end.

Протокол программы

3 5 4

4 5 3

5 13 12

6 10 8

7 25 24

8 10 6

8 17 15

9 15 12

10 26 24

12 13 5

12 15 9

12 20 16

15 17 8

15 25 20

16 20 12

18 30 24

20 25 15

20 29 21

21 29 20

24 25 7

24 26 10

24 30 18

Задача №5

Даны два одномерных массива целых чисел (массив А, состоящий из 22 элементов, массив В - из 16 элементов), заполненных случайным образом числами из промежутка [-50,30]. Сформировать из элементов этих массивов два новых массива (C,D) (Ввод и вывод массивов оформить в процедурах). Массив С состоит из элементов исходных массивов, меньших первого элемента массива А, а массив D - больших второго элемента массива В.

Алгоритм решения задачи:

1. Организуем процедуру ввода элементов массива случайным образом.

2. Организуем процедуру вывода.

3. Выводим массивы A и В

4. Проверяем условие, что элементы массивов А и В, меньше первого элемента массива А.

5. Выводим массив С.

6. Проверяем условие, что элементы массивов А и В, больше второго элемента массива В.

7. Выводим массив D.

Текст программы

const n=22; const m=16;const l=-50; const p=30;

type mas=array[1..n+m] of integer;

var a,b,c,d:mas;

i,j,k,t:integer;

procedure vvod(y:integer;var z:mas);

var i:integer;

begin

for i:=1 to y do

z[i]:=random(p-l+1)+l;

end;

procedure vivod(y:integer;var z:mas);

var i:integer;

begin

for i:=1 to y do

write(z[i]:5);

writeln;

end;

begin

randomize;

vvod(n,a);

write(' A ');

vivod(n,a);

vvod(m,b);

write(' B ');

vivod(m,b);

write(' C ');

k:=0;

for i:=1 to n do

if a[i]<a[1] then begin

k:=k+1;

c[k]:=a[i];

end;

for j:=1 to m do

if b[j]<a[1] then begin

k:=k+1;

c[k]:=b[j];

end;

vivod(k,c);

write(' D ');

t:=0;

for i:=1 to n do

if a[i]>b[2] then begin

t:=t+1;

d[t]:=a[i];

end;

for j:=1 to m do

if b[j]>b[2] then begin

t:=t+1;

d[t]:=b[j];

end;

vivod(t,d);

end.

Протокол программы

A 15 -21 20 -23 -45 -9 -34 -35 -36 -10 -40 -17 -20 -14 -5 -47 -9 20 -7 8 7 11

B -42 -50 -7 -19 28 15 21 -9 -24 -31 10 5 -37 -40 22 24

C -21 -23 -45 -9 -34 -35 -36 -10 -40 -17 -20 -14 -5 -47 -9 -7 8 7 11 -42 -50 -7 -19 -9 -24 -31 10 5 -37 -40

D 15 -21 20 -23 -45 -9 -34 -35 -36 -10 -40 -17 -20 -14 -5 -47 -9 20 -7 8 7 11 -42 -7 -19 28 15 21 -9 -24 -31 10 5 -37 -40 22 24

Задача №6

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

Алгоритм решения задачи:

1. Ввести элементы массива.

2. Определить минимальный элемент.

3. Сместить элементы, начиная с минимального элемента, на одну позицию влево.

4. Вывести полученный массив.

Текст программы

const n=7;

var a:array[1..n] of integer;

i,min,m:integer;

begin

writeln('введите элементы массива A');

for i:=1 to n do

begin

write('a[',i,']=');

readln(a[i]);

end;

write('сформирован массив A[',n,']:');

for i:=1 to n do

write(a[i]:5);

writeln;

m:=1;

min:=a[1];

for i:=2 to n do

if a[i]<=min then

begin

min:=a[i];m:=i;

end;

writeln('минимальный элемент a[',m,']=',min);

for i:=m to n-1 do

a[i]:=a[i+1];

write('полученная массив B:');

for i:=1 to n-1 do

write(a[i]:5);

end.

Протокол программы

введите элементы массива A

a[1]=21

a[2]=32

a[3]=56

a[4]=23

a[5]=12

a[6]=36

a[7]=74

сформирован массив A[7]: 21 32 56 23 12 36 74

минимальный элемент a[5]=12

полученный массив B: 21 32 56 23 36 74

Задача №7

Дан двумерный массив целых чисел, состоящий из n строк и m столбцов, заполненный случайным образом числами из промежутка [-100,100]. Сформировать из элементов этого массива одномерный массив, каждый элемент которого равен сумме четных элементов соответствующей строки.

Алгоритм решения задачи:

1. Вывести массив случайным образом.

2. Найти четные элементы.

3. Найти сумму четных элементов в строке.

4. Вывести одномерный массив элементами, которого являются суммы четных элементов.

Текст программы

const n=6; m=7; t=-100; k=100;

var a:array[1..n,1..m] of integer;

b:array[1..n*m] of integer;

i,j,s:integer;

begin

writeln('исходный массив');

for i:=1 to n do begin

for j:=1 to m do begin

a[i,j]:= random(k-t+1)+t;

write(a[i,j]:5); end; writeln;

end;

writeln('новый массив');

for i:=1 to n do begin

for j:=1 to m do

if a[i,j] mod 2=0 then b[i]:=b[i]+a[i,j];

write(b[i]:5) ; end;

end.

Протокол программы

исходный массив

84 -36 17 -55 -48 11 38

23 84 -6 97 48 -30 -60

-77 26 -47 57 -36 8 -71

-25 100 -86 58 47 -22 57

-33 92 88 -93 -19 98 -97

-88 -32 -30 -52 -12 28 -83

новый массив

38 36 -2 50 278 -186

Задача №8

Заданы матрица размером (NxN) и число k (1<=k<=N).Столбец с максимальным по модулю элементом в k-й строке переставить с k-м столбцом.

Алгоритм решения задачи:

1. Ввести массив случайным образом.

2. Найти в k-ой строке максимальный по модулю элемент.

3. Поменять столбец в котором находится найденный элемент и k-й столбец.

4. Вывести новый массив.

Текст программы

const n=6; t=-100; z=100;

var a,b:array[1..n,1..n] of integer;

i,j,k,c,s,max:integer;

begin

writeln('исходный массив');

for i:=1 to n do begin

for j:=1 to n do begin

a[i,j]:= random(z-t+1)+t;

write(a[i,j]:5); end; writeln;

end;

readln(k);

c:=1;max:=a[k,c];

for j:=1 to n do

if (abs(a[k,j]))>max then begin max:=a[k,j];c:=j; end;

writeln('максимальный элемент по модулю =',max,' столбец с максимальным элементом=',c);

for j:=1 to n do begin

s:=a[i,c];

a[i,c]:=a[i,k];

a[i,k]:=s;end;

writeln('новый массив');

for i:=1 to n do begin

for j:=1 to n do

write(a[i,j]:5);

writeln; end;

end.

Протокол программы

исходный массив

24 82 -7 -57 29 -81

-98 -74 -16 -83 -76 26

30 87 34 85 -14 80

-13 55 9 40 75 49

-89 7 -83 5 -89 35

-26 -86 -8 -9 83 11

введите номер строки 1

максимальный элемент по модулю =82 столбец с максимальным элементом=2

новый массив

82 24 -7 -57 29 -81

-74 -98 -16 -83 -76 26

87 30 34 85 -14 80

55 -13 9 40 75 49

7 -89 -83 5 -89 35

-86 -26 -8 -9 83 11

Задача №9

Задан двумерный массив целых чисел размером n*m. Поменять местами в каждом столбце первый элемент с первым максимальным.

Алгоритм решения задачи:

1. Вывести массив случайным образом.

2. Найти максимальный элемент в столбце.

3. Поменять первый элемент с первым максимальный.

4. Вывести новый массив.

Текст программы

uses crt;

const n=5;m=6;

var

a:array[1..n,1..m] of integer;

d,max,i,j:integer;

begin

writeln('исходный массив');

randomize;

for i:=1 to n do begin

for j:=1 to m do begin

a[i,j]:=random(31)-10;

write(a[i,j]:5); end; writeln;

end;

max:=1;

for j:=1 to m do begin

for i:=2 to n do

if a[i,j]>a[max,j] then max:=i;

d:=a[1,j]; a[1,j]:=a[max,j]; a[max,j]:=d;

end;

writeln('новый массив');

for i:=1 to n do begin

for j:=1 to m do

write(a[i,j]:5);

writeln; end;

end.

Протокол программы

Исходный массив

16 -9 15 18 6 -10

8 17 3 14 14 -5

5 -4 9 -8 7 2

7 1 6 18 12 8

19 8 17 6 9 3

Новый массив

19 17 17 18 14 8

8 -9 3 14 6 -5

5 -4 9 -8 7 2

7 1 6 18 12 -10

16 8 15 6 9 3

Задача №10

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

Алгоритм решения задачи:

5. Вывести массив случайным образом.

6. Найти нечетные элементы.

7. Найти сумму нечетных элементов в столбце.

8. Вывести одномерный массив элементами, которого являются суммы нечетных элементов.

Текст программы

const n=5;m=3;t=0;k=120;

var i,j:integer;

a:array[1..n,1..m] of integer;

b:array[1..n*m] of integer;

begin

randomize;

writeln('исходный массив');

for i:=1 to n do begin

for j:=1 to m do begin

a[i,j]:=random(k-t+1)-t;

write(a[i,j]:5); end;

writeln;end;

for j:=1 to m do

for i:=1 to n do

if a[i,j] mod 2<>0 then b[j]:=b[j]+a[i,j];

writeln('новый массив');

for j:=1 to m do write(b[j]:5);

end.

Протокол программы

Исходный массив

32 38 54

72 96 71

9 88 104

27 25 63

52 32 40

Новый массив

36 25 134

Задача №11

Заданы матрица размером (NxN) и число k (1<=k<=N). Строку с максимальным по модулю элементом в k-й строке переставить с k-й строкой.

Алгоритм решения задачи:

1. Ввести массив случайным образом.

2. Найти в k-ой строке максимальный элемент.

3. Поменять строку с индексом максимального элемента и строку k.

4. Вывести новый массив.

Текст программы

const n=6; t=0; z=100;

var a,b:array[1..n,1..n] of integer;

i,j,k,c,s,max:integer;

begin

writeln('исходный массив');

for i:=1 to n do begin

for j:=1 to n do begin

a[i,j]:= random(z-t+1)+t;

write(a[i,j]:5); end; writeln;

end;

write('введите номер строки ');

readln(k);

c:=1;max:=a[k,c];

for i:=1 to n do

if (abs(a[k,j]))>max then begin max:=a[k,j];c:=j; end;

writeln(' максимальный элемент =',max,' индекс максимального элемента=',c);

for j:=1 to n do begin

s:=a[k,j];

a[k,j]:=a[c,j];

a[c,j]:=s; end;

writeln('новый массив');

for i:=1 to n do begin

for j:=1 to n do begin

write(a[i,j]:5); end;

writeln;end;

end.

Протокол программы

Исходный массив

23 43 88 64 86 50

42 74 82 58 4 77

31 46 52 4 11 69

90 41 39 48 73 72

97 60 70 78 7 83

71 33 10 41 21 72

Введите номер строки 3

Максимальный элемент =69 индекс максимального элемента=6

Новый массив

23 43 88 64 86 50

42 74 82 58 4 77

71 33 10 41 21 72

90 41 39 48 73 72

97 60 70 78 7 83

31 46 52 4 11 69

Задача №12

Задан двумерный массив целых чисел размером n*m. Найти номер столбца, содержащего наибольшее количество нулей.

Алгоритм решения задачи:

1. Вывести массив случайным образом содержащий: -1, 0, 1.

2. Найти количество нулей в столбце и вывести его в одномерный массив.

3. Найти максимальный элемент в одномерном столбце.

4. Вывести номер максимального элемента.

Текст программы

const n=5;m=4;

var i,j,max,jmax:integer;

a:array[1..n,1..m] of integer;

b:array[1..m] of integer;

begin

randomize;

writeln('массив');

for i:=1 to n do begin

for j:=1 to m do begin

a[i,j]:=random(3)-1;

write(a[i,j]:5); end;

writeln;end;

for j:=1 to m do

begin

b[j]:=0;

for i:=1 to n do

if a[i,j]=0 then b[j]:=b[j]+1;

end;

max:=b[1]; jmax:=1;

for j:=2 to m do begin

if b[j]>max then begin

max:=b[j]; jmax:=j;end;

end;

writeln(' Наибольшее количество нулей в ',jmax ,' столбце');

end.

Протокол программы

массив

0 0 1 -1

0 0 0 1

1 0 1 1

1 -1 -1 1

1 0 -1 -1

Наибольшее количество нулей в 2 столбце

Заключение

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

· цикл for (цикл «ДЛЯ», цикл со счетчиком, здесь значения должны иметь порядковый тип, т.к. значение переменной цикла увеличивается или уменьшается на один при каждой итерации цикла);

· цикл while-do (цикл «ДО», цикл с предусловием будет выполняться до тех пор пока выражение принимает истинное значение, но стоит выражению принять ложное значение, то осуществляется переход к следующему оператору);

· цикл repeat-until (цикл «ПОКА», цикл с постусловием ведет себя противоположно циклу «ДО», т.е. пока выражение ложное тело цикла продолжается, как только логическое выражение станет истинным, цикл прекратится).

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

Код любой программы должен быть читаемым. Для того чтобы код был читаемым, он должен удовлетворять некоторым требованиям по форматированию кода и стилю его написания.

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

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

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

Список использованной литературы

1. Черкасов М.А. Практический курс программирования на паскале: Учебное пособие. - М.: МАИ, 2005.-186 с.:ил.

2. Павловская Т.А. Паскаль. Программирование не языке высокого уровня: Учебник для вузов.- СПб.: Питер,2007. - 393с.:ил.

3. Рапаков Г.Г.. Ржеуцкая С.А. Программирование на языке Pascal: - СПб.: БХВ, 2004. - 282с.

4. Григорьев С.А. Программирование на языке Паскаль для математиков: Учебное пособие. - Калининград: Калинингр. ун-т., 1997. - 92с.

5. Угольницкий Г.А. и др. Методы программирования. Учебное пособие. 2-ое издание. - М.:Вузовская книга, 2000. - 280с.

6. Прайс Д. Программирование на языке Паскаль: Практическое руководство. Пер. с англ. - М.: Мир, 1987. - 232с., ил

7. Пильщиков В.Н. Сборник упражнений по языку Паскаль: Учебное пособие для вузов. - М.: Наука. Гл. ред. физ-мат. лит., 1989. - 160с.

8. Богатырев Р. Журнал «Мир ПК» выпуск №4/2001 от 17.04.2001, с.58

9. Вылиток А.А., Матвеева Т.К. Динамические структуры данных. Задание практикума. Язык Паскаль. // Учебно-методическое пособие. - М.: Издательский отдел Факультета ВМиК МГУ им. М.В. Ломоносова, 2005. - с. 8-20.

10. Грогоно П. Программирование на языке Паскаль. -- М.: Мир, 1982. -- с. 108

11. Ключарев А.А., Матьяш В.А., Щекин С.В. Структуры и алгоритмы обработки данных: Учебное пособие - СПбГУАП. СПб,2003 - с. 21-30

12. Моргун А. Н. Программирование на языке Паскаль (Pascal). Основы обработки структур данных. - М.: Диалектика, 2005. -- с. 576

13. Максимова Т.М. Программирование на языках высокого уровня: Методические указания к выполнению курсового проекта. - СПб.: ГУАП, 2005. - с.27

14. Перминов О.Н. Программирование на языке Паскаль:Справочник.- М.: Радио и связь, 1998. - с.243-304

15. Подвальный С.Л., Холопкина Л.В., Носачева М.П. Программирование на языке Паскаль: практикум - 2008, с.24

16. Сулейманов Р.Р. Методика решения учебных задач средствами программирования//Методическое пособие - М: 2010, с. 112

17. Трофимов С.П. Программирование на языке высокого уровня: Рабочая программа дисциплины. - Екатеринбург: ГОУ ВПО УГТУ-УПИ, 2005. - с.12

18. Шумова Е.О., Рачева Н.В. Программирование на языке высокого уровня: Методические указания к курсовой работе. - СПб.: СЗТУ, 2002. - с.36

19. Игошина Л.В. Программирование на языке высокого уровня. Рабочая программа дисциплины. - Пенза: ПГУ, 2004. - с.5

20. Йенсен К., Вирт Н. Паскаль. Руководство для пользователя и описание языка.//Пер. с англ. и предисл. Д.Б.Подшивалова - М.: Финансы и статистика,1989. - с. 151

Размещено на Allbest.ru


Подобные документы

  • Решение задач, прямо связанных с применением циклов и массивов. Условия применения различных видов циклической структуры. Операторы цикла с предусловием while, постусловием do-while и for. Особенности работы с одномерными и двумерными массивами.

    курсовая работа [1,1 M], добавлен 31.08.2019

  • Применение циклической управляющией структуры для организации многократного выполнения некоторого оператора. Конструкция цикла: заголовок и тело, и алгоритм выполнения операторов while, do while и for. Отличия циклов с постусловием и предусловием.

    контрольная работа [65,8 K], добавлен 30.12.2010

  • Основные типы циклов программирования. Методы применения специальных функций break, continue и цикла while. Обработка массивов информации. Условия применения циклических алгоритмов на языке программирования С++. Инициализация одномерного массива.

    курсовая работа [1,7 M], добавлен 06.01.2014

  • Изучение понятия и основных видов массивов. Ввод массива с клавиатуры и вывод на экран. Сортировка массивов. Метод простых обменов (пузырьковая сортировка). Сортировка простым выбором и простым включением. Решение задач с использованием массивов Паскаля.

    курсовая работа [82,1 K], добавлен 18.03.2013

  • Широкое использование компьютерных и информационных технологий. Концепции типов данных. Алгоритмы сортировки одномерных массивов. Описание двумерного массива Паскаля. Методы доступа к элементам массивов. Индексные, динамические и гетерогенные массивы.

    курсовая работа [66,3 K], добавлен 07.12.2010

  • Общие сведения об алгоритмах. Свойство и этапы построения алгоритма. Нисходящее проектирование программ. Основные алгоритмические структуры. Принципы структурной алгоритмизации. Массивы случайных чисел. Ввод исходных данных. Определение и вывод данных.

    методичка [435,3 K], добавлен 09.12.2014

  • Особенности использования переменных вещественного типа в программе. Основные виды типов данных: простые, структурированные, указатели, процедурные, объекты. Работа и структура оператора while. Характеристика основных отличий while от оператора repeat.

    контрольная работа [31,4 K], добавлен 17.08.2010

  • Составление алгоритмов и написание программ циклической структуры с использованием векторов, указателей и векторов указателей на вектор на языке C++. Статическое и динамическое распределение памяти. Функция ввода и обработки элементов вектора или матрицы.

    контрольная работа [210,5 K], добавлен 25.03.2015

  • Простейшая программа на языке С++. Вывод данных на экран. Реализация функций в тексте программы. Создание программ для выполнения в среде MS DOS, Windows. Знакомство с операторами языка. Оператор цикла в форме for. Одномерные и многомерные массивы.

    курс лекций [264,8 K], добавлен 27.07.2010

  • Представление (построение, создание) списка данных в виде линейного однонаправленного списка. Формирование массива данных. Вывод данных на экран. Алгоритм удаления, перемещения данных. Сортировка методом вставки. Алгоритм загрузки данных из файла.

    курсовая работа [2,1 M], добавлен 16.05.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.