Лекции, страница 8

PDF-файл Лекции, страница 8 Основы конструкторско-технологической информатики (ОКТИ) (57952): Лекции - 2 семестрЛекции: Основы конструкторско-технологической информатики (ОКТИ) - PDF, страница 8 (57952) - СтудИзба2020-04-27СтудИзба

Описание файла

PDF-файл из архива "Лекции", который расположен в категории "". Всё это находится в предмете "основы конструкторско-технологической информатики (окти)" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 8 страницы из PDF

Таким образом, внутреннее представление текста всегдасоответствует системе Unix, а внешнее - реально используемой операционной системе.Отметим также, что создатели операционной системы компьютеров Apple Macintoshвыбрали, чтобы жизнь не казалась скучной, третий, отличный от двух предыдущих,вариант: текстовые строки разделяются одним символом "\r".Такое представление текстовых файлов восходит к тем уже далеким временам,когда еще не было компьютерных мониторов и для просмотра текста использовалисьэлектрифицированные пишущие машинки или посимвольные принтеры. Текстовый файлфактически представлял собой программу печати на пишущей машинке и, таким образом,содержал команды возврата каретки и продергивания бумаги в конце каждой строки.Функция бинарной записи в файл fwrite аналогична функции чтения fread.

Онаимеет следующий прототип:size_t fwrite(char *buffer,size_t elemSize,size_t numElems,FILE *f);////////Массив записываемых данныхРазмер одного элементаЧисло записываемых элементовУказатель на структуру FILEФункция возвращает число реально записанных элементов, которое может быть меньше,чем numElems, если при записи произошла ошибка - например, не хватило свободногопространства на диске.

Пример использования функции fwrite:FILE *f;double buff[100];size_t num;. . .f = fopen("tmp.res", "wb"); // Открываем файл "tmp.res"if (f == 0) { // При ошибке открытия файла// Напечатать сообщение об ошибкеperror("Не могу открыть файл для записи");exit(1); // завершить работу программы с кодом 1}// Записываем 100 вещественных чисел в файлres = fwrite(buff, sizeof(double), 100, f);// В случае успеха res == 100Закрытие файла: функция fcloseПо окончании работы с файлом его надо обязательно закрыть.

Система обычнозапрещает полный доступ к файлу до тех пор, пока он не закрыт. (Например, внормальном режиме система запрещает одновременную запись в файл для двух разныхпрограмм.) Кроме того, информация реально записывается полностью в файл лишь вмомент его закрытия. До этого она может содержаться в оперативной памяти (в такназываемой файловой кеш-памяти), что при выполнении многочисленных операцийзаписи и чтения значительно ускоряет работу программы.Для закрытия файла используется функция fclose с прототипомint fclose(FILE *f);В случае успеха функция fclose возвращает ноль, при ошибке -- отрицательноезначение (точнее, константу конец файла EOF, определенную в системных заголовочныхфайлах как минус единица). При ошибке можно воспользоваться функцией perror, чтобы26напечатать причину ошибки.

Отметим, что ошибка при закрытии файла - явление оченьредкое (чего не скажешь в отношении открытия файла), так что анализировать значение,возвращаемое функцией fclose, в общем-то, не обязательно. Пример использованияфункции fclose:FILE *f;f = fopen("tmp.res", "wb"); // Открываем файл "tmp.res"if (f == 0) { // При ошибке открытия файла// Напечатать сообщение об ошибкеperror("Не могу открыть файл для записи");exit(1); // завершить работу программы с кодом 1}. . .// Закрываем файлif (fclose(f) < 0) {// Напечатать сообщение об ошибкеperror("Ошибка при закрытии файла");}Пример: подсчет числа символов и строк в текстовом файле.

В качествесодержательного примера использования рассмотренных выше функций файлового вводаприведем программу, которая подсчитывает число символов и строк в текстовом файле.Программа сначала вводит имя файла с клавиатуры. Для этого используется функцияscanf ввода по формату из входного потока, для ввода строки применяется формат "%s.Затем файл открывается на чтение как бинарный (это означает, что при чтении не будетпроисходить никакого преобразования разделителей строк).

Используя в цикле функциючтения fread, мы считываем содержимое файла порциями по 512 байтов, каждый разувеличивая суммарное число прочитанных символов. После чтения очередной порциисканируется массив прочитанных символов и подсчитывается число символов "\n"продергивания бумаги, которые записаны в концах строк текстовых файлов как в системеUnix, так и в MS DOS или MS Windows.

В конце закрывается файл и печатается результат.//// Файл "wc.cpp"// Подсчет числа символов и строк в текстовом файле//#include <stdio.h> // Описания функций ввода-вывода#include <stdlib.h> // Описание функции exitint main() {char fileName[256];FILE *f;char 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// ошибочного завершения}27while ((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; // Возвращаем код успешного завершенияПример выполнения программы: она применяется к собственному тексту, записанному вфайле "wc.cpp.

Введите имя файла: wc.cppЧисло символов в файле = 1635Число строк в файле = 50Форматный ввод-вывод: функции fscanf и fprintfВ отличие от функции бинарного ввода fread, которая вводит байты из файла безвсякого преобразования непосредственно в память компьютера, функция форматноговвода fscanf предназначена для ввода информации с преобразованием ее из текстовогопредставления в бинарное. Пусть информация записана в текстовом файле в привычномдля человека виде (т.е.

так, что ее можно прочитать или ввести в файл, используятекстовый редактор). Функция fscanf читает информацию из текстового файла ипреобразует ее во внутреннее представление данных в памяти компьютера. Информация околичестве читаемых элементов, их типах и особенностях представления задается спомощью формата.

В случае функции ввода формат - это строка, содержащая описанияодного или нескольких вводимых элементов. Форматы, используемые функцией fscanf,аналогичны применяемым функцией scanf, они уже неоднократно рассматривались.Каждый элемент формата начинается с символа процента "%". Наиболее частоиспользуемые при вводе форматы приведены в таблице:%d%lf%c%sцелое десятичное число типа int (d - от decimal)вещ. число типа double (lf - от long float)один символ типа charввод строки. Из входного потока выделяется слово, ограниченое пробелами или символамиперевода строки '\n'.

Слово помещается в массив символов. Конец слова отмечается нулевымбайтом.Прототип функции fscanf выглядит следующим образом:int fscanf(FILE *f, const char *format, ...);Многоточие здесь означает, что функция имеет переменное число аргументов, большеедвух, и что количество и типы аргументов, начиная с третьего, произвольны. На самомделе, фактические агрументы, начиная с третьего, должны быть указателями на вводимыепеременные. Несколько примеров использования функции fscanf:int n, m; double a; char c; char str[256];28FILE *f;.

. .fscanf(f,fscanf(f,fscanf(f,fscanf(f,"%d", &n);"%lf", &a);"%c", &c);"%s", str);// Ввод целого числа// Ввод вещественного числа// Ввод одного символа// Ввод строки (выделяется очередное// слово из входного потока)fscanf(f, "%d%d", &n, &m); // Ввод двух целых чиселФункция fscanf возвращает число успешно введенных элементов.

Таким образом,возвращаемое значение всегда меньше или равно количеству процентов внутриформатной строки.Функция fprintf используется для форматного вывода в файл. Данные при выводепреобразуются в их текстовое представление в соответствии с форматной строкой. Ееотличие от форматной строки, используемой в функции ввода fscanf, заключается в том,что она может содержать не только форматы для преобразования данных, но и обычныесимволы, которые записываются без преобразования в файл. Форматы, как и в случаефункции fscanf, начинаются с символа процента "%".

Они аналогичны форматам,используемым функцией fscanf. Небольшое отличие заключается в том, что форматыфункции fprintf позволяют также управлять представлением данных, например, указыватьколичество позиций, отводимых под запись числа, или количество цифр после десятичнойточки при выводе вещественного числа.Прототип функции fprintf выглядит следующим образом:int fprinf(FILE *f, const char *format, ...);Многоточие, как и в случае функции fscanf, означает, что функция имеет переменноечисло аргументов. Количество и типы аргументов, начиная с третьего, должнысоответствовать форматной строке.

В отличие от функции fscanf, фактические аргументы,начиная с третьего, представляют собой выводимые значения, а не указатели напеременные. Для примера рассмотрим небольшую программу, выводящую данные в файл"tmp.dat":#include <stdio.h> // Описания функций ввода вывода#include <math.h>// Описания математических функций#include <string.h> // Описания функций работы со строкамиint main() {int n = 4, m = 6; double x = 2.;char str[256] = "Print test";FILE *f = fopen("tmp.dat", "wt"); // Открыть файлif (f == 0) {// для записиperror("Не могу открыть файл для записи");return 1; // Завершить программу с кодом ошибки}fprintf(f, "n=%d, m=%d\n", m, n);fprintf(f, "x=%.4lf, sqrt(x)=%.4lf\n", x, sqrt(x));fprintf(f, "Строка \"%s\" содержит %d символов.\n",str, strlen(str));fclose(f); // Закрыть файлreturn 0;// Успешное завершение программы}В результате выполнения этой программы в файл "tmp.dat" будет записан следующийтекст:n=6, m=4x=2.0000, sqrt(x)=1.414229Строка "Print test" содержит 10 символов.В последнем примере форматная строка содержит внутри себя двойные апострофы.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5259
Авторов
на СтудИзбе
421
Средний доход
с одного платного файла
Обучение Подробнее