Лекции по "Высшая математика"

Автор: Пользователь скрыл имя, 22 Декабря 2011 в 20:19, курс лекций

Описание работы

Под табуляцией функции понимается вычисление значений функции в зависимости от аргумента, который меняется в определенных пределах с постоянным шагом. Решение задачи табуляции является достаточно характерным примером реализации циклического алгоритма.

Содержание

1. Табуляция функции 4
1.1. Практические задания 6
2. Методы нахождения корней уравнений 8
2.1. Метод половинного деления 8
2.2. Итерационные методы 10
2.3. Практические задания 15
3. Вычисление определенного интеграла 16
3.1. Практические задания 19
4. Вычисление конечных сумм 20
4.1. Практические задания 24
5. Индексированные переменные 26
5.1. Одномерный массив 26
5.2. Практические задания 30
5.3. Двумерный массив 32
5.4. Практические задания 38
6. Решение системы линейных алгебраических
уравнений методом Гаусса 41
6.1. Практические задания 44
Литература 46

Работа содержит 1 файл

Методички 1 курс.doc

— 678.00 Кб (Скачать)

5. ИНДЕКСИРОВАННЫЕ  ПЕРЕМЕННЫЕ

5.1. Одномерный массив

  Упорядоченное множество данных может быть представлено в виде так называемых регулярных типов или массивов. Для задания массива требуется указать его имя (идентификатор), тип входящих в него элементов, размер, равный количеству элементов в массиве, а также размерность (вектор, матрица, трехмерный массив и т. д.), равную количеству индексов, необходимых для доступа к отдельным элементам.

  Объявление  массива сводится к указанию типа его элементов и количества элементов. Общий вид оператора объявления индексированных переменных имеет вид: 

  идентификатор_типа имя_массива [размер][размер] 

    Например, объявление массива целых  чисел размером в 10 элементов имеет следующий вид: 

      int x[10];

   

  Размер  массива задается целой константой. Тип элемента массива может быть любым.

  Размер  массива, определяемый количеством  его элементов, в Си фиксируется при его объявлении в программе и не может быть изменён в процессе её выполнения. Отсюда совет: при написании достаточно общего (массового) алгоритма следует выбирать границы массива с запасом, помня о том, что при компиляции программы под используемый в ней массив выделяется не более 1 Мбайт оперативной памяти (для приложений MS DOS не более 64 Кбайт).

  Преимущества  использования в программах массивов, к элементам которых обращаются с помощью индексированных переменных, наиболее явно проявляются в том случае, когда необходимо производить одинаковые операции над большим количеством чисел. Так как элементы массива обозначаются одним именем и различаются лишь местоположением (индексом), алгоритм решения таких задач основывается на циклическом повторении некоторой операции, причем параметром цикла, как правило, является индекс. В тексте программы для обозначения элементов массива используется имя массива, а далее в квадратных скобках указывается индекс элемента массива. Индексация элементов массива в программах, написанных на языке Cи, всегда начинается с 0.

  Пример  подобного алгоритма - ввод и вывод одномерных массивов с известным количеством элементов. Ниже представлен листинг программы подсчета итоговой суммы заработной платы некоторого подразделения: 

/* Ввод  и вывод массива */

  #include <stdio.h>

  #include <stdlib.h> 

  int main()

  {

        const int NumOfMen=30; 

        unsigned int n,s,i;

        unsigned int Salary[NumOfMen];

        printf("Количество сотрудников?\n");

        scanf( "%u", &n);

        if ((n==0) || (n>NumOfMen))

          {

            printf("Ошибка! Недопустимое количество  сотрудников?\n");

            exit(4);

           }

        printf("Вводите значения зарплат \n ");

         s=0;

/*  Цикл  ввода и суммирования  */

        for(i=0;i<n;i++)

            {

               printf(" %u -я зарплата: ",i+1);

               scanf("%u", &Salary[i]);

               s = s+Salary[i];

            }                               

                                                           /* Цикл вывода в строку  */

          for(i = 0; i< n; i++)

              printf( "%u \t \n",Salary[i]); /*При выводе разделяем числа

                                                                символами табуляции */

       printf("Сумма  зарплат равна  %u: \n", s);

       rewind(stdin); /* рекомендуется вызывать  перед использованием 
                 фунций символьного ввода из стандартного файла ввода */

        getchar();                /*  Задержка экрана пользователя  */

  } 

  Весьма  часто приходится сталкиваться с  задачей упорядочения числовых массивов, т. е. расположения элементов исходного  набора данных в порядке возрастания  или убывания. Эта задача, поставленная в  общем виде, называется задачей сортировки.

  Сортировка - перегруппировка заданного множества объектов в некотором определенном порядке. Цель сортировки - облегчить поиск отдельных элементов в таком отсортированном множестве (телефонная книга, оглавление книги, библиотеки, словари, склады и т. д.).

  Основным  условием алгоритма сортировки обычно является экономное использование доступной памяти: перестановки должны выполняться на том же месте, где расположен исходный массив, и количество дополнительно используемых ячеек памяти должно быть минимально. В качестве примера приведена программа сортировки методом “пузырька” или, по-другому, методом прямого обмена.

  Метод основан на поочерёдном сравнении  стоящих рядом элементов массива; если порядок в паре неправилен, элементы меняются местами. Для выполнения такой перестановки требуется одна дополнительная ячейка памяти.

  Ниже  приведен листинг программы сортировки по убыванию числового одномерного массива, написанный на языке Си. 

 

                 /* Программа сортировки методом  пузырька  */ 

  #include <stdio.h>

  #include <stdlib.h> 

  int main()

  {

        int   i, j, j1, n, n1;

       double t, x[1000];

       printf("Введите длину последовательности: ");

       scanf("%d", &n);

       for(i = 0; i< n; i++)

         {

            printf(" Введите %d -й элемент: ", i);

            scanf("%lf", &x[i]); 

          }

       printf("Для запуска сортировки  нажмите (Enter)");

       getchar();

       n1= n-1;

       for(i = n-1; i>=0; i--)

           for(j = 0; j<i; j++)

         {

                 j1 = j+1;

                if (x[j] < x[j1])

               {  /*  перестановка элементов */

                   t = x[j];

                   x[j] = x[j1];

                   x[j1] = t;

                }

              }

           printf("Сортировка закончена. Перед  просмотром результата \

                       задайте число элементов в строке вывода ");

             scanf("%d", &j);

            for(i = 0; i< n; i++)

               {

                printf("%8.1lf", x[i]);

                if ((i+1)% j == 0) printf("\n");

                     }           

            printf("Для завершения нажмите (Enter)");

            rewind(stdin);  /*рекомендуется вызывать  перед использованием 
            фунций символьного ввода из стандартного файла ввода */

        getchar();

      return 0;

  }

5.2. Задания на одномерный массив

  1. Из последовательности чисел а1, а2, ..., аn выбрать отрицательные элементы, подсчитать их число и переписать подряд в массив x.
  2. Вычислить компоненты векторов а(а1,а2,...,аn) и b(b1,b2,...,bn) по формулам и вывести на печать. Из векторов  a и b  получить вектор с(a1, b1, a2, b2, ..., an, bn), компоненты которого пронумеровать по порядку от 1 до 2n.
  3. Из последовательности чисел y1, y2, ,…, yn выбрать элементы, делящиеся на 3. Подсчитать их число и вывести их порядковые номера в массиве.
  4. Вычислить значения компонент вектора x(x1, x2, …, xn) по формуле   

    Выбрать из массива x положительные компоненты и переписать их в массив b(b1,b2,...,bn).

  1. Из последовательности чисел а1, а2, ..., аn  выбрать числа, равные нулю, подсчитать их число, а оставшиеся числа вывести в одну строку.
  2. Вычислить компоненты вектора x(x1, x2, …, xn) по формуле   
    xi=a∙sin(0,5∙i)+b∙cos(i-1), где а=2,2, b=-0,4, и вывести на печать. Далее преобразовать полученный вектор следующим образом: все отрицательные компоненты увеличить на 0,5, а положительные заменить единицей. Преобразованный вектор вывести на экран.
  3. Дан ряд чисел xi (i = 1, 2, …, n). Вычислить сумму элементов с нечетными и сумму элементов с четными номерами.
  4. Дан ряд чисел  x(x1, x2, …, xn). Выбрать из этой совокупности целые числа и для них подсчитать М по формуле .
  5. Дан вектор y( y1, y2, ,…, yn). Найти и вывести максимальную компоненту и ее порядковый номер.
  6. Дан ряд чисел b1, b2,..., bn. Выбрать из них положительные числа и найти среднее арифметическое квадратов этих чисел.
  7. Дана числовая последовательность x1, x2, …, xm. Разбить ее на последовательность b1, b2, ..., bk отрицательных и последовательность  
    а1, а2, ..., аn   неотрицательных чисел (n=k+m).
  8. Дан ряд чисел yi (i = 1, 2, …, n). Записать в него +1 вместо максимального элемента и -1 вместо минимального элемента массива y.
  9. Дан вектор x(x1, x2, …, xn). Пронормировать его по своей длине, т. е. получить новые компоненты по формуле .
  10. Даны два вектора a и b по n компонент в каждом. Найти максимальную разность соответствующих компонент и порядковый номер этих компонент.
  11. Дан вектор c(c1, c2, …, cn). Найти наибольшую и наименьшую из компонент вектора и переставить их местами.
  12. Дан произвольный ряд чисел ak (k = 1, 2, …, n). Подсчитать число перемен знаков  в этом ряду (числа, равные нулю, пропускать).
  13. Вычислить компоненты вектора c(c1, c2, …, cn), каждая компонента которого определяется по формуле ci=bi аi∙ Далее переписать вектор c в обратном порядке. Вектора a и b заданы.
  14. Дана последовательность чисел x1, x2, …, xn. Выбрать из них принадлежащие отрезку [a, b] и записать в виде компонент вектора p.
  15. Дана последовательность чисел с1, с2, …, сn. Записать в виде компонент вектора s те числа последовательности, для которых |ck| >35, и вывести их число.
  16. Даны: n точек, координаты которых заданы массивами x(x1, x2, …, xn) и y(y1, y2, …, yn), и окружность, определяемая формулой . Вывести номера точек, лежащих внутри окружности, и подсчитать их количество.

5.3. Двумерный массив

Некоторые замечания по поводу обозначения массивов в Cи

  Существует  большой класс задач, решение  которых основано на знании выводов  векторной алгебры (математики). Наиболее известной из таких задач является разрешение системы линейных уравнений. Для того, чтобы с наименьшими затратами можно было перенести решения (формулы с индексными переменными) различных задач из векторной алгебры в программу, разработчики языка Си стремились максимально сблизить форму записи математических выражений на этом языке к той, что используется в математике. Так, если в математике для описания элемента матрицы A используется запись типа   aij, то в Си для описания элемента двумерного массива - a[i][j].

Ввод  и вывод двумерных  массивов

  Первое, с чем сталкивается программист при работе массивами, - это их ввод и вывод. В Си для ввода элементов массива через клавиатуру предлагается функция scanf(), а для вывода на экран - функция printf(). Следует, однако, добавить, что среди стандартных функций ввода/вывода существуют и другие способы ввода/вывода массивов. Один из таких способов ввода будет рассмотрен ниже.

  Рассмотрим  ввод двумерного массива с помощью клавиатуры подробнее. Для этого нам понадобится использовать два цикла, первый из которых для определенности назовем циклом по строкам, а второй цикл, вложенный в первый, - циклом по столбцам. Понятно, что для компьютера порядок перебора элементов безразличен, однако для "придания вводу массива больших человеческих черт" будет использован указанный выше порядок, т. е. сначала вводятся элементы первой строки, затем второй, далее третьей и т. д. - точно так же как это делается при написании обычного текста. Кроме того, для определенности примем, что в обозначении массива a[i][j] (так же, как в математике) значение первой переменной i будет соответствовать номеру строки, а второй переменной j - номеру столбца. В качестве примера ввода и вывода элементов массива может служить следующая программа: 

  #include <stdio.h>

  #include <stdlib.h> 

  int main()

  {

Информация о работе Лекции по "Высшая математика"