Сегодня Воскресенье | Дата: 05.05.2024 | Время: 05:01
                        
Последние новости
Оф. C-HUD GTA-ONE (v. beta 1.0) by Darius Stone для GTA - SA
Добавил: Kronos
Всего комментариев: 0
Новая волна GTA-ONE
Добавил: Ice_Code
Всего комментариев: 3
Трейлер Grand Theft Auto - V
Добавил: Kronos
Всего комментариев: 0
Новые темы форума
Last Empire War Z
Ответил: Kronos
Всего ответов:
Adobe Photoshop Touch
Ответил: Kronos
Всего ответов:
ePSXe for Android
Ответил: Kronos
Всего ответов:
Лучшие пользователи
Kronos
Логин: Kronos
Репутация: 10
Группа: Администраторы
Ice_Code
Логин: Ice_Code
Репутация: 2
Группа: Администраторы
ExT
Логин: ExT
Репутация: 1
Группа: Пользователи
Здравствуй, Гость! Авторизуйся или зарегистрируйся
Цвет фона
Случайные материалы



Последние материалы

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Pawn - скриптинг » Мануалы/уроки » [Урок] Основные этапы изучения программирования
[Урок] Основные этапы изучения программирования
KronosДата: Четверг, 03.07.2014, 01:59 | Сообщение # 1
Местный мазафака
Сообщений: 117
Награды: 0
Репутация: 10
Автор: Potelkin
Некоторые данные были взяты из методических указаний, принадлежащих Гомельскому государственному машиностроительному колледжу!
Начнем с того, что программирование подразумевает не только логику и математическое мышление, еще нужно развивать и визуальное мышление, представление "объектов" в уме, рисовать их и представлять. Начнем с логических операциях:
Соединители логических условий:
&& — И,
|| — ИЛИ.
! — НЕ

Пример использования в условии IF:
Код
#include <stdio.h>
  int main(void) {
     int a = 5, b =10, c = 25, d = 100, result;
      if (b > a)
         printf("b > a\n");
      if (a >= b || b <= c)
         printf("a >= b OR b <= c\n");
      if (a == c / a && (c % a) == 0) {
         printf("c = a * a\n");
     }
     return 0;
}

Данная программа в результате выполнения напечатает следующее:
b > a
a >= b OR b <= c
c = a * a

Условные операторы
Пора познакомиться и с операторами позволяющими создавать условия. С одним вы уже познакомились выше — это условие IF («ЕСЛИ») которое выполняет следующую после него единственную строку кода или блок кода, если условие в круглых скобках верно.
У условия с IF имеется еще альтернативная форма IF-ELSE (ЕСЛИ-ИНАЧЕ) Пример:
Код
#include <stdio.h>
int main(void) {
     int a = 5, b =10, c = 25, d = 100, result;
      if (b > a) {
         printf("b > a\n");
     } else {
         printf("b < a\n");
     }
      return 0;
}

А вот еще один пример, только на этой раз IF-ELSE IF-ELSE:
Вот пример из мода:
Код
"    if(PlayerInfo[playerid][pAdmin] == 6) { arank = "{EF0A16}Revelation Developer 6lvl"; }
             else if(PlayerInfo[playerid][pAdmin] == 5) { arank = "{137F11}Главный администратор 5lvl"; }
             else if(PlayerInfo[playerid][pAdmin] == 4) { arank = "{790D67}Администратор сервера 4lvl"; }
             else if(PlayerInfo[playerid][pAdmin] == 3) { arank = "{790D67}Администратор сервера 3lvl"; }
             else if(PlayerInfo[playerid][pAdmin] == 2) { arank = "{2E68B9}Модератор 2lvl"; }
             else if(PlayerInfo[playerid][pAdmin] == 1) { arank = "{2E68B9}Модератор 1lvl"; }
             else { arank = "Администратор:"; }"

Последний пример позволяет выполнить только дно из нескольких действий (один из блоков кода), а следующие после этого действия проверки игнорируются. Так, если b > a, то проверка на то, равно ли b == a производиться не будет.

Другой способ создать проверку условия — это использовать конструкцию SWITCH-CASE-DEFAULT. Ниже приведен пример (пример так же взят из мода):
Код
    switch(PlayerInfo[playerid][pLevel])
     {
     case 2..4:
         {
             SetPlayerPos(playerid,1202.4523,-1760.3716,13.5865);
             SetPlayerFacingAngle(playerid, 92.374);
             SetPlayerInterior(playerid,0);
             return 1;
         }
     case 5..7:
         {
             SetPlayerPos(playerid,-1965.3966,137.4904,27.6875);
             SetPlayerFacingAngle(playerid, 92.374);
             SetPlayerInterior(playerid,0);
             return 1;
         }
     case 8..100:
         {
             SetPlayerPos(playerid,2840.8250,1290.4175,11.3906);
             SetPlayerFacingAngle(playerid, 92.374);
             SetPlayerInterior(playerid,0);
             return 1;
         }
     }
     return 1;
}

Оператор switch принимает в качестве аргумента какое-либо значение, значение которой необходимо проверить. case 2..4:, case 5..7:, case 8..100: case 100: default: — являются метками, которые используются в операторе switch и goto для перемещения по коду. Конкретно метки case и default используются в switch, оператор ищет их и проверяет их соответствие значению переменного аргумента. В нашем случае значению 100 переменной d соответствует метка case 100:. Когда найдена соответствующая метка, программа выполняет ассоциируемый с нею код, то есть будет выполнена функция printf() и оператор break. Если ни одна метка не будет соответствовать значению аргумента, то будет выполнен код метки default:. Метка default: не обязательна, вы можете ее не использовать в тех случаях, когда она будет лишней.

Цикл WHILE
Для более понятно примера решил из мода не брать так как там очень сложно представить, вот более простой примерчик:
while является самым простым циклом, с его помощью можно заменить любой другой, правда их в Си всего 3 штуки. Пример while цикла:
Код
#include <stdio.h>
int main(void) {
     int a = 5, b = 10, c = 25, d = 100, result;
      while (a <= d) {
         if (a % 10 == 0)
             printf("%d ", a);
          a += 5;
     }
     printf("\n");
     return 0;
}

Результат:
10 20 30 40 50 60 70 80 90 100

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

Я решил примеры сделать немного по проще, так как что бы понять принцип работы, мне кажется будет проще на простых примерах!

Цикл DO…WHILE
Цикл do…while очень похож на цикл while, однако он является циклом с пост-условием. То есть условие выполнения блока кода проверяется после выполнения, а не до, что гарантирует то, что код выполнится минимум один раз. Ниже приведен пример:
Код
#include <stdio.h>
int main(void) {
     int a = 5, b = 10, c = 25, d = 100, result;
      do {
         printf("%d ", a);
     } while (a >= d);
      printf("\n");
      return 0;
}

По условиям while блок кода не должен выполнится, однако он выполнится один раз потому, что мы используем цикл do…while. Реализовать цикл do…while через while очень просто — достаточно выполнить функцию или содержимое блок кода перед использованием цикла, а затем использовать их в цикле.

Цикл FOR
Цикл for является продвинутой версией циклов. for сразу заботится об инициализации и инкременте счетчика. Пример:
Код
#include <stdio.h>
  int main(void) {
     int a = 5, b = 10, c = 25, d = 100, result;
      for(int i = 0; i <= d; i += 10) {
         printf("%d ", i);
     }
      printf("\n");
      return 0;
}

Результат:
0 10 20 30 40 50 60 70 80 90 100
Как видите, мы сразу объявляем, что счетчик цикла должен увеличиваться после каждой итерации.
После знакомства с циклами и условными операторами давайте вернемся к упомянутому ранее break.

Оператор BREAK
Оператор break занимается прерыванием. В случае со switch мы используем его для кода каждой метки с той целью, чтобы следующие метки были проигнорированы, в противном случае switch проверит соответствие переданного ему значения всем меткам, точнее будет проверять пока не наткнется на break. Пример:
Код
#include <stdio.h>
int main(void) {
     int a = 5, b = 10, c = 25, d = 100, result;
     switch (d) {
         case 5:
             printf("d = 5\n");
         case 10: case 25:
             printf("d = 10 or 25\n");
         case 100:
             printf("d = 100\n");
         default:
             printf("d = d\n");
     }
      return 0;
}

Результат:
d = 100
d = d
Еще break очень полезен в ситуациях, когда мы не знаем точно когда необходимо завершить работу цикла. В таком случае принято использовать концепцию «стоп слов» -значений, которые позволяют программе понять, что цикл необходимо завершить. Пример:
Код
#include <stdio.h>
#include <string.h>
  int main(void) {
     char str[100];
     while (1) {
         printf("Введите слово: ");
         scanf("%s", str);
         printf("\n");
   
         if (strcmp(str, "exit") != 0) {
             printf(">> %s\n", str);
         } else {
             printf("bye!\n");
             break;
         }
     }
      return 0;
}

Оператор CONTINUE
Оператор continue похож на оператор break. Отличием continue от break является то, что если break останавливает выполнение кода (например цикла), то continue позволяет остановить только текущую итерацию и перейти к следующей. Перепишем пример выше с использованием continue:
Код
#include <stdio.h>
#include <string.h>
int main(void) {
     char str[100];
      while (1) {
         printf("Введите слово: ");
         scanf("%s", str);
         printf("\n");
          if (strcmp(str, "exit") != 0) {
             printf(">> %s\n", str);
         } else {
             continue;
             /* выполнено не будет */
             printf("bye!\n");
         }
     }
      return 0;
}


СообщениеАвтор: Potelkin
Некоторые данные были взяты из методических указаний, принадлежащих Гомельскому государственному машиностроительному колледжу!
Начнем с того, что программирование подразумевает не только логику и математическое мышление, еще нужно развивать и визуальное мышление, представление "объектов" в уме, рисовать их и представлять. Начнем с логических операциях:
Соединители логических условий:
&& — И,
|| — ИЛИ.
! — НЕ

Пример использования в условии IF:
Код
#include <stdio.h>
  int main(void) {
     int a = 5, b =10, c = 25, d = 100, result;
      if (b > a)
         printf("b > a\n");
      if (a >= b || b <= c)
         printf("a >= b OR b <= c\n");
      if (a == c / a && (c % a) == 0) {
         printf("c = a * a\n");
     }
     return 0;
}

Данная программа в результате выполнения напечатает следующее:
b > a
a >= b OR b <= c
c = a * a

Условные операторы
Пора познакомиться и с операторами позволяющими создавать условия. С одним вы уже познакомились выше — это условие IF («ЕСЛИ») которое выполняет следующую после него единственную строку кода или блок кода, если условие в круглых скобках верно.
У условия с IF имеется еще альтернативная форма IF-ELSE (ЕСЛИ-ИНАЧЕ) Пример:
Код
#include <stdio.h>
int main(void) {
     int a = 5, b =10, c = 25, d = 100, result;
      if (b > a) {
         printf("b > a\n");
     } else {
         printf("b < a\n");
     }
      return 0;
}

А вот еще один пример, только на этой раз IF-ELSE IF-ELSE:
Вот пример из мода:
Код
"    if(PlayerInfo[playerid][pAdmin] == 6) { arank = "{EF0A16}Revelation Developer 6lvl"; }
             else if(PlayerInfo[playerid][pAdmin] == 5) { arank = "{137F11}Главный администратор 5lvl"; }
             else if(PlayerInfo[playerid][pAdmin] == 4) { arank = "{790D67}Администратор сервера 4lvl"; }
             else if(PlayerInfo[playerid][pAdmin] == 3) { arank = "{790D67}Администратор сервера 3lvl"; }
             else if(PlayerInfo[playerid][pAdmin] == 2) { arank = "{2E68B9}Модератор 2lvl"; }
             else if(PlayerInfo[playerid][pAdmin] == 1) { arank = "{2E68B9}Модератор 1lvl"; }
             else { arank = "Администратор:"; }"

Последний пример позволяет выполнить только дно из нескольких действий (один из блоков кода), а следующие после этого действия проверки игнорируются. Так, если b > a, то проверка на то, равно ли b == a производиться не будет.

Другой способ создать проверку условия — это использовать конструкцию SWITCH-CASE-DEFAULT. Ниже приведен пример (пример так же взят из мода):
Код
    switch(PlayerInfo[playerid][pLevel])
     {
     case 2..4:
         {
             SetPlayerPos(playerid,1202.4523,-1760.3716,13.5865);
             SetPlayerFacingAngle(playerid, 92.374);
             SetPlayerInterior(playerid,0);
             return 1;
         }
     case 5..7:
         {
             SetPlayerPos(playerid,-1965.3966,137.4904,27.6875);
             SetPlayerFacingAngle(playerid, 92.374);
             SetPlayerInterior(playerid,0);
             return 1;
         }
     case 8..100:
         {
             SetPlayerPos(playerid,2840.8250,1290.4175,11.3906);
             SetPlayerFacingAngle(playerid, 92.374);
             SetPlayerInterior(playerid,0);
             return 1;
         }
     }
     return 1;
}

Оператор switch принимает в качестве аргумента какое-либо значение, значение которой необходимо проверить. case 2..4:, case 5..7:, case 8..100: case 100: default: — являются метками, которые используются в операторе switch и goto для перемещения по коду. Конкретно метки case и default используются в switch, оператор ищет их и проверяет их соответствие значению переменного аргумента. В нашем случае значению 100 переменной d соответствует метка case 100:. Когда найдена соответствующая метка, программа выполняет ассоциируемый с нею код, то есть будет выполнена функция printf() и оператор break. Если ни одна метка не будет соответствовать значению аргумента, то будет выполнен код метки default:. Метка default: не обязательна, вы можете ее не использовать в тех случаях, когда она будет лишней.

Цикл WHILE
Для более понятно примера решил из мода не брать так как там очень сложно представить, вот более простой примерчик:
while является самым простым циклом, с его помощью можно заменить любой другой, правда их в Си всего 3 штуки. Пример while цикла:
Код
#include <stdio.h>
int main(void) {
     int a = 5, b = 10, c = 25, d = 100, result;
      while (a <= d) {
         if (a % 10 == 0)
             printf("%d ", a);
          a += 5;
     }
     printf("\n");
     return 0;
}

Результат:
10 20 30 40 50 60 70 80 90 100

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

Я решил примеры сделать немного по проще, так как что бы понять принцип работы, мне кажется будет проще на простых примерах!

Цикл DO…WHILE
Цикл do…while очень похож на цикл while, однако он является циклом с пост-условием. То есть условие выполнения блока кода проверяется после выполнения, а не до, что гарантирует то, что код выполнится минимум один раз. Ниже приведен пример:
Код
#include <stdio.h>
int main(void) {
     int a = 5, b = 10, c = 25, d = 100, result;
      do {
         printf("%d ", a);
     } while (a >= d);
      printf("\n");
      return 0;
}

По условиям while блок кода не должен выполнится, однако он выполнится один раз потому, что мы используем цикл do…while. Реализовать цикл do…while через while очень просто — достаточно выполнить функцию или содержимое блок кода перед использованием цикла, а затем использовать их в цикле.

Цикл FOR
Цикл for является продвинутой версией циклов. for сразу заботится об инициализации и инкременте счетчика. Пример:
Код
#include <stdio.h>
  int main(void) {
     int a = 5, b = 10, c = 25, d = 100, result;
      for(int i = 0; i <= d; i += 10) {
         printf("%d ", i);
     }
      printf("\n");
      return 0;
}

Результат:
0 10 20 30 40 50 60 70 80 90 100
Как видите, мы сразу объявляем, что счетчик цикла должен увеличиваться после каждой итерации.
После знакомства с циклами и условными операторами давайте вернемся к упомянутому ранее break.

Оператор BREAK
Оператор break занимается прерыванием. В случае со switch мы используем его для кода каждой метки с той целью, чтобы следующие метки были проигнорированы, в противном случае switch проверит соответствие переданного ему значения всем меткам, точнее будет проверять пока не наткнется на break. Пример:
Код
#include <stdio.h>
int main(void) {
     int a = 5, b = 10, c = 25, d = 100, result;
     switch (d) {
         case 5:
             printf("d = 5\n");
         case 10: case 25:
             printf("d = 10 or 25\n");
         case 100:
             printf("d = 100\n");
         default:
             printf("d = d\n");
     }
      return 0;
}

Результат:
d = 100
d = d
Еще break очень полезен в ситуациях, когда мы не знаем точно когда необходимо завершить работу цикла. В таком случае принято использовать концепцию «стоп слов» -значений, которые позволяют программе понять, что цикл необходимо завершить. Пример:
Код
#include <stdio.h>
#include <string.h>
  int main(void) {
     char str[100];
     while (1) {
         printf("Введите слово: ");
         scanf("%s", str);
         printf("\n");
   
         if (strcmp(str, "exit") != 0) {
             printf(">> %s\n", str);
         } else {
             printf("bye!\n");
             break;
         }
     }
      return 0;
}

Оператор CONTINUE
Оператор continue похож на оператор break. Отличием continue от break является то, что если break останавливает выполнение кода (например цикла), то continue позволяет остановить только текущую итерацию и перейти к следующей. Перепишем пример выше с использованием continue:
Код
#include <stdio.h>
#include <string.h>
int main(void) {
     char str[100];
      while (1) {
         printf("Введите слово: ");
         scanf("%s", str);
         printf("\n");
          if (strcmp(str, "exit") != 0) {
             printf(">> %s\n", str);
         } else {
             continue;
             /* выполнено не будет */
             printf("bye!\n");
         }
     }
      return 0;
}

Автор - Kronos
Дата добавления - 03.07.2014 в 01:59
Форум » Pawn - скриптинг » Мануалы/уроки » [Урок] Основные этапы изучения программирования
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Revision by www.GTA-ONE.ru
Copyright © 2024 |