Домашнее задание №7

Закончите основные и дополнительные задачи лабораторной работы №7.

Рекурсия

  1. Описать рекурсивную функцию Combin1(NK) целого типа, находящую C(NK) — число сочетаний из N элементов по K — с помощью рекуррентного соотношения:
    C(N, 0) = C(NN) = 1,
    C(NK) = C(N − 1, K) + C(N − 1, K − 1)    при 0 < K < N.
    Параметры функции — целые числа; N > 0, 0 ≤ K ≤ N.
  2. Описать рекурсивную функцию RootK(XKN) вещественного типа, находящую приближенное значение корня K-й степени из числа X по формуле:
    Y0 = 1,        YN+1 = YN − (YN − X/(YN)K−1)/K,
  3. Описать рекурсивную функцию Palindrome(S) логического типа, возвращающую истину, если строка S является палиндромом (т. е. читается одинаково слева направо и справа налево), и ложь в противном случае. 
  4. Дан вектор чисел натуральных чисел. Определить наибольшее значение числа в этой последовательности. (циклы запрещены!)

Файлы

  1. Дана строка s. Создать файл целых чисел c названием s, содержащий числа от 0 до n.
    Указание 1. Для работы с файлами необходимо подключить заголовочный файл <fstream>
    Указание 2. Код для открытия файла и записи информации в него следующий:
    ofstream out(s, ios::binary); // создаём объект класса ofstream (файловый вывод) в режиме бинарного файла;           
    	if (!out.is_open())             
    		cout << "Недопустимое имя файла!\n";
    	else {
                    //...........// записываем информацию в файл
    		out.close(); // закрываем файл и сохраняем его                                 
    	}
    
    Указание 3. Для записи целого числа в файл используем следующую команду
    int a = // ваше значение целочисленной переменной;
    out.write((char *)&a, sizeof(int));      
    // char занимает 1 байт, целое число преобразуется в массив из 4 байт и они записываются в файл
    
  2. Дана строка s - имя файла целых чисел. Прочитать и вывести на консоль все числа из файла. Для открытия файла на чтение код следующий:
    	ifstream in(s);
    	int x = 0;
    	if (!in.is_open()) // если файл не открыт
    		cout << "Файл не может быть открыт!\n";
    	else {
    		while (!in.read((char*)&x, sizeof(int)).eof()) {// число читается в условии цикла
    			// совершаем с переменной х нужные действия
    		}
    		in.close();
    	}
    
    При вызове функции открываем файл, созданный при решении предыдущей задачи.
  3. Дана строка s и вещественные числа a и b. Создать файл чисел типа double и заполнить его случайными числами в диапазоне от a до b.
  4. Дана строка s - имя файла чисел типа double. Найти сумму и среднее значение чисел, содержащихся в файле.
  5. Дана строка s - имя текстового файла и вектор строк (vector<string>). Записать все строки в текстовый файл. Используем команды
    	ofstream fout(s); // создаём объект класса ofstream для записи и связываем его с именем
    	fout << "Работа с файлами в С++"; // запись строки в файл, вместо конкретной строки может быть переменная
    	fout.close();
    
    (не забываем проверить корректность имени файла и переводе строки)
  6. Дана строка s - имя текстового файла. Прочитать и вывести на консоль всё его содержимое.
    	ifstream fin(s); // создаём объект класса ofstream для записи и связываем его с именем
    	string str;
    	while (fin.good())
    	{
    		getline(fin, str);
    		// совершаем нужные действия с переменной str
    	}
    	fin.close();
    
Информация к размышлению - статья о приведении типов