Слайд 1Основы,
программирования
Fortran, C++, D
Санкт-Петербургский
государственный университет
фак. Прикладной математики – процессов управления
гр.
103 – прикладная математика и информатика
28 сентября 2013 г.
Программирование. Занятие № 4
Храмушин Василий Николаевич – V.Khramushin@SPBU.ru
каф. компьютерного моделирования и многопроцессорных систем
Слайд 2Занятие 4, операторы и Windows
1. Операторы объявления имен
и –
выражения (;)
Представление базовых (последовательных) операторов в алгоритмической записи.
2. Построение программ
в среде Windows
Файловая система и командная строка ОС
Структура среды компиляции программ
Интегрированная среда разработки С::В.
3. Главная процедура и работа простейшей интерактивной графической программы.
Слайд 3гр.103 – Прикладная математика и информатика
1. Власов Александр Александрович
+ + +
2. Данилов Артем Дмитриевич + + +
3. Каюмова Диана Шамильевна
+ +
4. Колесова Александра Александровна + + +
5. Лапин Егор Дмитриевич + + +
6. Леганькова Дарья Андреевна + + +
7. Минаева Ульяна Сергеевна + + +
8. Мозин Виталий Романович + + +
9. Пенкрат Андрей Олегович + + ---
10. Глотова Екатерина Андреевна +
11. Пономарева Юлия Константиновна + + +
12. Сатина Алена Юрьевна + + +
13. Сафронов Вадим Викторович + --- ---
14. Симанков Сергей Сергеевич + + +
15. Смирнова Дарья Сергеевна + +
16. Фатькина Анна Игоревна + + +
17. Федосеев Георгий Александрович + + +
Слайд 4Вопросы от 21 сентября:
Ключевые слова и зарезервированные идентификаторы языков программирования
(объявление данных и исполняемые операторы – Алгол – Фортран, С,
С++, Ди);
Математические и логические операции исторических языков программирования
(математические и программные выражения)
Приоритеты и последовательность константных и исполняемых выражений (литералы времени компиляции и интерпретация выражений на этапах сборки и исполнения программы).
… только суть – что и зачем?
Слайд 5Практика, 28 сентября, 2-3 пара
Персональные компьютеры
CB\codeblocks.exe – интегрированная среда
разработки
MinGW – компиляторы Fortran, C, C++, (D)
MinGW\bin – исполняемые модули
(*.exe, *.dll)
MinGW\include – прототипы стандартных пакетов (*.h)
MinGW\lib – библиотеки программ Win32 и Сlib (*.а)
Классный компьютер
login: student101e, password: student101e
\\ws101-operator\Shared folder\Khram\GL
Слайд 6Фортран-4
Fortran –алгоритмическая последовательность операторов
из эпохи зарплатных табуляторов – с командами-операторами:
исполняемыми:
присваивание, управление и ввод/вывод;
невыполняемыми: заголовки процедур/функций
(оператор-функции), описание и инициализация
данных, форматирование ввода/вывода.
«любая математическая задача
уже имеет решение на Фортране»
не совсем!!
Слайд 7Fortran-IV – язык математики
C ----------------- Лабораторная работа N 7
C
----------------- Программирование типовых нелинейностей
EXTERNAL ZN
WRITE (*,'(A)')'----- Лабораторная работа
N7 -----‘
WRITE (*,'(A)')
C ----------------- Исходные данные
DATA A/2./, B/3./, C/6./, Xn/-5./, Xk/5./, H/0.5/
C ----------------- Начало цикла
X=Xn
Y=ZN(A,B,C,X)
WRITE(*,2) X,Y
2 FORMAT (1X,'X=',F5.1,2X,'Y=',F6.2)
X=X+H
IF (X.LE.Xk) GOTO 1
C ----------------- Конец цикла
STOP
END
C ----------------- Подпрограмма-функция
FUNCTION ZN(A,B,C,X)
IF (-A.LE.X.AND.X.LE.A) P=0
IF (X.GE.B) P=C
IF (-B.GE.X) P=-C
ZN=P
RETURN
END
Слайд 8Algol-60
Концепция языка математических наук – международный язык европейских программистов.
1. Язык
допускает видоизменения эталонного образца, связанные с удобством печатания и написания
(например, индексы, пробелы, показатели степени, греческие буквы, комментарии и пр.).
2. Он используется для формулирования и взаимного обмена алгоритмами (начало лучше, чем у фортрана).
3. Знаки языка могут быть различными в разных странах, однако должно гарантироваться однозначное соответствие с эталонным представлением.
Слайд 9Algol-60 (а-ля Pascal)
Procedure Absmax( a )
Size:( n, m )
Result:( y ) Subscripts:( i, k );
value n, m;
array a;
integer n, m, i, k; real y;
comment Наибольший элемент матрицы a, размера n на m передаётся в виде результата в y, индексы в параметры i и k;
begin integer p, q;
y := 0; i := k := 1;
for p:=1 step 1 until n do
for q:=1 step 1 until m do
if abs(a[p,q]) > y then
begin y := abs(a[p, q]); i := p; k := q
end
end Absmax
Образцовый
язык алгоритмов
Слайд 12Cи – ключевые слова
Имена, начинающиеся с двойного подчёркивания (__), или
с подчёркивания и _Заглавной буквы, не должны использоваться в качестве
идентификаторов программных переменных.
Все имена, начинающиеся с _подчёркивания, зарезервированы
для использования в качестве производных имён компоновщика;
--- такие имена могут использоваться в локальных переменных,
в именах членов структуры и т.д.
Слайд 13Программы – это операции на предопределенных типах данных
Локальная память
(самые быстрые
вычисления):
register type ident = value;
auto type ident =
value.
Статическая память
(сохранение данных в процедурах)
static type ident = value;
extern type ident.
Динамическая память
(собственно работа с большими
массивами информации)
static или
extern type *ident = new( size );
Элементарные типы данных:
целые числа:
bool - логические true | false
enum – именные перечисления
char – текстовые символы
short – индексы из 2 байт
int – число (слово) из 4 байт
long long – двойное слово
действительные числа:
float – число из 4 байт
double – число из 8 байт
составные числа – структуры:
struct , union, ++ class
Слайд 14Однородные координаты OpenGL
В однородных координатах все вычислительные операции сводятся к
произведениям матриц [4x4]
Начальная инициализация
glLoadIdentity() CTM – current transformation
matrix = 1.
glTranslate*( x, y, z ) Перемещение
glScale*( x, y, z ) Масштабирование
glOrtho( l, r, b,t, n, f ) Ортогональная проекция
glFrustum( l, r, b,t, n, f ) Перспективная проекция
glRotate*( a, x, y, z ) Вращение
и
Слайд 15Однородные координаты OpenGL
видовые преобразования
Ортогональная проекция glOrtho( l, r, b,t,
n, f )
Перспективная проекция glFrustum( l, r, b,t, n,
f )
gluPerspective( ayz, aspect, n, f )
Все видовые преобразования:
управление углами обзора
и освещенностью
моделируемых объектов,
– это нельзя сделать
лучше, чем есть
в OpenGL
и
общедоступно ! ! !
Слайд 16Алгоритмические языки С, С++, D
Строение пакета MinGW для GCC.GNU.org
(Fortran, C,
C++, Ada, Java, ++ D)
MinGW\bin\*.exe – директория исполняемых
модулей
MinGW\include\*.h – расположение прототипов С
include\GL\*.h – пакет OpenGL + GLut
include\Gsl\*.h – пакет GNU scientific library
include\Sys\*.h – старые системные вызовы С
MinGW\lib\*.a – директория для объектных библиотек
MinGW\libexec\gcc\mingw32\4.3.3\ – модули компоновки
MinGW\mingw32\ –//– прочие нестандартные установки
-
DC\devcpp.exe – интегрированная среда WxDev-C++
CB\codeblocks.exe ––//–– Code::Block
Слайд 17Доступ к компьютерной графике в С
www.opengl.org; www.glfw.org; user.xmission.com/~nate/glut.html
Строение и
организация доступа к графической среде OpenGL с помощью GLFW
и/или Glut
Dev\include\Gl\OpenGL.h – главный список прототипов
GLFW3.h – вызов кроссплатформенных модулей
GLut.h – устаревшая надежная графическая среда
Dev\lib\libopengl32.a – библиотека динамических ссылок
\libglfw3.a – это лучше брать в статическом
\libglut32.a – исполнении, лучше – в исходном коде
Windows\System32\OpenGL.dll + GLu32.dll – только так
Dev\GLFW3.dll – эти динамические библиотеки
Glut32.dll – должны быть либо рядом с программой,
либо в области системных утилит Windows
Слайд 18С, OpenGL + GLFW
1 //===========================================================
2 // Simple GLFW
example Graphics Library Frame Work
3 // Copyright (c) Camilla
Berglund «elmindreda@elmindreda.org»
21 // This notice may not be removed or altered from any source distribution
24 //==========================================================
27 #include
29 #include
30 #include
32 static void error_callback(int error, const char* descript)
33 { fputs( descript, stderr );
35 }
37 static void key_callback
(GLFWwindow*window,int key,int scancode,int action,int mods)
38 { if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
40 glfwSetWindowShouldClose(window, GL_TRUE);
41 }
43 int main(void)
44 { GLFWwindow* window;
47 glfwSetErrorCallback(error_callback);
49 if (!glfwInit()) exit(EXIT_FAILURE);
52 window=glfwCreateWindow(640,480,"Simple ex",NULL,NULL);
53 if (!window){ glfwTerminate(); exit( EXIT_FAILURE ); }
59 glfwMakeContextCurrent( window );
61 glfwSetKeyCallback( window, key_callback );
Слайд 19С, OpenGL + GLFW
63 while (!glfwWindowShouldClose(window))
64
{ float ratio; int width, height;
68
glfwGetFramebufferSize(window, &width, &height);
69 ratio = width / (float) height;
71 glViewport(0, 0, width, height);
72 glClear(GL_COLOR_BUFFER_BIT);
74 glMatrixMode(GL_PROJECTION);
75 glLoadIdentity();
76 glOrtho(-ratio, ratio, -1.f, 1.f, 1.f, -1.f);
77 glMatrixMode(GL_MODELVIEW);
79 glLoadIdentity();
80 glRotatef((float)glfwGetTime()*50.f,0.f,0.f,1.f);
82 glBegin(GL_TRIANGLES);
83 glColor3f(1.f, 0.f, 0.f);
84 glVertex3f(-0.6f, -0.4f, 0.f);
85 glColor3f(0.f, 1.f, 0.f);
86 glVertex3f(0.6f, -0.4f, 0.f);
87 glColor3f(0.f, 0.f, 1.f);
88 glVertex3f(0.f, 0.6f, 0.f);
89 glEnd();
91 glfwSwapBuffers(window);
92 glfwPollEvents();
93 }
95 glfwDestroyWindow(window);
97 glfwTerminate();
98 exit(EXIT_SUCCESS);
99 }
Слайд 20С++, OpenGL + GLut
// GLUT Shapes Demo, written
by Nigel Stewart November 2003
#include // указание на использование
GLut+OpenGL
#include // стандартная библиотека С
static int slices=16, stacks=16; // локальные статические данные
int Win_roll=0; // глобальная переменная
extern float mTW, mTH; // глобальные данные,
// объявленные в других модулях
int main( int argc, char *argv[] ) // главная процедура
{ glutInit( &argc, argv ); // запуск графического пакета
glutInitWindowSize( 640,480 ); // установка исходных размеров
glutInitWindowPosition( 10,10 ); // и местоположения гр.окна
glutInitDisplayMode( GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH );
glutCreateWindow( "Заголовок первого графического окна" );
…. определение точек входа в процедуры обработки прерываний
…. описание используемых материалов и настройка инструментов
glutMainLoop(); // вход в бесконечный цикл прерываний
return 0;
}
Слайд 21С++, OpenGL + GLut
// Многооконные графические системы
выполняются под
// контролем прерываний от операционной
системы
// или под воздействием команд от внешних устройств
int main( int argc, char *argv[] )
{ // … начальная инициализация графического пакета
// указания на точки входа в рабочие процедуры
glutReshapeFunc( resize ); // изменение размеров граф. окна
glutDisplayFunc ( display ); // необходимость перерисовки окна
// = главная графическая процедура
glutKeyboardFunc( key ); // обработка команд от клавиатуры
glutIdleFunc ( idle ); // выполнение действий при простое
…
glClearColor( 1,1,1,1 ); // указание фонового цвета граф. окна
// … другие определения и настройки графической среды
glutMainLoop(); // уход в бесконечный цикл системных прерываний
return 0; // -- обычная особенность академической разработки
}
Слайд 22С++, OpenGL + GLut (callback handles)
static void resize( int width,
int height ) // масштабирование
{ const float ar = (float)width/(float)height; //
графического экрана
glViewport( 0, 0, width, height ); // стандартными
glMatrixMode( GL_PROJECTION ); // средствами пакета
glLoadIdentity(); // OpenGL
glFrustum( -ar, ar, -1.0, 1.0, 2.0, 100.0 ); //
glMatrixMode( GL_MODELVIEW );
glLoadIdentity() ; // собственно
} // процедура представления
static void display( void ) // графических результатов
{ double t=glutGet( GLUT_ELAPSED_TIME )/1000.0, a = t*90.0;
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glColor3d( 1,0,0 ); // красный цвет
glPushMatrix(); // сохранение текущего базиса
glTranslated( -2.4,1.2,-6 ); glRotated( 60,1,0,0 ); glRotated( a,0,0,1 );
glutSolidSphere( 1,slices,stacks );
glPopMatrix(); // восстановление исходного базиса…
glutSwapBuffers();
}
Слайд 23С++, OpenGL + GLut (callback handles)
static void key( unsigned char
key, int x, int y )
{ switch (key)
{
case 27 : case 'q': exit( 0 ); break;
case '+': slices++; stacks++; break;
case '-': if (slices>3 && stacks>3){ slices--; stacks--; } break;
}
glutPostRedisplay();
}
// чистый режим
// ожидания
static void idle(void)
{ glutPostRedisplay();
}
Стандартный
пример из среды
программирования
Code::Blocks
Слайд 24Вопросы:
Структура типовой программы на алгоритмическом языке программирования
(операторы описания данных
и выполняемые команды);
Типовое построение среды компиляции и сборки программ на
алгоритмических языках программирования
(структура библиотек на примере проекта GCC.GNU)
Реализация простейшей интерактивной графики в среде GLFW и Glut для OpenGL
(особенности исполнения программы, управляемой внешними прерываниями).
… и то уже не просто …
Слайд 25Занятие четвертое, 28 сентября
4++ Практические занятия …
Графические пакеты, настройка и
выполнение стандартных примеров программ с использованием OpenGL + GLFW
Рассмотрение структуры
пакета для масштабирования и графических построений плоскости.
Особенности проведения математического анализа и вычислительных экспериментов.
…
Слайд 26Пятое занятие 5 октября…
Процедуры и функции
Функции – основные процедурные блоки
при алгоритмическом программировании
на языке Си++.
Правила записи, вызова и
согласованного использования различных параметров.
Вызов функций
Имена функций
Необязательные аргументы функций
Рекурсия
Слайд 27Вопросы
14 сентября
Концепция построения и особенности реализации языков программирования на примерах
Fortran(57), Algol(58), В(69), C(72), C++(83), D(2001) и др;
Машинно-зависимые типы данных
(стек, статика, куча), особенности их использования, скорость доступа и эффективность выполнения операций на линейном процессоре.
Компиляция и интерпретация, достоинства в использовании и проблемы реализации формализованных и специальных языков программирования (декларативные алгоритмы и функциональные языки искусственного интеллекта)
21 сентября
Ключевые слова и зарезервированные идентификаторы языков программирования (объявление данных и исполняемые операторы – Алгол – Фортран, С, С++, Ди);
Математические и логические операции исторических языков программирования (математические и программные выражения)
Приоритеты и последовательность константных и исполняемых выражений (литералы времени компиляции и интерпретация выражений на этапах сборки и исполнения программы).
… только суть – что и зачем?