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

serjj

New member
26.01.2013
3
0
#1
Было задание в борланде -
Преобразовать одномерный массив, состоящий из 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();
}


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

serjj

New member
26.01.2013
3
0
#2
Нач
| вывод 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
| все
Кон
незнаю правильно нет но вот че сделал
 
R

rrrFer

#3
как бы на псевдокод нет стандарта, исходный код - способ записи алгоритма, можно попробовать рассказать это преподу )
на твой псевдокод щас посмотрю

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

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

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

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


нарушен балланс скобок
 

serjj

New member
26.01.2013
3
0
#4
Спасибо исправил, но препод сказал логических ошибок много, плюс оформляется подругому)))
Вот пытался сделать так как требовалось , гляньте свежим взгялдом пожалуйста и исправите. Поставил вопросы там где не знаю что писать.

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;
}
 
R

rrrFer

#5
плюс оформляется подругому)))
пусть даст стандарт если не нравится.

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

1) Объекты с которыми будет оперировать алгоритм: массивы целых чисел, целые числа
2) Классификация объектов:
– исходные: массивы целых чисел, целые числа
– искомые: массивы целых чисел, целые числа
Для i = 0; i < N; i++
ввод массива a

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

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

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

rrrFer

#6
Тогда t = a;a = a[j];a[j] = t

это же словесное описание, так и пиши "обменять значения i-того и j-того элементов массива 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


допустим, я не знаю что ты имел ввиду, я напишу такой код:
for (i = 0; i < n; ++i) {
for (j = i; j < n; ++j) {
if (a < a[j]) {
t = a;
a = a[j];
a[j] = t;
for (i = 0; i < n; ++i)
std::cout << a;
}
}


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

rrrFer

#7
а ваще можно так описать:
1. n := 10; // это важная строка, которой у тебя нет вообще
2. для всех i, таких что i принадлежит интервалу [0..N) выполнить ввод i-того элемента массива a.
3. i := 1;
4. если i > n то переход на п. 5;
4.1. j = i;
4.2. если j > n то переход на п 4.3;
4.2.1. если a > a[j] то переход на п.4.2.2;
4.2.1.1. обменять значения i-того и j-того элементов массива a;
4.2.2. j := j + 1;
4.2.3. переход на п.4.2;
4.3. i := i + 1;
4.4. переход на п.4;
5. вывод элементов массива a;
6. конец.


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

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

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

serjj

New member
26.01.2013
3
0
#8
Блин )))) вот так бы объясняли на парах))
Спасииибо большое!)