Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Yazyki_programmirovania.docx
Скачиваний:
3
Добавлен:
10.07.2019
Размер:
107.5 Кб
Скачать

Void main();

template<class a>

void sort (int n, a*X)

{

a z;

for (int i=0; i<n; i++)

{

intimin=I;

for (int j=i+1; j<n; j++)

if (X[j]<X[imin]) imin=j;

z=X[i];

X[imin]=z;

}

}

Void main()

{

constint n=15;

int B[n];

for (int i=0; i<n; i++)

cin>>B[i];

sort(n,B);

for (int i=0; i<n; i++)

cout<<B[i]<<”_”;

cout<<endl;

double *C;

int m;

cout<<”Vvedi m->”;

cin>>m;

c=new double [m];

for (int i=0; i<n; i++)

cin>>C[i];

sort(m,C);

for (int i=0; i<n; i++)

cout<<C[i]<<”_”;

cin.get();

delete [] C;

}

7)Передача информации в функцию main и возврат значений из неё.

Основной метод передачи информации в функцию mainсостоит в использовании командной строки операционной системы.

типmain (intargc, char *argv[], char* envp[])

типmain (intargc, char **argv, char **envp)

тип :voidили int

argcопределяет количество аргументов командной строки всегда не равно нулю.

argvуказатель на массив слов командной строки.

envpуказатель на массив слов описывающий параметры окружающей строки.

В качестве аргументов командной строки целесообразно передавать имена файлов, имена функций, текст задающий режимы работы программы, числа, значения. Существует 3 способа использования main:

1)функция не имеет типа и аргумента в этом случае нет доступа к аргументам командной строки.

2)когда функция имеет 2 аргумента (argcи argv) в этом случае функция имеет доступ ко всем аргументам командной строки.

3)присутствует 3 аргумента в этом случае кроме слов командной строки функция имеет доступ к параметрам окружающей среды.

Разделителями слов командной строки является пробел, если необходимо переслать сообщение из нескольких слов как один аргумент, то необходимо взять их все в кавычки.

void main (intargc, char * argv[])

{

if (argc!=2)

puts(“Zabilinabratimya”);

elseprintf(“\n Privet Lunatiki, %s!”, argv[1]);

}

void main (intargc, char *argv[], char* envp[])

{

printf(“\n kol-voarg-tov kom stroke =%d”,argc);

printf(“\n Arg-tskomstr: \n”);

for (int i=0; i<argc; i++)

printf(‘\n %s”, argv[i]);

printf(“\n Parametrisredi: \n”);

for (int i=0; envp[i]; i++)

printf(“\n %s”, envp[i]);

}

void main (intargc, char *argv[], char* envp[])

{

printf(“\n kol-voarg-tov kom stroke =%d”,argc);

printf(“\n Arg-tskomstr: \n”);

while (*argv)

cout<<*argv++<<endl;

printf(“\n Parametrisredi: \n”);

while (*envp)

cout<<*envp++<<endl;

}

Возврат значений из функции main()

Функция main() может возвращать значения которые передаются в ОС, оно может быть равно 0 или не = 0. Это значение размещается в одном байте, если программа успешно отработала, то возвращаемое значение будет равно 0 иначе любое другое значение, что значит неверное завершение программы.

Под строкой в Cпонимают последовательность символов оканчивающихся нулём ‘\0’. Различают строку константу последовательность символов взятых в кавычку, и еще переменную строку

charимя[kol-vosimvolov+1];

charS[100];

Можно использовать указатели char *S;

В этом случае необходимо выделить памяти под строку или связать указатель с существующей строкой описанной обычным образом.

При описании строк можно сделать инициализацию.

char S[]=”Привет”;

char S[7]={‘P’,’R’,’I’,’V’,’E’,’T’}

Действия над строками, копирование, изменение, вставка, удаление.

Все действия и другие реализуются с помощью личных функций, которые реализуют действия как с одномерными массивами и при помощи внешних библиотек (например<string.h>или <mem.h>)

Для ввода, вывода можно использовать функцию gets(s);

Для вывода puts(s);

Определение количества символов в строке.

int Len(char *S)

{

int k=0;

while (S[k]) k++;

return K;

}

void deli (char *S, int i)

{

for (int k=i; i<Len(s); K++)

S[k]=S[k+1];

}

Удаление подстроки начиная с i-й позиции удалить Kсимволов.

voiddelik(char *S, int i, int k)

{

for (int p=0; p<k; p++)

for (int j=i; j<Len(s); k++)

s[j]=S[j+1];

}

Сравнение 2-х строк

intsrav(char *S1, char *S2)

{

if (Len(s1)!=Len(s2))\

return 1;

for (int i=0; i<Len(s1); i++)

if (S1[i]!=S2[i]) return 1;

elsereturn 0;

}

void copy(char *s1, char *s2)

{

int n=len(s2);

for (int i=0; i<n; i++)

s1[i]=s2[i];

s1[i]=’\0’;

}

Разделение текста на слова

intrazb (char *T, char *MS[])

{

int ns, i,ks;

i=0; ns=0; ks=0;

while (T[i]!=’\0’)

{

if (T[i]==’_’)

{

MS[KS][i-ns]=”\0’;

KS++;

ns=i+1;

}

else {MS[KS][i-ns]=T[i];

i++;

}

MS[KS][i-ns]=’\0’;

return KS+1;

}

Объединение массива слов в текст (строку).

Подсоединение строки s1 к s2

voidsumstr(char *s1, char *s2)

{

}

Дан текст. Удалить слова начинающиеся с той же буквы, что и слово максимальной длинны

Пользовательские функции находятся в файле BSTR.cpp

#include <stdio.h>

#include “BSTR.cpp”

voidmain()

{

char *T=new char [150];

char **MS=new char *[80];

for (int i=0; i<80; i++)

MS[i]=new char [50];

puts(“\n vveditekst\n”);

gets(T);

//развить Tна массив слов MS

int KC=razb(T,MS);

//ищем слово максимальной длинны и его первую букву

intmaxdl=0; char b1;

for (int i=0; i<KC;i++)

if (Len(MS[i])>maxdl)

{

maxdl=Len(MS[i]);

b1=MS[i][0];

}

//удалениеслова

for (int i=0; i<KS; i++)

if (MS[i][0]==b1)

MS[i][0]=’\0’;

//объединить слова в текст

char*rez= new char[150];

rez[0]=’\0’;

for (i=0; i<KC; i++) sumstr(rez,MS[i]);

puts(rez);

}

Функции находящиеся в модуле <string.h>

1)strlen(s); - длина строки

2)strcpy(s1,s2) – копированиеs2->s1

3)strcmp(s1,s2) – сравнение 2-х строки, если s1 совпадает с s2то результат функции = 0

если s1<s2то результат меньше нуля

если s1>s2то результат больше нуля

4)strcat(s1,s2) – строка s2 подсоединяется к строке s1

5)strtok(s,”строка разделителей”); разбиение текста на слова

char *t;

t=strtok(s,” “);

while (t!=NULL);

{

t=strtok(NULL,” “);

i++;

}

Типы данных определенные пользователем:

1)структуры(struct)

Структура объединяет данные разных типов в одно целое.

Различают описание структуры – шаблон и структурную переменную.

Переменная имеет память, а шаблон имеет описание структуры.

Начинается со слова struct [имя] {тип1 : имя11, имя12, …; тип2 : имя21, имя22, …, тип n : имя n1, имя n2…},

где тип 1,2 , n– один из типов языка C, либо массив, либо структура. Шаблон может быть без имени. В этом случае он должен быть только один.

struct student

{

char FIO[30];

int God;

charadres[20];

long step;

}A, B;

Описание структурной переменной может быть задано при описании шаблона

struct student A,B;

Для того, чтобы не указывать слово structпри описании структурной переменной необхоимо определить шаблон структуры в typedif

typedef

struct student

{

char FIO[30];

int God;

charadres[20];

long step;

} students;

Обращение к структурной переменной имя_структурной_переменной.имя_поля

A.GOD

A.FIO

Если описан массив структур C[i].GODC[i].STEP

2)модификации структур (а)битовые поля, б) объединения)

3)перечисления(enum)

4)задание нового имени существующему типу данных

С помощью оператора typedifзадаётся новое имя существующему типу

typedif float real;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]