Меню

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

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

Теоретический материал (Паскаль)

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

Можно, конечно, циклы со счетчиком моделировать при помощи операторов while и Repeat, но структура цикла со счетчиком проще.

Общая форма записи цикла со счетчиком

for i := A to B do
begin
. . .
end;

for i := A downto B do
begin
. . .
end;

Здесь переменная i — управляющая переменная или переменная цикла,

А — начальное значение переменной цикла,

В — конечное значение переменной цикла.

При переходе к обработке оператора цикла for управляющей переменной присваивается заданное начальное значение. Затем в цикле выполняется исполнительный оператор (или составной оператор). Каждый раз при выполнении исполнительного оператора управляющая переменная увеличивается на 1 (для for. to) или уменьшается на 1 (для for. downto). Цикл завершается при достижении управляющей переменной своего конечного значения.

1) for i := 1 to ListSize do
begin
readln (Number):
S := S +Number;
end;

2) for Dlina := 15 downto 1 do
writeln (Sqr(Dlina));

3) for x := 1 to 10 do
for y := 1 to 10 do
writeln (x,’*’,y,’=’,x*y);

4) for Range := Number+1 to Multi*3 do
writeln (Sqrt(Range));

При использовании цикла for компьютер выполняет за программиста черновую работу по инициализации управляющей переменной и по ее увеличению (уменьшению) при каждом повторении цикла. Единственное ограничение заключается в том, что тип управляющей переменной не должен быть real. Переменная цикла не должна изменяться какими-либо операторами внутри цикла. К ней можно обращаться и использовать в вычислениях, но нельзя присваивать новое значение. Присваивания могут выполняться только механизмом самого цикла. Таким образом, следующий цикл является некорректным:

for i := 1 to 10 do
begin
. . .
i := i-1;
. . .
end;

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

Внимание! Следует помнить, что управляющая переменная не может быть типа real.

Исполнительная часть цикла может быть либо простым, либо составным оператором. Если начальное значение цикла for . to больше конечного значения, то никакие операции не выполнятся. Таким образом, следующий оператор не приведет ни к каким действиям

for j := 1 to 0 do
writeln (j);

Однако цикл, представленный в такой форме, распечатает целые числа от единицы до десяти:

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

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

for j := 10 downto 1 do
writeln (j);

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

for х:= 1 to 10 do
for у:= 1 to 10 do
writeln (‘(‘,х,’,’,y,’), ‘);

Задание. Выполните две задачи, уже решенные Вами задачи с помощью других видов цикла, с помощью со счетчиком.

Источник

Какой тип переменной надо использовать в счетчике цикла и объявлении массива?

В любом языке программирования всегда все борятся за то, чтобы программа кушала как можно меньше памяти. Как бы не было утечки. Особенно в C++ нужно корректно выделять, освобождать.

Читайте также:  Принцип работы счетчика рядов для вязания

Каждый тип данных занимает сколько-то места в памяти в байтах.

Примеры буду писать на C#

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

Почему счетчик типа int ? Почему не sbyte или byte ? Да, может она отработает быстро в данной области видимости. Но таких блоков много же по коду.

Аналогично с массивами. Зная точно длину (Поправочка. Т.к. ответы уже есть, а вопрос был задан. немного сбил с толку. : не длину, кончено же, а точно зная максимальные числа.. к примеру что будут числа от 1 до 100 ). Все равно зачастую все объявляют

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

Так отсюда вопрос. Почему так все делают? Я чего-то не знаю еще пока или это просто лень программисткая?

4 ответа 4

Ваше основное предположение — экономия памяти любой ценой — неверно.

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

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

Ещё пример — loop unrolling и function inlining. Оптимизирующий компилятор разворачивает цикл

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

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

С этой точки зрения та деталь, что данные массив имеет конкретно 10 элементов, и для его индексации можно было бы использовать 4 бита (экономия!), просто игнорируется. Кроме того. возможность индексации «узким» типом данных не проверяема компилятором, а значит, если завтра этот код получит на вход массив с бОльшим количеством элементов, код молча перестанет работать.

Правильный современный подход к перебору элементов массива таков:

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

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

Источник



Цикл со счетчиком

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

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

Читайте также:  Sharp ar 5620n сброс счетчика

Почему цикл? Согласно практике (моей) – анализ циклов вызывает затруднения и наибольшее число ошибок, поэтому делается акцент на цикл. Почему со счётчиком? А если с ним разобраться сразу и основательно, остальные даются «легко и непринуждённо».

Зададим структуру урока.

Предположим, урок содержит три основных этапа (таких родных и близких).

  1. Актуализация знаний.
  2. Изучение нового материала.
  3. Применение приобретенных знаний и отработка навыков.

1. Актуализация.

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

2. Новая информация.

Выдаём по иерархическому принципу, то есть «потомок может иметь только одного родителя, а родитель может иметь множество потомков». Здесь, пожалуйста, и кластеры, и домены, и суффиксы, и префиксы. А в терминах ООП (объектно-ориентированного программирования) – классы, образцы класса, наследуемые признаки, и т.д. и т.п. Ещё иногда называют «маяковый» метод – «в темную большую комнату кидают факелы, а затем разглядывают, что вокруг них». Главное – каждый сам для себя фиксирует нужную информацию, и разные записи конспектов приветствуются, как и разные формулировки.

3. Закрепление.

Главное, на мой взгляд, дать почувствовать каждому ученику уверенность в совершаемых действиях. Решающим являются навыки самоконтроля и самопроверки – всегда есть множественность выбора (хотя бы два). Если выбора нет, это должно вызвать подозрение на ошибочность рассуждений. Хорошо, если один высказывается, а другой ищет слабые места или нечто аналогичное. Возможен похожий диалог с компьютером. И даже интерактив здесь будет уместен.

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

Первый вопрос зададим в лоб: — Какие образы, впечатления, ассоциации у вас вызывает слово «цикл»? (Высказывания учеников).

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

— Цикл, дословно с греческого – круг. Какие действия можно назвать циклом? (Высказывания учеников).

— Итак, цикл – повторяющееся действие. А может действие повторяться бесконечно? Что бы нам ещё хотелось? (Высказывания учеников).

— Итак, цикл – повторяющееся действие + условие.

Можно вспомнить сказки – дед тянул репку, позвал бабку, позвал внучку, позвал Жучку и т.д. Какое действие? Тянул. Какое условие? Пока не вытянул. Другие примеры циклов.

— А теперь вспомните «семь раз отмерь – один раз отрежь». Какое условие? (Высказывания учеников).

— Да, здесь считаем. Для счёта надо задать начало и конец – от .. и до .. (Высказывания учеников).

Читайте также:  Метрологические характеристики счетчиков электрической энергии

— Начинать можно с «0», с «1», да и вообще с чего угодно! Как Робинзон Крузо считал дни? (Ставил зарубки).

— А начал он с какого числа? (С того, когда попал на остров).

— Другие ставят палочки на листке бумаги, иногда одну за несколько единиц. Кто покупал куриные яйца? Как их вам считали? (Парами).

— Это называется шагом. Можно считать десятками, сотнями, любым удобным шагом.

— Итак, действие, выполняемое определенное количество раз – это цикл со счётчиком. Здесь нужен помощник, который следит от какого до какого и через сколько. Вот этот помощник и есть счётчик. Вы сдаёте норматив по подтягиванию на перекладине, а кто-то стоит рядом и считает. Изобразим:

— Для записи на языке программирования нам понадобится переменная счётчика, а что ещё? (Начальное её значение, конечное значение и шаг).

— А какой минимум служебных слов? (Высказывания учеников).

— Минимум 4 служебных слова: «для» For, «до» To, «шаг» Step, «следующий» Next.

Читаем: для икс от 1 до 10 с шагом 2 делаем следующий икс.

Если шаг равен единице (что бывает очень часто), то Step не пишется (говорят «по умолчанию — default — шаг равен единице»). Теперь рассмотрим пример:

For x=3 To 10 Step 5
y= x*x
Next x

— Проанализируем, сколько шагов сделает цикл? Какое значение икс получит по завершении цикла? (Ответ: 2 шага, x=13).

— А какое значение будет у игрек? (Ответ: y=64).

— Переменная цикла может изменяться в цикле. Сами считаем:

For x=2 To 6 Step 2
x= x+x
Next x

(Ответ: 2 шага, x=14).

— Подробно (кто-нибудь, кто быстро въехал):

x=2 (присвоили переменной цикла начальное значение).

x=4+2 (Next к x прибавляется шаг, теперь x=6).

6>6 (сравниваем переменную цикла с конечным значением) – нет – возврат.

x=6+6 (новое значение x=12).

x=12+2 (Next к x прибавляем шаг, теперь x=14).

14>6 (сравниваем x с конечным значением) – да – стоп, выход из цикла.

Теперь сами пыхтим над заданиями. Разбиваемся на группы (например, по два человека).

— Я вам даю ответ примера с отрицательным шагом, а вы сами определите (догадайтесь здесь нехорошее слово – нужна уверенность), что здесь меняется и выполните упражнения.

For x=9 To 2 Step -5
x= x+1
Next x

— Цикл совершит 2 шага, а переменная цикла на выходе будет =1.

Делают упражнения по карточкам.

— Следующий раз разберём выход из цикла по условию и рассмотрим циклы с пост- и предусловием.

Подводим итоги. Награждаем хвалебными словами. Высказываем замечания. Задаём и, при необходимости, поясняем домашнее задание.

Один из вариантов самостоятельной работы

    Определите, какое количество раз выполняются операторы цикла?

FOR X = 10 TO 12 STEP 2
Y = X*X
NEXT X

FOR X = 3 TO 5
X = X+1
NEXT X

FOR X = 1 TO 12 STEP 5
X = 2*X
NEXT X

FOR X = -2 TO 1
X = -X
NEXT X

FOR X = 3 TO 1 STEP –2
X = X-2
NEXT X

FOR X = 14 TO 19 STEP 6
X = 6*X
NEXT X

FOR X = 4 TO 12 STEP 5
X = 2*X
IF X>7 THEN EXIT FOR
NEXT X

  • Какое значение выдаст программа на экране монитора?
  • FOR X = 1 TO 17 STEP 9
    IF X>12 THEN EXIT FOR
    X = 2*X
    NEXT X

    Источник