Разработка программных модулей программного обеспечения. Отчет о прохождении учебной практике по пм Разработка программных модулей программного обеспечения для компьютерных систем
![]()
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего образования «Сыктывкарский государственный университет имени Питирима Сорокина» КОЛЛЕДЖ ЭКОНОМИКИ, ПРАВА И ИНФОРМАТИКИ ОТЧЕТ о прохождении учебной практике по ПМ «Разработка программных модулей программного обеспечения для компьютерных систем» студента 1 курса группы № 16 специальности 09.02.03 Программирование в компьютерных системах Иевлевой Кристины Евгеньевны Место практики: «СГУ им. Питирима Сорокина » (г. Сыктывкар, Октябрьский проспект, 55) Сроки практики: с 19.01.2017 по 27.04.2017 года Руководитель практики от университета: Квочкин Д.О Дата защиты отчета « ____ » _______________2017 г. Оценка _______________ Подпись руководителя____________________ Сыктывкар 2017 СОДЕРЖАНИЕ Введение 3 Раздел 1 Программирование на языке C 4 Подраздел 1.2 Ввод и вывод данных, оператор присваивания 4 Подраздел 1.3 Целые числа 6 Подраздел 1.4 Условный оператор 10 Подраздел 1.5 Цикл с параметром 13 Подраздел 1.6 Цикл с условием 16 Подраздел 1.7 Последовательности 18 Раздел 2 Программирование на языке C++ 21 Подраздел 2.2 Переменные константы 21 Подраздел 2.3 Функции 22 Раздел 3 Программирование на языке Delphi 23 Подраздел 3.1 Первая программа в Lazarus 24 Подраздел 3.2 Полезная программа 25 Подраздел 3.3 Консольные приложения среды Lazarus 26 Подраздел 3.4 Работа с комплексными числами 27 Подраздел 3.5 График функции 29 Раздел 4 Программирование на языке Python 33 Подраздел 4.1 Ввод и вывод данных 33 Подраздел 4.2 Условия 36 Подраздел 4.3 Вычисления 39 Заключение 43 Список использованной литературы 44 Введение Учебная практика была пройдена в период с 19 января по 27 апреля 2017 года под руководством преподавателя колледжа экономики, права и информатики Квочкина Дмитрия Олеговича. Цель учебной практики: Формирование основных профессиональных умений, навыков, опыта работы с программным обеспечения для компьютерных систем и интеграции программных модулей. Задачи практики: 1.Закрепление и углубление теоретических знаний, полученных студентами в процессе изучения «Системное программирование» , «Прикладное программирование» 2. Выработка творческого, исследовательского подхода к профессиональной деятельности. 3. Изучены языки программирования : C,СС++,Delphi, Python. 4. Сбор материалов, необходимых для составления отчета о прохождения. 1.Программирование на языке C Разработка и программирование в среде разработке DevCpp – ide с компилятором TDM GCC 1.2 Ввод и вывод данных , оператор присваивания Задача 1 Даны длины ребер a, b, c прямоугольного параллелепипеда. Найти его объем V = a·b·c и площадь поверхности S = 2·(a·b + b·c + a·c). Листинг задачи 1 #include int main() {double a,b,c,V,S; printf("\n vvestirebro a = "); scanf("%lf", &a); printf("\n vvestirebro b = "); scanf("%lf", &b); printf("\n vvestirebro c = "); scanf("%lf", &c); V=a*b*c; printf("Ob'em = %5.4f" ,V); S=2*(a*b+b*c+a*c); printf("Ploshad = %5.4f" ,S); return 0; } ![]() Рисунок 1. Результат работы программы к задаче №1 Комментарий к задаче 1 Объявляем 5 переменных из которых a,b,c- длина ребер V- объем параллелепипеда , S – площадь параллелепипеда. Запрашиваем у пользователя длину ребер. Перемножаем введенные значения и помешаем полученный результат в переменную V. По формуле приведенной в условии задаче вычисляем площадь и помешаем полученный результат в переменную S. Выводим полученные значения на экран. Задача 2: Даны два ненулевых числа. Найти сумму, разность, произведение и частное их квадратов. Листингзадачи 2: #include int main(void) { float a, b; printf("a:"); scanf ("%f", &a); printf("b:"); scanf ("%f", &b); printf("%f\n",a*a+b*b); printf("%f\n",a*a-b*b); printf("%f\n",a*a*b*b); printf("%f\n",(a*a)/(b*b)); return 0; } ![]() Рисунок 2. Результат работы программы к задаче №2. Комментарий к задаче 2. Объявляем 2 переменных a и b.Запрашиваю значения этих переменных у пользователя. Далее выполняются операции описанные в условиях задачи и выводятся их результаты на экран. 1.3 Целые числа Задача 1: Дано трехзначное число. Вывести вначале его последнюю цифру (единицы), а затем — его среднюю цифру (десятки). Листинг задачи 1: #include int main(void) { int A; printf("A:"); scanf ("%i", &A); printf("%i%i\n",A%10,(A%100)/10); return 0; } ![]() Рисунок 3. Результат работы программы к задаче №1. Комментарий к задаче 1. Объявляем переменную А. Затем запрашиваем у пользователя значение переменной А. Потом выводим результат на экран. Задача 2: Дано целое число, большее 999. Используя одну операцию деления нацело и одну операцию взятия остатка от деления, найти цифру, соответствующую разряду тысяч в записи этого числа. Листинг задачи 2: #include #include int main() {int a,b,c,d,S; while (1){ printf("\n vvesti chislo a = "); scanf("%d", &a); if (a>999){ break; } printf ("ohibka"); } c=(a/1000%10); printf("Cifra r'ada tisyach = %d\n" ,c); return 0; 16.} ![]() Рисунок 4. Результат работы программы к задаче №2 Коментарий к задаче 2 Запрашиваем у пользователя на ввод число большее чем 999 , если пользователь вводит меньшее число , программа выдает ошибку. После успешного ввода числа больше 999 , программа записываает это число в переменную а. Чтобы отделить цифру соответсвующую разряду тысяч , делим полученное число на 1000 , берем целую часть и остаток от деления на 10 . Полученный результат пприсваиваем переменной с. Выводим полученый результат на экран. 1.4 Условный оператор Задача 1: Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной сумму этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B. Листингзадачи 1: #include int main(void) { float a, b; printf("A:"); scanf ("%f", &a); printf("B:"); scanf ("%f", &b); if (a!=b) a=b=a+b; else a=b=0; printf("a: %f\n b: %f\n",a, b); return 0; } Комментарий к задаче 1. Объявляем 2 переменные А и В. Запрашиваем у пользователя значения переменных. Если они равны, то присваиваем им нулевые значения, а если их значения не равны, то присвоить каждой переменной сумму этих значений. Выводим результат на экран. Задача 2: Даны два числа. Вывести большее из них. Листинг задачи 2 #include #include int main() { int a,b; printf("\n vvesti chislo a = "); scanf("%d", &a); printf("\n vvesti chislo b = "); scanf("%d", &b); if (a>b) { printf("%d" ,a); } if (a { printf("%d",b); } if (a==b) { printf("Oni ravni \n" ) ; } return 0; } ![]() Рисунок 6. Результат работы программы к задаче №2 Комментарий к задаче 7 Программа запрашивает у пользователя на ввод два числа и помещает их в переменные а и b. Спомьщью условного оператора if программа сравнивает два числа. В первом случае: если b меньше a то на экран выводится цифра помещенная в переменную a. Во втором случае: если а меньше b то на экран выводится цифра помещенная в переменную b. В третьем случае: если a равна b то на экран выводится сообщение «они равны». 1.5 Цикл с параметром Задача 1 Дано вещественное число — цена 1 кг конфет. Вывести стоимость 1.2, 1.4, …, 2 кг конфет. Листинг задачи 1 #include int main() { float a; printf("\n vvesti cenu konfet = "); scanf("%f", &a); float b; for(b=1,2; 2.1>b; b+=0.2) printf("%.1f kg konfet = %.2f Rub. \n",b,b*a); return 0; } ![]() Рисунок 7 Результат работы программы к задаче №1 Комментарий к задаче 1 Программа запрашивает у пользователя на ввод число и помещает в переменную а. Длаее идет цикл с параметром с шагом 0,2 от 1 до 2 включительно. После чего прогрмма выводит на экран каждое полученное число по шагам цикла. Задача 2: Дано целое число N (> 0). Найти произведение 1.1 · 1.2 · 1.3 · … Листинг задачи 2 #include <stdio.h> int main() { float a,c=1.0; while (1){ printf("\n vvesti N = "); scanf("%f", &a); if (a>0){ break; } printf("vvedite chislo bolshe 0"); } float b; for(b=1.1; a>b; b+=0.1){ c*=b; } printf("%f \n",c); return 0; } ![]() Рисунок 8. Результат работы программы к задаче №2 Комментарий к задаче 2 Программа запрашивает у пльзователя число N которое больше 0 . С помошью условного оператора if программа проверяет ввел ли пользователь число большее чем 0 . Если нет , то на экране появляется сообьщение о том , что введенное число должно быть больше 0 . Если пользователь ввел правильное число с помощью цикла с параметром с шагом 0,1 программа перемнажает каждуй шаг на предидущий , помещая результат в переменную с . После чего результат выводиться на экран. 1.6 Цикл с условием Задача 1: Дано целое число N (> 0), являющееся некоторой степенью числа 2: N = 2K. Найти целое число K — показатель этой степени. Листинг задачи 1: #include int main(void) { int n; printf("N:"); scanf ("%i", &n); int k=0; while (n>=2){ ++k; n/=2; } printf("K: %i\n",k); return 0; } ![]() Рисунок 9. Результат работы программы к задаче №1. Комментарий к задаче 1. Объявляем переменную n, запрашиваем у пользователя значение переменной n. Объявление переменой к(счётчик). Далее идёт цикл с предусловием, который высчитывает степень двойки. Выводим результат на экран. Задача 2: Дано целое число N (> 1). Вывести наибольшее из целых чисел K, для которых сумма 1 + 2 + … + K будет меньше или равна N, и саму эту сумму. Листинг задачи 2 #include int main(void) { int n; printf("vvesti N:"); scanf ("%d", &n); int k=0, b=0; while (b+k+1<=n){ k++; b+=k; } printf("naibolshee K= %d \n Summa= %d",k,b); return 0; } ![]() Рисунок 10. Результат работы программы к задаче №2 Комментарий к задаче 2 Программа запрашивает у пользователя на ввод число и помещает в переменную n , далее вводятся две переменные k и b. Цикл while проверяет истинно ли выражение b+k+i<=n , если выражение верно , то k увеличивается на 1 , а b принимает значение b+k. Как только выражение из цикла становиться ложным на экран выводиться конечный результат. 1.7 Последовательности Задача 1: Дано целое число N и набор из N целых чисел. Если в наборе имеются положительные числа, то вывести True; в противном случае вывести False. Листинг задачи 1: #include int main(void) { int i,n,r,b=0; printf("N:"); scanf("%i", &n); for (i=1; i<=n; ++i){ printf("%i:",i); scanf("%i", &r); if (r>0) b=1; } printf("%s\n",b?"True":"False"); return 0; } ![]() Рисунок 11. Результат работы программы к задаче №1. Комментарий к задаче 2. Объявляем переменные i(счётчик), n(количество чисел в наборе), r(текущее число набора), b(показатель наличия положительных чисел в наборе). Запрашиваем значение переменной n у пользователя. Далее идёт цикл, в котором мы запрашиваем текущее число набора, и проверяем больше ли оно 0. После этого Выводим True или False при наличии положительных чисел в наборе. Задача 2 Дан набор ненулевых целых чисел; признак его завершения — число 0. Вывести количество чисел в наборе. Листингзадачи2 #include int main() { int n,nn,i=0; double mas[100]; for( i=0 ; i<100 ; i++) { printf("vvedite chislo: "); scanf("%d",&nn); mas[i]=nn; if (nn==0) break; } printf(" \n vsego chisel %d\n" ,i); return 0; } ![]() Рисунок 11. Результат работы программы к задаче №2 Комментарий к задаче 15 Программа запрашивает у пользователя на ввод числа , объявляется массив , в массив заносяться числа вводимые пользователем . Оператор if проверяет введеные числа , как только пользователь ввел 0 , заполнение массива прекращается , программа выводит количесвто чисел , последнее число счетчика 2. Программирование на языке С++ В ходе изучения языка программирования C++, была использована среда разработки DevCpp – IDE с компилятором TDM - GCC. Devcpp - свободная интегрированная среда разработки приложений для языков программирования C/C++. GCC - GNU Compiler Collection (обычно используется сокращение GCC) — набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. 2.1 Цикл for Задача 1 Напишем программу, которая будет считать сумму всех чисел от 1 до 1000. Листингзадачи 1 ![]() 1. #include 2. using namespace std; 3. 4. int main() 5. { 6. int i; 7. int sum = 0; 8. setlocale(0, ""); 9. for (i = 1; i <= 1000; i++) 10. { 11. sum = sum + i; 12. } 13. cout « " 14. return 0; 15. } Рисунок 12. Результат работы программы к задаче №1 2.2 Функции в С++ Задача 20 Создать программу которая выводит пользователю сообщения об ошибке в разных местах программы, если он ввел неверное значение. Листинг
задачи 20 1 ![]() . #include 2. #include 3. using namespace std; 4. void check_pass (string password) 5. { 6. string valid_pass = "qwerty123"; 7. if (password == valid_pass) { 8. cout « "Access is allowed." « endl; 9. } else { 10. cout « "Incorrect password!" « endl; 11. } 12. } 13. int main() 14. { 15. string user_pass; 16. cout « "Enter password: "; 17. getline (cin, user_pass); 18. check_pass (user_pass); 19. return 0; 20. } Рисунок 13 и 14. Результат работы программы к задаче №2 ![]() 3.Программирование на языке Delphi 3.1 Первая программа в Lazarus Листинг первой программы в Lazarus unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin Button1.Caption:='Ура!_заработало!' ; end; end. ![]() Рисунок 15. Результат работы первой программы в Lazarus Комментарий к первой программе в Lazarus При нажатии на кнопку программа должна выводить сообщение Ура! заработало! В этой кнопке. Для этого в форму добовляем кнопку . В свойствах ,на параметр при нажатии , меняем значение кнопки на Ура! заработало! 3.2 Полезная программа Листинг полезной программы unit unit2; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); var pud, funt : integer; kg: real; begin pud:=StrToInt ( Edit1.Text ); funt:=StrToInt ( Edit2.Text ) ; kg:=pud*16.38+funt*16.38/40 ; Label4.Caption:='В_килограммах:_'+FloatToStr( kg ) ; end; end. ![]() Рисунок 16. Результат работы полезной прграммы Комментарий к полезной программе Для выполнения данной задачи на поле форм добовляем названия , поля для ввода и кнопку. По нажатиию на кнопку программа конвектирует введенные значяения в поля для ввода из едениц измерения: пуды и фунты в киллограмы. 3.3 Консольное приложение среды Lazarus Листинг консольного приложения в среде Lazarus program project1; {$mode objfpc}{$H+} uses Classes , SysUtils { you can add units after this }; var gradus, minuta :integer ; radian : real ; begin write ('gradus='); readln(gradus); write ('minuta='); readln(minuta); radian:=gradus*pi/180+minuta*pi/(180*60); writeln('radian=' ,radian); end. ![]() Рисунок 17. Результат работы консольного приложения среды Lazarus Комментарий к консольному приложению в среде LazarusПрограмма запрашивает у Пользователя ввести градусы и минуты , после чего по формуле gradus*pi/180+minuta*pi /(180*60) вычисляет радиан и выводит на экран результат. Работа с комплексными числами Листинг программы комплексные числа unit Unit1 ; {$mode objfpc}{$H+} interface uses Classes , SysUtils , LResources , Forms , Controls , Graphics , Dialogs , StdCtrls ; type { TForm1 } TForm1 = class (TForm) Button1 : TButton ; Edit1 : TEdit ; Edit2 : TEdit ; Label1 : TLabel ; Label2 : TLabel ; Label3 : TLabel ; Memo1 : TMemo; procedure Button1Click ( Sender : TObject ) ; procedure FormCreate(Sender: TObject); procedure Memo1Change(Sender: TObject); private { private declarations } public { public declarations } end; type TComplex = class private x : real ; y : real ; public constructor Create ; function Modul() : real ; function Argument() : real ; function ComplexToStr() : String ; end; var Form1 : TForm1 ; chislo : TComplex ; implementation constructor TComplex. Create ; begin x :=0; y :=0; inherited Create ; end; function TComplex.Modul () : real ; begin modul:=sqrt( x*x+y*y ) ; end; function TComplex.Argument () : real ; begin argument:=arctan( y/x )*180/pi ; end; function TComplex.ComplexToStr() : String ; begin if y>=0 then ComplexToStr:=FloatToStrF (x,ffFixed ,5 ,2)+ '+' + FloatTostrF (y , ffFixed ,5 ,2)+ ' i ' else ComplexToStr :=FloatTostrF (x , ffFixed ,5 ,2)+ FloatTostrF (y , ffFixed ,5 ,2)+ ' i ' end; procedure TForm1.Button1Click ( Sender: TObject ) ; Var Str1 : String ; begin chislo:=TComplex.Create ; chislo.x:=StrToFloat ( Edit1.Text ) ; chislo.y:=StrToFloat ( Edit2.Text ) ; Str1 := 'Kompleksnoe_chislo_'+chislo.ComplexToStr () ; Memo1.Lines.Add( Str1 ) ; Str1:= 'Modul_chisla_'+ FloatToStrF ( chislo.Modul () , ffFixed , 5 , 2 ) ; Memo1.Lines.Add( Str1 ) ; Str1:= 'Argument_chisla_'+ FloatToStrF( chislo.Argument () , ffFixed , 5 , 2 ) ; Memo1.Lines.Add( Str1 ) ; chislo.Free ; end; procedure TForm1.FormCreate(Sender: TObject); begin Memo1.text :=''; end; procedure TForm1.Memo1Change(Sender: TObject); begin end; initialization {$I unit1.lrs} end. ![]() Рисунок 16. Результат работы программы комплексные числа Комментарий к программе комплексные числа Программа запрашивает у пользователя 2 числа , после чего выводить комплексное этих чисел, модуль числа и аргумент. 4. Программирование на языке Python. 4.1. Ввод и вывод данных Задача 1: Напишите программу, которая считывает длины двух катетов в прямоугольном треугольнике и выводит его площадь. Каждое число записано в отдельной строке. Листинг задачи 1: a = int(input()) b = int(input()) c = int(input()) s = a + b + c print(s) ![]() Рисунок 17. Результат работы программы к задаче 1 Комментарий к задаче 1 Программа запрашивает у пользователя на ввод три числа , затем выводит на экран сумму всех трех чисел. Задача 2: n школьников делят k яблок поровну, неделящийся остаток остается в корзинке. Сколько яблок достанется каждому школьнику? Сколько яблок останется в корзинке? Программа получает на вход числа n и k и должна вывести искомое количество яблок (два числа). Листинг задачи 2: # Число n можно считать так: n = int(input()) k = int(input()) b = int(k/n) s = int(k%n) # Выводите результат через print() # Пример на деление, вычисление частного и остатка: print(b) print(s) ![]() Рисунок 18. Результат работы программы к задаче №2. Задача 3 Обувная фабрика собирается начать выпуск элитной модели ботинок. Дырочки для шнуровки будут расположены в два ряда, расстояние между рядами равно aa, а расстояние между дырочками в ряду bb. Количество дырочек в каждом ряду равно NN. Шнуровка должна происходить элитным способом “наверх, по горизонтали в другой ряд, наверх, по горизонтали и т.д.” (см. рисунок). Кроме того, чтобы шнурки можно было завязать элитным бантиком, длина свободного конца шнурка должна быть ll. Какова должна быть длина шнурка для этих ботинок? Листинг задачи 3 a = int(input()) b = int(input()) l = int(input()) N = int(input()) print((l*2)+(2*(b*(N-1)))+(2*(a*N)-a)) ![]() Рисунок 19. Результат работы программы к задаче 3 Комментарий к задаче 21 Программа запрашивает у пользователя на ввод 4 числа. Далее с помощью формулы (2*(N-1)*(a+b)+a+l*2) находит длину шнурков , значение помещается в переменную dlina и выводится на экран. 4.2Условия Задача 1 Даны два целых числа. Выведите значение наименьшего из них. Листинг задачи 1 n = int(input()) b = int(input()) if n < b: print(n) if n==b: print(n) if n > b: print(b) ![]() Рисунок 20. Результат работы программы к задаче 1 Комментарий к задаче 1 Программа запрашивает у пользователя на ввод 2 числа. С помощю условного оператора if сравнивает эти числа . Если n Если n==b , программа выводит n. Если n>b , программа выводит b. 4.3 Вычисления Задача 25 Длина Московской кольцевой автомобильной дороги —109 километров. Байкер Вася стартует с нулевого километра МКАД и едет со скоростью v километров в час. На какой отметке он остановится через t часов? Программа получает на вход значение v и t. Если v>0v>0, то Вася движется в положительном направлении по МКАД, если же значение v<0v<0, то в отрицательном. Программа должна вывести целое число от 0 до 108 — номер отметки, на которой остановится Вася. Листинг задачи 25 v = int(input()) t = int(input()) print((v*t)%109) ![]() Рисунок 21. Результат работы программы к задаче 1 Комментарий к задаче 21 Программа запрашивает у пользователя на ввод 2 числа , в переменную v помещается введенная скорость , а в переменную t – введеное время . Следующим шагом скорость умножается на время , береться остаток от деления на 109 и выводится га экран. Задача 2 Улитка ползет по вертикальному шесту высотой h метров, поднимаясь за день на a метров, а за ночь спускаясь на b метров. На какой день улитка доползет до вершины шеста? Программа получает на вход натуральные числа h, a, b.Программа должна вывести одно натуральное число. Гарантируется, что a>b. Листинг задачи 2 from math import ceil h = int(input()) a = int(input()) b = int(input()) m = h-a v = a-b y = m/v n = ceil(y) print(n+1) ![]() Рисунок 22. Результат работы программы к задаче 2 Комментарий к задаче 2 Для выполнения данной задачи потребовалось воспользоваться библеотекой math. Программа запрашивает у пользователя на ввод 3 числа. В переменную m помещается результат разности переменных h и a расстояние которое нужно пройти улитки , кроме последнего дня. В переменную v помещается разность переменных a и b – расстояние кторое улитка проползает за 1 день , при условии что сползает назад.. Далее в переменную y помещается результат деления m на v - количество дней , которых улитка будет ползти и сползать обратно. В переменную n помещается округленное значение переменной у. Прибовляется еще один вычтенный ранее день к переменной n и выводится на экран. Заключение На основании пройденной учебной практики можно сделать следующие выводы Получен опыт отладки программного кода. Изучены инструментальные средства программирования : Dev-Cpp , Lazarus, интерпретатор Python 3.7 Получен опыт разработки кода программного продукта на основе готовой спецификации на уровне модуля Получен практический опыт разработки алгоритмов и их реализация на языках программирования c , c++ , Delphi , Python. Получен опыт проведения тестирования программного модуля по определенному сценарию. Общее впечатление от пройденной учебной практики - положительное. Программа практики выполнена в полном объеме, поэтому цель и задачи практики считаю достигнутой, а практику успешно пройденной. Список использованной литературы Шилдт, Герберт С++ за 24 часа , 4-е издание.: Пер. с англ. – М.: Издательский дом «Вильямс», 2006. – 800 с. Питонтьютор [Электронный ресурс].- Режим доступа.- URL: http://pythontutor.ru/ (дата обращения: 22.04.2017). Загл. с экрана Алексеев Е. Р. Free Pascal и Lazarus: Учебник по программированию / Е.Р. Алексеев, О. В. Чеснокова, Т. В. Кучер – М.: ALT Linux; Издательский дом ДМК-пресс, 2010. – 440 с. Подбельский В. В., Фомин С.С. Программирование на языке Си: Учеб. пособие. – 2-е доп. изд. – М.: Финансы и статистика, 2004. – 600 с. Мансуров К.Т. Основы программирования в среде Lazarus, 2010. – 772 с.: Семакин И. Г Основы программирования: Учебник для сред. проф. Образования / И.Г. Семакин, А. П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2003. – 432 с. |