1
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Приветствуем вас,Гость, на форуме IFUD.WS. Обязательно рекомендуется к прочтению правила форума http://ifud.ws/threads/obnovleno-pravila-foruma.7759

Алгоритмирование и программирование

Тема в разделе "Программирование", создана пользователем vladyxa13, 9 янв 2014.

  1. TopicStarter Overlay
    vladyxa13

    vladyxa13

    Регистрация:
    5 янв 2014
    Сообщения:
    9
    Симпатии:
    3
    Алгоритмизация – это важная часть программирования. С помощью алгоритмов мы легко можем перевести код, например с С++ на PHP и т.д..

    Теория:

    Алгоритм – это последовательность команд, выполнение которых приводит к решению поставленной задачи. Простым языком: это определенные действия, с указанной последовательностью, которые приводят нас к результату.

    Свойства алгоритмов

    Различные определения алгоритма в явной или неявной форме содержат следующий ряд общих требований:
    1. Дискретность – алгоритм должен представлять процесс решения задачи как последовательное выполнение некоторых простых шагов. При этом для выполнения каждого шага алгоритма требуется конечный отрезок времени, то есть преобразование исходных данных в результат осуществляется во времени дискретно. Кому интересно, то пробейте в гугле: Дискретная математика.
    2. Детерминированность (или определённость). В каждый момент времени следующий шаг работы однозначно определяется состоянием системы. Каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. Благодаря этому свойству выполнение алгоритма носит формальный характер и не требует никаких дополнительных указаний или сведений о решаемой задаче.
    3. Понятность – алгоритм для исполнителя должен включать только те команды, которые ему (исполнителю) доступны, которые входят в его систему команд. Короче говоря, алгоритм должен быть понятным!
    4. Результативность (или конечность). Это свойство состоит в том, что при корректно заданных исходных данных алгоритм должен завершать работу (приводить к решению задачи) и выдавать результат за конечное число шагов.
    5. Массовость – универсальность. Это означает, что алгоритм решения задачи разрабатывается в общем виде, т.е. он должен быть применим для некоторого класса задач, различающихся лишь исходными данными. При этом исходные данные могут выбираться из некоторой области, которая называется областью применения алгоритма. Но это правило не всегда действует, в основном разрабатывается один или несколько алгоритмов для решения одной задачи . Например можно решить задачу с помощью if-then-else или с использованием switch-case.
    Алгоритмы содержащие ошибки, приводит к получению неправильных результатов либо не дадут результатов вовсе. Например некоторые неправильные функции, операторы или комбинации операторов в С++ или С могут привести к краху операционной системы, в лучшем случае программа аварийно завершится, вызвав функцию abort(). Неправильно реализованный массив.
    Код:
    int a[10], j;//массив из десяти элементов int и переменная j типа int
    for(i=0; i<100; i++) a=i;//Мы хотим, что бы цикл for выводил 100 интераций, не смотря на то, что массив из десяти элементов,
    //он может привести к краху вашей ОС'и и возможно перезапишит важную информацию в памяти.


    И компилятор не выдаст ошибку, потому что С++ предназначен для профи программистов, и его задача - предоставить им возможность создать максимально эффективный код, любая проверка средствами С++ существенно замедлит выполнение программы. Если вы кодите на ассемблере и пишете неправильный код, то беды не миновать, ну кроме того, что вас остановит компилятор.

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

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

    Линейные алгоритмы

    Алгоритм решения задачи называется линейным, если исполнитель все команды алгоритма исполняет одну за другой в порядке их записи. Например рассмотрим алгоритм с чайником.
    Разветвляющиеся алгоритмы
    В ходе решения задач часто возникают различные ситуации, которые исполнителю приходится учитывать. От того, какая складывается ситуация, может зависеть дальнейший ход решения задачи.
    Например, любые вычисления прекращаются, если выясняется, что нужно делить на нуль. При нахождении корней квадратного уравнения ход решения зависит от знака дискриминанта. Зонтик раскрывают, если идет дождь или светит жаркое солнце. Возможные ситуации учитываются при составлении алгоритма.
    Ситуации оцениваются при помощи условий. Условие понимается как вопрос, на который исполнитель дает один из двух ответов – условие выполняется (условие истинно, true - T) или условие не выполняется (условие ложно, false - F).

    Пример. На стоянке при въезде в гараж находится легковая или грузовая машина с работающим двигателем. Если машина легковая, то исполнитель Загонщик должен загнать её в бокс А и выключить двигатель. Если машина грузовая, то ёё нужно загнать в бокс С и выключить двигатель. Составим алгоритм действий исполнителя Загонщик.
    Сначала исполнитель должен определить, какая машина находится на стоянке. Это можно сделать проверкой условия – «машина легковая». Если на стоянке находится легковая машина, то ответ будет «*да» – условие выполняется (условие истинно). Если на стоянке находится грузовая машине, то ответ будет «*нет» – условие не выполняется (условие ложно).
    Используя условие «машина» легковая», запишем алгоритм.

    В зависимости от ситуации исполняется одна из двух разных последовательностей команд. Рассмотрим возможные ситуации.
    Ситуация 1: на стоянке легковая машина. Исполняются команды 1, 2, 4.
    Ситуация 2: на стоянке грузовая машина. Исполняются команды 1, 3, 4.
    Действительно, после проверки условия в команде 1 в разных ситуациях исполняются разные наборы команд. Их называют ветвями алгоритма. Исполнение алгоритма всегда идет только по одной ветви. Здесь можно провести аналог с разветвлением дороги: после разветвления одна машина может ехать только по одной дороге.
    Алгоритм называется разветвляющимся, если после проверки условия в разных ситуациях исполняется один из двух разных наборов команд.
    Запись алгоритма мало меняется, если для проверки ситуации выбирается противоположное условие. В алгоритме Заезд, например, можно использовать условие «машина грузовая». В этом случае изменится только команда 1, и алгоритм будет иметь вид:

    Алгоритмы с повторениями

    При анализе алгоритмов, рассмотренных в примерах 1 и 2, можно заметить одно общее свойство: при их исполнении каждая команда исполняется один раз или не исполняется ни разу. Но часто встречаются задачи, при решении которых одно и то же действие (или набор действий) нужно исполнить несколько раз подряд. Например, наполнить бочку водой из ведер (переливать воду в бочку из ведер, пока бочка не заполнится до краев); покрасить забор (красить дощечки забора, пока есть незакрашенные); до упора завернуть гайку (закручивать гайку, пока не завернешь её до упора). Для описания алгоритмов решения таких задач используется способ организации команд, который называют повторением. Повторение – это набор команд, который исполняется до тех пор, пока выполняется некоторое условие. При исполнении алгоритма этот набор команд может исполниться несколько раз или не исполниться ни разу. Алгоритмы, которые содержат команду повторения, называют алгоритмами с повторением.

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

    Команда 1 называется командой повторения или командой цикла. Команда 2 составляет тело цикла. После того, как ведро наполнится водой, команда 2 (тело цикла) больше не исполняется. Исполнитель переходит к команде, следующей за телом цикла.
    В записи алгоритма «Наполнение» команда «Налить в ведро кружку воды» встречается один раз. При исполнении алгоритма она будет исполняться до тех пор, пока ведро не наполнится водой.
    В других алгоритмах тело цикла может состоять из нескольких команд. В командах повторения могут содержаться команды ветвления; в ветвях алгоритма – команды повторения.

    Способы представления алгоритмов:
    1. Словесная форма представления алгоритмов.Можно назвать техническим языком.
    2. Блок-схемы.
    3. Языки программирования.Самый основной.

    Блок-схемы. Общий вид и назначение элементов блок-схем
    Словесная форма достаточно удобна для записи небольших алгоритмов. Если алгоритм содержит десятки команд, то в такой форме довольно трудно проследить всевозможные разветвления. Поэтому на практике иногда используют другую форму записи алгоритмов – графическую. Графическая форма записи алгоритма называется блок-схемой.
    Блок-схемы алгоритмов состоят из блоков, которые дополнены элементами словесной формы записи. Приведем графические изображения основных блоков:
    [​IMG]
    Внутри блока дается описание команд или условий. В блок действий записывают команду, не содержащую условий. В блок проверки условия записывают условие.
    Все блоки, кроме блока Начало и блока Конец, можно нумеровать. Блоки на схемах соединяют стрелками, которые показывают последовательность исполнения алгоритма.

    Практика:

    Изобразим алгоритм с чайником в виде блок схемы.
    [​IMG]
    Алгоритм заезд.
    [​IMG]
    Алгоритм ведро. Здесь мы используем цикл вайл, который наполняет ведро, если ведро полное, завершаем действие.
    [​IMG]
    Кто знает другие ЯП и не лень перевести этот код для примера, переведите. Жаль, но кроме С++ и немного паскаль не знаю ничего.
    Код:
    #include <iostrem>
    #include <conio.h>
    using namespace sdt;
    int main(){
    int a;
    cout << "Enter a: \n";
    cin >> a;
    if (a<0) cout << "Chislo " << a << "otricatelno.";
    else cout << "Chislo " << a << "pologitelno.";
    _getch();
    return 0;
    }
    Тех. речь
    Нужно создать целочисленную переменную.
    Вывести на экран сообщение "Введите а"
    Задаем переменной а значение
    Если а меньше 0, то вывести на экран "Число а отрицательно"
    Если а больше нуля вывести на экран "Число а положительно"

    pwcode перевел на делфи
    Код:
    var a: integer;
    begin
    ShowMessage('Введите a в eidt1');
    a:= strtoint(edit1.text);
    if a<0 then ShowMessage('Число a  - отрицательно') else if a>0 then ShowMessage('Число a - положительно');
    end;
    Я перевел на паскаль
    Код:
    program rubu;
    var a : integer;
    begin
        write('Vvedite a ');
        readln(a);
        if a<0 then
            begin
                writeln('Chislo otricatelno ',a)
            end
        else
            begin
                  writeln('Chislo polositelno ',a);
            end;
    readln
     
    end.
    ZoRKeG перевел на PHP
    PHP:
     <?php
    $a 
    $_POST["a"];
    if(!empty(
    $a)){
    if(
    $a<0){echo 'Число а отрицательно';}
    elseif(
    $a>0){echo 'Число а положительно';}
    else{echo (
    '<form method="post"><br><input name="a" size="25"><br><input type="submit" value="send">');
    }
    ?> 
    Тех.речь - (техническая речь) общие инструкции для всех ЯП (языков программирования), хороша для перевода с одного ЯП на другой.

    Пример перевода.
    Код:
    int i;
    Используя тех.речь переводим. Перевод: Создайте переменную i целочисленного типа.
    Код снизу будет на Pascal
    Код:
    var i : integer;
    Вот так с помощью небольшого плана можно легко переводить даже не зная того Яп на котором написан софт или сайт. Полноценный план приведен выше в спойлере "Для пхп программов".

    *да - true(T)
    *нет - false(F)

    В статье использовались разные источники, в основном из книг Герберта Шилдта + мой материал.


    Please login or register to view links
     
    Метки:
  2. EEjester

    EEjester hack_the_god

    Регистрация:
    25 окт 2012
    Сообщения:
    1.339
    Симпатии:
    957
    у тебя ошибка. переменная "a" не объявлена. замени "i" на "a"
     
  3. трахтенберг

    трахтенберг

    Регистрация:
    17 дек 2012
    Сообщения:
    272
    Симпатии:
    197
    а можно еще статью, как компьютер включать?
     
  4. EEjester

    EEjester hack_the_god

    Регистрация:
    25 окт 2012
    Сообщения:
    1.339
    Симпатии:
    957
    ты зря так. правильный алгоритм залог хорошей программы.
     
    • Like Like x 1
  5. TopicStarter Overlay
    vladyxa13

    vladyxa13

    Регистрация:
    5 янв 2014
    Сообщения:
    9
    Симпатии:
    3
    Упс просто не мой код, у друга просил переводить. Делфи плохо знаю.
    Учтено!
     
  6. deeKey

    deeKey

    Регистрация:
    4 янв 2014
    Сообщения:
    69
    Симпатии:
    68
    спс за инфу, в школе щас именно это проходим ))))
     

Поделиться этой страницей

Загрузка...