Домашнее задание №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 - имя текстового файла и вектор строк (vector<string>). Записать все строки в текстовый файл. Добавляем в начало файла #include<fstream> и используем команды
    ofstream fout(s); // создаём объект класса ofstream для записи и связываем его с 
                      // именем s (s - строка с именем файла)
    if (!fout) // проверяем корректность имени файла
    {
        cerr << "файл не создан" << endl;
        return;
    }
    fout << "Работа с файлами в С++"; // запись строки в файл, вместо конкретной 
                                      // строки может быть переменная
    fout.close();
    
    (не забываем проверить корректность имени файла и переводе строки. Реализуем задачу в виде функции void stringVectorToFile(const vector<string>& lines, const string & fileName) )
  2. Дана строка s - имя текстового файла. Прочитать и вывести на консоль всё его содержимое.
    	ifstream fin(s); // создаём объект класса ofstream для записи и связываем его с именем
    	string str;
    	while (!fin.eof()) // пока не достигнут конец файла
    	{
    		getline(fin, str);
    		// совершаем нужные действия с переменной str
    	}
    	fin.close();
    
  3. Дан текстовый файл, содержащий целые числа, разделённые пробелами и символами перехода на новую строку примерно следующего вида
       10    5 7  
     -3   7 55
            11
        -21  5
      -60      -34  4
    
    Найти среднее всех чисел в файле
    Указание Для чтения целого числа из файла использует команду fin >> x; (fin - объект ifstream, x - целочисленная переменная)
  4. Дана строка s. Создать файл целых чисел c названием s, содержащий числа от 0 до n.
    Указание 1 Код для открытия файла и записи информации в него следующий:
    ofstream out(s, ios::binary); // создаём объект класса ofstream 
                                  // (файловый вывод) в режиме бинарного файла; 
                                  // s - имя файла           
    if (!out.is_open())
    	cout << "Недопустимое имя файла!\n";
    else {
    	// записываем информацию в файл
    	out.close(); // закрываем файл и сохраняем его                                 
    }
    
    Указание 2 Для записи целого числа в файл используем следующую команду
    int a = // ваше значение целочисленной переменной;
    out.write((char *)&a, sizeof(int));      
    // char занимает 1 байт, целое число преобразуется в массив из 4 байт и они записываются в файл
    
    Указание 3 Для двоичных файлов используем расширение .dat
  5. Дана строка s - имя файла целых чисел. Прочитать и вывести на консоль все числа из файла. Для открытия файла на чтение код следующий:
    ifstream in(s);
    int x = 0;
    if (!in.is_open()) // если файл не открыт
    	cout << "Файл не может быть открыт!\n";
    else {
    	while (!in.read((char*)&x, sizeof(int)).eof()) {// число читается в условии цикла
    		// совершаем с переменной х нужные действия
    	}
    	in.close();
    }
    
    Указание При вызове функции открываем файл, созданный при решении предыдущей задачи.
Информация к размышлению - статья о приведении типов.