ДСо04-операции-и-данные-С++ (1238943)
Текст из файла
Carnegie MellonОперации и данныеС/С++Алгоритмыи алгоритмические языкиgoo.gl/c8pyqxЛекция 4, 28 сентября, 2018Лектор:Дмитрий Северов, кафедра информатики 608 КПМdseverov@mail.mipt.ruhttp://cs.mipt.ru/wp/?page_id=60771Модель исполнителяЦПОУОсновнаяпамятьУУУBBУBBУBBУBBРегистрыСреда взаимодействия2ПеременнаяИменованная область памяти типизованныхзначений.1.
Имя (адрес начала),2. Тип (размер и правила операций),3. Значение (содержимое памяти)3Эволюция базовых типов данных¢Базовые типы данных§ Целые (char, int)§ Вещественные (float, double)§ Никакой (void)¢Модификаторы типа§ Без/Знаковые (un/signed)§ Короткие/Длинные (short, long)¢Спецификаторы класса памяти:§ Статические/Автоматические (static, auto)§ Регистровые, Внешние (register, extern)¢Квалификаторы изменчивости:§ Неизменяемые (const),§ Изменчивые (volatile), исключаемые из оптимизации4Приоритет операцийПриоритет Обозначениеи порядокНазначение1ð::Разрешения контекста2ï()Вызов или описание функции()Конструкция значения[]Индекс массива->Косвенная принадлежность.Прямая принадлежность++Инкремент (постфиксная)--Декремент (постфиксная)!Логическое отрицание~Битовое отрицание (сумма по модулю 2)+Унарный плюс-Унарный минус3ð++Инкремент (префиксная)5Приоритети порядок3ðОперация--Декремент (префиксная)&Адрес*Разыменование()Преобразование типаsizeofРазмер в байтахnewДинамическое выделение памятиdelete4ð5ð6ð7ðНазначениеДинамическое освобождение памяти.*Разыменование члена->*Косвенное разыменование члена*Умножение/Деление%Остаток от деления+Сложение-Вычитание<<Сдвиг влево>>Сдвиг вправо6Приоритети порядок8ðОперацияНазначение<Меньше<=Меньше или равно>=Больше или равно>Больше==Равно!=Не равно10ð&Побитовая конъюнкция11ð^Побитовое сложение по модулю два12ð|Побитовая дизъюнкция13ð&&Конъюнкция14ð||Дизъюнкция15ð?:Условное выражение9ð7Приоритети порядок16ð17ðОперацияНазначение=Присваивание*=Умножение и присваивание/=Деление и присваивание%=Нахождение остатка и присваивание+=Сложение и присваивание-=Вычитание и присваивание&=Побитовая конъюнкция и присваивание^=Побитовое сложение по модулю два и присваивание|=Побитовая дизъюнкция и присваивание<<=Сдвиг влево и присваивание>>=Сдвиг вправо и присваивание18ðthrow19ð,Генерация исключенияОбъединение двух выражений в одно8Составные типы данныхМассивы – наборынумерованных однородных данных• СтрокиСтруктуры – наборыименованных разнородных данных• Объединения• ПеречисленияУказатели – переменные содержащиеадрес• Ссылки9Массивы¢¢¢Описаниеint a[3],b[2][3];Описание синициализациейchar c[] = {¢0¢,¢2¢,¢4¢};int d[][3] ={{1,2,3},{4,5},{6}};Доступ к элементуa[0] = d[0][1] + 1;10Строки¢¢¢Одномерные массивы однобайтных целых элементов(символов), содержащие последним элемент созначением ноль.char Str1[] = {¢H¢,¢e¢,¢l¢,¢l¢,¢o¢,¢\0¢};char Str2[5] = {¢,¢,¢ ¢};char Str3[] = ²world²;Использованиеcout << Str1 << Str2 << Str3 << endl;11Структуры¢¢¢Определение конструкции набора данных:struct My_type {type_a Member_1,Member_2;type_b Member_3;… } My_object;Частные случаи:struct Complex { double Re,Im; };struct Complex A;struct { double Re,Im; } B;Доступ к полям: B.Re или A.Im12Объединениесовмещение полей – точек зренияunion тег { список_полей } имя_объекта;ПеречислениеНабор именованных целых константenum тег { список_имен } имя_объекта;Битовые поляНабор целых полей определённой длиныstruct тег { поле:число_бит; } имя;union тег { поле:число_бит; } имя;13#include <iostream>using namespace std;ABB[0]=YB[1]=ZB[2]=XB[3]=ZXacegbdfenum {Z=0,X,Y=4};WL_wordH_wordunion {int A;char B[4];struct { int a:4,b:4,c:4,d:4,e:4,f:4,g:4,h:4;} X;struct { short int L_word, H_word;} W;} N;hint main() {N.B[0]=Y; N.B[1]=Z; N.B[2]=X; N.B[3]=Z;cout << N.W.H_word << " " << N.W.L_word << endl;cout << N.A << endl;cout << N.X.h << N.X.g << N.X.f << N.X.e<< N.X.d << N.X.c << N.X.b << N.X.a << endl;return 0;1 4}655400001000414УКАЗАТЕЛИ¢¢¢Переменные, содержащие адресОписание и инициализацияint *Pc, **Pd;int a=5, b[]={1,2,3}, *Pa=&a, *Pb=b;char *s=²String²;Присваивание значенияconst int *b ={1,2,3};Pd=&Pb; Pc=&b[1];15Операции с указателямиint n, b, a[10], *pb=&a[0], *pe=&a[9], *pc;¢¢Арифметическиеn = pe - pb; // кол-во элементов (не байт!)pb++;// &a[1] (адрес следующего// элемента но не байта!)pc = pe – 1; // &a[8]pb + pe;// ОШИБКА !!!Разыменованияb = *pc;// b = a[8];NB: операции с указателями являютсяразмерными!!!16Операции с указателямиstruct complex { double Re; double Im; } a, *p;p = &a;¢Разыменованияa.Re = 1.;p->Im = 0.;NB: операции с указателями являютсяразмерными!!!17Универсальные указателиvoid *P, *Q;¢ Запрещены операции¢§ Арифметические§ Разыменования¢Типичное применениеP= malloc(sizeof(double));// P = new double;Q= calloc(N,sizeof(int)); // Q = new(int[N]);free(Q);// delete(Q);Q= realloc(Q,M);¢Универсальный указатель можно§ Инициализировать значением указателя любого типа§ Преобразовать в указатель любого типа18#include <iostream>using namespace std;int main() {const int n= 64;char str[]= "Hello, World!\n";void *p, *ps= str;char **pps= (char**)&ps;int *a, *pb, *pe;Hello, World!0x7fff5fbff559 0x7fff5fbff4e0 H0x100519920=pb pb+1=0x1005199240x100519928: a[2]= 20x00x100519920 2063a=0x100519920 a[0]=0a[n-1]=630 a[n]=64cout << str << ps << " " << pps << ' ' << (**pps) << endl;p= malloc(4*n); pb= a= (int*)p; for (int i=0; i<n; i++) a[i] = i;cout<< pb << "=pb\t pb+1=" << pb+1 << "\n";cout<< pb+2 << ": a[2]= » << *(pb+2) << endl;free(a); pb=a=NULL;cout << pb << endl;}pb=a=new int[n]; for(int i=0;i<n;i++) *(a+i)=10*i;cout << a << "\t" << *(pb+2) <<endl;pe=&a[n-1];cout <<pe-pb<< endl;a=(int*)realloc(a,2*n);cout<<"a="<< a <<"\ta[0]="<<*a<<"\na[n-1]="<<a[n-1]<<" a[n]="<<a[n]<<endl;19Ссылки*)Другое имя переменной (псевдоним)¢ Описание и инициализацияint a=5, &b=a;// a и b – разные имена одной// и той же области памяти¢*)только в С++20Тип FILE*struct _iobuf {typedef struct _iobuf FILE;char *_ptr;Илиint _cnt;#define FILE struct _iobufchar *_base;int _flag;FILE *a;int _file;FILE* fopen(int _charbuf;const char* name,int _bufsiz;const char* accesschar);*_tmpfname; };int fclose(FILE* a);21.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.