Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие С++- не книжкой_новое.doc
Скачиваний:
4
Добавлен:
04.11.2018
Размер:
765.44 Кб
Скачать

Int feof(file *stream);

Если индикатор позиции файла, связанного с потоком stream, расположен в конце файла возвращается ненулевое значение, в противном случае - нуль.

Для изменения индикатора позиции файла используют функцию

Int fseek ( file* stream, long offset, int origin);

Функция устанавливает индикатор позиции файла, связанного с потоком stream, в соответствии со значением смещения offset (количество байтов) и исходного положения origin. Параметр origin может принимать одно их следующих значений: 0 - начало файла, 1 – текущая позиция, 2 – конец файла. При успешном выполнении функция возвращает нулевое значение, при возникновении сбоя – ненулевое. Функция очищает признак конца файла. Вообще говоря функцию fseek() следует использовать только при работе с двоичными файлами. При использовании же с текстовыми файлами параметр origin должен иметь значение 0, а параметр offset – значение, полученное в результате вызова функции

long ftell (FILE* stream);

которая возвращает текущее значение индикатора позиции файла.

Приведем фрагмент программы, считывающей из файлового потока fp каждый третий символ

char a;

while ((a=fgetc(fp))!=EOF && fseek(fp,2,1)==0)

cout<<a<<" ";

Если необходимо считать каждое третье число из файла (предполагается, что числа разделены пробелами) программа примет следующий вид:

int a;

while (fscanf(fp, "%d%*d%*d ", &a)!=EOF && fseek(fp,ftell(fp),0)==0)

cout<<a<<" ";

Каждому студенту рекомендуется выполнить хотя бы одно из упражнений 1-12 заданий 1-4.

Задание 1. Определение и вызов функций

  1. Определить функцию, проверяющую, является ли целое число совершенным. Совершенное число равно сумме всех своих делителей, включая единицу и не включая себя. Например 6=1+2+3 – совершенное число, 81+2+2+2 - несовершенное. Выяснить, сколько совершенных чисел находится в диапазоне [n..m] (n<m), вывести их на экран.

  2. Определить функции, переводящую число в двоичную систему счисления и проверяющую, является ли двоичная запись числа симметричной последовательностью нулей и единиц, начинающейся единицей. Напечатать все числа, не превосходящие n, двоичная запись которых есть симметричная последовательность.

  3. Определить функцию, посчитывающую количество инверсий в последовательности цифр натурального числа, то есть количество таких пар соседних цифр, в которых большая находится слева от меньшей. Из массива целых чисел, генерируемом случайным образом, вывести на экран сначала все числа, в записи которых нет инверсий, затем числа, в записи которых 1 инверсия и т.д. до чисел, имеющих максимальное число инверсий в данном массиве. Например, элементы массива {3564, 123, 24, 87, 981, 9871, 54} должны быть выведены следующим образом: 0 инверсий: 123, 24; 1 инверсия: 3564, 87,54; 2 инверсии: 981; 3 инверсии: 9871.

  4. Определить функцию, проверяющую, является ли заданная дробь несократимой. (Дробь задается двумя натуральными числами – числителем и знаменателем). Найти все несократимые дроби, заключенные между 0 и 1, знаменатели которых не превышают заданное число n.

  5. Определить функцию, проверяющую является ли число простым. Распечатать четверки простых чисел, не превосходящих n, принадлежащих одному десятку. Например, для числа 112 надо напечатать четверки 2 3 5 7; 11 13 17 19 ; 101 103 107 109.

  6. Определить функцию, возвращающую сумму простых делителей натурального числа. Найти все пары “дружественных” чисел в диапазоне [n1,n2]. Два натуральных числа называются “дружественными”, если одно из них равно сумме простых делителей другого.

  7. Определить функцию, проверяющую, является ли данное число простым. Составить программу для проверки гипотезы Гольдбаха о том, что каждое четное число, большее 2, можно представить суммой двух простых чисел. (Для любого четного k, не превосходящего n, выдать либо пару простых слагаемых, либо сообщение, что такого разложения нет).

  8. Определить функцию, проверяющую, является ли данное число простым, и функцию, вычисляющую количество нулей в двоичной записи натурального числа. (Считается, что первая цифра двоичного числа всегда 1). Среди простых чисел, не превосходящих n, найти первое такое, в двоичной записи которого максимальное количество нулей.

  9. Определить функцию, проверяющую, является ли данное число простым, и функцию, подсчитывающую количество единиц в двоичной записи натурального числа. Найти все пары простых чисел, не превосходящих n, сумма единиц в двоичной записи которых совпадает. Например, такой парой является пара 3 (11) и 5 (101).

  10. Определить функцию для нахождения наименьшего общего кратного (НОК) и наибольшего общего делителя (НОД) двух натуральных чисел. Определить НОК и НОД для n введенных натуральных чисел.

  11. Определить функцию, проверяющую, является ли данное число простым, и функцию, вычисляющую количество единиц в двоичной записи натурального числа. (Считается, что первая цифра двоичного числа всегда 1). Среди простых чисел, не превосходящих n, найти такие, в двоичной записи которых количество единиц не превосходит m.

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