Скачать презентацию Элементы Языка СИ Массивы и связные списки Скачать презентацию Элементы Языка СИ Массивы и связные списки

ЯП Лекция 5.ppt

  • Количество слайдов: 57

Элементы Языка СИ Элементы Языка СИ

Массивы и связные списки • Списки широко используются в реальных проектах - операционных системах, Массивы и связные списки • Списки широко используются в реальных проектах - операционных системах, базах данных, но для работы с ними требуется знать, как устроена арифметика указателей. • Связные списки используются, когда требуется структура данных, размер которой заранее неизвестен.

Инициализация массива int my_array[100]; my_array[0]=1; my_array[1]=20; my_array[2]=100; Физически все 100 элементов располагаются в памяти Инициализация массива int my_array[100]; my_array[0]=1; my_array[1]=20; my_array[2]=100; Физически все 100 элементов располагаются в памяти последовательно, и индекс элемента - это смещение в блоке памяти от его начала, поэтому извлечение элемента по индексу выполняется крайне быстро. Это и есть адресная арифметика, но так как память для стандартного массива выделяется на этапе компиляции, то и модифицировать его впоследствии уже нельзя. Для выделения памяти для связного списка используется иной механизм, когда память выделяется динамически, во время работы программы. Данный тип памяти называется «куча» (heap) и добавляемые элементы физически могут располагаться в такой куче без всякого упорядочивания.

Создание связного списка на языке Си Элемент (узел) - это область памяти, в которой Создание связного списка на языке Си Элемент (узел) - это область памяти, в которой хранится ячейка связного списка. Узел односвязного списка состоит из 2 -х полей: в первом хранятся данные (это поле также называется ключом), а во втором - указатель на следующий узел. Существует специальный указатель head, указывающий на первый узел списка. Указатель head – это отдельная переменная, не принадлежащая списку. Последний узел в списке указывает на NULL, и для него тоже создается специальная переменная - указатель tail. Если первый элемент указывает на NULL, то это будет пустой список. В листинге 2 приведена структура для определения элемента списка: struct node { int data; struct node* next; };

 Создание списка из трех элементов // объявить три указателя на элементы списка // Создание списка из трех элементов // объявить три указателя на элементы списка // указатель head ведет на первый элемент списка struct node* head = NULL; struct node* second = NULL; struct node* third = NULL; // выделить память под элементы // метод sizeof вычисляет размер элемента // метод malloc выделяет требуемое количество памяти // установить указатели на выделенные фрагменты памяти head = (struct node *)malloc(sizeof(struct node)); second = (struct node *) malloc(sizeof(struct node)); third = (struct node *)malloc(sizeof(struct node)); // инициализировать элементы списка и связать их между собой head->data = 1; head -> next = second; second -> data = 2; second -> next = third; third -> data = 3; third -> next = NULL;

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

Пример Пример

Основы Delphi Основы Delphi

Историческая справка • Конец 60 –х Николаус Вирт, Цюрихская высшая техническая школа • 1983 Историческая справка • Конец 60 –х Николаус Вирт, Цюрихская высшая техническая школа • 1983 – основание Borland Int. (Turbo Pascal 1. 0) • 1990 - Turbo Pascal 6. 0 • 1992 - Turbo Pascal 7. 0 • 1995 – Delphi 1. 0 • 2002 - Delphi 7. 0 • 2005 - Delphi 8. 0

Основные окно среды Delphi Основные окно среды Delphi

Создание консольного приложения Создание консольного приложения

Вывод строки в консольном приложении Вывод строки в консольном приложении

Сохранение проекта Сохранение проекта

Загрузка сохраненного проекта Загрузка сохраненного проекта

Unicode (Windows NT) • 0000 -007 f ASCII • 0080 -00 ff Символы Лат. Unicode (Windows NT) • 0000 -007 f ASCII • 0080 -00 ff Символы Лат. • 0400 -04 ff Символы Кир.

Вывод кириллицы в консольный приложениях Вывод кириллицы в консольный приложениях

Вывод кириллицы в консольный приложениях Вывод кириллицы в консольный приложениях

Организация ввода/вывода Организация ввода/вывода

Пример № 1 Пример № 1

Основные процедуры и функции для работы со строками Trim(const S: string): string; Удаляет все Основные процедуры и функции для работы со строками Trim(const S: string): string; Удаляет все пробелы и управляющие символы Compare. Text(const S 1, S 2: string): Integer; Сравнение двух строк, без учета регистра Upper. Case(const S: string): string; Возвращает строку в нижнем регистре Lower. Case(const S: string): string; Возвращает строку в верхнем регистре Int. To. Str(Value: Integer): string; Преобразует целое число в строку Int. To. Hex(Value: Integer; Digits: Integer): string; Преобразует целое число в строку, соответствующую его шестнад. представ. Delete(var S: string; Index, Count: Integer); Удаляет из строки cоunt символов начиная с Index Concat(s 1 [, s 2, . . . , sn]: string): string; Возвращает объединение 2 -х и более строк

Генератор равномерно распределенных случайных чисел (ГРРСЧ) Random(x) от 0 до х a+Random(b-a) от a Генератор равномерно распределенных случайных чисел (ГРРСЧ) Random(x) от 0 до х a+Random(b-a) от a до b

Основные процедуры и функции для работы со строками Copy(s; Index, Count: Integer): string; Возвращает Основные процедуры и функции для работы со строками Copy(s; Index, Count: Integer): string; Возвращает субстроку из Count символов начиная с позиции Index. Insert(Source: string; var S: string; Index: Integer); Вставляет в строку S субстроку Source. Место вставки определяет Index Pos(Substr: string; S: string): Integer; Возвращает индекс первого вхождения символа Substr в строку S. Если такого символа в строке нет, то результат равен нулю. Lenght(S: string): Integer; Возвращает длину строки S

Перевод десятичного числа в шестнадцатеричную систему исчисления Перевод десятичного числа в шестнадцатеричную систему исчисления

Получение кода символа Получение кода символа

Сравнить две строки. Произвести объединения строк, если они не совпадают. Сравнить две строки. Произвести объединения строк, если они не совпадают.

Генерация псевдослучайной строки Генерация псевдослучайной строки

Структурные типы данных • • • Массивы Записи Файлы Множества Классы Указатели на классы Структурные типы данных • • • Массивы Записи Файлы Множества Классы Указатели на классы

Массивы Массивы

Даны два массива целых чисел. Необходимы переписать оба массива в 2 -d массив. Даны два массива целых чисел. Необходимы переписать оба массива в 2 -d массив.

Стиль XP Стиль XP

Иконка (*. ico) Иконка (*. ico)

Иконка (*. ico) Иконка (*. ico)

Иконка (*. ico) Иконка (*. ico)

Компонента String. Grid Компонента String. Grid

Компонента String. Grid Компонента String. Grid

Компонента String. Grid Col. Count - число столбцов Row. Count - число строк Fixed. Компонента String. Grid Col. Count - число столбцов Row. Count - число строк Fixed. Cols Fixed. Rows go. Editing True

Компонента String. Grid Компонента String. Grid

Компонента String. Grid. Ввод/выод данных. Компонента String. Grid. Ввод/выод данных.

Загрузка сохраненного проекта Загрузка сохраненного проекта

Компонента String. Grid. Ввод/выод данных. Компонента String. Grid. Ввод/выод данных.

Записи. • Автор • Название • Количество страниц Записи. • Автор • Название • Количество страниц

Записи Записи

Исходный текст Исходный текст

Структурные типы данных • • • Массивы Записи Файлы Множества Классы Указатели на классы Структурные типы данных • • • Массивы Записи Файлы Множества Классы Указатели на классы

Три вида файлов • Типизированные • Текстовые • нетипизированные Три вида файлов • Типизированные • Текстовые • нетипизированные

Основные процедуры • • • procedure Assign. File(var F; File. Name: string); procedure Reset(var Основные процедуры • • • procedure Assign. File(var F; File. Name: string); procedure Reset(var F [: File; Rec. Size: Word ] ); procedure Rewrite(var F: File [; Recsize: Word ] ); function Close. File(const File. Name: string): Boolean; function File. Exists(const File. Name: string): Boolean; function Eof [ (var F: Text) ]: Boolean;

Задание файлового типа • <имя> =File of <тип> • <имя> =Text. File • <имя> Задание файлового типа • <имя> =File of <тип> • <имя> =Text. File • <имя> =File;

Графика. Построение графика функции. Компонента Paint. Box Графика. Построение графика функции. Компонента Paint. Box

Установка размеров области. Установка размеров области.

Вывод прямоугольника Вывод прямоугольника

Функция рекурсивна, если она содержит одно или несколько обращений к самой себе. Функция рекурсивна, если она содержит одно или несколько обращений к самой себе.

Иконка (*. ico) Иконка (*. ico)

Основные методы холста: • • Move. To(x, y) Line. To(x, y) Text. To(x, y, Основные методы холста: • • Move. To(x, y) Line. To(x, y) Text. To(x, y, str) Pixels[x, y]