Алгоритм На Языке Псевдокода

Тема в разделе "C/C++/C#", создана пользователем serjj, 31 янв 2013.

  1. serjj

    serjj New Member

    Регистрация:
    26 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    Было задание в борланде -
    Преобразовать одномерный массив, состоящий из 10(любых) вещественных элементов, таким образом, чтобы сначала располагались все положительные элементы, а потом - все отрицательные ( элементы, равные 0, считать положительными).

    код готовой проги
    #include <iostream.h>
    #define N 10
    int
    main(){
    int i, j;
    float a[N], t;
    cout << "Enter " << N << " numbers: ";
    for(i = 0; i < N; i++)
    cin >> a;
    for(i = 0; i < N - 1; i++)
    for(int j = i + 1; j < N; j++)
    if (a < a[j]) {
    t = a;
    a = a[j];
    a[j] = t;
    }
    for(i = 0; i < N; ++i)
    cout << a << ' ';
    cout << endl;
    cin.get();
    cin.get();
    }


    Осталось написать Алгоритм - все этапы разработки алгоритма и сам алгоритм на языке псевдокода.
    Кто поможет ?
     
  2. serjj

    serjj New Member

    Регистрация:
    26 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    Нач
    | вывод enter numbers
    | |цикл i = 0; i < N; i++
    | |ввод a
    | |цикл i = 0; i < N - 1; i++)
    | |цикл int j = i + 1; j < N; j++
    | |если a < a[j])
    | |тогда t = a;a = a[j];a[j] = t
    | |цикл i = 0; i < N; ++i
    | |Вывод a
    | все
    Кон
    незнаю правильно нет но вот че сделал
     
  3. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    как бы на псевдокод нет стандарта, исходный код - способ записи алгоритма, можно попробовать рассказать это преподу )
    на твой псевдокод щас посмотрю

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

    Добавлено: |цикл i = 0; i < N; i++
    | |ввод a
    я думаю тут можно добавить конец цикла

    Добавлено: вывод enter numbers
    сюда добавить кавычки, чтобы было понятно что numbers - это не переменная

    цикл i = 0; i < N; i++
    я бы заменил на что-то другое, например
    потому что программисты, пишущие на других языках не знают что такое i++ и не знают что тут значат точки с запятой


    нарушен балланс скобок
     
  4. serjj

    serjj New Member

    Регистрация:
    26 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    Спасибо исправил, но препод сказал логических ошибок много, плюс оформляется подругому)))
    Вот пытался сделать так как требовалось , гляньте свежим взгялдом пожалуйста и исправите. Поставил вопросы там где не знаю что писать.

    I. 1) Известные объекты: n=10, i, j, a[n], t
    2) Действия над объектами: арифметические.
    3) Найти: массив а.

    II. 1) Объекты с которыми будет оперировать алгоритм: ?
    2) Классификация объектов: ?
    – исходные: ?
    – искомые: ?
    3) Способ задания значений: с клавиатуры

    III. Алгоритм – Преобразовывает Массив состоящий из 10 вещественных элементов, распологая положительные элементы слева, а отрицательные элименты справа.
    Цел n=10, i, j, a[n], t
    Начало
    Вывод Enter numbers
    Для i = 0; i < N; i++
    ввод массива a
    для i = 0; i < N - 1; i++
    для j = i + 1; j < N; j++
    если массив a < массива a[j]
    Тогда t = a;a = a[j];a[j] = t
    для i = 0; i < N; ++i
    вывод массива a
    все
    конец

    Код программы (borland c++) отредактирован - рабочий


    #include <iostream.h>
    #define N 10
    int
    main(){
    int i, j;
    float a[N], t;
    cout << "Enter " << N << " numbers: ";
    for(i = 0; i < N; i++)
    cin >> a;
    for(i = 0; i < N - 1; i++)
    for(j = i + 1; j < N; j++)
    if (a < a[j]) {
    t = a;
    a = a[j];
    a[j] = t;
    }
    for(i = 0; i < N; ++i)
    cout << a << ' ';
    cout << endl;
    }
     
  5. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    пусть даст стандарт если не нравится.

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


    ты вводишь в цикле не массив, а один элемент, замени цикл кака я писал выше (там где цикл "пока"), ну или как-то так:

    для всех i : i принадлежит [0..N) выполнить ввод i-того элемента массива a.

    это более математическое описание, но так как стандарта нет - то можешь и в таком стиле все описать
     
  6. serjj

    serjj New Member

    Регистрация:
    26 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    Спасибо :)
     
  7. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Тогда t = a;a = a[j];a[j] = t

    это же словесное описание, так и пиши "обменять значения i-того и j-того элементов массива a".

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


    допустим, я не знаю что ты имел ввиду, я напишу такой код:


    расставь границы циклов, i ++ замени на i := i + 1
    если массив a < массива a[j] // тут ты не массивы, а элементы сравниваешь, над массивами операторы сравнения вобще не определены.
     
  8. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    а ваще можно так описать:


    тут видно, что можно описвать все математически, это удобно (например вложенные циклы описать можно очень кратко), тут так описан п.2. При этом лучше использовать кванторы и прочие спец. символы типа "для всех", "таких что", "принадлеежит интервалу" и т.п. можно описать 1 символом.

    п.3-4 описаны очень подробно, тут ты заметишь хитрую нумерацию (многоуровневую), она очень удобна и широко исопльзуется, т.к. в п.4.2 мы точно знаем что передем на п.4.3. Если бы мы не использовали многоуровневую нумерацию - то вместо "переход на п 4.3;" мы бы написали сначала "переход на п ???", а уже потом, когда дошли бы до нужного пункта заменили вопросительные знаки на номер (это очень неудобно, соверщается тьма ошибок).

    и наконец в п.5 видно что можно не описывать все подробно, а укрупнить ) Ну операции "ввод", "вывод", "обменять значения" никогда не описывают подробно, потому что для алгоритма ваще неважно каким образом я буду значения местами обменивать
     
  9. serjj

    serjj New Member

    Регистрация:
    26 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    Блин )))) вот так бы объясняли на парах))
    Спасииибо большое!)
     
Загрузка...

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