Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Р6_Влож_Циклы_печать.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
330.75 Кб
Скачать

  1. Какой тип переменной Счётчик в операторе For?

  2. К какому типу выражений принадлежит Условие в операторах While и Repeat?

  3. Каков синтаксис описания одномерных массивов?

  4. Какой тип могут иметь индексы массива?

  5. В чём особенность открытых параметров массива в процедурах?

  6. Какие значения возвращают функции Low(M) и High(M), если М массив?

  7. В чём особенность динамических массивов?

  8. Как описывают динамический массив?

  9. Как задать размер динамического массива?

6. Вложенные циклы

6.1 Цель работы

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

6.2Заданиe

1. Задайте массив M x N, выполните действия для Вашего варианта. Ввод массива вручную.

  1. Найдите наибольший элемент, укажите его положение.

  2. Найдите столбец с наибольшей суммой.

  3. Найдите столбец с наименьшей суммой.

  4. Найдите сумму элементов каждой диагонали.

  5. Найдите строку с наибольшей суммой.

  6. Найдите строку с наименьшей суммой.

2. Задайте таблицу M x N, выполните действия для Вашего варианта. Ввод данных вручную.

  1. Найдите наибольший элемент, укажите его положение.

  2. Найдите столбец с наибольшей суммой.

  3. Найдите столбец с наименьшей суммой.

  4. Найдите сумму элементов каждой диагонали.

  5. Найдите строку с наибольшей суммой.

  6. Найдите строку с наименьшей суммой.

6.3Теоретические сведения

В качестве оператора в теле цикла можно использовать практически любой оператор, в том числе For, While, Repeat. Такие конструкции называют конструкциями с вложенными циклами. При выборе оператора повторений следует учитывать:

  • оператор For применяют только при известном заранее количестве повторений;

  • операторы While и Repeat управляют повторениями по логическому условию;

  • оператор, находящийся в теле цикла Repeat, всегда будет выполнен минимум один раз;

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

Ниже приведены фрагменты алгоритмов с вложенными циклами.

Пример 1. Ручной ввод массива в поле tEdit

Дано: LabeledEdit1.Text – поле ввода в которое вручную введён массив как строка текста;

введённые значения соответствуют алфавиту вещественных чисел и разделены пробелами;

переменная Mx: T_M - динамический массив (T_M = array of Real); Label1.Caption - метка для вывода номера элемента массива i, и значения элемента массива Mx[i];

Требуется сформировать из данных поля ввода числовые значения массива Mx.

Постановка задачи.

  • для выделения одного элемента массива из строки LabeledEdit1.Text, будем в цикле считывать по одному символы и вставлять их во вспомогательную строку S, пока не достигнем пробела, LabeledEdit1.Text[j] <> ' ')

  • количество считанных символов фиксирует счётчик элементов текстовой строки j;

  • количество сформированных строк фиксирует счётчик числового массива i;

  • преобразуем вспомогательную строку S в элемент массива Val(S, Mx[i], Cod);

  • эти действия будем повторять, пока количество считанных символов меньше или равно длине строки ввода, j <= Length(LabeledEdit1.Text.

procedure TForm1.Button1Click(Sender: TObject);

Var Cod, i, j : Integer; //Cod – индикатор преобразования Строка-Число;

// i – счётчик числового массива, j – счётчик элементов текстовой строки

S: String; //вспомогательная строка, для формирования очередного элемента

begin

i:=0; J:=0; //обнуление счётчиков

Label1.Caption:= ''; //очистка метки вывода

Repeat //повторять, пока условие «Until ….» не станет true

inc(j); //увеличивает j на 1, при первом вхождении j=1

S:=''; //очистка вспомогательной строки

{Пока «очередной символ не пробел» и «счётчик j меньше или равен длине строки, повторять}

While (LabeledEdit1.Text[j] <> ' ') and (j <= Length(LabeledEdit1.Text)) do

begin

S:= S + LabeledEdit1.Text[j]; //к S присоединяется очередной символ

Inc(j); //j увеличился на 1, переход на новый виток цикла While

end; //конец While, в S символы одного элемента массива

Val(S, Mx[i], Cod);

//Преобразование символов S в элемент числового массива Mx[i]

if Cod <> 0 //контроль, если Cod =0 – преобразование успешное

then begin //ошибка преобразования

ShowMessage('Недопустимый символ!' );

Label1.Caption:= ''; //очистка метки вывода

exit; //досрочное завершение цикла Repeat

end;

{Преобразование было успешным. Далее вывод счётчика i, табуляция (#9), вывод элемента массива Mx[i], символы конца строки}

Label1.Caption:= Label1.Caption+

IntTostr(i)+#9+ FloatToStr(Mx[i])+#10#13;

inc(i); //увеличивает i на 1

{Если i < старшего индекса массива или j < длины строки цикл Repeat продолжать}

Until (i>High(Mx)) or (j> Length(LabeledEdit1.Text)); //конец цикла Repeat

end;

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