ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем Лабораторная работа 1 Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных.

Презентация:



Advertisements
Похожие презентации
Процедурный подход к программированию Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
Advertisements

ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем Методические указания к лабораторной работе 1 Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Практическое занятие Ввод-вывод информации Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем Лабораторная работа 2 Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных.
Время жизни и области видимости программных объектов Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ.
ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем УКАЗАТЕЛИ Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем.
Лабораторная работа 7. Работа с динамической памятью, строками и файлами.
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ Работа с ОС GNU/Linux в терминальных классах Кафедры ВС Старший преподаватель Кафедры ВС, к.т.н. Поляков Артем.
Лекция 2 Функции библиотек языка C. stdio.h Заголовочный файл стандартной библиотеки языка C. Содержит определения констант, объявления функций и типов.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 2 Время жизни и области видимости программных объектов (весенний семестр 2012 г.) Доцент Кафедры вычислительных.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 1 Процедурный подход к разработке программ (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем,
Файловый ввод-вывод Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ"
Практическое занятие Вводное занятие Преподаватели: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем Подготовка входных данных Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных.
Лекция 11 Файлы. Точного определения файла не существует. Файлом может быть: Объект файловой системы (файлы, папки и т.д.) Устройство ввода/вывода (клавиатура,
Массивы Материалы к урокам по программированию. МАССИВ это УПОРЯДОЧЕННАЯ последовательность данных ОДНОГО ТИПА. Массивы относятся к структурированным.
Часть 1: «Основы программирования». Содержание Основные понятия. Структура программы. Ввод-вывод Программирование циклов. Операторы цикла while, for и.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Транксрипт:

ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем Лабораторная работа 1 Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем ПРОГРАММИРОВАНИЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ

Файловый путь © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 2 Путь (англ. path) – набор символов, описывающий расположение файла или директории в файловой системе. Расположение задается перечислением директорий и (возможно) указанием файла. В UNIX-подобных операционных системах разделительным знаком при записи пути является символ "/" (слэш). В ОС Windows – символ "\" (обратный слэш). Примеры: ОС Windows: C:\Windows\System32\calc.exe ОС GNU/Linux: /usr/local/bin/gcc

Разделы жесткого диска © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 3 bin/getdoc.cgi?coll=0650&db=bks&fname=/SGI_Admin/IA_DiskFiles/ch01.html

Управление разделами © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 4 ОС Windows ОС GNU/Linux

Файловые пути в ОС Windows © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 5 Абсолютные пути: D:\Distr\7z920.exe C:\WINDOWS\ E:\autorun.inf D:\MyFiles\video\prog\C_manual.avi D:\MyFiles\video\prog\ D:\MyFiles\projects\lab1\lab1.c

Файловые пути в ОС Windows (2) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 6 Относительные пути: 7z920.exe (в D:\Distr\) WINDOWS\ (на С:\) autorun.inf (на E:\).\prog\C_manual.avi (в D:\MyFiles\video) video\prog\ (в D:\MyFiles\)..\projects\lab1\lab1.c (в D:\MyFiles\video)

Файловые пути в ОС GNU/Linux © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 7 Абсолютные пути: /usr/bin/ /bin/ls /home/alex/video /home/alex/video/prog/C_manual.avi /home/alex/video/prog /home/alex/projects/lab1/lab1.c

Файловые пути в ОС GNU/Linux (2) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 8 Относительные пути: bin/ (в /usr/) /ls (в /bin)./alex/video (в /home)./prog/C_manual.avi (в /home/alex/video/) prog (в /home/alex/video/)../projects/lab1/lab1.c (в /home/alex/video)

Файловые пути в ОС GNU/Linux (путь относительно дом. каталога) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 9 Относительно ДК тек. польз. (alex) ~/video/prog/C_manual.avi ~/projects/lab1 Относительно ДК заданного польз. ~alex/video/prog/C_manual.avi ~alex/projects/lab1

Сетевые пути © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 10 Windows (UNC): \\ \video\prog\C_tutorial.avi ; \\host.ru\video\movie\hobbit.avi GNU/Linux (URL): ftp:// /video/prog/Java.avi ; ftp://host.ru/video/prog/Java.avi GNU/Linux (SCP): :/home/alex/video/prog/Java.avi;

Имена узлов и IP адреса © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 11 Имя узла (доменное имя. Например: IP адрес представляет собой набор из четырех целых чисел, разделенных точкой: IP = x 1.x 2.x 3.x 4, где 0 x i 255, например: , , , В рамках данной лабораторной работы будем считать, что существует только три домена верхнего уровня: ru, com и org. Использование любых других доменов недопустимо и считается ошибкой.

Cygwin © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 12 Эмулятор Linux-окружения Сygwin ( ) предоставляет пользователю возможность работы в Linux-подобной среде из операционной системы Windows.

Ограничения © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 13 Максимальная длина пути: 260 символов Запрещенные символы: : * ? " | Допустимые протоколы: http, ftp, rsync, smb Допустимые домены первого уровня: ru, com и org Допустимые IP адреса: IP = x 1. x 2. x 3. x 4, где 0 x i 255

Хранение путей в памяти программы © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 14 * Путь (англ. path) – набор символов, описывающий расположение файла или директории в файловой системе. Для хранения путей в программах на языке Си необходимо использовать строки. Учитывая приведенные выше ограничения на длину пути, определение строки выглядит следующим образом: char path[261] = "/home/alex/video/prog/C_manual.avi" path[0] == '/' path[1] == 'h' path[9] == 'x' /home/alex/video/prog/\

Ввод данных. Один путь. © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 15 Для ввода входных данных с клавиатуры необходимо использовать функцию: char *fgets(char *s, int size, FILE *stream); s – имя символьного массива size – это максимальное количество вводимых символов (261) stream = stdin (определено по умолчанию, стандартный ввод) fgets выполняет чтение до обнаружения символа \n. fgets автоматически устанавливает в конце введенных данных \0. int main() { char path[1024]; fgets(path, 1024, stdin);... } Прототип функции Позволяет указать имя функции, тип возвращаемого значения, а также тип и количество аргументов. Не позволяет: указать что именно делает функция

Ввод данных. Несколько путей. © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 16 Для ввода более длинных строк (нескольких путей) также можно использовать функцию fgets. Согласно заданию, пути должны быть разделены символом ( пробел, +, : ), который также вводится пользователем при выполнении программы. Рассмотрим несколько примеров входных данных: $./input_delim_path input delim: + input paths: /home/+/home/alex+/home/ivan/test delim is + path string is: /home/+/home/alex+/home/ivan/test $./input_delim_path input delim: (пробел) input paths: /home/test/ /bin/bash delim is path string is: /home/test/ /bin/bash

Ввод данных. Несколько путей. (2) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 17 #include #define MAXPATH 261 #define MAXCNT 10 #define MAXSIZE (MAXPATH*MAXCNT) int main() { char delim; char paths[MAXSIZE]; printf("input delim: "); scanf("%c%*c",&delim); //

Функции © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 18 Функция – это совокупность объявлений и операторов, предназначенная для решения некоторой задачи. Для обращения к функции используется ее имя. В любой программе, написанной на языке СИ, должна быть функция с именем main (главная функция или точка входа в программу), с которой начинается выполнение программы. С использованием функций в языке СИ связаны три понятия: определение функции – описание действий, выполняемых функцией; объявление (прототип) функции – задание формы обращения к функции; вызов функции;

Определение функции © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 19 int sum_count(int quant,int nums[]) { int i, sum = 0; for(i=0;i

int sum_count(int quant,int nums[]) { int i, sum = 0; for(i=0;i

Объявление (прототип) функции © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 21 int sum_count(int quant,int nums[]); { int i, sum = 0; for(i=0;i

Объявление (прототип) функции (2) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 22 Прототип необходим в тех случаях, когда вызов функции необходимо выполнить до ее определения ИЛИ если определение функции располагается в ДРУГОМ файле. int sum_count(int quant,int nums[]); // прототип..... int main(){ int mas[] = {1,2,3,4,5,6,7}; int sum = sum_count(sizeof(mas)/sizeof(int),nums); // вызов return 0; }..... int sum_count(int quant,int nums[]) // определение { int i, sum = 0; for(i=0;i

Изменение аргументов в функции © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 23 В языке си аргументы передаются по значению. Это означает, что значение из фактического параметра копируется в формальный. Все дальнейшие изменения формального параметра не затронут фактический. int sum_sub(int x, int y, int sum, int sub){ sum = x + y; sub = x – y; } int main(){ int s = 5, sm = 0, sub = 0; sum_sub(10,s,sm,sub); printf("sum = %d, sub = %d\n", sm, sub); return 0; } Изменяются только формальные параметры! sum = 0, sub = 0

Изменение аргументов в функции (глобальные переменные) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 24 Данная возможность существует, однако использование глобальных переменных не рекомендуется, так как оно ограничивает способы использования функции (недопустимы рекурсивные вызовы), а также не является потоко-безопасным (не допускает многопоточность). Требуется постоянно помнить имена глобальных переменных. #include int sum = 0, sub = 0; int sum_sub(int x, int y, int sum, int sub){ sum = x + y; sub = x – y; } int main(){ int s = 5, sm = 0, sub = 0; sum_sub(10,s,sm,sub); printf("sum = %d, sub = %d\n", sm, sub); return 0; } sum = 15, sub = 5

Изменение аргументов в функции (указатели) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 25 Указатели являются более предпочтительным вариантом, который не обладает недостатками, связанными с глобальными переменными. #include int sum_sub(int x, int y, int *sum, int *sub){ *sum = x + y; *sub = x – y; } int main(){ int s = 5, sm = 0, sb = 0; sum_sub(10, s, &sm, &sb); printf("sum = %d, sub = %d\n", sm, sb); return 0; } sum = 15, sub = 5 5 s AsAs A sm A sb smsb 105 A sm x AsAs A sum ysum A sub sub A sb

Изменение аргументов в функции (массивы) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 26 Имя массива является указателем-константой. В языке Си массивы передаются по указателю, а не по значению. Поэтому все изменения, внесенные в массив, сохраняются после завершения функции. #include int sum_sub(int x, int y, int out[2]){ out[0] = x + y; out[1] = x – y; } int main(){ int s = 5, m[2]; sum_sub(10, s, m); printf("sum = %d, sub = %d\n", m[0], m[1]); return 0; } sum = 15, sub = 5 5 s AsAs AmAm m = A m 105 AmAm x AsAs A sm A out yout

Требования © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 27 1.Программа должна иметь следующую структуру: 2.Не допускается использование глобальных переменных для возврата результатов функций. 3.Не допускается использования стандартных функций обработки строк. 4.В отчете о лабораторной работе должен присутствовать список тестовых данных, на которых проверялась корректность работы программы, и соответствующие результаты выполнения программы. 5.Набор тестов должен обеспечивать проверку поведения программы для всех классов входных данных: 1) некорректный файловый путь и превышение допустимой длины пути; 2) допустимый путь, который не удовлетворяет условию; 3) допустимый путь, удовлетворяющий условиям.