Главная страница
Навигация по странице:

  • Модульное программирование

  • Динамические структуры данных. Списки Список

  • Задание 1

  • Задание 2

  • Графика Цель работы : знакомство с графическими процедурами и функциями. Пример: Пусть необходимо построить график циклоиды .

  • Шафеева практика С. Практикум по программированию на языке с методические указания к лабораторным работам Омск 2008 2


    Скачать 1.01 Mb.
    НазваниеПрактикум по программированию на языке с методические указания к лабораторным работам Омск 2008 2
    АнкорШафеева практика С.pdf
    Дата06.04.2018
    Размер1.01 Mb.
    Формат файлаpdf
    Имя файлаШафеева практика С.pdf
    ТипПрактикум
    #17709
    КатегорияИнформатика. Вычислительная техника
    страница5 из 7
    1   2   3   4   5   6   7
    Задание 2 (программа 11_2)
    1. В текстовом файле Т1 записана последовательность целых чисел, разделенных пробелами. Написать программу, записывающую в тексто- вый файл Т2 все положительные числа из Т1.
    2. В текстовом файле f1 записана последовательность чисел. Сформи- ровать текстовый файл f 2, содержащий все числа в обратном порядке.
    3. В текстовом файле Т1 записана последовательность чисел. Разрабо- тать программу, переписывающую в текстовый файл Т2 сначала все поло- жительные числа из Т1, нуль, затем – все отрицательные числа.
    4. В текстовом файле f 1 дана последовательность целых чисел, разде- ленных пробелами. Записать в тестовый файл F2 все положительные чис- ла, а в файл F3 - отрицательные числа и нулевые элементы.
    5. Сформировать файл из девяти строк, в первой из которых – одна единица, во второй – две двойки,…, в девятой – девять девяток.
    6. Даны два файла F1, F2. Сформировать третий файл F, в который сначала записать все элементы файла F1, а затем – элементы файла F2.
    7. Элементы каждого из заданных в двух файлах массивов X и Y упо- рядочены по возрастанию. Объединить элементы этих двух массивов в один файл F с упорядочением их по возрастанию.

    43 8. В заранее подготовленном файле K задан массив из 15 целых чисел.
    Выделить в другой файл те элементы массива K, индексы которых явля- ются степенями двойки.
    9. В текстовом файле S1 записана последовательность из N*K чисел.
    Написать программу, формирующую в файле S2 матрицу из N строк по K чисел в каждой строке.
    10. В файле W задан массив из девяти элементов. В новом файле WW сформировать массив, в котором каждому элементу будет присвоено зна- чение справа соседнего с ним. Последнему элементу присвоить значение первого.
    11. В файле D1 задана квадратная матрица вещественных чисел.
    Сформировать файл D2, в котором поменять местами первую и послед- нюю строки матрицы.
    12. В текстовом файле F подготовить последовательность целых чи- сел, разделенных пробелами. Написать программу, записывающую в тек- стовый файл FF все различные значения, встречающиеся в файле F.
    13. В файле X задан массив из 20 чисел. Упорядочить его по возраста- нию и занести в файл Y.
    14. В файле X1 задана матрица целых чисел. Сформировать файл Х2, в котором все элементы с четными номерами строки и столбца матрицы заменить нулем (стереть).
    15. Задана в файле строка текста. Выполнить все циклические сдвиги слов в заданном тексте влево. Каждый полученный при этом текст вывести в другой файл.
    16. В файле Y1 задана матрица вещественных чисел. Сформировать файл Y2, в котором строки матрицы упорядочены по убыванию элементов первого столбца.
    17. В файле дан текст из 20 символов. Напечатать сначала все цифры, входящие в него, затем латинские буквы, далее русские буквы и все ос- тальные литеры, сохраняя при этом взаимное расположение символов в каждой из четырех групп. Создать четыре новых файла, каждый из кото- рых содержит свою группу символов.
    18. Имеется текстовый файл BOOK. Написать программу, которая иг- норирует исходное деление этого файла на строки, переформирует его, разбивая на строки так, чтобы каждая строка оканчивалась точкой либо содержала ровно 40 литер, если среди них нет точки.
    19. Имеется текстовый файл T. Вывести в новый файл и напечатать первую из самых коротких его строк.
    20. Имеется текстовый файл, содержащий фразу. Написать программу, которая считывает из файла литеры до первой точки и записывает их (без точки) в другой текстовый файл, формируя в нем строки по 20 символов (в последней строке литер может быть меньше).

    44
    Лабораторная работа 12
    Структуры
    Цель работы: научиться разрабатывать и отлаживать программы с использованием комбинированного типа - «структура».
    Структура может содержать элементы разных типов.
    struct [имя_типа]
    {
    тип_1 элемент_1;
    тип_2 элемент_2;

    тип_n элемент_n;
    } [список_переменных];
    Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры, но могут быть указате- лями на него. Если отсутствует имя типа, должен быть указан список опи- сателей переменных, указателей или массивов. В этом случае описание структуры служит определением элементов этого списка. Частными ви- дами полей структуры являются побитовые поля и объединения (union).
    Пример: Разработать программу формирования списка студентов с указание М дат рождения и выборки студентов по году рождения.
    #include
    #include
    struct student //определение нового типа
    { char name [15];
    struct
    // вложенная структура (запись)
    { unsigned den,mes; unsigned int god ;
    } denRogd;
    } ;
    void main ()
    { struct student z [20]; unsigned short g, i, n; // g- год clrscr(); // очистка экрана printf("Введите количество студентов"); scanf ("%u", &n); for (i=0; i{

    45 printf("Введите имя %u студента",i
    +1
    ); scanf ("%s", z[i].name); printf ("Введите день рождения "); scanf ("%u", &z[i].denRogd.den); printf ("Введите месяц рождения"); scanf ("%u", &z[i].denRogd.mes); printf ("Введите год рождения"); scanf ("%d", &z[i].denRogd.god);
    } printf ("Введите год для поиска "); scanf ("%u",&g); printf (" Список\n"); for ( i=0; i{ if (z[i].denRogd.god==g)
    { printf ("Имя студента "); printf ("%s\n",z[i].name); printf ("Дата рождения - "); printf ("%u ",z[i].denRogd.den); printf ("%u ",z[i].denRogd.mes); printf ("%d",z[i].denRogd.god); printf ("\n");
    }
    } getch();
    }
    Задание 1 (программа 12_1)
    1. Ввести оценки студента по 5 экзаменам. Определить средний балл и подсчитать количество удовлетворительных, хороших и отличных оце- нок. Напечатать название предмета, если есть «неуд».
    2. Дан список студентов и оценка каждого на экзамене (оценки на N экзаменах). Подсчитать количество удовлетворительных оценок, хоро- ших, отличных и средний балл в группе. Напечатать фамилии неуспеваю- щих студентов.
    3. Дан список студентов группы. Заполнить его следующими сведе- ниями: фамилия, имя, отчество; имеет ли компьютер (если имеет, то какой и с какого года). Подсчитать сколько студентов имеют ПК.
    4. Сформировать список студентов группы со следующими сведения- ми: Фамилия, имя, отчество, знает ли языки программирования Turbo Pas- cal, Cи (если да, где обучался и сколько лет). Подсчитать, сколько студен- тов знают язык Си, сколько – Turbo Pascal, сколько - оба языка.

    46 5. Сформировать список студентов группы, в котором указать фами- лию (имя, отчество); город, в котором получил среднее образование (но- мер школы, если обучался в Омске). Подсчитать, сколько в группе иного- родних студентов.
    6. Сформировать запись «ключевые слова ТР»: слово и перевод. Под- считать их количество. Организовать поиск: по ключевому слову - пере- вод и наоборот.
    7. Сформировать телефонный справочник. По номеру организовать поиск владельца и наоборот.
    8. Сформировать запись «Даты - праздники». Организовать в прог- рамме ввод дат, подсчитать число праздничных дней и рабочих.
    9. Сформировать запись «английское слово-перевод». Вводя слово
    (английское или русское), найти перевод или выдать сообщение «нет в словаре». По возможности предусмотреть пополнение словаря.
    10. Сформировать запись «операторы ТР»: оператор, действие. Под- считать их количество и количество операторов имеющих повторяющиеся ключевые слова.
    11. Сформировать запись «типы ТР»: имя, тип, операции, разрешен- ные в данном типе. Подсчитать количество разных операций и вывести списки типов для каждой операции.
    12. Сформировать пополняемую базу данных «Континент - страны», в которой указать столицы, численность населения, крупные города. Ор- ганизовать поиск страны по городу, стран или городов на континенте.
    13. В файле задан список книг (автор, название, год издания). Разра- ботать программу выбора книг, выпущенных ранее заданного года.
    14. Сформировать список граждан, в котором указать фамилию, имя, отчество; адрес; профессию. Организовать в программе выборку и подс- чет граждан с одинаковой профессией.
    15. Сформировать список студентов группы, в котором указать фами- лию, имя, отчество; день, число и месяц рождения. Организовать выборки по месяцу и году рождения.
    16. Дан список студентов группы. Заполнить его следующими сведе- ниями: фамилия, имя, отчество; день, число и месяц рождения. Распе- чатать список в порядке возрастания дат рождения.
    17. Сформировать базу данных «Единицы измерения», в которой ука- зать название единицы, обозначение, назначение, соотношение. Органи- зовать поиск по любому полю.
    18. Разработать базу данных « География. Реки», в которой указать название реки, местоположение, длину, глубину.
    19. Разработать базу данных «Астрономия», в которой указать назва- ние звезды, величину, созвездие.

    47 20. Разработать базу данных «Планеты солнечной системы», в кото- рой указать название планеты, величину, удаленность, спутники.
    21. Сформировать базу данных «Химические элементы», в которой указать название элемента, формулу, группу, организовать выборки.
    22. Ввести сведения о человеке: фамилия, имя, отчество, пол, нацио- нальность, рост, вес, дата рождения.
    23. Ввести сведения о гражданине: Ф.И.О., дата рождения, ИНН, № страхового свидетельства, № мед. полиса. Запрограммировать поиск.
    24. Сформировать справочник о спортивных командах: название, го- род, число сыгранных игр, число очков, количество игроков.
    Задание 2 (программа 12_2)
    Дополнить программу 12_1 заполнением и обработкой файлов. Имя файла вводить с клавиатуры в процессе работы программы.
    Лабораторная работа 13
    Модульное программирование
    Пример. Найти соотношение между максимальными элементами для массивов А и В.
    Выделим вычисление наибольшего элемента в подпрограмму, кото- рую вынесем в отдельный модуль.
    #include
    #include
    #include "r_pos.h" // подключение модуля из текущего каталога int i;
    void main()
    { int a[8], b[8]; int s; clrscr(); printf("Введите массив A из 8 чисел типа int \n"); for ( i=0; i<8; ++i ) scanf("%d", &a[i]); printf("Введите массивB из 8 чисел типа int\n"); for (i=0; i<8; ++i) scanf("%d",&b[i]); printf("Сообщение="); printf(" max(A)/max(B) = %6.3f \n", (float)max(a)/max(b)); getch();
    }

    48
    // Интерфейсная часть модуля r_pos
    typedef int * mass; int max(mass d);
    extern int i;
    // Исполняемая часть модуля
    int max(mass d)
    { int mx; mx = d[0]; for (i=1; i<8; ++i) if (mx}
    Задание (программы 13_1 и 13_2)
    Для задач 8_3 и 9_2 разработать программы, скрыв подпрограммы в отдельном файле (модуле), использовать ссылки на переменные, объяв- ленные в другом модуле.
    Лабораторная работа 14
    Динамические структуры данных. Списки
    Список - это набор связанных между собой динамических элементов.
    Элемент односвязной динамической структуры данных состоит из двух полей: информационного и указательного и описывается типом
    «
    структура».
    Очередь – частный случай линейного односвязного списка, для которого разрешены два действия: добавление элемента строго в конец списка, а извлечение (удаление) - строго из начала (головы) очереди.
    Стек - частный случай линейного односвязного списка, для кото- рого разрешено добавлять или удалять элемент только с одного конца списка, который называется вершиной стека.
    Пример. Задать списком строку, заканчивающуюся точкой. Подсчитать число цифр в ней.
    #include
    #include

    49 typedef struct zv
    { char info; struct zv * next;
    } Zv;
    void main()
    {
    Zv * P;
    Zv * t; char sym; int k; clrscr(); printf("Vvedite stroku i tochku ");
    P=NULL; do /* заполнение стека */
    { sym=getche(); t=malloc(sizeof(Zv)); t->next=P; P=t; t->info=sym;
    } while(sym!='.'); k = 0; t = P; while ( t!=0 )
    { if ( t->info >= '0' && t-> info <= '9' ) k = k+1; t = t->next;
    } printf("\n"); printf("Цифр в строке - %d",k); getch();
    }
    Задание 1 (программа 14_1)
    1. Используя динамическую структуру список, подсчитать количество русских строчных букв в строке.
    2. Используя динамическую структуру список, проверить, является ли он упорядоченным набором чисел.
    3. Используя динамическую структуру список, подсчитать количество цифр в заданном наборе символов.

    50 4. В деке задать слово. Определить, является ли оно словом- перевертышем.
    5. Сформировать динамический список из элементов целого типа.
    Удалить из него отрицательные элементы. Распечатать исходный и ре- зультирующий списки.
    6. Найти сумму четных элементов списка, состоящего не менее чем из двух элементов.
    7. Используя динамическую структуру список, подсчитать сумму чи- сел в нем.
    8. В динамическом списке из каждой группы подряд идущих одина- ковых элементов оставить один.
    9. Используя динамическую структуру список, подсчитать количество четных чисел в заданном наборе символов.
    10. Используя динамическую структуру список, подсчитать сумму от- рицательных чисел в списке.
    11. Сформировать очередь из элементов целого типа. Четные элементы возвести в квадрат. Распечатать исходную и результирующую очереди.
    12. Используя динамическую структуру список, подсчитать количест- во положительных и отрицательных чисел в списке.
    13. Задать два динамических списка. Проверить их на равенство.
    14. Используя динамическую структуру список для хранения симво- лов, напечатать только русские буквы из текста.
    15. Используя динамическую структуру, список для хранения симво- лов, определить, является ли заданная фраза палиндромом.
    16. Сформировать динамический список из элементов целого типа.
    Определить, есть ли в списке хотя бы два совпадающих по ключевому по- лю элемента.
    17. Используя динамическую структуру очередь, перевести введенную последовательность чисел в слово, состоящее из кодов ASCII.
    18. Удалить из списка все отрицательные элементы.
    19. Используя динамическую структуру список, сохранить ряд чисел.
    Удалить повторяющиеся элементы.
    20. Построить динамический список из элементов целого типа с помощью датчи- ка случайных чисел. Найти значение среднего элемента списка.
    21. Используя динамическую структуру список, сохранить ряд чисел.
    Удалить элемент с заданным номером.
    22. Сформировать динамическую структуру «очередь», элементами которой являются цифры. Извлекая элементы из очереди, напечатать их двоичные эквиваленты.
    23. Сформировать список динамических элементов, упорядоченный по возрастанию. Включить в список новый элемент, сохранив свойство упорядоченности.

    51 24. Используя динамическую структуру стек, распечатать элементы в обратном порядке.
    25. Используя динамическую структуру "очередь", зашифровать со- держимое текста: каждый символ заменить его кодом+1.
    26. Используя динамическую структуру "стек", зашифровать содер- жимое текстового файла.
    27. Используя динамическую структуру список, сохранить ряд чисел.
    Удалить элементы с заданным ключевым полем.
    Задание 2 (программа 14_2)
    Реализовать задачу с использованием другой динамической струк- туры или придумать свою задачу, написать и отладить для нее программу.
    Лабораторная работа 15
    Графика
    Цель работы: знакомство с графическими процедурами и функциями.
    Пример: Пусть необходимо построить график циклоиды. Зададим ее математическое описание: x = a t - b sin t, y = a - b cos t, при ba - удлиненной, b = a дает обычную циклоиду.
    При разработке программы необходимо перед выводом графической информации на экран дисплея инициализировать графический режим с указанием пути к графическому драйверу, а в конце программы его сле- дует закрыть.
    Поскольку в графическом режиме работы дисплея верхняя левая точ- ка экрана имеет координаты (0,0), сместим ось 0Х на середину экрана, а ось 0У - на 10 пикселей вправо. Для наглядности увеличим график путем использования масштабных коэффициентов по каждой оси координат.
    Кроме того, нужно помнить, что координаты точки в графическом режиме могут быть только целого типа.
    С учетом вышесказанного программа построения циклоиды имеет вид
    #include
    #include
    #include
    void main()
    { int a = DETECT, b, k; float x, y, t;

    52
    initgraph(&a,&b,"C:\\TC\\BGI\0");
    setgraphmode(2); setbkcolor(0); setcolor(4); moveto(0, 240); linerel(625, 0); getch(); setcolor(2); line(10, 0, 10, 478); setcolor(5); getch(); moveto(10, 240);
    t=0.0;
    // текущее значение параметра t из задания for ( k =0; k<200; ++k )
    { x = 0.4 * t - 0.5*sin(t); y = 0.4 - 0.5*cos(t); lineto(100*x + 10, 100*y + 240); t = t + M_PI/32;
    } getch(); settextstyle(0, 0, 3); outtextxy(50, 440, "График циклоиды"); getch();
    closegraph();
    }
    Поскольку вычисляемые в программе координаты являются вещест- венными, то для их преобразования к целым значениям использована функция TRUNC().
    При разработке графических программ необходимо следить, чтобы значения координат не выходили за пределы экрана. Для этого рекоменду- ется рассчитывать коэффициенты увеличения или уменьшения, а также па- раметры смещения изображения.
    Задание 1 (программа 15_1)
    Начертить графики функций F1(x) и F2(x) для результатов, получен- ных в программе 3_2.pas. На экран должен выводиться график с надписью выводимой функции.
    Задание 2 (программа 15_2)
    Напишите и отладьте программу для одной следующих задач.

    53 1. Подготовить и отладить программу вычерчивания квадрата, впи- санного в окружность. Запрограммировать изменение цветов окружности.
    2. Организовать вывод на экран разноцветных цифр поочередно гори- зонтально и вертикально.
    3. Отладить программу вычерчивания нескольких окружностей задан- ного радиуса в произвольном месте экрана разными цветами. Предусмот- реть их мерцание.
    4. Разработать программу изображения точки, движущейся по косину- соиде (y = cos(x)).
    5. Отладить программу рисования квадрата с диагоналями, пресекаю- щимися в центре экрана. Создать иллюзию его уменьшения.
    6. Начертить на экране картинку «круги на воде».
    7. Изобразить движущийся на зрителя экран (прямоугольник).
    8. Подготовить и отладить программу изображения правильного тре- угольника, вращающегося вокруг своей (любой) медианы.
    9. Разработать программу вывода на экран компьютера пяти квадратов по углам и в середине экрана. Запрограммировать поочередный вывод их разными цветами.
    10. Разными цветами в различных точках экрана выводить надпись
    «TurboPascal» с изменением размера шрифта.
    11. Изобразить трубу, образованную разноцветными окружностями.
    12. Организовать вывод на экран названия континентов разными цве- тами в различных точках экрана готическим и обычным шрифтами.
    13. Изобразить спутник (точку), вращающийся вокруг планеты.
    14. Изобразить НЛО, приземляющийся в различных точках экрана.
    15. Организовать вывод на экран разноцветных русских букв разных размеров поочередно высвечивая или заполняя экран в хаотическом по- рядке.
    16. Отладить программу вычерчивания графиков функций y = sin(x) и y = sin(2x) разными цветами с разными осями координат.
    17. Организовать вывод на экран формул химических элементов раз- ными цветами в различных точках экрана.
    18. Начертить на экране ряд геометрических фигур: квадрат, круг, треугольник, прямоугольник, используя разные цвета.
    19. Изобразить схематично на экране движущегося человечка.
    20. Изобразить движение объекта по прямоугольной спирали.
    1   2   3   4   5   6   7


    написать администратору сайта