Семинары (1171138), страница 2
Текст из файла (страница 2)
Задача сводится к нахождению корня функции y = x2-aна отрезке [0,b], где b = max(1,a). На этом отрезке функция имеет ровно один корень,поcкольку она монотонно возрастает и на концах отрезка принимает значения разныхзнаков (или нулевое значение при a = 0 или a = 1).#include <stdio.h> // Описания стандартного ввода-вывода// Число, из которого извлекается кореньdouble a;double f(double x) //функция x2-a{double res;res = x*x–a;return res;}int main()doubledoubledouble{x, x0, x1;// [x0, x1] - текущий отрезокy;// Значение ф-ции в точке xeps = 0.000001; // Точность вычисления корняprintf("Введите число a:\n");scanf("%lf", &a);if (a < 0.0) {printf("Число должно быть неотрицательным.\n");return 1; // Возвращаем код}//некорректного завершения//x0x1ifЗадаем концы отрезка= 0.0;= a;(a < 1.0) {x1 = 1.0;}3// Утверждение: x0 * x0 - a <= 0,//x1 * x1 - a >= 0while (x1 - x0 > eps) {// Инвариант: x0 * x0 - a <= 0,//x1 * x1 - a >= 0x = (x0 + x1) / 2.0; // середина отрезка [x0,x1]y = f(x);// значение ф-ции в точке xif (y >= 0.0) {x1 = x; // выбираем левую половину отрезка}else {x0 = x; // выбираем правую половину отрезка}}// Утверждение:////x = (x0 + x1) /x0 *x1 *x1 2.0;x0x1x0//- a <= 0,- a >= 0,<= epsКорень := середина отрезка// Печатаем ответprintf("Квадратный корень = %lf\n", x);}return 0; // Возвращаем код успешного завершенияРезультат выполненияЗадание 3:1.
Дана строка символов S. Напечатайте все входящие в эту строку заглавныелатинские буквы 'A', ... , 'Z' по одному pазу в алфавитном порядке с указаниемчисла вхождений каждой буквы в строку. Проверку на признак заглавной буквы иподсчет количества вхождений в строку оформить в виде функции.2. Напишите пpогpамму, содержащую функцию удаления из вектора элемента пеpедзаданным. Заданный элемент определяется по его порядковому номеру.3. Пусть в векторе вещественных чисел содержатся результаты измерения некоторойвеличины x в нескольких опытах.
Вычислите среднее значение величины x поn −1формуле M[X]= ∑ xi /n, где n – количество измерений, и дисперсию поi =04n −12формуле:D[X]= ∑ ( M [ X ] − xi ) /n. Вычисление среднего арифметического M[X] иi =0дисперсии D[X] организовать в виде отдельных функций.Исходный кодРезультат выполнения5Контрольные вопросы1.2.3.4.5.6.Представление программы в виде функций?Прототип функции?Формальные и фактические параметры?Способ передачи параметров: по ссылке и по значению?Вызов функции?Вычисление квадратного корня?СПИСОК ЛИТЕРАТУРЫ1. Дейтел Х. М.
Как программировать на С++: Пер. с англ. – М.: ЗАО «ИздательствоБИНОМ», 2000 г. – 1024 с.: ил.2. Страуструп Б. Язык программирования С++. Специальное издание: ++: Пер. с англ.– М.: ЗАО «Издательство БИНОМ», 2008 г. – 1104 с. :ил.3. Шилдт Г. Полный справочник по С++: ++: Пер. с англ. – М.: Изд-во Вильямс, 2007г. – 800 с.: ил.4. Шилдт Г.
С++: Базовый курс: ++: Пер. с англ. – М.: Изд-во Вильямс, 2008 г. – 624с.: ил.5. Джонсон Б., Скибо К., Янг М.: Основы Microsoft Visual Studio .NET 2003: - М.:6датаОтчет по лабораторной работе №3«Основы C++, работа с файлами»ОценкаБонус за(max 5)сложностьподписьЦели работы:Изучение принципов работы с файлами в среде MS Visual Studio C++.Задачи работы:-знакомство с принципами работы с файлами, основными понятиями и функциями C++-разработка примеров простейших программ работы с файлами на С++Краткий конспект теоретической части (ответы на контрольные вопросы)Типы файлов?_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Работа с файлами: открытие файла? __________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Работа с файлами: чтение данных из файла?________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Работа с файлами: запись данных в файл?_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Подсчет символов и строк в текстовом файле _______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Подсчет символов, строк слов в текстовом файле _________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________1Пример 1: Работа с файлами: открытие, закрытие файла#include <stdio.h> // Описания стандартного ввода-выводаint main(){FILE *f, *g, *h;// 1.
Открыть текстовый файл "abcd.txt" для чтенияf = fopen("abcd.txt", "rt");fclose(f)// 2. Открыть бинарный файл "c:\Windows\Temp\tmp.dat"// для чтения и записиg = fopen("tmp.dat", "wb+");fclose(g)// 3. Открыть текстовый файл "c:\Windows\Temp\abcd.log"// для дописывания в конец файлаh = fopen("c:\\Temp\\abcd.log", "at");fclose(h)//Диагостика ошибокFILE *k = fopen("filnam.txt", "rt");if (k == 0) {perror("Не могу открыть файл на чтение");fclose(k)}}Результат выполненияПример 2: Работа с файлами: чтение, запись#include <stdio.h> // Описания функций ввода-вывода#include <stdlib.h> // Описание функции exitint main (){FILE *f;double buff[10];size_t res;f = fopen("tmp.dat", "rb"); // Открываем файлif (f == 0) { // При ошибке открытия файла2}// Напечатать сообщение об ошибкеperror("Не могу открыть файл для чтения");exit(1); // завершить работу с кодом 1// Пытаемся прочесть 10 вещественных чисел из файлаres = fread(buff, sizeof(double), 10, f);// res равно реальному количеству прочитанных чиселprintf("Read bytes: %d \n", res);FILE *g;g = fopen("tmp.res", "wb"); // Открываем файл "tmp.res"if (g == 0) { // При ошибке открытия файла// Напечатать сообщение об ошибкеperror("Не могу открыть файл для записи");exit(1); // завершить работу программы с кодом 1}// Записываем 10 вещественных чисел в файлres = fwrite(buff, sizeof(double), 10, g);// В случае успеха res == 10printf("Written bytes: %d \n", res);return 0;}Результат выполненияПример 3: Работа с файлами: подсчет символом и строк в текстовом файле:Программа сначала вводит имя файла с клавиатуры.
Для этого используется функцияscanf ввода по формату из входного потока, для ввода строки применяется формат "%s.Затем файл открывается на чтение как бинарный (это означает, что при чтении не будетпроисходить никакого преобразования разделителей строк). Используя в цикле функциючтения fread, мы считываем содержимое файла порциями по 512 байтов, каждый разувеличивая суммарное число прочитанных символов.// Подсчет числа символов и строк в текстовом файле//#include <stdio.h> // Описания функций ввода-вывода#include <stdlib.h> // Описание функции exitint main() {char fileName[256]; // Путь к файлуFILE *f;// Структура, описывающая файл3char buff[512];size_t num;int numChars = 0;int numLines = 0;int i;//////////Массив для ввода символовЧисло прочитанных символовСуммарное число символов := 0Суммарное число строк := 0Переменная циклаprintf("Введите имя файла: ");scanf("%s", fileName);f = fopen(fileName, "rb"); // Открываем файл на чтениеif (f == 0) { // При ошибке открытия файла// Напечатать сообщение об ошибкеperror("Не могу открыть файл для чтения");exit(1); // закончить работу программы с кодом 1// ошибочного завершения}while ((num = fread(buff, 1, 512, f)) > 0) { // Читаем// блок из 512 символов.
num -- число реально// прочитанных символов. Цикл продолжается, пока// num > 0numChars += num; // Увеличиваем число символов// Подсчитываем число символов перевода строкиfor (i = 0; i < num; ++i) {if (buff[i] == '\n') {++numLines; // Увеличиваем число строк}}}fclose(f);// Печатаем результатprintf("Число символов в файле = %d\n", numChars);printf("Число строк в файле = %d\n", numLines);}return 0; // Возвращаем код успешного завершенияРезультат выполнения4Другие полезные функции ввода-выводаСтандартная библиотека ввода-вывода Си содержит ряд других полезных функций ввода-вывода.Отметим некоторые из них.char *fgets(char *line,int size, FILE *f);char *fputs(char *line, FILE *f);Посимвольный ввод-выводввести символ из потока fвывести символ в поток fПостроковый ввод-выводввести строку из потока fвывести строку в поток fint fseek(FILE *f, long offset, int whence);long ftell(FILE *f);int feof(FILE *f);Позиционирование в файлеустановить текущую позицию в файле fполучить текущую позицию в файле fпроверить,достигнут ли конец файла fint fgetc(FILE *f);int fputc(int c, FILE *f);Функция fgetc возвращает код введенного символа или константу EOF (определенную как минусединицу) в случае конца файла или ошибки чтения.Функция fputc записывает один символ в файл.
При ошибке fputc возвращает константу EOF (т.е.отрицательное значение), в случае удачи - код выведенного символа c (неотрицательное значение).Функция fgets с прототипом выделяет из файла или входного потока f очередную строку изаписывает ее в массив символов line. Второй аргумент size указывает размер массива для записи строки.Максимальная длина строки на единицу меньше, чем size, поскольку всегда в конец считанной строкидобавляется нулевой байт. Функция сканирует входной поток до тех пор, пока не встретит симол переводастроки "\n" или пока число введенных символов не станет равным size - 1.
Символ перевода строки "\n"также записывается в массив непосредственно перед терминирующим нулевым байтом. Функциявозвращает указатель line в случае успеха или нулевой указатель при ошибке или конце файла.Определение типов символовБиблиотека Си предоставляет следующие функции для определения типа символов, описанные встандартном заголовочном файле "ctype.h":int isdigit(int c);int isalpha(int c);int isspace(int c);int ispunkt(int c);int isupper(int c);int islower(int c);int toupper(int c);int tolower(int c);символ c - цифра;c - латинская буква;c - пробел, перевод строки и т.п.;c - знак препинания;c - прописная латинская буква;c - строчная латинская буква;если c -- лат.