- •Какую ide(Среду разработки) выбрать?
- •3) Символьная переменная — char.
- •4) Логическая переменная — bool
- •1) Вывод
- •1) Ввод
- •1)Стандартные математические операции,
- •2)Бинарные операции,
- •2) Бинарные операции, продолжение
- •1) Sqrt(a)
- •3) Fmod(a,b)
- •2) While
- •2) Создание функции.
- •3) Функция для перевода из 10-ой системы счисления в k-ую.
- •Поделиться в соц. Сетях
- •Имя файла:
- •Поделиться в соц. Сетях Структуры данных. Стек
- •1) Сокращение выражений:
- •2) Инкремент, декремент
- •3) Считывание переменных в цикле
- •Поделиться в соц. Сетях
Имя файла:
С этим все должно быть понятно, сюда мы пишем имя файла, в который будет направлен поток.
Мод:
Есть 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(). И при этом мы уменьшаем употребления памяти. Всем спасибо за внимание, с вопросами обращайтесь в комментарии.
