- •Лекция № 29
- •Общие сведения о строках.
- •Работа со строками с помощью указателей.
- •Функции работы со строками.
- •1. Общие сведения о строках.
- •2. Работа строками с помощью указателей.
- •3. Функции работы со строками.
- •Лекция № 30
- •2. Конструкторы и присваивание строк.
- •3. Операции
- •4. Функции (самостоятельная работа)
- •Лекция № 32
- •2. Инициализация структур.
- •3. Доступ к полям структуры.
- •4. Битовые поля.
- •5. Объединения (union).
- •Лекция № 32 а (самостоятельная работа)
- •2. Структуры и массивы.
- •3. Массивы структур.
- •4. Копирование структур.
- •5. Примеры решения задач.
- •Лекция № 33
- •2. Пример 2.
- •3. Пример 3.
- •4. Пример 4.
- •Лекция № 34
- •2. Доступ к файлу.
- •3. Функции для работы с файлами.
- •4. Примеры решения задач.
Лекция № 33
Тема : Решение задач создания и обработки записей.
План
Пример 1.
Пример 2.
Пример 3.
Пример 4.
1. Пример 1.
Задача 1. По введенному году, месяцу и числу определить порядковый номер дня в году.
typedef struct {
int year;
int month;
int day;
} DATE;
int tab_days [2] [13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int day_of_year (DATE d)
{
int I,k;
k = d.year%4 = = 0&&d.year%100! = 0 || d.year%400 = = 0; // високосный ли год
if (d.month < 1 || d.month > 12) return -1;
if (d.day < 1 || d.day > tab_days[k][d.month]) return -1;
for (i = 1; i < d.month; i++)
d.day + = tab_days[k][i];
return d.day;
}
2. Пример 2.
#include <stdio.h>
void main () {
DATE d;
int N;
puts (“Введите число, номер месяца и год”)ж
scanf (“%d%d%d”, &d.day, &d.month, &d.year);
N = day_of_year(d);
if (N < 0) puts (“Неверно введена дата !”);
else printf(“В %d году этот день имеет номер %d\n”, d.year, N);
}
3. Пример 3.
#include <iostream.h>
int main () {
enum paytype {CARD, CHECK};
paytype ptype;
union payment {
char card[25];
long check;
} info;
/*присваивание значений info и ptype */
switch (ptype) {
case CARD : cout << “Оплата по карте : “ << info.card; break;
case CHECK : cout << “Оплата чеком : “ << info.check; break;
}
return 0;
}
4. Пример 4.
#include <iostream.h>
int main () {
enum paytype {CARD, CHECK};
struct {
paytype ptype;
union {
char card[25];
long check;
}
} info;
/*присваивание значений info */
switch (info.ptype) {
case CARD : cout << “Оплата по карте : “ << info.card; break;
case CHECK : cout << “Оплата чеком : “ << info.check; break;
}
return 0;
}
Лекция № 34
Тема : Файлы. Директивы препроцессору и функции обработки файлов в языке С.
План
Общие сведения.
Доступ к файлу.
Функции для работы с файлами.
Примеры решения задач.
1. Общие сведения.
Язык С кроме стандартного ввода данных с клавиатуры и вывода результатов на экран предоставляет также возможность обмена при операциях ввода/вывода с внешними устройствами, в том числе, с файлами на диске.
В С не предусмотрены никакие предопределенные структуры файлов (такие как файлы последовательного или прямого доступа) : все файлы рассматриваются как последовательности, потоки байтов.
Для файла определен маркер (указатель чтения/записи). Он определяет текущую позицию, к которой осуществляется доступ.
С началом работы любой программы автоматически открываются некоторые стандартные потоки, например, стандартный ввод (его имя – stdin) и стандартный вывод (его имя – stdout). По умолчанию они связаны с клавиатурой и экраном терминала соответственно. Поэтому в тех функциях ввода/вывода, которые использовались до сих пор, не указывалось, из какого потока берутся или куда помещаются данные : это известно по умолчанию.
Однако возможно в своей программе открывать другие потоки, связывать их либо с файлами на диске, либо с физическими устройствами (например, принтером), записывать в них или считывать из них информацию. Для этого служат функции ввода/вывода верхнего уровня.
