Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1-5.docx
Скачиваний:
4
Добавлен:
07.01.2022
Размер:
128.38 Кб
Скачать

28. Передача аргументов функции по адресу. Примеры.

При передаче по адресу в стек заносятся копии адресов аргументов, а функция осуществляет доступ к ячейкам памяти по этим адресам и может изменить исходные значения аргументов. Для обращения к значению аргумента-оригинала используется операция «*».  Пример функции, в которой меняются местами значения x и y:  void zam(int *x, int *y)  {int t = *x;  *x = *y;  *y = t; } 

29. Двумерный массив как аргумент функции. Примеры.

Двумерный массив – это таблица значений. Организацией он очень похож на обычный одномерный массив, но для вызова значения элемента нужно использовать два индекса. Удобен для хранения расчетных таблиц, матриц и т.п. В обычном двумерном массиве строго определен размер каждой строки. Возможна ситуация, когда зарезервированное место не будет использовано. В массиве указателей каждый раз резервируется ровно столько места, сколько нужно для хранения данных.

void inputMatr (double[][N], int n)

{ int i,j;

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

for (j=0;j<n;j++)

cin>>x[i][j];}

30. Динамический двумерный массив как аргумент функции. Примеры.

Созданный таким образом двумерный динамический массив существенно отличается от обычного двумерного массива. Под обычный двумерный массив при объявлении выделяется сплошной участок памяти размером, равным произведению его границ. Для двумерного динамического массива выделенная память не представляет собой сплошной участок, поскольку она выделяется с помощью нескольких операций new.

main()

{int n, i, j, *mas, buf;

соut <<"\nВведите размерность массива:";

cin >> n;

mas=new int[n];

соut << “\nВводите элементы массива.\n";

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

{cout<<"mas ["<<i<<”]=”;

cin>>mas[i];}

for(i=l; i<n; i++)

for(j=l; j<=n-i; j++)

if (mas[j-l]>mas[j])

{buf=mas[j-l]; mas[j-l]=mas[j]; mas[j]=buf;}

cout <<"Peзyльтиpyющий массив:\n";

for(i=0; i<n; i++) cout<<mas[i]<<" ";

delete mas;}

31 Структуры и функции. Примеры.

Функции это часть программы оформленное особым образом и выполняющее логично завершённое действие или логично завершённое вычисление.

Int max(int x, int y);

main()

{int a,b,c,d,m,m1,m2;

Cin>>a>>b>>c>>d;

m1=max(a,b);

m2=max(c,d);

m=max(m1,m2);

cout <<”max=”<<m;

getch();

}

Int max(int x, int y)

{int z;

if(x>y)z=x;

else z=y;

return;

}

Структура - это составной тип данных.

Struct book

{char author[21];

char title[51];

int year;

double price;};

32 Операции со структурами. Примеры.

К структурным данным в Си применимы следующие операции:

1)операция “.” (точка), Для получения доступа к элементу структурной переменной через ее имя используется символ точка, обозначающий операцию выбор поля структуры.

Struct book

{char author[21];

char title[51];

int year;

double price;};

book a;

a.author;- выведет автора

2)student a,*p;

*p=a;

(*p)<=>a- Выделение элемента структурной переменной через указатель

3)p=&a, операция присваивание адреса, К структурным переменным, точно так же, как и к обычным переменным, применима операция взятия адреса, обозначаемая знаком &

4)b=a, операция присваивания -

Значение ячейки a копируется в ячейку b

33 Массивы структур. Динамические массивы структур. Примеры

Если массивы по определению могут содержать внутри себя множество однотипных элементов, то внутри структур можно описать разное количество разнотипных элементов. А сами по себе структуры являются пользовательским типом данных, следовательно можно создать массив структур.

Struct date

{int d,m,y;};

Void main()

{int i, date x;

For(i=0;i<n;n++)

Cin<<x[i].d<< x[i].m<< x[i].y;

}

Динамический массив структур

Void inputdatedinam(student *pz)

{char iniz[5];

Cout<<”день”;cin>>pz->d

Cout<<”месяц”;cin>>pz->m

Cout<<”год”;cin>>pz->y

}

34 Файловые потоки. Назначение. Объявление. Порядок работы с файловыми потоками.

Файловые потоки представляют объектно-ориентированный способ чтения и записи информации в дисковые файлы. Библио-тека файловых потоков разработана для работы только с тек-стовыми файлами. Однако можно применить ее и для чтения и записи двоичных значений, текстов, структур или любых дру-гих объектов. Класс файловых потоков подключается заголовочными фай-лами fstream.h и iostream.h.

Порядок работы с файловыми потоками.

1)объявление файловых потоков

2)связывание фай-ва потока с физ. файлом(открытие файла)

3)Считывание или запись данных в файл

4)Разрыв связи(закрытие) физ. файлом.

35 Текстовые файловые потоки. Функции работы с ними. Примеры.

Файловые потоки представляют объектно-ориентированный способ чтения и записи информации в дисковые файлы. Библио-тека файловых потоков разработана для работы только с тек-стовыми файлами. Однако можно применить ее и для чтения и записи двоичных значений, текстов, структур или любых дру-гих объектов. Класс файловых потоков подключается заголовочными фай-лами fstream.h и iostream.h.

Порядок работы с файловыми потоками.

1)объявление файловых потоков

2)связывание фай-ва потока с физ. файлом(открытие файла)

3)Считывание или запись данных в файл

4)Разрыв связи(закрытие) физ. файлом.

Текстовые файлы состоят из символов и могут разделяться на строки. Любой символ в файле представляется соответствующим ему числовым кодом. Признаком перехода на следующую строку является символ '\n' Именно текстовые файлы создаются и просматриваются простыми текстовыми редакторами.Числа хранятся в текстовых файлах в виде соответствующих последовательностей символов.

36) екстовые файлы хранят данные в виде текста (sic!). Это значит, что если, например, мы записываем целое число 12345678 в файл, то записывается 8 символов, а это 8 байт данных, несмотря на то, что число помещается в целый тип. Кроме того, вывод и ввод данных является форматированным, то есть каждый раз, когда мы считываем число из файла или записываем в файл происходит трансформация числа в строку или обратно. Это затратные операции, которых можно избежать.

Текстовые файлы позволяют хранить информацию в виде, понятном для человека. Можно, однако, хранить данные непосредственно в бинарном виде. Для этих целей используются бинарные файлы.

Для более «тонкой» работы с содержимом файлов существует бинарный режим, который представляет содержимое файла как последовательность байтов где все возможные управляющие коды являются просто числами. Именно в этом режиме возможно удаление или добавление управляющих символов недоступных в текстовом режиме. Для того чтобы открыть файл в бинарном режиме используется также функция fopen() с последним параметром равным “rb” и “wb” соответственно для чтения и записи.

Еще одной особенностью текстового формата файла является запись чисел в виде текста.

37) #include <stdlib.h> //Для очистки экрана #include <iostream.h> //Для работы с клавиатурой #include <fstream.h> //Для работы с файловыми потоками

void main() {  system(“CLS”); //Очистка экрана  int y=0; //будем записывать в файл  int x=0; //будем считывать из файла

cout<<“Y = “;cin>>y//Вводим число, которое нужно сохранить в файл  ofstream out(“C://1.txt”,ios::binary|ios::out); //Открываем файл в двоичном режиме для записи    out.write((char*)&y,sizeof y); //Записываем в файл число y  out.close(); //Закрываем файл

 cout<<“x = “<<x<<endl//Показываем до его изменений

 ifstream in(“C://1.txt”,ios::binary|ios::in); //Открываем файл в двоичном режиме только для чтения    in.read((char*)&x,sizeof x); //Читаем оттуда информацию и запоминаем её в X  in.close(); //Закрываем файл

 cout<<“x = “<<x<<endl; //Показываем после изменения  system(“PAUSEДля записи в файл использована команда ofstream, для чтения из файла использована команда instream У обеих команд внутри скобок одинаковая конструкция);

пример: #include <iostream.h> //Для работы с клавиатурой #include <fstream.h> //Для работы с файлами #include <stdlib.h> //Для очистки экрана

//Наша структура struct MyStruct {     char *Name;      int size; };

void main() {   system(“CLS”); //Очистка экрана   MyStruct X,Y; //Создали два объекта соответствующие нашей структуре //Например объект X имеет такие параметры   X.Name=“МЕДВЕД”; //   X.size=100; //

//Открываем файл для записи в бинарном режиме   ofstream out(“C://2.txt”,ios::binary|ios::out);      out.write((char*)&X,sizeof X); //Записываем объект X в открытый нами файл   out.close(); //Закрываем открытый файл

//Открываем файл только для чтения, открываем в бинарном режиме   fstream in(“C://2.txt”,ios::binary|ios::in);      in.read((char*)&Y,sizeof Y); //Считываем информацию в объект Y   in.close(); //Закрываем открытый файл //Показываем объект Y по его составным частям   cout<<Y.Name<<“\n”;    cout<<Y.size<<“\n”;

  cin.get();

38) При прямом доступе файл рассматривается как набор элементов, занимающих последовательные позиции в линейном порядке; значение может быть передано в элемент файла (или из него), находящийся в любой выбранной позиции. Позиция элемента задается его индексом, который является положительным числом определяемого реализацией целого типа COUNT. Индекс первого элемента в файле (если он есть) равен единице; индекс последнего элемента (если он есть) называется текущим размером; текущий размер файла, не содержащего ни одного элемента, равен нулю. Текущий размер — это характеристика внешнего файла.

Устанавливает позицию в файле, связаннном с потоком fp.

Смещение в байтах является величиной со знаком и берет-

ся относительно origin. Значения origin определены в

io.h файле:

SEEK_SET - начало файла

SEEK_CUR - текущая позиция

SEEK_END - конец файла

Если файл открыт в текстовом режиме, смещение может

быть только значением, возвращенным ftell, а origin

должно быть 0, или offset должно быть 0. Если непос-

редственно перед вызовом fseek работала ungetc, ее

результаты теряются. Если файл был открыт в режиме

чтения/записи, следом за fseek можно выполнить чтение

или запись.

Пример

#include <stdio.h>

#include <io.h>

main()

{

FILE *fp;

fp = fopen("file.dat", "r+");

fseek(fp, 0L, SEEK_END); /* Перейти в конец файла */

fseek(fp, 0L, SEEK_SET); /* Перейти в начало файла */

fseek(fp, 20L, SEEK_SET); /* Перейти на смещение 200 */

39) Форматирование вывод в поток. Манипуляторы. Примеры вывод на экран/с экрана в С++ осуществляется с помощью операторов  и cout соответственно,

Потоки вывода создаются на базе класса ostream, который обеспечивает методы для записи данных в буфер потока

Таблица 2 — Манипуляторы форматирования в С++

Манипулятор

Назначение

Пример

Результат

endl

Переход на новую строку при выводе

cout << «website:» << endl << «cppstudio.com»;

website: cppstudio.com

boolalpha

Вывод   логических

величин в текстовом

виде (true, false)

  bool log_true = 1;

cout << boolalpha << log_true << endl;

true

noboolalpha

Вывод   логических

величин в числовом

виде (true, false)

 bool log_true = true;

cout << noboolalpha << log_true << endl;

1

oct

Вывод   величин   в

восьмеричной

системе   счисления

int value = 64;

cout << oct << value << endl;

1008

dec

Вывод   величин   в

десятичной   системе

счисления   (по умолчанию)

int value = 64;

cout << dec << value << endl;

6410

hex

Вывод   величин   в

шестнадцатеричной

системе   счисления

int value = 64;

cout << hex << value << endl;

408

showbase 

Выводить индикатор

основания   системы

счисления

int value = 64;

cout << showbase << hex << value << endl;

0x40

noshowbase 

Не выводить индикатор

основания   системы

счисления (по умолчанию).

int value = 64;

cout << noshowbase << hex << value << endl;

40

uppercase

В шестнадцатеричной системе счисления использовать буквы верхнего регистра (по умолчанию установлены буквы нижнего регистра).

int value = 255;

cout << uppercase << hex << value << endl;

FF16

nouppercase 

В шестнадцатеричной системе счисления использовать буквы нижнего регистра (по умолчанию).

int value = 255;

cout << nouppercase << hex << value << endl;

ff16

showpos

Вывод знака плюс + для положительных чисел

int value = 255;

cout << showpos<< value << endl;

+255

noshowpos

Не выводить знак плюс + для положительных чисел (по умолчанию).

int value = 255;

cout <<noshowpos<< value << endl;

255

scientific

Вывод чисел с плавающей точкой в экспоненциальной форме

double value = 1024.165;

cout << scientific << value << endl;

1.024165e+003

fixed

Вывод чисел с плавающей точкой в фиксированной форме (по умолчанию).

double value = 1024.165;

cout << fixed << value << endl;

1024.165

setw(int number)

Установить ширину поля, где number — количество позиций, символов (выравнивание по умолчанию по правой границе). Манипулятор с параметром.

cout << setw(40) << «cppstudio.com» << endl;

__cppstudio.com

right

Выравнивание по правой границе(по умолчанию). Сначала необходимо установить ширину поля(ширина поля должна быть заведомо большей чем, длина выводимой строки).

cout << setw(40) << right << «cppstudio.com» << endl;

__cppstudio.com

left 

Выравнивание по левой границе. Сначала необходимо установить ширину поля(ширина поля должна быть заведомо большей чем, длина выводимой строки).

cout << setw(40) << left << «cppstudio.com» << endl;

cppstudio.com__

setprecision(int count)

Задаёт количество знаков после запятой, где count — количество знаков после десятичной точки

cout << fixed << setprecision(3) << (13.5 / 2) << endl;

6.750

setfill(int symbol)

Установить символ заполнитель. Если ширина поля больше, чем выводимая величина, то свободные места поля будут наполняться символом symbol — символ заполнитель

cout << setfill(‘0′) << setw(4) << 15 << ends << endl;

0015

Пример:

Int main()

{

Ofstream out;

Out.open(“text.txt”);

If (out.is_open())

Cout<<”Файл открылся”;

Else cout<<”Файл найден”;

Out.close;

Return 0;

}

Соседние файлы в предмете Программирование