Разлика между версии на „Изходен код“

От Администрация и управление
Направо към навигацията Направо към търсенето
(Нова страница: Програмите се пишат на езици за програмиране. Съществуват различни видове езици за програмир...)
 
 
(Не са показани 8 междинни версии от същия потребител)
Ред 1: Ред 1:
Програмите се пишат на езици за програмиране. Съществуват различни видове езици за програмиране, които решават различни типове задачи. Една програма представлява обикновен текст, написан на текстов редактор. Обикновено командите са на английски език и са интуитивни. Това се нарича изходен код на програмата. Т.е. изходният код се разчита лесно от човек. За съжаление, компютърът не разбира изходния код на програмата. Той трябва да бъде транслиран (преведен) до команди, които се разбират от компютъра. В резултат на превеждането (транслирането) се получава машинен код, който представлява поредици от нули и единици, които се изпълняват от компютъра. Машинният код практически е нечитаем от човек и може да се изпълнява само на платформата, за която е преведен (компилиран[1]).
+
'''Изходен код''' може да се нарече '''начина на записване на определена програма, действие, команда, посредством определени за целта символи'''.
 +
==Същност==
 +
Програмите се пишат на езици за [[програмиране]]. Съществуват различни видове езици за програмиране, които решават различни типове задачи. Една програма представлява обикновен текст, написан на текстов редактор. Обикновено командите са на английски език и са интуитивни. Това се нарича изходен код на програмата. Т.е. изходният код се разчита лесно от човек. За съжаление, [[компютър]]ът не разбира изходния код на [[програма]]та. Той трябва да бъде транслиран (преведен) до команди, които се разбират от компютъра. В резултат на превеждането (транслирането) се получава [[машинен код]], който представлява поредици от нули и единици, които се изпълняват от компютъра. Машинният код практически е нечитаем от човек и може да се изпълнява само на [[платформа]]та, за която е преведен (компилиран (Транслаторите се делят на два вида: интерпретатори и компилатори. Интерпретаторите четат изходния код и изпълняват (превеждат) командите на машинен код една по една по време на изпълнението на програмата. Компилаторите генерират (превеждат) цялата програма на машинен код предварително. След това програмата може да се изпълнява самостоятелно без наличието на компилатор. Това деление не е много точно, понеже напоследък навлязоха нови концепции, като псевдо-компилатор и виртуална машина. Но целта на статията не е да разглежда различните видове [[транслатор]]и и да прави сравнение между тях.) ).
 +
==Пример==
 +
Нека да разгледаме един пример, с който да илюстрираме разликата между изходния код и машинния код. Примерите са реализирани с помощта на езика Паскал (Езикът за програмиране Паскал бе избран пред другите езици, поради факта, че се изучава(ше) в почти всички училища и университети, лесен е за разчитане и е идеален за обучение, въпреки че няма толкова голямо практическо приложение като Джава или С/С++.). [[Компилатор]]ът, който е използван, е със свободен изходен код и може да бъде изтеглен безплатно от  [http://www.freepascal.org/ тук]. Всъщност, цялата статия е реализирана изцяло с използването на свободен [[софтуер]].
  
Нека да разгледаме един пример, с който да илюстрираме разликата между изходния код и машинния код. Примерите са реализирани с помощта на езика Паскал[2]. Компилаторът, който е използван, е със свободен изходен код и може да бъде изтеглен безплатно от следния адрес http://www.freepascal.org/. Всъщност, цялата статия е реализирана изцяло с използването на свободен софтуер.
+
[[file:ik.jpg]]
 
 
Program Calculator;
 
 
 
var
 
    operand1  : real;
 
    operand2  : real;
 
    result    : real;
 
    operation  : char;
 
    error      : string;
 
 
 
 
 
BEGIN
 
    write('Въведете число: ');
 
    readln(operand1);
 
 
 
    write('Въведете операция: ');
 
    readln(operation);
 
 
 
    write('Въведете число: ');
 
    readln(operand2);
 
 
 
    error := '';
 
 
 
    case operation of
 
        '+': result := operand1 + operand2;
 
        '-': result := operand1 - operand2;
 
        '*': result := operand1*operand2;
 
        '/': result := operand1/operand2;
 
        otherwise error := 'невалидна операция';
 
    end;
 
 
 
    if error = ''
 
        then writeln('Резултатът е: ', result:6:5)
 
        else writeln('Грешка: ', error);
 
 
 
END.
 
 
 
Въпросният пример представлява калкулатор. Програмата изисква въвеждането на две числа и операция. След това операцията се извършва върху числата и резултатът се извежда на екрана. За момента се поддържат операциите събиране, изваждане, умножение и деление, което е напълно достатъчно за демонстрационни нужди.
+
Въпросният пример представлява калкулатор. Програмата изисква въвеждането на две числа и операция. След това операцията се извършва върху числата и резултатът се извежда на екрана. За момента се поддържат операциите събиране, [[изваждане]], [[умножение]] и деление, което е напълно достатъчно за демонстрационни нужди.
  
Както виждате, изходният код на програмата е разбираем (разбира се, читателят трябва да има известни познания по английски език). За да преведем изходния код на машинен код, използваме командата fpc calculator.pp, която се явява компилатор на езика Паскал. Ето и самата сесия:
+
Както виждате, изходният код на програмата е разбираем (разбира се, читателят трябва да има известни познания по английски език). За да преведем изходния код на машинен код, използваме командата fpc calculator.pp, която се явява компилатор на езика [[Блез Паскал|Паскал]]. Ето и самата сесия:
  
[radnev@localhost linux]$ fpc calculator.pp
+
[[file:ik2.jpg]]
Free Pascal Compiler version 1.0.10 [2003/06/26] for i386
 
Copyright (c) 1993-2003 by Florian Klaempfl
 
Target OS: Linux for i386
 
Compiling calculator.pp
 
Assembling calculator
 
Linking calculator
 
35 Lines compiled, 0.1 sec
 
[radnev@localhost linux]$
 
 
 
В резултат се получава изпълнимият файл calculator. Терминологията варира леко и може да срещнете други наименования, като двоичен файл[3], машинен файл или най-използваното наименование програма. Ето част от съдържанието на изпълнимия файл или т.н. машинен код:
+
В резултат се получава изпълнимият файл calculator. Терминологията варира леко и може да срещнете други наименования, като двоичен [[файл]] (Текстов файл и [[двоичен файл]] е двойка термини, подобна на изходен код и машинен код. Смисълът е пак същия. Текстовият файл може да се чете от човек директно, докато двоичният файл не може.), машинен файл или най-използваното наименование програма. Ето част от съдържанието на изпълнимия файл или т.н. машинен код:
  
01111111 01000101 01001100 01000110 00000001 00000001 00000001 00000000
+
[[file:ik3.jpg]]
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
 
00000010 00000000 00000011 00000000 00000001 00000000 00000000 00000000
 
10000000 10000000 00000100 00001000 00110100 00000000 00000000 00000000
 
11111100 10110100 00000000 00000000 00000000 00000000 00000000 00000000
 
00110100 00000000 00100000 00000000 00000010 00000000 00101000 00000000
 
00000101 00000000 00000100 00000000 00000001 00000000 00000000 00000000
 
00000000 00000000 00000000 00000000 00000000 10000000 00000100 00001000
 
 
 
 
Нека да изпълним програмата, за да видим дали работи. Ето няколко изпълнения на програмата:
 
Нека да изпълним програмата, за да видим дали работи. Ето няколко изпълнения на програмата:
  
Въведете число: 23
+
[[file:ik4.jpg]]
Въведете операция: *
 
Въведете число: 45
 
Резултатът е: 1035.00000
 
 
 
Въведете число: 12345
 
Въведете операция: /
 
Въведете число: 23
 
Резултатът е: 536.73913
 
 
 
Въведете число: 2
 
Въведете операция: ^
 
Въведете число: 32
 
Грешка: невалидна операция
 
 
 
Въведете число: 345
 
Въведете операция: /
 
Въведете число: 0
 
Runtime error 200 at 0x08052F63
 
  0x08052F63
 
  0x080480B0
 
 
 
 
Програмата работи за тестваните случаи на умножение и деление, и показва резултата с точност до петия знак след десетичната запетая. Липсва операцията по степенуване и при деление на нула програмата се чупи, вместо да покаже съобщение за грешка.
 
Програмата работи за тестваните случаи на умножение и деление, и показва резултата с точност до петия знак след десетичната запетая. Липсва операцията по степенуване и при деление на нула програмата се чупи, вместо да покаже съобщение за грешка.
  
Очевидно, ако разполагаме само с машинния код на програмата, няма как да я оправим. Но ако разполагаме с изходния код на програмата, може сравнително лесно да добавим операцията по степенуване и да направим съответната проверка за грешка. Ето модифицираната част на новата програма:
+
Очевидно, ако разполагаме само с машинния код на програмата, няма как да я оправим. Но ако разполагаме с изходния код на програмата, може сравнително лесно да добавим операцията по [[степен]]уване и да направим съответната проверка за [[грешка]]. Ето модифицираната част на новата програма:
  
case operation of
+
[[file:ik5.jpg]]
    '+': result := operand1 + operand2;
 
    '-': result := operand1 - operand2;
 
    '*': result := operand1*operand2;
 
    '/': if operand2 = 0                      -- Проверка за
 
            then error := 'деление на нула'  -- деление на
 
            else result := operand1/operand2; -- нула
 
    '^': begin
 
            result := 1;                      -- Новата
 
            for i := 1 to trunc(operand2)    -- операция за
 
                do result := result*operand1; -- степенуване
 
        end
 
    otherwise error := 'невалидна операция';
 
end;
 
 
 
 
След като компилираме програмата, изпълняваме я отново, за да видим дали работи. Ето няколко нови примера от изпълнението на програмата:
 
След като компилираме програмата, изпълняваме я отново, за да видим дали работи. Ето няколко нови примера от изпълнението на програмата:
  
Въведете число: 34
+
[[file:ik6.jpg]]
Въведете операция: /
 
Въведете число: 0
 
Грешка: деление на нула
 
  
Въведете число: 2
 
Въведете операция: ^
 
Въведете число: 5
 
Резултатът е: 32.00000
 
 
 
Както се вижда от изложените примери, ако имаме изходния код на една програма и разбираме от програмиране, може сравнително лесно да оправим грешки и/или да добавим нова функционалност. При липсата на изходния код на програмата, очевидно, това е невъзможно.
 
Както се вижда от изложените примери, ако имаме изходния код на една програма и разбираме от програмиране, може сравнително лесно да оправим грешки и/или да добавим нова функционалност. При липсата на изходния код на програмата, очевидно, това е невъзможно.
==Терминология в текста==
 
  
*[1] Транслаторите се делят на два вида: интерпретатори и компилатори. Интерпретаторите четат изходния код и изпълняват (превеждат) командите на машинен код една по една по време на изпълнението на програмата. Компилаторите генерират (превеждат) цялата програма на машинен код предварително. След това програмата може да се изпълнява самостоятелно без наличието на компилатор. Това деление не е много точно, понеже напоследък навлязоха нови концепции, като псевдо-компилатор и виртуална машина. Но целта на статията не е да разглежда различните видове транслатори и да прави сравнение между тях.
+
==Вижте още==
*[2] Езикът за програмиране Паскал бе избран пред другите езици, поради факта, че се изучава(ше) в почти всички училища и университети, лесен е за разчитане и е идеален за обучение, въпреки че няма толкова голямо практическо приложение като Джава или С/С++.
+
*[[Машина]]
*[3] Текстов файл и двоичен файл е двойка термини, подобна на изходен код и машинен код. Смисълът е пак същия. Текстовият файл може да се чете от човек директно, докато двоичният файл не може.
+
*[[Алън Тюринг]]
 +
*[[Кибернетика]]
 +
*[[Програма]]
 +
*[[Код]]
 +
*[[Невронна мрежа]]
 +
*[[Генетичен код]]
 +
 
 +
==Източници==
 +
*Денчо Николов Батанов, Гочо В. Гочев, Агоп Х. Хачикян, Програмиране и използуване на изчислителни системи 1989 Техника *Димитър В. Богданов, Иван Ц. Мустакеров, Език за програмиране С
 +
*Тодорка Атанасова, Логическо и функционално програмиране
 +
*Александър Г. Александров, Основи на програмирането на PL/I
 +
*Джордж Данци, Линейно програмиране и неговото приложение
 +
*Петко Илиев, Павел Петров, Владимир Сълов, Езици за програмиране : Ч. І -
 +
*Петко Щерев Илиев, Мария З. Кашева, Радка А. Арсова, Основи на електронноизчислителната техника и програмиране:ППП dBASE III
 +
 
 +
==Външни препратки==
 +
*[http://support.google.com/analytics/bin/answer.py?hl=bg&answer=1032399 Проверка на изходния код в браузъра за проследяващ код в Google Анализ]
 +
*[http://support.google.com/googleanalytics/bin/answer.py?hl=bg&answer=75129 Как да проверя изходния код на сайта си?]
 +
*[http://news.idg.bg/softuer/64897_google_otvori_koda_na_android_41/ Google отвори кода на Android 4.1]
 +
*[http://codecourse.sourceforge.net/ Конструиране на качествен програмен код]
 +
*[http://mytech.bg/uroci/8/Visual%20Basic/707/%D0%9F%D0%A0%D0%9E%D0%93%D0%A0%D0%90%D0%9C%D0%98%D0%A0%D0%90%D0%9D%D0%95+%D0%9D%D0%90+VISUAL+BASIC+%D0%A7%D0%90%D0%A1%D0%A2+%E2%80%93+3 Програмиране на VISUAL BASIC ЧАСТ – 3]
 +
[[Category:Информатика]]

Текуща версия към 11:59, 15 юли 2012

Изходен код може да се нарече начина на записване на определена програма, действие, команда, посредством определени за целта символи.

Същност

Програмите се пишат на езици за програмиране. Съществуват различни видове езици за програмиране, които решават различни типове задачи. Една програма представлява обикновен текст, написан на текстов редактор. Обикновено командите са на английски език и са интуитивни. Това се нарича изходен код на програмата. Т.е. изходният код се разчита лесно от човек. За съжаление, компютърът не разбира изходния код на програмата. Той трябва да бъде транслиран (преведен) до команди, които се разбират от компютъра. В резултат на превеждането (транслирането) се получава машинен код, който представлява поредици от нули и единици, които се изпълняват от компютъра. Машинният код практически е нечитаем от човек и може да се изпълнява само на платформата, за която е преведен (компилиран (Транслаторите се делят на два вида: интерпретатори и компилатори. Интерпретаторите четат изходния код и изпълняват (превеждат) командите на машинен код една по една по време на изпълнението на програмата. Компилаторите генерират (превеждат) цялата програма на машинен код предварително. След това програмата може да се изпълнява самостоятелно без наличието на компилатор. Това деление не е много точно, понеже напоследък навлязоха нови концепции, като псевдо-компилатор и виртуална машина. Но целта на статията не е да разглежда различните видове транслатори и да прави сравнение между тях.) ).

Пример

Нека да разгледаме един пример, с който да илюстрираме разликата между изходния код и машинния код. Примерите са реализирани с помощта на езика Паскал (Езикът за програмиране Паскал бе избран пред другите езици, поради факта, че се изучава(ше) в почти всички училища и университети, лесен е за разчитане и е идеален за обучение, въпреки че няма толкова голямо практическо приложение като Джава или С/С++.). Компилаторът, който е използван, е със свободен изходен код и може да бъде изтеглен безплатно от тук. Всъщност, цялата статия е реализирана изцяло с използването на свободен софтуер.

Ik.jpg

Въпросният пример представлява калкулатор. Програмата изисква въвеждането на две числа и операция. След това операцията се извършва върху числата и резултатът се извежда на екрана. За момента се поддържат операциите събиране, изваждане, умножение и деление, което е напълно достатъчно за демонстрационни нужди.

Както виждате, изходният код на програмата е разбираем (разбира се, читателят трябва да има известни познания по английски език). За да преведем изходния код на машинен код, използваме командата fpc calculator.pp, която се явява компилатор на езика Паскал. Ето и самата сесия:

Ik2.jpg

В резултат се получава изпълнимият файл calculator. Терминологията варира леко и може да срещнете други наименования, като двоичен файл (Текстов файл и двоичен файл е двойка термини, подобна на изходен код и машинен код. Смисълът е пак същия. Текстовият файл може да се чете от човек директно, докато двоичният файл не може.), машинен файл или най-използваното наименование програма. Ето част от съдържанието на изпълнимия файл или т.н. машинен код:

Ik3.jpg

Нека да изпълним програмата, за да видим дали работи. Ето няколко изпълнения на програмата:

Ik4.jpg

Програмата работи за тестваните случаи на умножение и деление, и показва резултата с точност до петия знак след десетичната запетая. Липсва операцията по степенуване и при деление на нула програмата се чупи, вместо да покаже съобщение за грешка.

Очевидно, ако разполагаме само с машинния код на програмата, няма как да я оправим. Но ако разполагаме с изходния код на програмата, може сравнително лесно да добавим операцията по степенуване и да направим съответната проверка за грешка. Ето модифицираната част на новата програма:

Ik5.jpg

След като компилираме програмата, изпълняваме я отново, за да видим дали работи. Ето няколко нови примера от изпълнението на програмата:

Ik6.jpg

Както се вижда от изложените примери, ако имаме изходния код на една програма и разбираме от програмиране, може сравнително лесно да оправим грешки и/или да добавим нова функционалност. При липсата на изходния код на програмата, очевидно, това е невъзможно.

Вижте още

Източници

  • Денчо Николов Батанов, Гочо В. Гочев, Агоп Х. Хачикян, Програмиране и използуване на изчислителни системи 1989 Техника *Димитър В. Богданов, Иван Ц. Мустакеров, Език за програмиране С
  • Тодорка Атанасова, Логическо и функционално програмиране
  • Александър Г. Александров, Основи на програмирането на PL/I
  • Джордж Данци, Линейно програмиране и неговото приложение
  • Петко Илиев, Павел Петров, Владимир Сълов, Езици за програмиране : Ч. І -
  • Петко Щерев Илиев, Мария З. Кашева, Радка А. Арсова, Основи на електронноизчислителната техника и програмиране:ППП dBASE III

Външни препратки