вопросы. общие вопросы. Программа ипрограммирование
Скачать 1.45 Mb.
|
Работа с файлами в языке СиДля программиста открытый файл представляется как последовательность считываемых или записываемых данных. При открытии файла с ним связывается поток ввода-вывода. Выводимая информация записывается в поток, вводимая информация считывается из потока. Когда поток открывается для ввода-вывода, он связывается со стандартной структурой типа FILE, которая определена в stdio.h. Структура FILE содержит необходимую информацию о файле. Открытие файла осуществляется с помощью функции fopen(), которая возвращает указатель на структуру типа FILE, который можно использовать для последующих операций с файлом. FILE *fopen(name, type); name – имя открываемого файла (включая путь), type — указатель на строку символов, определяющих способ доступа к файлу: "r" — открыть файл для чтения (файл должен существовать); "w" — открыть пустой файл для записи; если файл существует, то его содержимое теряется; "a" — открыть файл для записи в конец (для добавления); файл создается, если он не существует; "r+" — открыть файл для чтения и записи (файл должен существовать); "w+" — открыть пустой файл для чтения и записи; если файл существует, то его содержимое теряется; "a+" — открыть файл для чтения и дополнения, если файл не существует, то он создаётся. Возвращаемое значение — указатель на открытый поток. Если обнаружена ошибка, то возвращается значение NULL. Функция fclose() закрывает поток или потоки, связанные с открытыми при помощи функции fopen() файлами. Закрываемый поток определяется аргументом функции fclose(). Возвращаемое значение: значение 0, если поток успешно закрыт; константа EOF, если произошла ошибка. #include int main() { FILE *fp; char name[] = "my.txt"; if ((fp = fopen(name, "r")) == NULL) { printf("Не удалось открыть файл"); getchar(); return 0; } // открыть файл удалось ... // требуемые действия над данными fclose(fp); getchar(); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Чтение символа из файла: char fgetc(поток); Аргументом функции является указатель на поток типа FILE. Функция возвращает код считанного символа. Если достигнут конец файла или возникла ошибка, возвращается константа EOF. Запись символа в файл: fputc(символ,поток); Аргументами функции являются символ и указатель на поток типа FILE. Функция возвращает код считанного символа. Функции fscanf() и fprintf() аналогичны функциям scanf() и printf(), но работают с файлами данных, и имеют первый аргумент — указатель на файл. fscanf(поток, "ФорматВвода", аргументы); fprintf(поток, "ФорматВывода", аргументы); Функции fgets() и fputs() предназначены для ввода-вывода строк, они являются аналогами функций gets() и puts() для работы с файлами. fgets(УказательНаСтроку, КоличествоСимволов, поток); Символы читаются из потока до тех пор, пока не будет прочитан символ новой строки ‘\n’, который включается в строку, или пока не наступит конец потока EOF или не будет прочитано максимальное количество символов. Результат помещается в указатель на строку и заканчивается нуль- символом ‘\0’. Функция возвращает адрес строки. fputs(УказательНаСтроку,поток); Копирует строку в поток с текущей позиции. Завершающий нуль- символ не копируется. Пример Ввести число и сохранить его в файле s1.txt. Считать число из файла s1.txt, увеличить его на 3 и сохранить в файле s2.txt. #include #include int main() { FILE *S1, *S2; int x, y; system("chcp 1251"); system("cls"); printf("Введите число : "); scanf("%d", &x); S1 = fopen("S1.txt", "w"); fprintf(S1, "%d", x); fclose(S1); S1 = fopen("S1.txt", "r"); S2 = fopen("S2.txt", "w"); fscanf(S1, "%d", &y); y += 3; fclose(S1); fprintf(S2, "%d\n", y); fclose(S2); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Результат выполнения — 2 файла Работа с файлами в C++ описана здесь. 46 Язык Ассемблера Язык ассемблера — тип языка программирования низкого уровня, представляющий собой формат записи машинных команд, удобный для восприятия человеком. На языке ассемблера пишут: программы, требующие максимальной скорости выполнения: основные компоненты компьютерных игр, ядра операционных систем реального времени и просто критичные по времени куски программ; программы, взаимодействующие с внешними устройствами: драйверы, программы, работающие напрямую с портами, звуковыми и видеокартами; программы, использующие полностью возможности процессора: ядра многозадачных операционных систем, серверы; программы, полностью использующие возможности операционной системы: вирусы, антивирусы, защита от несанкционированного доступа, программы обхода защиты от несанкционированного доступа. Достоинства языка ассемблера Знание языка ассемблера позволяет понять: Как программы взаимодействуют с ОС, процессором и BIOS; Как данные представлены в памяти и других внешних устройствах; Как процессор обращается к инструкции и выполняет её; Как инструкции получают доступ и обрабатывают данные; Как программа обращается к внешним устройствам. Другие преимущества использования ассемблера: Программы на нём требует меньше памяти и времени выполнения; Это упрощает сложные аппаратные задачи; Подходит для работ, в которых время выполнения является критичным; Он наиболее подходит для написания подпрограмм обработки прерываний и других программ, полностью находящихся в оперативной памяти. Недостатки языка ассемблера трудоемкость написания программы больше, чем языке высокого уровня; трудоемкость чтения; непереносимость на другие платформы, кроме совместимых ассемблер малопригоден для совместных проектов 47 Специфические возможности языка Си Язык имеет низкоуровневые возможности, позволяющие непосредственно работать с машинными ячейками, в том числе битовые операции и так называемую адресную арифметику. В связи с этим некоторые ученые относят Си к языкам промежуточного, а не высокого уровня. Си позволяет создавать высокоэффективные — быстрые и не требующие больших объемов памяти программы. Язык Си отличается минимализмом и лаконичностью программ. 48 Объектно-ориентированное программирование на примере С++ В традиционном программировании (чем мы занимались до этого момента), программа — это набор инструкций для компьютера, которые определяют данные (через объекты), а затем работают с этими данными (через операторы и функции). Объекты и функции, которые работают с этими данными, являются отдельными единицами, которые объединяются для получения программистом желаемого результата. Из-за того, что они являются отдельными единицами, традиционное программирование часто не позволяет использовать интуитивное представление реальности. Это является делом программиста — управлять и соединять свойства (переменные) с поведением (функциями) соответствующим образом, что приводит к созданию следующего кода:
Так что же тогда является объектно-ориентированным программированием? Для лучшего понимания воспользуемся аналогией. Оглянитесь вокруг, везде находятся объекты: книги, здания, еда и даже вы сами. Объекты имеют два основных компонента: свойства (например, вес, цвет, размер, прочность, форма и т.д.); поведение, которое они могут проявлять (например, открывать что-либо, делать что-то и т.д.). Свойства и поведение неотделимы друг от друга. Объектно-ориентированное программирование (сокр. «ООП») предоставляет возможность создавать объекты, которые объединяют свойства и поведение в самостоятельный союз, который затем можно многоразово использовать. Это приводит к созданию следующего кода:
Так не только читабельнее, но и понятнее, кем является объект (you — вы) и какое поведение вызывается (driveTo — поездка). Вместо того, чтобы сосредоточиться на написании функций, мы концентрируемся на определении объектов, которые имеют четкий набор поведений. Вот почему эта парадигма называется «объектно-ориентированной». Это позволяет создавать программы модульным способом, что упрощает не только написание и понимание кода, но и обеспечивает более высокий уровень возможности повторного использования этого кода. Объекты также обеспечивают более интуитивный способ работы с данными, позволяя программисту определить, как он будет взаимодействовать с объектами, и как эти объекты будут взаимодействовать с другими объектами. Обратите внимание, ООП не заменяет традиционные методы программирования. ООП — это дополнительный инструмент управления сложностью. Объектно-ориентированное программирование также предоставляет несколько других полезных концепций, таких как наследование, инкапсуляция, абстракция и полиморфизм. Мы рассмотрим каждую из этих концепций на соответствующих уроках. Будет много нового материала, но как только вы разберетесь с ООП, вам уже не захочется возвращаться к традиционному программированию. Обратите внимание, термин «объект» перегружен, он имеет несколько значений, что может вызывать некоторую путаницу. В традиционном программировании, «объект» — это часть памяти для хранения значений. В объектно-ориентированном программировании, «объект» — это тот же объект, что и в традиционном программировании, но который соединяет в себе как свойства, так и способы поведения. С этого момента мы будем использовать термин «объект» в объектно-ориентированном смысле этого слова. |