- •Лабораторные работы. Сборник задач.
- •Оглавление
- •Часть 1. Лаборатоные работы
- •Работа со структурами и объединениями …………………………………….91
- •3 Задача
- •4 Задача
- •5 Задача
- •6 Задача
- •Дополнительное условие:использование цикла с предусловием.
- •1 Задача
- •2 Задача
- •Дополнительное условие: программа написана без использования функции.
- •Дополнительное условие: программа написана с использованием функций.
- •3 Задача
- •Дополнительное условие: программа написана без использования функции.
- •Дополнительное условие: программа написана с использованием функции.
- •4 Задача
- •Дополнительное условие: программа написана без использования функции
- •Дополнительное условие: программа написана с использованием функции.
- •Самостоятельная работа
- •Лабораторная работа №3
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •Лабораторная работа №6
- •1 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •4 Задача
- •Синтаксический анализатор
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •3 Задача
- •Работа с каталогами
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •2 Задача
- •1 Задача Реализовать очередь, состоящую из целых чисел
- •Комментарий:
- •2 Задача
- •1 Задача
- •Идеально-сбалансированные деревья
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •1 Задача
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности.
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •Работа с несколькими массивами
- •Преобразование массива
- •Изменение элементов массива
- •2 Уровень сложности Формирование массива и вывод его элементов
- •Анализ элементов массива
- •Преобразование массива
- •Изменение элементов массива
- •Удаление и вставка элементов
- •Серии целых чисел
- •3 Уровень сложности Множества точек на плоскости
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •Not простое_логическое
- •(Простое_логическое знак_операции простое_логическое)
- •Построить синтаксический анализатор для понятия предложение.
- •1 Уровень сложности
- •2 Уровень сложности
- •1 Уровень сложности
- •Примеры:
- •Двусвязные списки
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
Работа с каталогами
Цель: закрепление на практике знаний работы с библиотекой <direct.h>.
Методические рекомендации: лабораторная работа рассчитана на 2 часа и состоит из анализа одного разобранного задания и решения самостоятельной работы.
Обязательное зачетное задание.
Необходимый уровень знаний:
работа с функциями.
Задача
Определить находится ли файл с заданным именем на данном компьютере. Если находится, вывести путь к файлу.
Вывести все логические диски на данном компьютере и информацию о файле с заданным именем.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//
#include <direct.h>
// библиотека для работы с методами ввода-вывода
#include <io.h>
// библиотека для работы с временем
#include <time.h>
// вывод меню выбора на экран
void printMenu()
{
printf("\n");
printf("\n=================================");
printf("\n============ MENU ===============");
printf("\n=================================\n");
printf("1. Search file on local drives\n");
printf("2. Show all avaliable drives\n");
printf("3. Show file info\n");
printf("4. Exit\n");
printf("\n");
printf("Your choice: ");
}
// поиск файла на дисках
void findFile(char* name)
{
char pathbuffer[_MAX_PATH];
char envvar[] = "PATH";
// ищет файл на диск и записывает в переменную pathbuffer путь к нему
_searchenv( name, envvar, pathbuffer );
if( *pathbuffer != '\0' )
{
printf( "Path for %s:\n%s\n", name, pathbuffer );
}
else
{
printf( "%s not found\n", name );
}
}
// получение списка локальных дисков
void getLocalDrives()
{
int drive, uErr;
// хранит информацию о логическом диске
struct _diskfree_t df = {0};
printf( "Available drives are:\n" );
// возможно иметь не более 26 логических дисков
for( drive = 1; drive <= 26; drive++ )
{
// получение информации о диске
uErr = _getdiskfree(drive, &df);
// если информация получена - диск доступен, в противном случае нет
if (uErr == 0)
{
printf( "%c:\\\n", drive + 'A' - 1 );
}
}
}
// форматирование даты dateпо маске задаваемойformatter
char* format(char *formatter, time_t* date)
{
char *str = (char*) malloc (128 * sizeof(char));
strftime(str, strlen(str), formatter, localtime(date));
return str;
}
// получение информации о файле
void getFileInfo(char* name)
{
// структура с информацией о файле
struct _finddata_t fdate = {0};
// строка форматирования даты дд.ММ.гггг чч:мм:сс
char *formatter = "%d.%m.%y %H:%M:%S";
// ищет первый соответствующий файл на дисках
if (_findfirst(name, &fdate) != -1)
{
// выводит информацию о файле -
// имя, размер, дату создания, доступа и последнего изменения
printf("About:\n");
printf("name: %s\n", fdate.name);
printf("size: %.3lf Kb\n", ((double) fdate.size) / ((double)1024));
printf("created: %s\n", format(formatter, &fdate.time_create));
printf("accessed: %s\n", format(formatter, &fdate.time_access));
printf("modified: %s\n", format(formatter, &fdate.time_write));
}
else
{
printf("No files been founded");
}
}
int main (int argc, char* argv[])
{
bool exit = false;
int choice;
while (!exit)
{
printMenu();
scanf("%d", &choice);
char* name = (char*) malloc (255 * sizeof(char));
switch(choice)
{
case 1:
printf("\n\n-------------------------\n");
printf("Input file name for search: ");
scanf("%s", name);
findFile(name);
break;
case 2:
printf("\n\n-----------------------\n");
getLocalDrives();
break;
case 3:
printf("\n\n-----------------------------\n");
printf("Input file name to view info: ");
scanf("%s", name);
getFileInfo(name);
break;
case 4: exit = true;
break;
}
free(name);
}
return0;
}