НОУ ИНТУИТ | Лекция | Управляющая конструкция if, цикл for
< Лекция 33 || Лекция 4: 123
Аннотация: Здесь вы познакомитесь со строковыми, символьными и логическими типами данных. Изучите управляющую конструкцию if и цикл for, познакомитесь с «программными скобками». Напишете приложение, используя пройденный материал.
Ключевые слова: компьютер, таблица символов, MS-DOS, ASCII, таблица, максимум, бит, Windows, ANSI, потребности пользователей, Unicode, shortstring, LongString, длина, текстовый файл, тип данных, widestring, pchar, пробел, ansichar, widechar, логический тип, выражение, истина, ложь, boolean, логические выражения, равенство, значение, программные скобки, управляющие, управляющая конструкция, синтаксис, операторы, слово, блок операторов, цикла, память, счетчик, компонент, приложение, функция, вещественное число, вызов функции, целое число, параметр, программа
Строковые типы данных
Мы уже работали со строковым типом данных String. Однако, как и в случае с цифрами, бывает несколько строковых типов. Строка состоит из набора символов. Компьютер работает в двоичной системе исчисления, он работает только с цифрами. И символы компьютер воспринимает в виде цифр. Для этого в операционной системе существует таблица символов, где каждому символу соответствует какая либо цифра.
Самая первая таблица символов, созданная для операционной системы MS-DOS, называлась ASCII. Эти символы были 7-ми битными, как следствие, таблица содержала максимум 128 символов. Поскольку в одном байте содержится 8 бит, один бит терялся впустую. У этой таблицы были свои языковые расширения, то есть, для каждого языка делалась своя такая таблица.
Для операционной системы Windows была разработана таблица символов ANSI, которая используется по сей день. Эта таблица использует 8-ми битные символы, то есть, содержит 256 символов, от 0 до 255. В Delphi такая таблица используется, как основная.
Для того, чтобы удовлетворить потребности пользователей других языков, была создана таблица UNICODE. Эта таблица использует 16 бит, и в нее помещается от 0 до 65 535 символов. Эта таблица, начиная с Windows 2000, используется все более широко, и когда-нибудь станет стандартом, но пока что она встречается гораздо реже, чем ANSI.
Имеются следующие строковые типы данных:
ShortString – короткая строка из ANSI символов. Количество символов может быть от 0 до 255
. Иными словами, строку длиной более 255 символов в ShortString записать нельзя.LongString – длинная строка из ANSI символов. Длина строки здесь почти не ограничена, в одну переменную такого типа можно записать текстовый файл с романом «Война и мир». Этот тип используется по умолчанию, то есть, когда мы указываем тип String, подразумевается именно этот тип данных. С ним нам чаще всего и придется работать.
WideString – длинная строка из UNICODE символов. От LongString отличается только тем, что использует иную таблицу символов.
Существует еще один тип строк – PChar. Этот тип работает с процессором совершенно иначе, чем предыдущие типы строк. Он очень неудобен в использовании и остался для совместимости с программами старых версий. Кроме того, встроенные в Windows функции работают именно с таким типом данных, поэтому его все же придется использовать. Когда мы начнем работать с этими функциями, разберем этот тип подробней.
Символьные типы данных
Программисту приходится работать не только со строками, но и с отдельными символами. Символ – это любая буква, цифра, арифметический знак, знаки препинания или пробел. Кроме того, существуют специальные символы, например, символ перехода на новую строку. Delphi поддерживает два типа символьных данных:
AnsiChar – символ ANSI таблицы. Используется по умолчанию, то есть, когда мы указываем тип Char, подразумеваем именно этот тип.
WideChar – символ UNICODE таблицы. Разница между ними такая же, как и у строк этих типов.
Как и в случае со строками, программист обычно объявляет тип Char, что соответствует типу AnsiChar.
Логический тип данных
Логический тип данных используется в условных выражениях. Он необходим для создания логики программы. Условное выражение проверяет – соответствует ли действительность заданному условию? Если соответствует, то выражение возвращает результат True (Истина). Если не соответствует, то возвращается False (Ложь). Таким образом, логический тип данных может иметь только одно из двух этих значений.
Boolean – логический тип данных.
В таблице 4.1 приведены операнды, с помощью которых формируют логические выражения:
Логическая операция | Описание | Логическая операция | Описание |
---|---|---|---|
= | Равно | >= | Больше или равно |
> | Больше | <= | Меньше или равно |
< | Меньше | <> | Не равно |
== | Точное равно |
a = b;
Если в обоих переменных хранится одно и то же значение, то результатом такого сравнения будет True, иначе – False.
Дальше >>
< Лекция 33 || Лекция 4: 123
Цикли
Алгоритми розв’язку багатьох задач є циклічними, тобто для досягнення результату певна послідовність дій повинна бути виконана кілька разів.
Наприклад, програма контролю знань виводе питання, приймає відповідь, оцінює її певною кількістю балів, які додає до загальної кількості балів. Ця послідовність дій відбувається кілька разів, доки будуть виведені всі питання.
Другий приклад. Обчислити вираз: √15+√16+…√32.
Хід виконання розрахунків можна описати таким чином, як приведено в фрагменті блок-схеми.
З цього фрагменту алгоритму видно, що одна й та сама команда повторюється багаторазово, змінюється при цьому тільки підкореневий вираз – зростає на 1. Але виконувати запис цієї команди також багаторазово не раціонально. На всіх мовах програмування є команди циклу, команди, які дозволяють зробити запис якоїсь послідовності команд один раз, але виконуватись вона буде багаторазово. Цю послідовність команд будемо називати тілом циклу, або просто циклом.
Іноді з умови задачі відома кількість повторення циклу. Тоді такий циклічний процес можна описати в блок-схемі за допомогою приведеної на малюнку конструкції:
I – змінна, параметр циклу;
N – початкове значення параметру циклу;
K – кінцеве значення параметру циклу;
H – крок — різниця між послідовними значеннями параметру циклу.
Команда повторення дозволяє виконати послідовність команд, які в конструкції задаються як тіло циклу, для кожного значення параметру циклу, що змінюється від N до К з кроком зміни H.
Така структура може бути використана в випадках, коли з умови задачі відомо, скільки разів треба виконати цикл. Але іноді невідомо, скільки разів треба виконати цикл, щоб досягти певної мети, умови. В таких випадках зациклення організоване за допомогою структур, що мають назву «Цикл з передумовою», або «Цикл з післяумовою». Зациклення відбувається до тих пір, доки не буде досягнута певна умова – співвідношення величин, хоч одна з яких змінюється в циклі.
На мові програмування Delphi для зациклювання використовуються такі оператори циклу:
1. Цикл з параметром:
For I : = N to K do ;
При цьому крок зміни параметра завжди дорівнює 1, і параметр циклу – цілого типу. Якщо параметр циклу треба зменшувати на 1, то використовуємо оператор циклу:
For I : = N downto K do ;
2. Цикл з передумовою:
While do ;
3. Цикл з післяумовою:
Repeat until ;
Якщо тіло циклу складається з кількох операторів, то перетворюємо їх в один за допомогою операторних дужок begin і end.
Розглянемо проект приведеної на початку задачі: Обчислити вираз √15+√16+…√32 , але ускладнимо задачу тим, що початкове та кінцеве натуральне число визначає користувач. Приведене вікно програми та вікно з кодом процедури обробки події – кліk по кнопці СТАРТ.
Для зациклення розрахунків використаний оператор циклу з параметром. Параметром є змінна І цілого типу. Тіло циклу складається з одного оператора накопичення суми: s:=s+sqrt(i).
Розглянемо задачу: знайти найбільший спільний дільник 2 -х натуральних чисел. Використаємоалгоритм Евкліда. Евклід пропонує зменшувати більше з двох цілих чисел на величину меншого до тих пір, доки вони стануть рівними.
На малюнку приведена блок-схема алгоритму. З умови задачі невідомо, скільки разів доведеться виконувати цикл. Але відома умова, при досягненні якої розрахунки закінчуються. В таких випадках використовують оператор циклу з післямовою або оператор циклу з передумовою.
Початкові дані – 2 натуральні числа, їх введення зазвичай визначаємо через рядок введення – Edit1 і Edit2. Поряд з вікном введення – коментарі за допомогою міток Label1 і Label2. Початок розрахунків – клік по кнопці Button1. Виведення результату – в мітку.
Розглянемо вікно проекту та код процедури.
В математиці часто доводиться дослідити поведінку функції на інтервалі. Властивості функції легко визначити, маючи таблицю значень аргументу на інтервалі та відповідних значень функції.
Алгоритм отримання такої таблиці в програмуванні має назву «Табуляція функції». Для його реалізації використана циклічна структура «цикл з передумовою». В вікнах проекту використаний оператор «Цикл з перемовою».
В вікнах проекту використаний оператор «Цикл з перемовою».
Для переходу друку кожного нового рядка таблиці на новий рядок в мітці використана функція chr (13), ця функція перетворює код символа в символ. Але 13 – це код клавіші Enter, вона переводе друк на початок нового рядка.
Якщо надрукована інформація не помістилась в вікні, можна змінити його розмір буксуючи нижню границю. В алгоритмі змінні a,b,h в програмі замінені змінними xp, xk, dx.
Для самостійної роботи:
Завдання 1. Х – користувач визначає з клавіатури. Знайти значення виразу:
Завдання 2. Надрукувати таблицю значень функції y=f(x) на інтервалі x∈[a; b] з кроком Δx
Завдання 3. Скласти блок-схему алгоритму та програму розв’язку задачі:
- Генерувати 22 випадкових цілих числа -10
- Ввести з клавіатури 12 цілих додатних чисел. Визначити середнє арифметичне цих чисел та середнє геометричне.
- Генерувати 15 випадкових цілих числа 10
- Ввести з клавіатури 10 цілих додатних чисел10
- Генерувати 20 випадкових цілих числа -20
- Числова послідовність визначена формулою загального члена:an=n*cosn. Надрукувати в один стовпчик перші 8 членів. Їх добуток.
Что с циклом поддержки Delphi?
спросил
Изменено 12 лет, 5 месяцев назад
Просмотрено 418 раз
Это составленная мной диаграмма, показывающая продолжительность активных (имеется в виду текущие исправления ошибок и пакеты обновлений), предлагаемых для каждой версии Delphi. Он основан на опубликованных данных поддержки, полученных с веб-сайта Embarcadero. Delphi 2010 и XE исключены, поскольку их активная поддержка все еще продолжается, поэтому их нельзя точно сравнивать.
По иронии судьбы, Delphi 7, которую многие считали самой стабильной до выпуска Delphi 2009, имела цикл поддержки в три раза дольше, чем Delphi 2009. Конечно, эта диаграмма охватывает три разные компании с тремя разными планами. Мой вопрос: почему цикл поддержки Delphi 2009 такой короткий? Я понимаю, что у Embarcadero есть бизнес, и они не зарабатывают на пакетах обновлений, но правда, 12 месяцев? Я бы ожидал, что от условно-бесплатной игры за 10 долларов с низкой прибылью не за 9 долларов.00-$3500 инструмент разработки мирового класса.
- Delphi
- поддержка
1
На вашем графике довольно четко показаны различия в приоритетах между политиками Emabarcadero, Codegear и Borland. У них будут разные приоритеты и разные ожидания от пользователей. Это может объяснить ваш график. Из Embarcadero «All Access» совершенно ясно, что их намерение состоит в том, чтобы создать империю Embarcadero в стиле MSDN и продавать свое программное обеспечение как услугу дороже, чем за 9 долларов.00-3500 долларов за место бегемота.
Они действительно гибридизируют программное обеспечение как сервисную модель, и я думаю, что они пытаются найти баланс между стабильным циклом выпуска и стабильным потоком доходов. Со своей стороны, я надеюсь, что мы начнем использовать Delphi 2009 до того, как они перекроют для него скидки.
Только руководство Embarcadero может ответить на этот вопрос с какой-либо точностью и авторитетностью, и я предполагаю, что они не собираются этого делать на таком форуме, как этот.
2
Я предполагаю, что продолжительность поддержки связана со стабильностью и качеством продукта. Поддерживать качественный продукт легче, чем низкокачественный.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
Время цикла — Правила/Стратегия — Chief Delphi
Шеф Дельфипандамониум
1
Каким будет самый быстрый цикл получения полных (Помощь, Ферма и Ловля) очков?
z_beeblebrox
2
Интересный вопрос. Как только мы запустим пару роботов, я хотел бы рассчитать время различных конфигураций циклов, чтобы получить некоторые эмпирические данные.
Вполне возможно, что вы получите больше очков за более быстрый, но более низкий цикл подсчета очков.
Брайс2471
3
Вы спрашиваете о самом быстром среднем времени цикла среди всех альянсов? Или вы спрашиваете, какой будет самый быстрый полный цикл за весь сезон?
Я думаю, что самый быстрый полный цикл, который мы увидим, будет 10-15 секунд,
Jibri_Wright
4
Самое быстрое время: в лучшем случае 30 секунд. Наверное, больше. Противоборствующий альянс достаточно умен, чтобы не допустить этого без боя.
Уэйн_ТенБринк
5
Джибри Райт:
Самое быстрое время: в лучшем случае 30 секунд. Наверное, больше. Противоборствующий альянс достаточно умен, чтобы не допустить этого без боя.
Альянс, который уделяет слишком много внимания обороне, не приносит очков, по крайней мере, с большим количеством помощи. С двумя правильными роботами и довольно простым третьим ботом цикл на 60 очков возможен за 20-30 секунд. Если вы сможете выполнить пару таких циклов, любая попытка защиты замедлить вас не позволит им догнать вас.
Джибри_Райт
6
Уэйн ТенБринк:
Альянс, который уделяет слишком много внимания обороне, не приносит очков, по крайней мере, с большим количеством помощи. С двумя правильными роботами и довольно простым третьим ботом цикл на 60 очков возможен за 20-30 секунд. Если вы сможете выполнить пару таких циклов, любая попытка защиты замедлить вас не позволит им догнать вас.
Возможно, вы правы, но когда вы видите, что ваш противник идет на 60-очковый цикл, вы отправляете одного из своих товарищей по команде, у которого нет мяча, чтобы замедлить его, независимо от счета. Это просто инстинкт.
Пджон1959
7
Будут матчи, в которых альянсы смогут завершить цикл из 60 очков (входящий и набранный) менее чем за 10 секунд. :yike:
В защиту можно играть, но будут команды, которые будут к этому готовы.
Крис_Элстон
8
ИМХО…
Самое быстрое время цикла будет ДВА РОБОТА и ОДИН защитный робот.
10 секунд.
Робот №1 будет припаркован возле игрока-человека прямо у боковой стены.
Робот №2 будет припаркован вдоль той же боковой стены рядом с воротами с другой стороны фермы.
Робот №3 будет «защитником», который будет «проверять» всех остальных роботов альянса.
Игрок-человек даст мяч роботу №1, скорее всего катапульта с полным кортом. Робот №2 — робот-ловушка с броском в ворота.
2-3 секунды загрузка игрока-человека
2-3 секунды робот №1 привязывается к роботу №2 и ловит
2-3 секунды робот №2 в воротах.
Выравнивание по стенам поможет повысить эффективность ловли и восприятия глубины. Никогда не роняйте мяч — это ключ к сокращению времени цикла. Бросать мяч и гоняться за ним будет плохо в этой игре.
В этой игре главное — эффективность и время цикла. Кто быстрее всех едет на велосипеде с лучшим роботом-партнером.
10-секундный цикл без падения мяча.
2:20 = 14 возможных циклов
точек выше:
20 ворот
10 ферм
10 захватов
40 точек цикла раз 14 = 560 возможных, без защиты.
(если вы делали полные ассисты и связки и ловли)
30-секундный цикл без падений мяча.
2:20 = 4 возможных цикла
60 точек цикла 4 = 240 возможных, без защиты.
может у вас лучше получается…
(если вы делали полные передачи и ловили ферму)
20-секундный цикл ни разу не уронив мяч.
2:20 = 7 возможных циклов
60 точек цикла 4 = 420 возможных, без защиты.
магниты
9
В раундах на выбывание результаты будут сильно отличаться от квалификационных. Когда у хороших команд настроен цикл, их не остановить…
система
10
Я не совсем понимаю стратегию этой игры ?? Если вы стоите на месте, не делает ли это вас легкой мишенью для какого-то разрушительного контакта. Было бы сложно точно передать мяч на дальнюю дистанцию, если в вас врежется другой бот. Или, если уж на то пошло, сидеть на одном месте и забрасывать мячи в высокие ворота. Никаких сейфов, шутеров и загрузочных зон, верно? Более слабые альянсы могут довольно хорошо сравняться со стилем игры «Человек с мужчиной». Как вы снова открываете свой коллектор (при необходимости), когда другой бот вас «прикрыл». В большинстве командных видов спорта, где я был свидетелем, передача и бросок мяча происходили, когда все двигались. Теоретическое время цикла может не подтвердиться, никаких «неоправданных, стационарных, пулеметных» шутеров с полным кортом в этом году.0005
Райан_Свансон
11
ДМайк:
Я не совсем понимаю стратегию этой игры?? Если вы стоите на месте, не делает ли это вас легкой мишенью для какого-то разрушительного контакта. Было бы сложно точно передать мяч на дальнюю дистанцию, если в вас врежется другой бот. Или, если уж на то пошло, сидеть на одном месте и забрасывать мячи в высокие ворота.
Вот в чем хитрость. Есть способы избежать защиты, о которых вы, возможно, и не думаете. Если вы выясните, как эффективно уклоняться от защиты, вы поймете, почему эта стратегия может быть жизнеспособной.
пандамониум
12
Если вы стоите вровень со стеной или стеной и забиваете гол, удачи в перемещении.
Крис_Элстон
13
пандамониум:
Если вы стоите на одном уровне со стеной или стеной и забиваете гол, удачи в перемещении.
Точно. Кроме «высоты» или блокирующего.
Кельвин_Хартли
14
Джибри Райт:
Возможно, вы правы, но когда вы видите, что ваш противник идет на 60-очковый цикл, вы отправляете одного из своих товарищей по команде, у которого нет мяча, чтобы замедлить его, независимо от счета. Это просто инстинкт.
У меня такое чувство, что не все будут следовать инстинкту и играть в защите в результативном цикле. Например, если вы забиваете больше/быстрее, чем ваши соперники с тремя вашими роботами, зачем посылать одного из них играть в защите? Я надеюсь, что команды будут знать достаточно, чтобы следовать рабочей стратегии, а не менять ее по наитию. Если их стратегия НЕ работает, то защита может заставить ее работать. Хотя я бы не рассматривал этот инстинкт.
Я бы не решился делать такое общее заявление, как ваше, хотя я вижу, что ваша точка зрения в некоторых случаях может быть жизнеспособной.
Ty_Tremblay
15
Несколько недель назад я сделал небольшой инструмент для подсчета приблизительных баллов на основе того, какой цикл вы выполняете. Это не на 100% точно и делает некоторые довольно большие предположения. Не стесняйтесь сделать копию и отредактировать по своему усмотрению.
Одно из самых больших предположений состоит в том, что 50%-й процент попаданий дает вам только 50% очков за этот гол за цикл. Я хотел бы изменить его так, чтобы 50% ваших циклов были длиннее на X дополнительных секунд, необходимых для повторного захвата мяча.
Google Spreadsheet
Переменные выделены синим цветом, константы — серым, а расчетный результат — зеленым. Время цикла используется для определения максимального количества циклов, которое вы можете получить, если используете только этот тип цикла. Очки затем рассчитываются на основе того, сколько циклов вы можете сделать. Если вы хотите изменить формулу, сначала сделайте копию таблицы (не изменяйте формулы в этой таблице).
Ty_Tremblay
16
Чтобы ответить на вопрос, я думаю, что мы увидим полный цикл менее 15 секунд (с момента выхода мяча на поле до момента, когда он забит) в одной точке.
Джастин Шелли
17
Я вижу несколько разных сценариев для езды на велосипеде.
#1,2,3 — матчи на выбывание чемпионата
Остальные — региональные матчи
- Идеальный союз 3 атакующих роботов, на которых не играет защита. 60-точечный цикл
10 секунд
- Вверху с разыгрываемой на них защитой. 60-точечный цикл
30 секунд
- Идеальный альянс, но один робот обеспечивает безопасность членов альянса 40-балльный цикл
10 секунд
- Большинство квалификационных альянсов, где защита не сильна 30-очковый цикл
40 секунд
- №4, но играется защита
Повезло получить один 40-очковый цикл во время матча
- 3 атакующих робота в матче на выбывание — 1 игрок играет в защите. 40-точечный цикл
60 секунд
- №7, но противник не играет в защите 40-очковый цикл
20 секунд
- Матч на выбывание 2 атакующих робота и один робот-защитник/защитник 30-очковый цикл
20 секунд
Это охватывает большинство сценариев, которые я могу придумать. Надеюсь это поможет!
Джибри_Райт
18
Джастин Шелли:
Я вижу несколько разных сценариев для езды на велосипеде.
#1,2,3 — матчи на выбывание чемпионата
Остальные — региональные матчи
- Идеальный союз 3 наступательных роботов, на которых не играет защита. 60-точечный цикл
10 секунд
- Вверху с разыгрываемой на них защитой. 60-точечный цикл
30 секунд
- Идеальный альянс, но один робот обеспечивает безопасность членов альянса 40-балльный цикл
10 секунд
- Большинство квалификационных альянсов, где защита не сильна 30-очковый цикл
40 секунд
- №4, но играется защита
Повезло получить один цикл из 40 очков во время матча
- 3 атакующих робота в матче на выбывание. Один игрок играет в защите противника. 40-точечный цикл
60 секунд
- №7, но противник не играет в защите 40-очковый цикл
20 секунд
- Матч на выбывание 2 атакующих робота и один защитный/защитный робот 30-очковый цикл
20 секунд
Это охватывает большинство сценариев, которые я могу придумать. Надеюсь это поможет!
Полностью согласен. Я не знаю, почему люди думают, что получить цикл из 60 очков с защитой на них будет так просто. Небольшая защита, скажем, ловца или стрелка может легко изменить 4 секунды на 12 9.0005
тр6скотт
19
Взял идею Деррика (в опубликованной вкладке листа) о том, что промах стоит вам времени, и разработал еще один взгляд на нее.