Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.47 Mб
Скачать

Имя файла:

С этим все должно быть понятно, сюда мы пишем имя файла, в который будет направлен поток.

Мод:

Есть 6 модов:

1) Считывание, или «r», от слова read. Используется для потока ввода. Для считывания файл должен существовать.

2) Запись, или «w», от английского write. Используется для потока вывода. Если файла не существует, то он будет создан, иначе — перезаписан.

3) Добавление, или «a», от слова append. Используется для вывода, отличается от «w» тем, что продолжает записывать в файл, а не очищает его.

4,5,6) Те же моды, с разницей в том, что их можно использовать и для ввода, и для вывода. Вот сами моды «r+», «w+», «a+».

Поток:

1) Стандартный поток ввода — stdin;

2) Стандартный поток вывода — stdout;

3) Стандартный поток ошибок, этакий error_log — stderr;

Программа считывающая из input.txt и записывающая в output.txt:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

# include <iostream>

# include <cstdlib>

# include <cstdio>

// две новые библиотеки, нужны для работы freopen

using namespace std;

int d[1000000], n;

/*

переменные, инициализированные до функции main,

считаются глобальными т.е. изначально равны нулю и

могут быть вызваны в любой части программы.

Рекомендую создавать массивы глобальными всегда.

*/

int sum (int l, int r)

{

   int ans = 0;

   n = r - l + 1;

   for (int i = l, j = 1; i <= r; ++i, ++j)

    d[j] = i;

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

    ans += d[i];

   return ans;

}

int main()

{

    freopen ("input.txt", "r", stdin);

    freopen ("output.txt", "w", stdout);

 

    int a, b;

    cin >> a >> b;

    cout << sum (a, b) << "\n";

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

     cout << d[i] << " ";

    return 0;

}

Так же для считывания можно использовать функции ifstream и ofstream, которые находятся в библиотекеfstream.

ifstream считывает с заданного файла.

ofstream выводит в заданный файл.

Теперь о том как их написать:

1

2

ifstream название_функции_ввода ("название_файла_ввода");

ofstream название_функции_вывода ("название_файла_вывода");

Пример той же программы с использованием функций библиотеки fstream:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

# include <fstream>

using namespace std;

int d[1000000], n;

int sum (int l, int r)

{

   int ans = 0;

   n = r - l + 1;

   for (int i = l, j = 1; i <= r; ++i, ++j)

    d[j] = i;

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

    ans += d[i];

   return ans;

}

int main()

{

    ifstream read_file ("input.txt");

    ofstream write_file ("output.txt");

    /*

       для считывания с файла input.txt мы будем

       использовать функцию read_file,

       можете заменить ее на что-нибудь другое

    */

    int a, b;

    read_file >> a >> b;

    write_file << sum (a, b) << "\n";

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

     write_file << d[i] << " ";

    return 0;

}

Стоит отметить, что ifstream использует мод «a», а ofstream мод «w». Можно открыть сколько угодно файлов, главное дать уникальное имя для функций ввода.

Для закрытия считывания или записи используйте функцию .close():

1

имя_функции_ввода/вывода.close();

Ну, вроде все. Спасибо за прочтение!

Следующий урок будет  о рекурсии. Всем удачи в наступающем Новом Году!

С++ урок 12-ссылки

Опубликовано 29.12.2013 автором admin

Добрый день!

Сегодня я хочу поговорить о ссылках в функциях.

Как вы знайте передача аргументов в функцию происходит по значению, то есть:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#include <iostream>

 

using namespace std;

//Обявления функции

int func(int a,int b);

 

int main()

{

    setlocale(LC_ALL,"RUSSIAN");

    int a,b;

    cout << "Введите а и b через пробел" << endl;

    cin >> a >> b;

    cout << "Ответ = " << func(a,b) << endl;

    system("PAUSE");

    return 0;

}

 

//Определения функции

int func(int a,int b)

{

    return a + b; //Сложение

}

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

И функция вернула результат сложения через оператор return.

Но недостаток такого способа, это то что значения копируются в функцию, что с точки зрения эффективности, это не есть хорошо, особенно если эти значения достаточно большие.

А так же мы не можем возвращать более 1 значения через оператор return.

Сейчас мы переделаем нашу программу:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#include <iostream>

 

using namespace std;

//Обявления функции

inline void func(int& a,int& b);

 

int main()

{

    setlocale(LC_ALL,"RUSSIAN");

    int a,b;

    cout << "Введите а и b через пробел" << endl;

    cin >> a >> b;

    func(a,b);

    cout << "Ответ = " << "Сложение = " << a << "Умножение = " << b << endl;

    system("PAUSE");

    return 0;

}

 

//Определения функции

inline void func(int& a,int& b)

{

    int k;

    k = a;

     a = a + b;

     b = k * b;

}

Символ & обозначает ссылку, то есть аргумент int& a ссылается на ту область памяти в которой находиться int a в функции main(). И при этом мы уменьшаем употребления памяти. Всем спасибо за внимание, с вопросами обращайтесь в комментарии.

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