Программирование циклических вычислительных процессов с варьируемым параметром цикла

Автор: Пользователь скрыл имя, 29 Ноября 2011 в 23:54, лабораторная работа

Краткое описание

Цель работы: Изучение операторов цикла в языке С++.
Задание. Составить алгоритм решения задачи согласно своему варианту. В отчете предоставить три программы с разными операторами цикла (do … while, while, for). В алгоритме и программе массивов не использовать.

Файлы: 1 файл

Отчеты.doc

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

      В отчете предоставить описание заданных методов, блок-схемы 2-х функций, реализующих методы решения, блок-схему основной функции и текст программы. Также в отчете должен быть нарисован график заданной функции с интервалом изоляции корня.

      Вариант 3.

    Уравнение Методы
    3 x2-20sin(x)=0 3,4
 
    1. Описание  заданных методов.
    1. Метод касательных.

      При решении нелинейного уравнения  методом касательных задаются начальное значение аргумента x0 и точность ε. Затем в точке(x0,F(x0)) проводим касательную к графику F(x) и определяем точку пересечения касательной с осью абсцисс x1. В точке (x1,F(x1)) снова строим касательную, находим следующее приближение искомого решения x2 и т.д. Указанную процедуру повторяем пока |F(xi)| > ε. Для определения точки пересечения (i+1) касательной с осью абсцисс воспользуемся следующей формулой . Условие сходимости метода касательных F(x0)∙F''(x0)>0.

    1. Метод простой итерации.

      При решении нелинейного уравнения  методом итераций воспользуемся  записью уравнения в виде x=f(x). Задаются начальное значение аргумента x0 и точность ε. Первое приближение решения x1 находим из выражения x1=f(x0), второе - x2=f(x1) и т.д. В общем случае i+1 приближение найдем по формуле xi+1 =f(xi). Указанную процедуру повторяем пока |f(xi)|>ε. Условие сходимости метода итераций |f'(x)|<1.

    1. Изоляция корня.

    Корни функции лежат вблизи точек х=0 и х=3.

 

    1. Блок-схема метода касательных.

 

    1. Блок-схема  метода простой итерации.

    1. Блок-схема  основной функции.

 

    1. Листинг программы.

    #include <iostream.h>

    #include <iomanip.h>

    #include <math.h>

    float funct(float x)

    {

          return (x*x-20*sinf(x));

    }

    int bystep(void)

    {

          int k;

          float xk,eps;

          cout<<"Vvedite nachalnoe pribligenie x0: ";

          cin>>xk;

          cout<<"Vvedite pogreshnost eps: ";

          cin>>eps;

          k=1;

          do

          {xk=funct(xk);//простая итерация

           k++;

          }while((fabs(funct(xk))>eps)&&(k<10000));//условие заершения

          if (k<10000)

          cout<<"Null function="<<xk<<", Kol-vo shagov= "<<k<<endl;

          else

          cout<<"Metod ireraciy ne shoditsa"<<endl;

          return 0;

    };

    int kasat(void)

    {

          int k;

          float xk,eps;

          cout<<"Vvedite nachalnoe pribligenie x0: ";

          cin>>xk;

          cout<<"Vvedite pogreshnost eps: ";

          cin>>eps;

          k=1;

          do

          {xk=xk-funct(xk)/(2*xk-20*cosf(xk));//приближение по методу

            k++;

          }while((fabs(funct(xk))>eps)&&(k<10000));

          if (k<10000)

          cout<<"Null function="<<xk<<", Kol-vo shagov= "<<k<<endl;

          else

          cout<<"Metod kasatelnix ne shoditsa"<<endl;

          return 0;

    };

    int main(void)

    { int sp;

          do{

          cout<<"1 - Metod iteraciy"<<endl;

          cout<<"2 - Metod kasatelnix"<<endl;

          cout<<"Other - exit"<<endl;

          cin>>sp;

          if (sp==1) bystep();

          else if (sp==2) kasat();

          }while((sp>0)&&(sp<3));

          return 0;

    }

 

    1. Контрольный расчет.

 

Лабораторная  работа №8

Тема  «обработка одномерных массивов»

      Цель  работы: Изучение одномерных массивов в языке С++. Знакомство с основными алгоритмами работы с одномерными массивами– определение суммы, произведения элементов, поиска максимального или минимального элемента массива.

      Задание. Составить алгоритм решения задачи согласно своему варианту и написать программу на языке С++.

      Вариант 3. В массиве x(n) найти значение максимального элемента и найти, сколько таких элементов. 

    1. Блок-схема алгоритма.

    1. Листинг программы.

    #include <iostream.h>

    #include <iomanip.h>

    #include <math.h>

    int main(void)

    {

          int i,n,x[20];

          int max,cnt;

          cout<<"Entered N: ";

          cin>>n;

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

          {

                cout<<"Entered X["<<setw(2)<<i<<"]: ";

                cin>>x[i]; 

          }

          max=x[0];//за максимум берем 1-й элемент массива

          cnt=1;

          for(i=1;i<n;i++) //рассматриваем элементы, начиная со 2-го

          {

                if (x[i]>max)//найден новый максимум

                {max=x[i]; cnt=1;

                }

                else if (x[i]==max) cnt++; //при повторе увеличиваем кол-во

          }

          cout<<"Max(X)="<<max<<", count="<<cnt<<endl;

          return 0;

    }

    1. Контрольный расчет.

 

 

Лабораторная  работа №9

Тема  «Указатели и динамические массивы. Использование указателей в качестве аргументов функций»

      Цель  работы: Знакомство с указателями в С++. Изучение одномерных динамических массивов в языке С++. Знакомство с функциями, возвращающими несколько значений. Рассмотрение на примерах, как указатели используются в качестве параметров функций.

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

      Вариант 3. Заданы два целочисленных массива y(k) и z(m). Определить в каждом массиве среднее арифметическое простых двухзначных чисел. Если таких чисел в массиве больше двух, то удалить их из соответствующего массива. В программе написать функции: вычисления среднего арифметического простых двухзначных чисел в массиве и их количества, удаления элемента. 

      
  1. Блок-схема  функции вычисления среднего арифметического и количества.

 

  1. Блок-схема  функции удаления элемента.

 

  1. Блок-схема  главной функции.

  1. Листинг программы.

    #include <iostream.h>

    #include <iomanip.h>

    #include <math.h>

    void del(int *a, int *na, int ii)//передаем ссылку на массив, ссылку на кол-во элементов массива, номер удаляемого элемента

    {int i;

     for(i=ii+1;i<na[0];i++)

      a[i-1]=a[i];// выполняем сдвиг элементов на 1-у позицию влево

    *na -=1;//уменьшаем кол-во элементов массива

    }

    int prost(int x)//проверяем число-простое?

    {int i;

     for(i=2;i<x;i++) //число не является простым, если остаток от

            if (x%i==0) return 0;//от деления на число равен 0

     return 1;

    }

    int sred(int *a, int na, int *k, float *summ)//передаем ссылки на массив и на кол-во элементов; ссылки на переменные для результатов

    {int i,cura;

    *summ=0;*k=0;

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

    {cura=abs(a[i]);

            if ((cura>10)&&(cura<99))//двузначное число(10, 99– не простые)

            {if (prost(cura))

            {   *summ+=a[i];//увеличиваем сумму

                  *k +=1;//увеличиваем счетчик

            }  } }

     if (*k>1) *summ/=*k;//находим среднее арифметическое

     return 0;

    }

    int main(void)

    { int *y, *z;

          int i,k,m,*ky,*kz;

          float *my, *mz;

          cout<<"Vvedite razmer Y:";

          cin>>k;

          y=new int[k];//выделяем память для массива

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

          {cout<<"Entered Y["<<setw(2)<<i<<"]= ";

           cin>>y[i]; }

          ky=new int;//памыть для

          my=new float;//результатов

          sred(y,k,ky,my);

          cout<<"Array Y"<<endl;

          for(i=0;i<k;i++)//выводим исходный массив

         cout<<setw(8)<<y[i];

          if (ky[0]>0)//выводим среднее и количество простых

Информация о работе Программирование циклических вычислительных процессов с варьируемым параметром цикла