#c #algorithm #pseudocode
#c #алгоритм #псевдокод
Вопрос:
Я пишу псевдокод для алгоритма. Результат очень похож на язык C, потому что это язык, с которым я больше всего знаком.
Код выглядит следующим образом:
START
Declare int m, int n
Input value of m and n
Declare int array source[n], target[m][n]
For(int i = 0; i < n; i )
Input value of source[i]
For(int i = 0; i < m; i )
For(int j = 0; j < n; j )
Input value of target[i][j]
Declare int maxsource, minsource, maxtarget, mintarget
For(int i = 0; i < n; i )
If i == 0
Minsource = source[i]
Maxsource = source[i]
Else
If minsource > source[i]
Minsource = source[i]
Else if maxsource < source[i]
Maxsource = source[i]
Endif
Endif
For(int i = 0; i < m; i )
For(int j = 0; j < n; j )
If j == 0
Mintarget = target[i][j]
Maxtarget = target[i][j]
Else
If mintarget > target[i][j]
Mintarget = target[i][j]
Else if maxtarget < target[i][j]
Maxtarget = target[i][j]
Endif
Endif
If minsource == mintarget amp;amp; maxsource == maxtarget
Print true
STOP
Else if maxtarget > maxsource
Print false
STOP
Endif
Print false
STOP
Как мне превратить это в более похожий на псевдокод? Какие-нибудь советы?
Комментарии:
1. Что такое
pseudocode-like
? ваш код уже находится в псевдокоде.2. Псевдокод имеет разные значения в зависимости от контекста, в котором вы работаете. Вот ссылка на Википедию , которая может помочь?
3. @DipStax ах, приятно это знать. Я просто думаю, может быть, это слишком похоже на реальный код, а не на псевдокод. Спасибо!
4. @sylvaan: в вашем псевдокоде есть одна серьезная проблема: вы используете маленькие буквы и заглавные буквы, смешивающиеся друг с другом: не делайте этого: C чувствителен к регистру, поэтому
mintarget
иMintarget
считаются разными.5. @Dominique спасибо за совет, я использовал word, поэтому активны автоматические заглавные буквы
Ответ №1:
Если я вас хорошо понимаю, вы не хотите, чтобы псевдокод выглядел как программный код, чтобы кто-то, использующий другой язык программирования, мог использовать его и решать ту же задачу. У меня есть несколько советов, которые могут помочь вам в этом. Основная идея заключается в том, что вам следует избегать использования синтаксических элементов языка программирования. Думайте о решаемой проблеме, а не о языке программирования. Напишите свой псевдокод на простом языке, который любой может прочитать и понять. Должно быть просто, чтобы кто-то без навыков программирования мог следовать ему и решать ту же задачу. Вот пример простого псевдокода функции, которая находит второй максимальный элемент в массиве.
The function takes two inputs:
arr - array of integers
length - lenght of the array
It returns:
secMax - Second maximum element
Затем шаги (должны быть на простом языке)
Define and set the maximum and second maximum as the minimum possible value
Repeat for each element of the array
{
If the current element is greater than the current maximu
{
then make current maximum as second maximum
Make the maximum as current array element
(Now you have new maximum and second maximum)
}
else if the current array element is less than maximum but is greater than second
maximum
{
then make it second maximum
}
}
return second maximum
Как вы можете видеть, я просто объяснил шаги без использования синтаксических элементов любого языка программирования. Итак, теперь любой может реализовать мои шаги, используя свой удобный язык для решения той же задачи.
Допустим, я хочу реализовать это с помощью C, мой код будет примерно таким:
//Defining the function according to the information above
//It takes to inputs and returns an integer
int findSecondMaximum(int arr[], int length)
{
//Define and Set the maximum and second maximum as the minimum possible value
int max, secondMax;
max = secondMax = INT_MIN;
for (int i = 0; i < length; i ) //Repeat for each element of the array
{
//If the current element is greater than the current maximum
if (vect[i] > max)
{
//then make the current maximum as second maximum
secondMax = max;
//Make the maximum as the current array element
max = vect[i];
}
/*else if the current array element is less than maximum but is greater than
second maximum*/
else if (vect[i] > secondMax amp;amp; vect[i] < max)
{
//make it second maximum
secondMax = vect[i];
}
}
//return second maximum
return secondMax;
}
Я надеюсь, что это поможет.
Ответ №2:
В первую очередь проверьте википедию на псевдокод. Либо:
- используйте стиль Pascal (например) или
- используйте математический стиль
Сначала ошибка на первый взгляд:
If minsource > source[i]
minsource = source[i]
Else if maxsource < source[i]
maxsource = source[i]
Endif
Должно быть
If minsource > source[i]
minsource = source[i]
Endif
If maxsource < source[i]
maxsource = source[i]
Endif
Случай должен быть согласованным (minsource / Minsource).
Вы могли бы представить
Function {int min, int max} array_min_max(int[] array)
min = Integer.MAX_VALUE;
max = Integer.MIN_VALUE;
For value in array
min = Math.min(min, value);
max = Math.max(min, value);
Endfor
Endfunction
Объявление при первом использовании может быть лучше читаемым.
Declare int minsource, maxsource
For (int i = 0; i < source.length; i )
If i == 0
minsource = source[i]
maxsource = source[i]
Else
If minsource > source[i]
minsource = source[i]
EndIf
If maxsource < source[i]
maxsource = source[i]
Endif
Endif
Endfor
For (int i = 0; i < m; i )
Declare int mintarget, maxtarget
{mintarget, maxtarget} = array_min_max(target[i]);
If minsource == mintarget amp;amp; maxsource == maxtarget
Print true
STOP
Else if maxtarget > maxsource
Print false
STOP
Endif
Endfor
Print false
STOP
О самом псевдоязыке: приведенный выше «Basic» с его узнаваемым C я нахожу немного раздражающим. Также я бы выбрал min_target или minTarget вместо mintarget.
Существует так много языков. В информатике существует давняя нетрадиционная традиция. Часто использовался язык выражений высокого уровня Algol68, поскольку он даже выделен жирным шрифтом для типов и ключевых слов. Было бы действительно неплохо, если бы вы могли использовать richt text.
Псевдокод, подобный Паскалю, возможно, заимствован из Modula с. IF THEN ELSE END
Лично мне не нравится верблюжий регистр, и я бы предпочел все строчные буквы.