Псевдокод - это неформальный способ описания инструкций программы высокого уровня. Результат написания этих инструкций для программы с использованием псевдокода называется алгоритмом.

Чтобы дать вам почувствовать вкус, в приведенном ниже примере показана программа, которая складывает три числа 45, 67 и 90.

// prints the sum of 45, 67 and 90
sum <- 45 + 67 + 90
PRINT sum

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

Эта статья будет посвящена объяснению того, как мы можем писать алгоритмы на основе того, какими будут входные и выходные данные, и задачи, которые мы хотим выполнить, используя знания псевдокода, которые мы получим снизу.

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

Обратите внимание, что в псевдокоде используется символический язык кодирования, который у разных людей может быть разным. Таким образом, синтаксис, который будет определен ниже, - это всего лишь вариант синтаксиса, который мы можем иметь.

  • Зарезервированные ключевые слова
  • Операторы
  • Переменные
  • Типы данных
  • Структуры данных
  • Условные
  • Итерации или циклы
  • Функции

Зарезервированные ключевые слова

Есть некоторые операции, которые мы можем выполнять в программе без написания каких-либо других алгоритмов. Эти операции доступны в нашей программе с помощью Зарезервированных ключевых слов. Например, для получения входных данных от пользователей, вывода на печать пользователям, выполнения функции, возвращающей значение и т. д.

Ниже приведены несколько распространенных зарезервированных ключевых слов, которые вы увидите при чтении этой статьи.

READ // Get an input from the user
PRINT // Output data to the user
RETURN // make a function return a value
INCREMENT // Increment a number by 1
DECREMENT // Decrement a number by 1

Обратите внимание на использование «//» в приведенном выше примере, он используется для начала комментариев, которые не влияют на программу, они в основном используются для документации кода. и объяснение для облегчения понимания.

Операторы

В наших программах можно использовать разные типы операторов, в том числе следующие:

Арифметические операторы

+  : Addition
-  : Subtraction
×  : Multiplication
/  : Division
mod  : Modulo

Операторы сравнения

== : Test for equality 
<  : Less than
>  : Greater than
<= : Less than or equal to
>= : Greater than or equal to

Другие операторы

<-  : Assignment operator
and : Logical and
or  : Logical or

Переменные

Они используются для временного хранения данных во время работы программы. Предположим, мы создаем некоторые данные в какой-то момент нашей программы, как мы храним данные, чтобы мы могли ссылаться на них в другой точке нашей программы? Да !!! Мы используем переменные.

У переменных есть имена, но ниже приведены вещи, на которые мы должны обратить внимание при именовании переменных.

  • Имена переменных могут начинаться только с символа подчеркивания или алфавита.
  • Переменные могут содержать только символы подчеркивания, целые числа и алфавиты.

Примеры имен переменных:

name , name123 , _age , gender_field etc.

В псевдокоде мы присваиваем данные переменным с помощью оператора присваивания

name <- "Joe"
gender <- "male"
_age <- 56
prices <- ["$45", "$123", "$900"]

Типы данных

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

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

Ниже приведены примитивные типы данных, с которыми мы будем иметь дело ...

Числовые типы данных

  • Целые числа: 1, 3485, 100 и т. Д.
  • Числа с плавающей запятой: 1.1, 45.0, 43.35 и т. Д.

Другие типы данных

  • Строки: «привет», «1233», «ад12345» и т. Д.
  • Логическое: истина, ложь

Обратите внимание, что make strings - это просто кавычки, в которые заключено фактическое содержимое, которое может быть как одинарным, так и двойным.

Структуры данных

Как видно из вышеизложенного, эти типы данных используются для описания отдельных данных, но что, если нам нужен набор этих данных разных типов, как мы это сделаем? Здесь на помощь приходит концепция структур данных.

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

Например, человек может обладать следующими свойствами

  • возраст: Целое число
  • имя: Строка
  • is_baby: логический

Было бы здорово иметь эти свойства в одном месте для описания человека, скажем что-нибудь вроде

human <- {"age": 50, "name": "John Doe", "is_baby": false}

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

Мы будем говорить о двух структурах данных: Array и HashMap.

Обратите внимание, что структуры данных - это просто наборы данных и, следовательно, сами данные. Это означает, что мы можем назначать их переменным, как и другие данные.

Основные свойства массива

Создайте массив, используя литерал []. Ниже представлен массив, содержащий четыре данных (элемента) разных типов данных.

array <- [23, "hello", false, 7.8]

Доступ к элементам массива осуществляется по их номеру позиции, называемому индексом, который начинается с 0.

PRINT array[0] // gives 23
PRINT array[3] // gives 7.8
PRINT array[4] // raises error

Попытка индекса за пределами диапазона размера массива вызовет программную ошибку, поэтому мы хотим быть осторожными при использовании индексов.

Мы также можем обновлять элементы в массиве с помощью индексов.

array[0] <- 90 // changes 7.8 to 90
array[1] <- false // changes "hello" to false
array[4] <- 80 // raises error

Основные свойства хеш-карты

Важное различие между массивом и хеш-картой заключается в том, что массивы используют индексы для идентификации элементов, а хеш-карту используют ключи для идентификации элементов.

Создайте хеш-карту, используя литерал {}. Ниже представлена ​​хэш-карта, содержащая две пары данных "ключ-значение".

hash <- { "age": 50, "name": "human" }

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

Как и в случае с массивом, доступ к элементам осуществляется с помощью их ключей, как показано ниже.

PRINT hash["age"] // gives 50
PRINT array["name"] // gives "human"
PRINT array["undefined"] // raises error

Кроме того, попытка использовать ключ не в хэш-карте вызывает программную ошибку.

Мы также можем обновить элементы в хэш-карте с помощью ключей,

hash["name"] <- "Jane Doe" // changes "human" to "Jane Doe"
hash["age"] <- 45// changes 50 to 45
array["undefined"] <- 80 // raises error

Условные

Условные выражения - это конструкции, используемые при принятии решения о том, когда должна выполняться одна или группа инструкций.

Для этого мы используем конструкцию IF / ELSEIF / ELSE / ENDIF. Ниже приведены примеры использования этой конструкции.

array <- [1,2,3]
IF 5 in array THEN
   PRINT "Five is in the array"
ELSE
   PRINT "Five is not in the array"
ENDIF

Обратите внимание, что

  • И ELSEIF, и ELSE части конструкции не являются обязательными.
  • ИНАЧЕ должно всегда происходить один раз и последний раз, если он должен присутствовать.
  • У нас может быть несколько ELSEIF, но они должны стоять после IF и перед ELSE.
age <- 90
IF age >= 50 THEN
   PRINT "Old"
ELSEIF age >= 20 THEN
   PRINT "Adult"
ELSE
   PRINT "Child"
ENDIF

Итерации или циклы

Циклы - это конструкции, используемые для повторного выполнения инструкций.

Для этого мы используем конструкцию FOR / ENDFOR. Ниже приведены примеры использования этой конструкции.

Цикл по диапазону чисел

FOR number <- 1 to 10
   PRINT "Executing 10 times"
ENDFOR

Цикл по элементам в массиве, где n представляет размер массива

array <- [45, 67, 89, 12, 34]
FOR index <- 0 to n-1   // Here, n = 5
   PRINT array[index]
ENDFOR

Функции

Они используются для группирования инструкций вместе, чтобы программа могла выполнить определенную задачу.

Определение функции PrintR, которая печатает числа от 1 до 20

PrintR()
   FOR number <- 1 to 20
      PRINT number
   ENDFOR

Иногда мы хотим создать функцию, которая принимает входные данные в качестве параметров, чтобы поработать с ними.

Определите функцию PrintAR, которая принимает в качестве параметров массив (arr) и длину (n), просматривает свои элементы и распечатывает их.

PrintAR(arr, n)
   FOR index <- 0 to n-1
      PRINT arr[index]
   ENDFOR

В других случаях мы не хотим просто выводить данные на экран для пользователей, мы хотим, чтобы функция имела возвращаемое значение, которое мы можем сохранить в переменной и использовать позже.

Определите функцию RetArrSum, которая принимает в качестве параметров массив (arr) и длину (n), просматривает свои элементы, суммирует их и возвращает сумма.

RetArrSum(arr, n)
   sum <- 0
   
   FOR index <- 0 to n-1
      sum <- sum + arr[index]
   ENDFOR
   
   RETURN sum

Хорошо, это круто !!!

Теперь вопрос в том, как мы можем использовать эти определенные функции в нашей программе? Скажем, например, у нас есть в нашей программе массив с 5 числами, сумма которых нам нужна. Программа ниже демонстрирует, как мы можем вызвать ранее определенную функцию.

array <- [45, 67, 12, 90, 34]
sum <- RetArrSum(array, 5)
PRINT sum

Обратите внимание, что для нас имеет смысл присвоить вызов функции RetArrSum сумме, поскольку она возвращает значение. В отличие от функции PrintAR, которая не возвращает никакого значения, а просто распечатывает элементы массива.

Вывод

Эти концепции и конструкции, определенные выше, используются при написании алгоритмов для анализа с использованием различных методов анализа алгоритмов.

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