Скачиваний:
9
Добавлен:
01.04.2014
Размер:
45.57 Кб
Скачать

Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники»

Кафедра программного обеспечения информационных технологий

Контрольная работа №2

(вариант 14)

по дисциплине

Конструирование программ и языки программирования

Часть 1

студентки …

факультета ФНиДО

специальности ПОИТ

зач. кн. №701021с-14

Минск 2010

Контрольная работа № 2

Файлы.

Вариант 14.

Дан файл F. Определить, являются ли два первых символа файла цифрами.

Решение задачи в СИ:

//Контрольная работа №2. Вариант 14.

//Дан файл F. Определить, являются ли два первых символа файла цифрами.

//Программа проверки первых двух симолов файла.

//Путь к папке с файлами: dir_base_file = "d:\\work\\"

#include "stdafx.h"

#undef UNICODE

#include "windows.h"

#include "stdlib.h"

void rusprint(char *string);

int prov_char(char ch);

void file_name(char *str, int maxl);

int _tmain(int argc, _TCHAR* argv[]) //главная функция программы

{

int flag1, flag2, flag_exit;

char c1, c2;

char *s, *namef, *adress;

char *dir_base_file = "d:\\work\\"; //путь к папке с файлами данных

FILE *data_base;

int maxl = 7; //максимальная длина имени файла (без расширения)

flag_exit = 0;

namef = (char*) calloc(maxl+1, sizeof(char)); //выделяем память для строки с именем файла

adress = (char*) calloc(100, sizeof(char)); //выделяем память для строки с адресом файла

s = (char*) calloc(100, sizeof(char)); //выделяем память для строки запроса

do //цикл управления работой программы

{

system("cls");

rusprint(" ПРОВЕРКА ПЕРВЫХ ДВУХ СИМВОЛОВ ФАЙЛА:\n");

printf("_____________________________________________________________________\n");

rusprint(" Введите имя файла: ");

printf("%s", dir_base_file);

file_name(namef, maxl); //функция ввода и проверки имени файла с клавиатуры

strcpy(adress, dir_base_file); //копируем путь в строку адреса

strcat(adress, namef); //копируем имя в строку адреса

if (fopen(adress, "r") == NULL) //проверяем существование файла путем его открытия

{

rusprint(" Такого файла не существует.\n");

}

else

{

data_base = fopen(adress, "r"); //если файл существует, то открываем его для чтения

c1 = fgetc(data_base); //считываем 1 символ из файла

c2 = fgetc(data_base); //считываем второй символ из файла

fclose(data_base); //закрываем файл данных

if (c1 != EOF && c2 != EOF) //если оба символа удалось считать из файла

{

flag1 = flag2 = 0;

flag1 = prov_char(c1); //проверяем первый символ

flag2 = prov_char(c2); //проверяем второй символ

if (flag1 == 0 && flag2 == 0) //если оба символа являются цифрами:

{

rusprint("\n Первые 2 символа файла являются цифрами.\n\n");

}

else

{

rusprint("\n Первые 2 символа файла НЕ являются цифрами.\n\n");

}

}

else //если не удалось считать 2 символа из файла:

{

rusprint(" Не удается считать 2 символа из файла. Проверьте содержимое файла.\n");

}

}

rusprint(" Завершить программу? (y/n): ");

scanf("%s", s); //считываем введенную строку символов

if (*s == 'y') //если введен "у", то завершаем программу; иначе - повторяем цикл

{

flag_exit = 1;

}

}

while(flag_exit == 0);

free(adress); //освобождаем память строки адреса

free(namef); //освобождаем память строки имени

free(s); //освобождаем память строки запроса

return 0;

}

void rusprint(char *string) //функция вывода на экран русских строк

{

char *strrus;

strrus = (char*) calloc(100, sizeof(char)); //выделяем память под преобразованную строку

::CharToOem(string, strrus); //перекодируем массив cимволов

printf("%s", strrus); //выводим преобразованную строку на экран

free(strrus); //освобождаем память

}

int prov_char(char ch) //функция проверки символов

{

int flag, j;

flag = 0;

j = int(ch); //преобразуем тип данных

if(j<48 || j>57) //проверяем на соответствие

{

flag = 1;

}

return flag; //возвращаем флаг

}

void file_name(char *str, int maxl) //функция считывания с клавиатуры имени файла str максимальной длинны maxl (без расширения)

{

char *s; //объявляем строку символов

int i, j, flag;

s = (char*) calloc(100, sizeof(char)); //выделяем память для строки запроса

do

{

scanf("%s", s); //считываем введенную строку символов

flag = 0;

for (i = 0; s[i] != NULL && flag == 0; i++) //посимвольно проверяем введенную строку пока нету ошибки в строке и пока не достигнут конец строки

{

if (i >= maxl && s[i] != NULL) //если превысили максимальную длинну строки, то выводим сообщение и повторяем ввод

{

flag = 1; //код ошибки 1 - превышение максимальной длины

rusprint(" Ошибка: максимальная длинна имеин файла 7 букв.\n");

rusprint(" Повторите ввод: ");

}

else //пока не привысим максимальную длину строки:

{

j = int(s[i]); //проверяем посимвольно строку на вхождение символа в заданный интервал для латинских букв

if(j<65 || (j>90 && j<97) || j>122)

{

rusprint(" Ошибка: неправильно введено имя файла, допустимы только англ. буквы.\n");

rusprint(" Повторите ввод: ");

flag = 2; //код ошибки 2 - недопустимые символы

}

}

}

}

while (flag != 0); //повторяем цикл считывания и преобразования пока есть данные об ошибке

strcpy(str, s); //копируем проверенную строку для ее передачи в другую функцию

free(s); //освобождаем память строки запроса

s = NULL;

}

Соседние файлы в папке КПЯПЧ1 Контрольная работа №2