Горыныч Проф. 2.0, версия Light - система автоматического распознавания русской речи и голосового управления компьютером. Забудьте о клавиатуре и мышке! Теперь вы можете управлять компьютером с помощью голоса, например диктовать текст текстовому редактору, запускать программы и т.д.
Подробнее...

реклама у нас

***

Решить задачу раз плюнуть

Олег ДАНИЛЮК

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

В МК было напечатано огромное количество статей по программированию. Часть из них просто описывала структуру и операторы языка, в других описывались некоторые приемы, используемые программерами, причем в визуальной среде разработки (типа Delphi или Visual Basic). Но начинать свою карьеру (или хобби) все же следует с изучения ДОСовских языков, например Паскаля (Pascal) или Бейсика (Basic). Я намерено не упомянул Си, так как он сложнее других языков программирования. Проще выучить тот же Паскаль, а с него перейти на Си.

Некоторые читатели заметят: «Как же так? Ведь в графической среде склепать программку намного легче и быстрее. Зачем нам учить какой-то Паскаль, который намного сложнее Delphi? И вообще, кому сейчас нужны проги под ДОС?» Так то оно так, но на самом деле Паскаль легче для начальных шагов. В нем вы узнаете основные принципы программирования, выучите алгоритмы, которые будете использовать в графической среде (для тех, кто не знает, что такое алгоритм, — это последовательность команд, выполнение которых позволяет получить ответ задачи).

Итак, приступим к первому заданию:

Задача № 1

Скорость автомобиля в любой момент определяется по формуле Vt=V0+GT, где V0 — начальная скорость, G — ускорение, T — время, а Vt — скорость в момент времени T. Составить программу, которая принимает с пульта V0 и G. Через какое время машина будет иметь скорость 100 км/час (то есть Vt = 100), если G>0? Через какое время машина остановится, если G<0?

Это одна из самых легких задач, но в ней есть один маленький подвох. Вот ее решение:

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

Простенькую задачку для разминки решили. Давайте сделаем что-то посложнее:

Задача № 2

Составить программу вывода всех трехзначных чисел, сумма цифр которых равна данному числу N. Число N должно быть целым, не превышать 27 и вводиться оператором INPUT.

Практически все задачи по программированию (кроме самых элементарных) можно решить несколькими способами, эта — не исключение. Цель программиста — не только решить задачу, но и решить ее оптимальным путем. Естественно, чтобы определить число, сумма цифр которого равна данному числу N, нужно эти цифры найти. Случается, что решающий переводит целочисленные трехзначные числа в строковой тип, потом вытягивает из него каждый знак и переводит их назад в целочисленный и только после этого находит их сумму. Это, конечно, правильно, но можно сделать и намного проще. Как? Смотрите решение:

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

Теперь давайте поподробнее рассмотрим алгоритм определения каждого знака трехзначного числа. Пусть, к примеру, переменная i будет равна 386. Вычисляем сначала первый знак (тройку): n1 := Trunc(386/100) — на сто делим потому, что искомый знак принадлежит разряду сотен, соответственно переменная n1 должна равняться 3.86; но функция Trunc отбрасывает дробную часть числа, поэтому n1 = 3. Первую цифру нашли, пора искать вторую (восьмерку). Она означает десятки, но если 386 поделить на 10, то получим не совсем то (точнее, совсем не то :-)), что хотели. Чтобы все получилось, нужно от 386 отнять 300, то есть первый знак умножить на сто (n1*100). Далее можно спокойно делить на 10, что мы и делаем: n2 := Trunc((i-n1*100)/10), не забывая при этом отбросить дробную часть. И самое простое — находим третью цифру. Для этого всего лишь отнимаем от 386 первый знак, умноженный на сто, и второй, умноженный на десять: n3 := i — (n1*100+n2*10). Все это в коде занимает только три строчки, в то время как ранее описанный метод — целых одиннадцать, то есть почти в четыре раза больше!

Ну что, поехали дальше? На сей раз нас ждет задача с массивами.

Задача № 3

Организовать линейный массив из 55 элементов. Заполнить случайными числами в интервале от 200 до 300. Вывести его в строку, напечатав рядом с наименьшим числом в скобках слово min и наибольшим — max. Например: 210 289 201(min) 275 … 298(max) 201(min).

Найти наименьшие и наибольшие числа несложно. Самый простой способ — найти их по ходу заполнения массива:

Вот так решаются несложные задачки с массивами. На том и закончим наше занятие.

Источник: http://www.mycomp.com.ua/ 
 


Copyright © "Internet Zone"info@izcity.com 
Копирование и использование данных материалов разрешается только в случае указания на журнал "Internet Zone", как на источник получения информации. При этом во всех ссылках обязательно явное указание адреса вэб-сайта http://www.izcity.com/.
При наличии у копируемого материала авторов и источника информации - их также нужно указывать, наряду со ссылкой на нас. Подробнее условия использования материалов смотрите здесь.