Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

osnovyiprogrammirovaniyanac

.pdf
Скачиваний:
24
Добавлен:
12.03.2015
Размер:
1.46 Mб
Скачать

Задачи к главе 11.Функции

Задача 11.1. Напишите функцию, которая сравнивает два целых числа и возвращает один символ: >, < или =.

Задача 11.2. Напишите функцию, которая вычисляет значение аь, не используя

стандартную функцию pow().

 

Задача 11.3. Напишите функцию, которая считает количество гласных букв во введенной строке.

Задача 11.4. Напишите функцию, которая случайным образом генерирует пароль из 8 символов. В пароле должны присутствовать только латинские буквы и цифры.

Задача 11.5. Напишите функцию - телеграф, которая кодирует введенное предложение, азбукой Морзе, зная что:

А .-

Б

в.—

г — .

Д -••

Е .

 

3--..

и . .

И . —

к - . -

л . - . .

м -

Н-.

0 —

П

р.-.

С ...

Т -

У ..-

ф

X ....

ц - . - .

ч — .

ш —

 

 

ы

 

э

ю . . ~

я

Задача 11.6. Напишите функцию, которая генерирует и выводит на экран всевозможные сочетания цифр и букв в пароле из 4 символов.

Задача 11.7. Напишите функцию, которая рисует на экране рамку. В качестве параметра функция получает размеры рамки и координаты левого верхнего угла.

Задача 11.8. Напишите функции, которые рисуют на экране линиями все 10 (от 0 до 9) цифр. В качестве параметра функция получает цифру и её положение на экране.

Задача 11.9. Используя задачу 11.7, напишите программу-секундомер, которая в графическом режиме отсчитывает на экране 30 секунд.

Гпава 12

Файлы

В файлах размещаются данные, предназначенные для длительного хранения. Каждому файлу приписывается используемое при обращении к нему уникальное имя. Для работы с файлами в С++ необходимо подключить стандартную библиотеку stdio.h. Все файлы можно условно разделить на две категории: текстовые и двоичные (их еще называют бинарными). Текстовые - это файлы, в которых записан только текст. Такие файлы обычно имеют расширения *.txt, *.ini, *.bat, *.log и т.д. Например, файлы, в которых содержатся исходные тексты программ, также являются текстовыми. То есть файлы с расширениями *.с, *.срр, *.pas, *.asm и т.д. можно просмотреть любым текстовым редактором, например WordPad'oM. Файлы, содержащие информацию, коды программ, рисунки, звуковые данные и т.д., являются бинарными (двоичными). Например, *.ехе, *.com, *.avi, *.dat, *.bmp - двоичные файлы. Файлы с расширением *.doc тоже относятся к двоичным, т.к. кроме текста они могут содержать и другую информацию, например, рисунки, графики, таблицы.

Прежде чем читать или записывать информацию в файл, он должен быть открыт. Это можно сделать с помощью функции fopen. Она возвращает указатель на файл. Далее в программе мы будем работать именно с указателем на файл, а не писать каждый раз имя того или иного файла. Указатель на файл необходимо объявить:

FILE *ist;

FILE - имя типа, описанное в стандартном определении stdio.h, ist - указатель на файл. Обращение к функции fopen в программе производится выражением:

ist = гореп("имя ф а й л а " , " в и д и с п о л ь з о в а н и я ф а й л а " ) ;

Необходимо указать полный путь к файлу, включая диск, например: "c:\\my_file.txt", "a:\\doc\\data.txt". Если файл находится в том же каталоге, что и программа, которая к нему обращается, то можно ограничиться именем файла и его расширением "temp.txt".

"вид использования файла" - это константа, которая определяет цель открытия

файла:

"rt" - открыть существующий текстовый файл для чтения;

"wt" - создать новый текстовый файл для записи (если файл с указанным именем

уже существует, то он будет переписан);

*

"at" - дополнить текстовый файл;

 

"rt+" - открыть существующий текстовый файл для записи и чтения;

 

"wt+" - создать новый файл для записи и чтения.

 

Здесь используются сокращения от английских слов г (read) - читать, w (write) - писать, a (add) - добавлять. Буква t (text) - означает, что мы будем работать с текстовым файлом. Если мы хотим работать с бинарным файлом, то вместо t надо написать b (binary). Например, ist = fopen("max.dat", "rb") - открывает двоичный файл max.dat из текущего каталога для чтения. Если в результате обращения к функции fopen возникает ошибка (например, файла max.dat не существует), то она возвращает указатель на константу NULL. Поэтому после каждого вызова функции fopen желательно проверять значение ссылки указателя. К примеру, так:

if(ist = fopen("max.dat", "rb")==NULL) printf("Ошибка открытия файла!");

После окончания работы с файлом его нужно закрыть. Это делается с помощью функции fclose. В качестве входного параметра ей необходимо передать указатель на тот файл, который мы хотим закрыть,

f c l o s e ( i s t ) ;

Рассмотрим другие библиотечные функции, используемые для работы с файлами

(все они описаны в файле stdio.h):

9

1. Функция putc записывает символ в файл:

p u t c f c h ,

i s t ) ;

ch - символ для записи (переменная типа char), ist - указатель на файл, возвращенный функцией fopen.

2. Функция getc читает символ из файла:

ch = g e t c ( i s t ) ;

Здесь также ch типа char, ist - указатель на файл, из которого читается очередной символ и записывается в ch. Если вызывать эту функцию в цикле, то будут последовательно прочитаны все символы из файла. При достижении конца файла функция вернет значение константы EOF (End Of File) - коноц файла.

3. Функция feof определяет конец файла при чтении двоичных данных:

s t a t u s = f e o f ( i s t ) ;

Здесь ist - указатель на файл, status - переменная типа int, в которую при достижении конца файла записывается ненулевое значение. В противном случае записывается 0.

4.Функция fputs записывает строку символов в файл. Она отличается от функции puts только тем, что в качестве второго параметра должен быть записан еще и указатель на файл. Например:

F I L E

* i s t ;

 

i s t

= fopen("my.txt",

wt" ) ;

fputs ( " П р и в е т , Вася!"

i s t ) ;

f c l o s e ( i s t ) ;

 

Записывает в файл, связанный с указателем ist строчку текста "привет, Вася!".

5.Функция fgets читает строчку символов из файла. Она отличается от функции gets только тем, что в качестве второго параметра должен быть записан еще и указатель на файл. Например:

F I L E

* р ;

c h a r

s t r [ 5 0 ] ;

р = f o p e n ( " с : W s t o r y . t x t " , " r t " ) ; f g e t s ( s t r , p ) ;

f c l o s e ( p ) ;

82

6.Функция fprintf выполняет те же действия, что и функция printf, но работает с файлом. Ее отличие в том, что в качестве первого параметра также задается указатель на файл:

FILE *р;

 

int х = 10;

 

р = f open ("а : W d a t a . t x t " , "wt") ;

 

fprintf(p, " З н а ч е н и е п е р е м е н н о й x = %i",

x ) ;

fclose(p);

*

Функция выводит строчку текста и значение переменной х, но только не на экран, как это делала функция printf, а в файл a:\data.txt.

7.Функция fscanf отличается от похожей на неё функции scanf тем, что у неё первый параметр - указатель на файл, и читает информацию она не с клавиатуры, а из файла.

FILE *р;

char str[100]; int х, у;

р = f o p e n ( " n o n a m e . c p p " , " r t " ) ; fscanf(p, "Is %i %i", &str, &x, &y); fclose(p);

Здесь мы читаем из файла строчку текста (до первого пробела) и далее два целых числа х и у.

8.При открытии файла мы автоматически оказываемся в его начале и далее перемещаемся по файлу, читая последовательно данные. А что, если нам необходимо прочитать только одно число, находящееся на 100 позиции? Или нужная информация находится в конце файла? Для этих целей существует функция fseek, которая позволяет выполнять чтение и запись с произвольной позиции файла. Она имеет вид:

fseek(ist, count, access);

Здесь ist - указатель на файл, count - номер байта относительно заданной начальной позиции, access - способ задания начальной позиции. Переменная access может принимать следующие значения:

 

0 - начальная позиция задана в начале файла;

,

 

1 - начальная позиция считается текущей;

 

 

2 - начальная позиция считается с конца файла.

 

Например:

 

 

 

 

 

 

/*

Ч и т а е т

10-ый

символ

из

файла

с у к а з а т е л е м ist

*/

fseek(ist, 10, 0 ) ;

 

 

 

 

ch = getc(ist);

 

 

 

 

 

/*

Ч и т а е т

5-ый

символ

от

конца

файла */

 

fseek(ist, - 5, 2 ) ; ch = getc(ist);

/* Читает из файла 10 символов через один и печатает их на экран */ for(i = 0; i < 10; i++)

{

fseek(ist, 2, 1 ) ; fscanf(ist, "%c", &ch); printf("%c", c h ) ;

}

Пример 12.1. Напишите программу, которая сохраняет в файл имя, возраст и вес студента, введенные пользователем в ходе выполнения программы.

int

main()

 

*

{

 

 

 

FILE

*f;

 

 

char name[15];

//

имя

int

age;

//

возраст

int weight;

//

вес

f =

fopen("x:\\<Login_Name>\\database.txt", " w t + ) ;

// создаем на диске x: файл if (f == NULL)

{

printf("Ошибка создания файла ! \ n " ) ; return 1; // выход из программы

}

/* Считываем данные с клавиатуры */ printf("Введите имя студента : " ) ;

scanf("%s",

&name);

 

printf("Введите его возраст : " ) ;

 

scanf("%i",

&age);

*

printf("Введите вес : " ) ;

 

scanf("%f", &weight);

 

/* Сохраним все это в файл */

fprintf(f, "%s \n %i \n %f", name, age, weight);

fclose(f);

// закроем файл

}

 

Пример 12,2. Напишите программу, которая считывает из файла имя, возраст и вес студента и выводит их на экран.

int main()

 

 

 

{

 

 

 

FILE *f;

 

 

 

char name[15];

//

имя

 

int age;

//

возраст

 

float weight;

//

вес

(f == NULL)

{

printf("He могу открыть файл ! \ n " ) ; return 1; // выход из программы

}

/* Считываем данные из файла */

fscanf(f, "%s %i %\", Sname, Sage, Sweight);

/* Выводим данные на экран */ printf("Имя студента : %s \n", name);

printf("Возраст : %i \n", age); printf("Вес : %f \n", weight );

fclose(f);

// закроем файл

return 0;

 

}

Пример 12.3. Напишите программу, которая посимвольно выводит на экран содержимое текстового файла:

/* Программа для чтения текстовых файлов */

FILE *f; // Указатель на файл char ch; // Читаемый символ

f = fopen("х:\\<Login_Name>\\my.txt", "rt");

while (feof (f) ===0) // цикл: пока не конец файла f, выполняем цикл

{

ch = getc(f); printf("%с", c h ) ;

}

fclose(f);

Задачи к главе 1 2 . Файлы

Задача 12.1. Напишите программу, в которой описана функция, цель которой - сообщать пользователю об ошибке открытия файла, если такая имеет место, и открывать файл, если ошибок нет. В качестве входного параметра функция принимает имя файла, введенное пользователем.

Задача 12.2. Напишите программу, которая создает файл numbers.txt и записывает в него 5 введенных пользователем чисел.

Задача 12.3. Напишите программу, которая вычисляет среднее арифметическое чисел, находящихся в файле numbers.txt.

Задача 12.4. Напишите программу, которая дописывает в файл phones.txt имя, отчество и номер телефона абонента. Информация вводится пользователем в ходе выполнения программы.

Задача 12.5. Напишите программу, которая осуществляет поиск по телефонной книге phones.txt и в случае нахождения соответствий выводит информацию об абоненте или абонентах (если совпадений несколько) на экран.

Задача 12.6. Напишите программу, которая объединяет возможности программ

«добавление в телефонный, справочник» (задача 12.4.)И «поиск в телефонной книге»

(задача 12.5.).При запуске программы выводится меню: ,

**** Телефонный справочник**** 1. Добавление 2. Поиск

3. Завершение работы Введите номер пункта меню:

Задача 12.7. Напишите программу, которая считывает изменение курса валют пары EUR/USD (значение курса и номер, которым по счету вводится значение) и записывает в файл. А потом считывает эти значения из файла и выводит на экран график дневного изменения курса.

Задача 12.8. Напишите программу, которая считывает параметры пяти эллипсов, вводимые пользователем с клавиатуры, и записывает их в файл. А потом выводит эти эллипсы на экран.

Приложение 1.Таблица кодов ASCII

»

Литература

1.Керниган Б., Ричи Д. "Язык программирования "С".

2.Азаров А. "Программирование на C/C++. Часть 1".

3.Шилдт Г. "С - для профессиональных программистов".

4.Стивен А. "Техника программирования на Turbo С".

5.Березин Б., Березин С. "Начальный курс С и С++".

6.Скляров В. "Программирование на языках С и С++".

7.Поддубная Л., Шаньгин В. "Мне нравится паскаль".

8.Шикин А. "Компьютерная графика".

9.Культин Н. "Turbo Pascal в задачах и примерах".

10.Попов В. "Turbo Pascal для школьников".

11.Дейтел X., Дейтел П. "Как программировать на С++".

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]