помогите пожалуйста. не могу скачать ms. visual studio |
Программы на языке С, состоящие из нескольких файлов
Задание 4
- Файлы hcum.h и fcum.c расположите за пределами папки проекта. Применить различные комбинации расположения файлов hcum.h и fcum.c в различных папках данного диска. Обеспечьте работоспособность программы.
- Внесите изменения в программу, чтобы она была работоспособной без заголовочного файла hcum.h.
- Напишите программу формирования накопительной суммы вещественных чисел заданного массива. Формирование исходного массива выполните по случайному равномерному закону из интервала [–X; +X], где Х – номер компьютера, на котором выполняется лабораторная работа.
- Напишите функцию для расчета накопительной суммы столбцов прямоугольной матрицы, размерность которой задается пользователем, и заполняется, например, натуральными числами.
- Напишите функцию для расчета накопительной суммы строк прямоугольной матрицы, размерность которой задается пользователем, и заполняется, например, натуральными числами.
- В программе предусмотрите вывод результатов в текстовый файл с именем compX.txt, где Х – номер компьютера, на котором выполняется лабораторная работа.
Пример 5. Напишите программу быстрой сортировки Хоара одномерного массива целых чисел с расположением функций в разных файлов [5]. Предусмотрите формирование одномерного массива случайным образом с динамическим распределением памяти.
Программный код решения примера состоит из трех файлов:
// 1-й файл с главной функцией - файл main.c #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #include <time.h> #include "hsort.h"// Созданный заголовочный файл int main (void) { int i, n; int *M;// Указатель для исходного массива int Limit = 100; time_t t; // переменная текущего времени // Рандомизация генератора псевдослучайных чисел srand( (unsigned int) time(&t)); // Для поддержки русских шрифтов setlocale(LC_ALL, ".1251"); printf("\n\t Быстрая сортировка Хоара\n"); printf("\n Введите размерность одномерного массива: "); scanf_s("%d", &n); // Выделение памяти для заданной размерности массива M = (int *)malloc(n*sizeof(int)); // Формирование случайного исходного массива for (i = 0; i < n; ++i) M[i] = -Limit/2 + rand() % Limit; printf("\n Исходный одномерный массив:\n"); for (i = 0; i < n; ++i) if (abs(M[i]) < 10) { if (M[i] < 0) printf("%4d", M[i]); else printf("%3d", M[i]); } else { if (M[i] < 0) printf("%5d", M[i]); else printf("%4d", M[i]); } printf("\n\n Отсортированный одномерный массив:\n"); QuickSort(M, n); for (i = 0; i < n; ++i) if (abs(M[i]) < 10) { if (M[i] < 0) printf("%4d", M[i]); else printf("%3d", M[i]); } else { if (M[i] < 0) printf("%5d", M[i]); else printf("%4d", M[i]); } printf("\n\n Нажмите любую клавишу: "); _getch(); return 0; }
// 2-файл - подключаемый заголовочный файл hsort.h // с прототипом функции быстрой сортировки Хоара void QuickSort(int *A, int n);
// 3-й файл - подключаемый файл my_sort.c // с кодом быстрой сортировки Хоара void QuickSort (int *A, int n) { int i, j, s; int L, R; int k, x; #define D 1000 struct stack { int L; int R; } st[D];// имитация стека s = 1; st[1].L = 0; st[1].R = n - 1; do { L = st[s].L; R = st[s].R; s--; do { i = L; j = R; x = A[(L+R)/2]; // разделяющий элемент do { while (A[i] < x) i++; while (x < A[j]) j--; if (i <= j){ k = A[i]; A[i] = A[j]; A[j] = k; i++; j--; }// end if } while (i < j); // end 3d do if (i < R) {s++; st[s].L = i; st[s].R = R;} R = j; } while (L < R);// end 2nd do } while (s != 0);// end 1st do }
Цикл do–while применен для того, чтобы тело цикла выполнялось хотя бы один раз.
Возможный результат выполнения программы показан на рис. 17.8.
Задание 5
- Произведите сборку проекта из трех предложенных файлов.
- Напишите программу с сохранением исходного массива и полученного отсортированного массива.
- Выведите результаты в текстовый файл с именем compX.txt, где Х – номер компьютера, на котором выполняется лабораторная работа. В текстовом файле массивы выведите в виде двух столбцов: исходный массив и отсортированный массив. Размер массивов не менее 10.
- Измените программу: исключите заголовочный файл hsort.h.
- Введите изменения в программу для сортировки вещественных чисел.
Пример 6. Напишите программу вычисления степенного полинома в заданной точке по схеме Горнера.
Пусть задан полином в следующем виде:
Алгоритм схемы Горнера осуществляется при помощи формулы [17.6]:
Полагая, что расчет полинома в заданной точке производится по следующей итерационной формуле [17.6]:
Для программной реализации примера примем следующий полином:
Рассчитаем значение полинома в точке
Программный код решения примера:
#include <stdio.h> #include <conio.h> #include <locale.h> // Размерность массива коэффициентов полинома #define N 5 // Главная функция int main (void) { int i; // Массив коэффициентов полинома double A[ ] = {1.0, 2.0, 3.0, 4.0, 5.0}; double x0 = 2.0, y; // Для русских шрифтов setlocale(LC_ALL, ".1251"); // Для вывода чисел с плавающей точкой setlocale(LC_NUMERIC, "English"); // Консольный заголовок printf("\n\t Применение схемы Горнера\n"); printf(" Вычисление полинома P(x) %d порядка в точке х = %1.4f:\n", N-1, x0); // Основной цикла расчета по схеме Горнера y = A[0]; for ( i = N-2; i >= 0; --i ) y = y*x0 + A[(N-1)-i]; // Вывод результата printf("\n\t P(x) = %0.4f \n", y ); printf("\n Нажмите любую клавишу (Press any key): \a"); _getch(); return 0; }
Следует обратить внимание на индексацию массива, который находится в теле цикла. В последней функции printf() использован спецификатор "\a" для подачи звукового сигнала.
Результат выполнения программы показан на рис. 17.9.
Задание 6
- Примените оператор цикла do – while вместо оператора цикла for.
- Создайте подключаемый файл, в котором реализуется схема Горнера. Предусмотрите вызов этого файла из главной функции.
- Предусмотрите ввод коэффициентов полинома с клавиатуры. Далее предусмотрите обращение к созданному файлу с реализацией схемы Горнера.
- Напишите программу символической записи на консоли заданного полинома по известным коэффициентам. Оформите этот фрагмент программы в виде подключаемого файла.
- Предусмотрите запись в текстовый файл символического представления полинома с заданными коэффициентами и значения полинома в заданной точке. Имя файла примите compX.txt, где X – номер компьютера, на котором выполняется лабораторная работа.
Контрольные вопросы
- Как рекомендуется организовать внутреннюю работу пользовательских функций по отношению к другим функциям в программах на языке С? Перечислите основные правила организации внутренней работы функций и достоинства этих правил.
- В чем заключается основное назначение заголовочных файлов ( h -файлов) в проектах языка С?
- Как следует объявить функцию, чтобы доступ к ней был невозможен за пределами файла, где она была определена?
- Как следует объявить функцию, чтобы к ней можно было обращаться из других функций проекта?
- Какие классификаторы классов памяти поддерживает стандарт языка С?
- Какой классификатор памяти используется по умолчанию в программах на языке С?
- Какие расширения можно применить к файлам, содержащим пользовательские функции?
- Как осуществляется компиляция файлов с пользовательскими функциями в программной среде Visual Studio?
- Как осуществляется подключение файлов с пользовательскими функциями, которые расположены на различных логических дисках компьютера?