96
проф. д-р Владимир Сълов каб. 118 В , [email protected] users.ue-varna.bg/vsulov Въведение в програмирането: ТЕМА 1. Основни концепции в програмирането ТЕМА 2. Въведение в процедурното и структурно програмиране на езика С ТЕМА 3. Скаларни типове данни ТЕМА 4. Управляващи оператори ТЕМА 5. Съставни типове данни и организация на данните ТЕМА 6. Модулна организация и потребителски функции ТЕМА 7. Стандартни библиотечни функции

проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

  • Upload
    lequynh

  • View
    242

  • Download
    8

Embed Size (px)

Citation preview

Page 1: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

проф. д-р Владимир Сълов каб. 118В, [email protected] users.ue-varna.bg/vsulov

Въведение в програмирането: ТЕМА 1. Основни концепции в програмирането ТЕМА 2. Въведение в процедурното и структурно програмиране на езика С ТЕМА 3. Скаларни типове данни ТЕМА 4. Управляващи оператори ТЕМА 5. Съставни типове данни и организация на данните ТЕМА 6. Модулна организация и потребителски функции ТЕМА 7. Стандартни библиотечни функции

Page 2: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Оценяване

Текущ контрол: тестове на лекции: 10+10 = 20 т. контролни на упр.: 4+4+12 = 20 т.

Изпит: База: 20 т. Теория/тест: 15 т. Програма: 25 т.

Дати за тестовете: Тест 1: около средата на април Тест 2: около средата на май Контролни: ще бъдат уточнявани с всяка под-група на упражненията; ориентир: 3-ти, 7-ми и 13-ти път

Бонуси: участие на олимпиада по програмиране + решаване на поне 1 задача – 10 т. класиране на първите 3 места на олимпиадата по програмиране – 6 на изпита директно

Page 3: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

участие на преглед на студентската дейност – 5 т. участие в анкета на сайта – до 5 т.

Стимулиране: Възможност за получаване на отлична оценка (6) на изпита при добър текущ контрол Формула: ако 20 + 2*(текущ контрол) + бонуси >= 87 получавате Отличен 6

Page 4: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Учебни материали

лекциите (този файл+друг файл с примери), конспект, резултати от тестовете: users.ue-varna.bg/vsulov

Издание от ИУ-Варна:

Сълов, Вл. Въведение в програмирането, Наука и икономика, ИУ-Варна, 2015

Други книжки: Информатика 9 клас 2 част За напреднали: Езикът C++ в примери и задачи

Page 5: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Програми и програмиране

Езици за програмиране Някои изброяват 8000 езика, други – 2500 (а останалото – "диалекти")

Поколения 1-во – машинен код 2-ро – асемблер 3-то – с общо предназначение (преобладаващите) 4-то – със специално предназначение – БД, отчети, интерфейс и др. 5-то – проблемно-ориентирани, повечето за изкуствен интелект

Основни програмни парадигми – процедурно програмиране; – структурно програмиране; – функционално програмиране; – логическо програмиране; – обектно-ориентирано програмиране; – програмиране, базирано на събития (event-driven programming).

Page 6: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

"Популярност" на езиците за програмиране http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Място Език Рейтинг 02'2015

1 Java 21.145%2 C 15.594%3 C++ 6.907%4 C# 4.400%5 Python 4.180%6 PHP 2.770%7 Visual Basic .NET 2.454%8 Perl 2.251%9 JavaScript 2.201%

10 Delphi/Object Pascal 2.163%

Локални приложенияУеб приложенияголеми, сложни по-прости,

прототипи

C/C++

(Objective C за Mac OS)

C#, Visual BASIC,

Delphi

Java, C#, Python, PHP

Visual BASIC, Perl, JavaScript

Page 7: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Алгоритми

https:/ /www.dreamspark.com/Student/

Език Предмет

C/C++ Въведение в програмирането, задължителен, 1 курс

C++

Обектно-ориентирано програмиране, задължителен, 2

курс +

Visual C++, избираем, 3 курс

C#

Програмиране и структури от данни, задължителен, 2 курс

+ .NET технологии, избираем, 3 курс

Java Java, избираем, 3 курсPHP,

донякъде JavaScript

Сървърно програмиране, задължителен, 4 курс

Page 8: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Е т а п и н а р а з р а б о т к а н а приложения – проучване – проектиране – програмиране – документиране – тестване – внедряване – поддръжка и развитие

Page 9: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

П р о ц е д у р н о и с т р у к т у р н о програмиране на C/C++

C: 1969-1973 Денис Ричи, Брайън Кернигън ANSI 89 / C89 ISO 90 ISO 99 ISO 2011 / C11

C++: Bjarne Stroustrup 1983-1985 ISO 98 ISO 2003 ISO 2011

Предимства на С: - скорост на изпълнение на кода - пълна поддръжка на възможностите на операционната система

Page 10: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

- език от високо ниво

С р е д и з а п р о г р а м и р а н е , компилатори: Visual Studio / Visual C++ Borland C++ (Builder) GCC Dev-C++ Djgpp Intel C++

Въведение в езика C/C++, типове данни

прави се разлика малки / главни букви !!! if If IF iF

Page 11: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

a A

Структура на програмата

#include <stdio.h>

#include <iostream> using namespace std;

int main() { int a; cin>>a; a=a+1; cout<<a; return 0; }

Page 12: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

#include "stdafx.h"

int main() { return 0; }

#include "stdafx.h" #include <iostream> using namespace std;

int main() { int a; cin>>a; a=a+1; cout<<a; return 0; }

Page 13: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Типове данни

char 1 -128 +127 short int 2 -32768 +32767 int 4 -2 млрд. + 2 млрд. long int 4 -2 млрд. + 2 млрд. long long 8 // няма го навсякъде –9223372036854775808 до 9223372036854775807

short int f; short f; long Dalgo_chislo987;

unsigned char c; unsigned short int i; unsigned long int ll; unsigned short k; unsigned u; // = unsigned int u;

int j; j=5; j++; j=j+1; j--;

Page 14: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int a; a++;

int a, b=4, c=13;

float 4 double 8

float f; f=3.45;

const int a=4; #define a 4

const double dds=0.2; double f; cin>>f; cout<<f*(1+dds); // вариант 1 cout<<f+f*dds; // вариант 2

a=(b*(c+2)-3)*d;

Page 15: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

a++; a--; ++a;

int a=2, b; b=a++; b=++a; a=3 b=2 a=3 b=3 // това се получава

a*=4; a=a*4; c/=b; c=c/b; d+=5; d=d+5;

int a=8, b=3, c; c=a/b; // 2 c=a%b; // 2 7%4 e 3 12%5=2

8/3 8=2*3+2

12/5 12=2*5+2

Page 16: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

7/4 7=1*4+3

/* a=5; dslkj dssdfsd коментар */

int a; // това е пром. за цената a=5;

& 1 & 4 = 0 0001 0100 0000

237 = 7 + 3*10 + 2*100

0101101 = 1 + 1*4 + 1*8 + 1*32 = 45

2 & 2 = 2

Page 17: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

2 & 3 = 2 0010 0011 0010

Има 10 вида хора – такива, които разбират двоичен код и такива, които не разбират

| 2 | 3

10 11 11

2 | 4 0010 0100 0110

~ unsigned char c=3, d;

Page 18: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

d=~c; 00000011 11111100

^ XOR 0011 0110 0101

int a, b; cin>>a; b=a^a; cout<<b;

int a=3, b; b=a<<2; 0011 1100

b=a>>1; 0011 0001

Page 19: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Управляващи оператори

if(условие) действие; int a, b=4; cin>>a; if(a>2) b++;

int a, b=4; cin>>a; if(a) b++; if(a!=0) b++;

int a, b=4; cin>>a; if(!a) b++; if(a==0) b++;

if(a==3) ... if(a!=3) ... if(a) // if(a!=0) if(!a) // if(a==0) if(a>=4 && a<=7) if(a<3 || a>8)

Page 20: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

if(a<3 && a>8)

if(!a) { b=3;

c=7; }

if(!a) b=3; c=7;

if(!a) b=3;

c=7;

if(a>3) b=4; else {b=5; c=3;}

if(a>3) b=4; else if(a>1) c=7; else c=3;

if(a>1) b=4;

Page 21: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

else if(a>3) c=7; else c=3;

float f; cin>>f; if(f<3) cout<<“слаба ракия"; else if(f<3.5) cout<<"среден"; else if(f<4.5) cout<<"добър"; else if(f<5.5) cout<<"мн. добър"; else cout<<"няма такова животно";

while(условие) действие;

int a=1; while(a<=10) { cout<<a; a++; }

Page 22: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int a=4; while(a) { cout<<a; a--; }

do действие; while(условие);

int a=4; do { cout<<a; a--; } while(a);

Page 23: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int a;

Page 24: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

cin>>a; while(a) { cout<<a; a--; }

cin>>a; do { cout<<a; a--; } while(a);

for(начало;условие;стъпка) действие;

for(i=0; i<10; i++) { cout<<i; }

for(a=2;a<10;a+=3)

Page 25: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

cout<<a;

for(a=2; b<8; c++) {

… }

for(a=100000; a>=0; a--) b=1;

a=-1; b=1;

Page 26: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

for(a=1;a<=5;a++) { … if(условие) break;

if(условие) continue; … }

Page 27: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

switch (a) { case 3: b=7;

break; case 1: c=8; break; default: c=11; }

if(a==3) b=7; else if(a==1) c=8; else c=11;

Page 28: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

switch(a) { case 7: case 4: b=3; c=7; break; case 5: b=1; c=3; break; default: d=8; }

Page 29: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

условие?стойност1:стойност2

max=a>b?a:b; if(a>b) max=a; else max=b;

оператор goto

pak: int ocenka; cout<<"Въведете оценка (2-6)"; cin>>ocenka; if(ocenka<2 || ocenka>6) { cout<<"Sorry"; goto pak; }

Page 30: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int ocenka; do { cout<<"Въведете оценка (2-6)"; cin>>ocenka; } while(ocenka<2 || ocenka>6);

int c, a=5, b=3; c=sizeof(a)-sizeof(b); c=a-b;

cout<<5/3; cout<<5/3.0; cout<<(float)5/3; cout<<a/b.0; // ГРЕШКА!!! cout<<(float)a/b; cout<<a*1.0/b;

Page 31: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

CPP CPP CPP Compile OBJ OBJ OBJ Link Link: OBJ+OBJ+...+LIB+LIB+...=EXE Build=Compile+Link Rebuild (all)

Вход /изход с pr int f / scanf и форматиране на изхода с printf

printf scanf // scanf не се препоръчва, понеже не е безопасна // по подразбиране дава грешка // може да се "форсира" употребата // да се ползва scanf_s – обезопасен вариант

#include <stdio.h>

Page 32: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int a; scanf("%i", &a); // cin>>a;

scanf_s("%i", &a); // cin>>a; a++; printf("%i", a); // cout<<a;

int a,b; scanf_s("%i%i", &a, &b);

a=4; printf("Променливата а е = %i", a); Променливата а е = 4

int a=5, b=3; printf("%i не е %i", b, a); // 3 не е 5

Някои форматиращи символи: i – цели числа f – реални числа c – отделни символи, изисква брой s – стрингове, изисква брой

Page 33: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

ASCII код

char g; g='A'; g++; g='C'-'A';

char k; scanf_s("%c", &k, 1); printf("%i", k);

k='m'+2;

Извеждане на кирилица в конзолата Бърз вариант за ASCII, не е удачен за Unicode setlocale(LC_ALL, "");

float f=3.2, m=20; printf("%f\n%f", f, m); 3.200000 20.000000 printf("%8.2f\n%8.2f", f, m);

Page 34: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

3.20 20.00

\t

float f=3.2, m=20; printf("%f\n%f", f, m); 3.20000 20.00000 printf("%8.2f\n%8.2f", f, m); 3.20 20.00

Форматиращи символи %c – символ (char) %d, %i – десетично цяло число int %e, %E – "научен" формат

Page 35: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

%f – реално число %g, %G – използва %e или %f, което е по-кратко %o – int в осмичен формат %s – стринг %u – десетично цяло неотрицателно число int %x, %X – int в шестнадесетичен

формат %% – извежда %

123=1.23e2 2000000000000=2e12 17=0x11

Модификатори (към d,i,o,u,x)

Page 36: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

l – long h – short, напр.: %lx = long int в шестнадесетичен формат %hu = unsigned short int

printf("%8d\n", 100); // right-justified printf("%-8d\n", 100); // left-justified 100 100 printf("%d%d", 100, 100); 100100 printf("%-8d%d", 100, 100); 100 100

Page 37: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Форматиране на изхода при cout

cout.setf(флаг); cout.unsetf(флаг);

Пример: cout.setf(ios::left);

Някои флагове: left – подравняване вляво right – подравняване вдясно oct – извеждане в осмичен формат hex – извеждане в

шестнадесетичен формат scientific – извеждане в "научен" формат

Page 38: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

cout.setf(ios::hex); cout<<18; // 12 ... cout.unsetf(ios::hex); cout<<18; // 18

Параметри, които директно могат да се изведат в потока: Пример: cout<<hex<<18; // 12

dec – десетичен формат hex – шестнадесетичен формат oct – осмичен формат endl – нов ред

cout<<endl;

Page 39: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

cout<<"\n";

Настройка на изхода: #include <iomanip>

setprecision(n) – брой цифри

cout<<setprecision(2)<<5.12; 5.1

setw(n) – минимален общ брой символи

cout<<setw(4)<<2; 2

Page 40: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

setfill(n) – символ за запълване

cout<<setfill('?')<<setw(4)<<2; ???2

Page 41: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

// Масиви и стрингове

int a[10];

a[0]=4; … a[9]=6; a[10]=2; // НЕ!!!

int b[100][40]; b[0][0]=6; … b[4][7]=3; … b[99][39]=2;

Page 42: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

char s[10]; s[0]=4; s[1]=-12; s[2]='Z'; // s[2]=90;

char s[10]; s="Варна"; //грешно strcpy_s(s, "Варна");

char s[10]="Варна"; s[1]='я'; s[3]=0; s[1]='0';

В а р н а j l b f130 150 170 160 150 0

Page 43: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

#include <string.h> #include <stdlib.h>

Много от стандартните функции не са безопасни и в C++ са заменени с по-безопасни версии с _s накрая, напр. strcpy -> strcpy_s, gets -> gets_s и т.н.

if(s=="Куку") // грешно strcmp(s1,s2) if(strcmp(s, "Куку")==0) ... if(!strcmp(s, "Куку")) …

strcmp("abc", "cab") // -1 strcmp("fff", "bbb") // 1

Page 44: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

strcmp("abd", "aae") // 1

char s[20]; cin>>s; int a; scanf_s("%i", &a); scanf_s("%s", s, 20); // брои се и 0-та // scanf_s("%s", &s[0], 20);

gets_s(s);

strlen(s); char s[20]; strcpy_s(s, "Тест"); cout<<strlen(s); // 4

// strc§py_s(s1, s2);

Page 45: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

char s1[5], s2[10]; strcpy_s(s2, "Крокодил"); strcpy_s(s1, s2); // грешка

strncpy_s(s1, s2, n);

char s[4]; strncpy_s(s, "Варна", 7); // грешка strncpy_s(s, "Варна", 3); char s1[10]; strncpy_s(s1, "Варна", 9); // OK strncpy_s(s, s1, 3);

strcmp(s1, s2) strncmp(s1, s2, n) strcmp("Варна", "Варка") strncmp("Варна", "Варка", 3)

Page 46: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

strncmp("Ма", "Магаре", 3)

stricmp(s1, s2); strcmp("Варна", "варна"); //не равни stricmp("Варна", "варна"); //еднакви

strnicmp(s1, s2, n); strnicmp("Варна","варка", 3); //равни

// strcat_s(s1, s2); char s[30]; strcpy_s(s, "2770"); strcat_s(s, " е много добър студент"); // 2770 е много добър студент

//strncat_s(s1, s2, n);

Page 47: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

strcpy_s(s, "2603"); strncat_s(s, " е много добър", 6); cout<<s; // 2603 е мно

strchr(s, c); Ако "Варна" е на адрес 1220 strchr("Варна", 'б'); // 0 NULL strchr("Варна", 'р'); // 1222 char s[20]="abcdefgh"; cout<<strchr(s, 'c')-s; // 2

strrchr(s, c); char s[20]="Варна";

cout<<strrchr(s, 'а')-s; //4

strstr(s1,s2); strstr("Варна", "ка"); // NULL

Page 48: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

strstr("Варна", "арн"); // някъде си

strspn(s1, s2); // index на първия извън strspn("аватар", "вар"); // 3 strcpy_s(s1, "аватар"); strcpy_s(s2, "вар"); // ако s1 е на адрес 1333 strspnp(s1, s2); // указател, адрес – 1336

sprintf(стринг, формат, променливи) char s[30]; int a=10; printf("Стойността е %i", a); // Стойността е 10

Page 49: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

sprintf(s, "Стойността е %i", a); // стрингът s става // Стойността е 10

sscanf_s(стринг, формат, променливи) char s[30]="5 617"; int a,b; sscanf_s(s, "%i%i", &a, &b);

char s[10]="6"; int a=s*5;

Page 50: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Указатели:

int i; i=5; int *p; p=&i; *p=7;

int a[10]; a &a[0]

адрес Пром. израз Ст-ст10 i i 711 i &i 1012 i *p 713 i p 1014 p &p 1415 p16 p17 p

Page 51: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int a=5, b=7; / / a и b са последователни в паметта int *p=&a; *(p+1)=6;

short *ps; ps+6

int n; cin>>n; int a[n]; // не става!!!

int n; cin>>n; int *p; p = new int[n]; p[0]=5;

Page 52: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

p[1]=3; // *(p+1)=3; ... delete []p;

int *k; k=new int; *k=7; … delete k;

Потребителски функции

Page 53: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

тип име(тип1 параметър1, …) { тяло (код) }

int sum(int a, int b) // a=3 b=7 { int c; // return a+b;

c=a+b; return c;

}

int main() { int b; b=sum(3, 7)*6; cout<<b; return 0; }

Page 54: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int sum(int a, int b); int main() { int b; b=sum(3, 7)*6; cout<<b; return 0; } int sum(int a, int b) // a=3 b=7 { int c; // return a+b;

c=a+b; return c; }

Page 55: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

void f1(int a) { if(a<3) return; cout<<“Получената оценка е ”<<a; }

f1(6); f1(2);

Page 56: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

// не!!! void f1() { …. void f2() { … } … }

int f1(void) { … return time; }

Page 57: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int f1() { … return time; }

void f1(void) { … cout<<time; }

void f1() { … cout<<time;

Page 58: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

}

f1() { …

return n; } *** тук int validna(int a) { if(a>=2 && a<=6) return 1; else return 0; }

това е в main: int ocenka; cin>>ocenka;

Page 59: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

if(validna(ocenka)) cout<<"OK"; else cout<<"Няма такава оценка";

int ocenka; do { cin>>ocenka; while (!validna(ocenka));

Page 60: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int c; int f1() { int b; … } int main() { int a; int b; … } int f2() { … }

Page 61: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int k; void f1() { int k; k=7; ::k=6; … }

void f2() { int i;

cout<<k; … }

int main() { int j; k=3; f1(); f2(); }

#include "somefile.h" #include <somefile.h>

Page 62: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

A.CPP void f1() { … } void f2() { … }

A.h extern void f1(); extern void f2();

B.CPP #include "A.h" int main() { f1(); … f2(); }

int i=56; int &a=i; a=8;

int i=56; int *p=&i; *p=8;

Page 63: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

void f1(int a) { // a=b; a=5; cout<<a; }

int main() { int b=3; f1(b); cout<<b; return 0; }

void f2(int *a) { // a=&b; *a=5; cout<<*a; }

int main() { int b=3; f2(&b); cout<<b; return 0; }

void f3(int &a) { // a=b; a=5; cout<<a; }

int main() { int b=3; f3(b); cout<<b; return 0; }

*** до тук е материалът за Тест 1 ***

Page 64: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Структури

struct тип { данни; } променливи;

struct student { char ime[32]; int fn; int kurs; } ivan, maria;

ivan.fn=2645; strcpy_s(ivan.ime, "Иван Петров Иванов");

maria.kurs=3;

student vasil; vasil.fn=222;

int main() { struct student { … } ivan, maria; …

Page 65: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

student s; struct student s1; s.kurs=2; }

struct student { char ime[32]; int fn; int kurs; } ivan, maria;

sizeof(student)

struct adres { char ulica[30]; char grad[20]; int pk; };

struct student { char ime[32]; int fn; adres adr; } ivan;

Page 66: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

ivan.fn = 1000; strcpy_s(ivan.ime, "Иван"); ivan.adr.pk = 9002; strcpy_s(ivan.adr.grad, "Варна");

int a=5; int *p=&a; *p=7;

student *ps; ps=&ivan;

(*ps).fn=1200; ps->fn=1200;

student gr30[15]; strcpy_s(gr30[0].ime, "Явор"); gr30[1].adr.pk=1000;

int i; for(i=0; i<15; i++) { printf(“Въведете името на човек №%i: ”, i+1);

Page 67: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

gets(gr30[i].ime); }

student *gr31; cin>>n; gr31 = new student[n]; ... gr31[3].fn = 1020; ... delete []gr31;

student *gr31; int i, n; cin>>n; gr31 = new student[n]; for(i=0; i<n; i++) { printf(“Въведете името на човек №%i: ”, i+1); gets(gr31[i].ime); }

Page 68: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

student inf[4][25]; inf[0][11].fn=1021;

struct student { char ime[32]; int fn;1 };

Page 69: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

void printdata(student s) { cout<<s.fn<<" "<<s.ime<<"\n"; } void getdataV(student s) { cin>>s.fn; cin>>s.ime; } void getdataP(student *s) { cin>>s->fn; cin>>s->ime; } void getdataR(student &s) { cin>>s.fn; cin>>s.ime; } void main() { student kuku; getdataV(kuku); getdataP(&kuku); getdataR(kuku);

printdata(kuku); }

struct bf { int a:8; int b:2; int c:6; } bfv; bfv.a=3; bfv.b=2; bfv.c=17;

Page 70: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

aaaaaaaabbcccccc 0000001110010001

union тип { данни; } променливи;

union some { int a; int b; float c; double d; } uv;

aaaa bbbb cccc dddddddd

uv.a = 5; … uv.c = 3.14; …

Page 71: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Математически функции

abs(x) – абсолютна стойност

sin(x), cos(x), tan(x), asin(x), acos(x), atan(x)

atof(s) – от стринг в double char s[10]="3.14"; double a=s+5; // НЕ!!!!!!! double d=atof(s);

atoi(s) atol(s) char s[10]="3"; int i=atoi(s);

itoa(value, string, radix) ltoa(value, string, radix)

Page 72: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int i=5; char s[20]; // оригинална функция itoa, но заменена с _itoa и обезопасен вариант _itoa_s _itoa_s(i, s, 2); cout<<s; // 101 _itoa_s(i, s, 10); cout<<s; // 5 _itoa_s(31, s, 16); cout<<s; //1f

floor(x) – по-малкото цяло число ceil(x) – по-голямото цяло число cout<<floor(2.8); // 2 cout<<floor(-2.2); // -3 cout<<ceil(2.2); // 3 cout<<ceil(-2.8); // -2

Page 73: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

exp(x) – е на степен x

pow(x, y) – х на степен у cout<<pow(3, 2); // 9

sqrt(x) cout<<sqrt(6); // гледай си работата

Функции, свързани със символи

isalpha(x) char c='a'; if(isalpha(c)) // нещо – ако е буква от A-Z a-z char s[20]=“Th8s is a text”; if(isalpha(s[2])) …

isdigit(x) // дали е цифра

Page 74: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

isalnum(x) // дали е буква или цифра

islower(x) // дали е от a-z isupper(x) // дали е от A-Z

ispunct(x) // дали е пунктуационен символ

isspace(x) – ASCII 9-13, 32

c2=tolower(c1); c2=toupper(c1);

Заделяне на памет

void* malloc(size)

int *p;

Page 75: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

p=new int[10];

p=(int*)malloc(10*sizeof(int)); p[0]=3;

void* calloc(num, size) p=(int*)calloc(10, sizeof(int));

void* realloc(*old, size) p=(int*)realloc(p, 15*sizeof(int));

free(*block) free(p);

Процеси

exit(code) exit(0);

Page 76: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

system(s) system("C:\\Dir1\\File.exe"); system("C:/Dir1/File.exe");

system("cls");

Файлове

FILE *f; стар вариант: f = fopen("име", "режим"); нов вариант: fopen_s(&f, "име", "режим");

"c:\\folder\\file" "c:/folder/file" "..\\folder\\file"

r r+ w w+ a a+

errno_t err; err=fopen_s(&f, "file.dat", "w+"); if(err!=0) … грешка

Page 77: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

if(err) … грешка

FILE *f1; стар вариант: freopen(файл, режим, стар); f1=freopen("file.dat", "r", f); нов вариант: freopen(нов, файл, режим, стар); freopen_s(&f1, "file.dat", "r", f)

fwrite(какво, размер, колко, файл) fwrite(&ivan, sizeof(ivan), 1, f);

student gr30[20]; // запълнена с данни fwrite(gr30, sizeof(student), 20, f); fwrite(&gr30[0], sizeof(student), 20, f);

fwrite(&gr30[4], sizeof(student), 10, f);

fread(какво, размер, колко, файл) fread(&ivan, sizeof(ivan), 1, f);

Page 78: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

fclose(f);

feof(f)

while(!feof(f)) { fread(&s, sizeof(student), 1, f); cout<<s.ime<<endl; }

// обхождане на файл, ако се намираме в началото му

student s; while(fread(&s, sizeof(student), 1, f)) { cout<<s.ime<<endl; }

fseek(файл, къде, спрямо къде) SEEK_SET SEEK_END SEEK_CUR

Page 79: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

fseek(f, 20, SEEK_SET);

fseek(f, sizeof(student)*9, SEEK_SET);

fseek(f, -20, SEEK_END);

fseek(f, -10, SEEK_CUR); fseek(f, 10, SEEK_CUR);

rewind(f) // в началото fseek(f, 0, SEEK_SET);

fseek(f, 0, SEEK_END); // в края

ftell(f) fseek(f, 10, SEEK_SET); fseek(f, -5, SEEK_CUR); long pos=ftell(f); cout<<ftell(f);

f=tmpfile() // изтрива се автоматично при затваряне

fflush(f)

Page 80: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

int a=10; int b=1234567;

10 1234567 -56465

XXXXYYYYZZZZ

fgetc(f) char c; c=fgetc(f);

fputc(c, f)

fgets(s, n, f) char s[100]; fgets(s, 99, f);

fputs(s, f) strcpy_s(s, "5 6\n7"); fputs(s, f);

Page 81: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

fprintf(f, format, params …) int a=4; fprintf(f, "Променливата е = %i\n", a); Променливата е = 4

fscanf_s(f, format, params …) 5 4 3.14 int a, b; float fl; fscanf_s(f, "%i%i%f", &a, &b, &fl);

_chsize(_fileno(f), 200); _chsize(_fileno(f), 13*sizeof(student));

remove(filename); // 0 при успех remove("C:\\file.txt");

rename(old, new); // 0 при успех rename("file1.txt", “file2.txt");

*** до тук е материалът за тест 2

Page 82: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

struct student { int fn; char name[32]; } s;

FILE *f;

// добавяне // какво може да се издъни???fopen_s(&f, "students.dat", "a"); cin>>s.fn; gets(s.name); fwrite(&s, sizeof(s), 1, f); fclose(f);

// списък fopen_s(&f, "students.dat", "r"); while(fread(&s, sizeof(s), 1, f)) cout<<s.fn<<" "<<s.name<<"\n"; fclose(f);

// търсене int search; cin>>search;

Page 83: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

fopen_s(&f, "students.dat", "r"); while(fread(&s, sizeof(s), 1, f)) if(s.fn==search) { cout<<s.fn<<" "<<s.name; break; } fclose(f);

Page 84: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

// редакция int search; cin>>search; fopen_s(&f, "students.dat", "r+"); while(fread(&s, sizeof(s), 1, f)) if(s.fn==search) { gets(s.name);

fseek(f, -(long)sizeof(s), SEEK_CUR); fwrite(&s, sizeof(s), 1, f); break;

} fclose(f);

Page 85: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

// изтриване int search; long pos1, pos2; cin>>search; fopen_s(&f, "students.dat", "r+"); while(fread(&s, sizeof(s), 1, f)) if(s.fn==search) { pos1=ftell(f)-sizeof(s); fseek(f, -sizeof(s), SEEK_END); pos2=ftell(f); fread(&s, sizeof(s), 1, f); fseek(f, pos1, SEEK_SET); fwrite(&s, sizeof(s), 1, f);

fseek(f, 0, SEEK_SET); _chsize(_fileno(f), pos2); break; }

fclose(f);

Page 86: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Работа с дати/часове

#include <time.h>

time_t – брой секунди от 1.01.1970 г. (long)

struct tm { int tm_sec; /* секунди, 0-59 */ int tm_min; /* минути, 0-59 */ int tm_hour; /* час, 0-23 */ int tm_mday; /* ден от месеца, 1-31 */ int tm_mon; /* месец от януари, 0-11 */ int tm_year; /* година от 1900 */ int tm_wday; /* ден от седм. от неделя, 0-6 */ int tm_yday; /* дни от 1-ви януари, 0-365 */ int tm_isdst /* лятно време */

}

лятно време: >0 – да в момента 0 – не в момента <0 – няма информация

Page 87: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

CLOCKS_PER_SEC – брой "цикли" в секунда, донякъде показва точността на отчитане clock_t – брой цикли (long)

Получаване на текущата дата/час: time_t now; now = time(NULL);

или time_t now; time(&now);

Преобразуване между двата формата: time_t now; time(&now); tm now_tm, nowgmt_tm; localtime_s(&now_tm, &now); cout<<now_tm.tm_mon; gmtime_s(&nowgmt_tm, &now); now = mktime(&now_tm);

Получаване/извеждане на стринг: char s[30]; time_t now;

Page 88: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

time(&now); ctime_s(s, 30, &now); cout << s; tm now_tm; localtime_s(&now_tm, &now); asctime_s(s, 30, &now_tm); cout << s; // Thu Jun 13 10:22:23 1991

strftime – преобразува в стринг с точно указан формат, справка – в help-а ;-)

Колко време работи програмата: clock_t ct; ct=clock(); // връща брой "цикли", може да се // раздели на CLOCKS_PER_SEC

Изтекло време (разлика) time_t time1, time2; time1 = time(NULL); // някаква обработка time2 = time(NULL); double seconds = difftime(time2, time1);

Page 89: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

Други спомагателни функции

#include <assert.h> assert(израз от тип int); Обикновено извежда: Assertion failed:<expression>,file<file>,line<linenum> ако изразът е 0 (нула)

Напр. int res=fread(&s, sizeof(s), 1, f); assert(res);

Изключва се автоматично при release.

Стандартна структура div_t с полета: quot, rem

div_t result; result = div(10, 3); cout<<result.quot; // 3 cout<<result.rem; // 1

int number=rand();

Page 90: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

// случайно число между 0 и RAND_MAX случайно_до_100 int n=rand()/(RAND_MAX/100); Предварителна инициализация: srand(число); напр. srand(time(NULL));

Още за пре(д)-процесора #include <stdio.h>

#define a 5

#define TEST int n; cin>>n; #ifdef TEST if(n<0) cout<<"Error!"; #endif cout<<n; #undef TEST

#define FULL_VERSION // общ код

Page 91: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

#ifdef FULL_VERSION // само функции за пълната версия // на програмата #endif // общ код

макроси: #define ABS(a) (a)<0 ? -(a) : (a) cout<<ABS(-1); // (-1)<0? –(-1): (-1); Предефиниране на функции // overloading, overloaded

int sum(int a, int b) { return a+b; }

double sum(double a, double b) { return a+b; }

int max(int a, int b) { if(a>b) return a; else return b; }

int max(int a, int b, int c) { if(a>b && a>c) return a; else if(b>c) return b;

Page 92: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

else return c; }

void main() { int c=sum(5, 3), x, y, z; cin>>x>>y>>z; double d=sum(3.14, 5.25); c=max(x, y); c=max(x, y, z); } Променлив брой аргументи

#include <stdarg.h>

int sumi(int n, ...) { int i, sum=0; va_list vl; va_start(vl, n); for(i=0; i<n; i++) sum+=va_arg(vl, int); va_end(vl); return sum; }

Page 93: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

// напр. int a = sumi(3, 1, 7, 8); int b = sumi(4, 1, 4, 7, 6);

// напр. print("ssi", "Hello", "test", 18); void print(char *s, ...) // напр. print("is", 5, "Text"); { int n=0, num; char *str; va_list vl; va_start(vl, s); while(s[n]) { switch(s[n]) { case 'i': num=va_arg(vl, int); printf("%i", num); break; case 's': str=va_arg(vl, char*); printf("%s", str); break; } n++; } va_end(vl); }

int main(int argc, char* argv[]) {

print("isi", 5, "Hello", 6); print("is", 3, "Text");

Page 94: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

printf("%i%s", 5, "Text");

int a = sumi(3, 1, 7, 8); int b = sumi(4, 1, 4, 7, 6);

return 0; }

Модификатори за съхранение на променливите storage modifiers

auto (локални) auto int i;

auto int j; // грешка! void main() { auto int i; }

extern

Page 95: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

a.cpp:

int a=3; // код void f1() { a++; cout<<a;}

b.cpp: extern void f1(); extern int a; void main() { a=6; f1(); }

static локални:

void f1() { int a=0; a++; cout<<a; }

int main() { f1(); f1(); return 0; }

void f1() { static int a=0; a++; cout<<a; }

int main() { f1(); f1(); return 0; }

Page 96: проф д р Владимир Сълов каб. 118В, vsulov@ue …deimos.ue-varna.bg/~sulov/files/c1/lectc.pdf7 Visual Basic .NET 2.454% 8 Perl 2.251% 9 JavaScript 2.201% 10 Delphi/Object

глобални // долното ще даде грешка a.cpp:

static int a; // код

b.cpp:

extern int a; void main() { a=6; }

register register int i;