Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

II. Экспериментальный раздел




 

Пример 1. Составим процедуры ввода и вывода данных. Пусть покупается n разных товаров. Известна цена ci и количество mi каждого товара. Требуется вычислить общую стоимость приобретенного товара.

#include <iostream.h>;

#include <conio.h>;

#include <math.h>;

#include <STDLIB.H>;

#include <string.h>;

const NomEl = 100;

double* c1;

int* k1;

 

int Data(double* &c, int* &k);

void Print(double* c, int* k,int n);

void Sum(double* c,int* k,int n, double& s1, int& s2);

 

/*Основная программа*/

void main(void)

{ int s2; double s1; int n;

n = Data(c1,k1);

Print(c1,k1,n);

Sum(c1,k1,n,s1,s2);

cout<<endl<<"Itogo:"<<s1<<" "<<s2;

getch();

}

/*подпрограмма ввода массива */

int Data(double* &c, int* &k)

{ char text1[60]=" вводите последовательно цену и количество товара";

char text2[60]="Отрицательное значение одной из этих величин – конец покупок!";

int i;

cout<<endl<<text1<<endl<<text2; i=0;

c = new double[NomEl];

k = new int[NomEl];

 do { i++;

         cout<<endl<<"cena=?"; cin>>c[i];

         cout<<"kolichestvo=?"; cin>>k[i];

} while ((c[i]>0.0)&&(k[i]>0));

return i-1;

}

/*подпрограмма вывода массива */

void Print(double* c, int* k,int n)

{

char txt1[20]="----------------";

char txt2[20]=" N cena kol-vo";

int i;

cout<<txt1<<endl<<txt2<<endl<<txt1<<endl;

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

{

         cout<<endl<<i<<" "<<c[i]<<" "<<k[i]<<endl;

}

cout<<txt1;

};

/* подпрограмма суммирования данных*/

void Sum(double* c,int* k,int n, double& s1, int& s2)

{ int i;

s1=0.0; s2=0;

for (i=1; i<=n;)

{

         s1=s1+c[i]*k[i]; s2=s2+k[i];i++;

}

};

 

Теперь дополним нашу программу процедурами вставки и удаления элементов в массиве. Для осуществления вставки числа z1 в массив z[i] после номера k необходимо:

первые k элементов сохранить без изменения;

все элементы массива, начиная с (k+1) – сдвинуть вправо;

на место элемента (k+1) записать число z1.

/* подпрограмма вставки элемента*/

void Insert(int k,int m1,double z1, double* z, int* m, int &n)

{int i;

  for (i=n; i>=k+1; i--)

  { z[i+1]=z[i]; m[i+1]=m[i];}

  z[k+1]=z1; m[k+1]=m1; n=n+1;

};

 

Здесь k – номер элемента, после которого необходимо вставить числа:

        m1 – количество товара, которое добавляется и

        z1- его цена.

   Аналогично составим процедуру удаления элемента с номером k из массива, при этом все элементы, начиная с номера k, необходимо сдвинуть влево.

/* подпрограмма удаления элемента*/

void Delete(int k, double* z, int* m, int &n)

  { int i;

  n=n-1;

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

{

 z[i]=z[i+1]; m[i]=m[i+1];

}

};

 

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

 

#include <iostream.h>;

#include <conio.h>;

#include <math.h>;

#include <STDLIB.H>;

#include <string.h>;

const NomEl = 100;

double* c1;

int* k1;

 

int Data(double* &c, int* &k);

void Print(double* c, int* k,int n);

void Sum(double* c,int* k,int n, double& s1, int& s2);

void Insert(int k,int m1,double z1, double* z, int* m, int &n);

void Delete(int k, double* z, int* m, int &n);

 

/*Основная программа*/

void main(void)

{ int s2; double s1,ci; int n,j,mi;

 

n = Data(c1,k1);

Print(c1,k1,n);

Sum(c1,k1,n,s1,s2);

cout<<endl<<" Итого:"<<s1<<" "<<s2<<endl;

cout<<endl<<" Добавить покупки после номера j="; cin>>j;

cout<<"цена =?"; cin>>ci;

cout<<"количество=?"; cin>>mi;

Insert(j,mi,ci,c1,k1,n);

Print(c1,k1,n);

Sum(c1,k1,n,s1,s2);

cout<<endl<<" Итого:"<<s1<<" "<<s2<<endl;

cout<<endl<<"Какую строку удалить =?",j; cin>>j;

Delete(j,c1,k1,n);

Print(c1,k1,n);

Sum(c1,k1,n,s1,s2);

cout<<endl<<" Итого:"<<s1<<" "<<s2<<endl;

getch();

}

 

Заметим, что также можно организовать и процедуру обмена элементами в массиве.

void Swap(double a,b);

{  double z;

z=a; a=b; b=z

};

И, при необходимости, вызывать ее в основной программе: Swap(c[k1],c[k2]);

 

Пример 2. Составим программу транспонирования матриц, вычисления произведения двух квадратных матриц

                                

и преобразования двухмерной матрицы в одномерную. Пусть элементы исходных матриц a и b задаются с помощью датчика случайных чисел.

  Program Example_102;

#include <iostream.h>;

#include <conio.h>;

#include <math.h>;

#include <STDLIB.H>;

typedef int matr[5,5];

typedef int vectr[25];

void Data(matr t);

void Print(matr t);

void Tp(matr t);

/*Основная программа*/

void main(void)

{

randomize();

matr a,b,c;

vectr d;

cout<<"massiv a";

Data(a);

Print(a);

Tp(a);

Print(a);

cout<<"massiv b"; Data(b); Print(b);

Tp(b);

Print(b);

Dv(a,b,c);

cout<<"massiv c";

Print(c);

Tr(c,d);

getch();

}

/*подпрограмма ввода массива */

void Data(matr t)

{ int i,j;

for (i=1; i<=5; i++)

for (j=1; j<=5; j++)

t[i,j]=random(21)-10;

 };

/*подпрограмма вывода массива */

void Print(matr t)

{int i,j;

cout<<"\n";

for (i=1; i<=5; i++)

{

for (j=1; j<=5; j++)

cout<<t[i,j]<<" ";

cout<<"\n";

}

}

 

/*подпрограмма транспонирования матрицы */

void Tp(matr t)

{

int i,j,n,p;

n=5;

for (i=1; i<=n-1; i++)

for (j=i+1; j<=n; j++)

{

p=t[i,j];

t[i,j]=t[j,i];

t[j,i]=p;

}

// return t;

 };

 

/* подпрограмма преобразования двумерной матрицы в одномерную*/

 void Tr(matr x ;vectr z)

{

 

int i,j,n,k;

n=5;

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

{

for (j=1; j<= n; j++)

{

k=(i-1)*n+j; z[k]=x[i,j] ; cin>>z[k];

           };

         getch();

  }

};

 

/*подпрограмма переyмножения двух матриц*/

void Dv(matr x,y, z)

{int i,j,k;

for (i=1; i<=nn; i++)

          for (j=1; j<=nn; j++)

         { s=0;

                   for (k=1; k<= nn; k++)

                   s=s+x[i,k]*y[k,j] ; z[i,j]=s

         }

geth()

}

        

Проведите отладку и тестирование программы. Дополните её процедурами вычисления определителей и обращения матриц.

 

Пример 3. Разработаем программу решения системы из трех линейных уравнений методом Крамера.

 

#include <iostream.h>;

#include <conio.h>;

#include <math.h>;

#include <STDLIB.H>;

typedef double vectr[n];                                          

typedef double matr[n,n+1];                                          

void Data(matr a);

void Print(matr a);

void Swap(double a,b);         

double Det(matr a);

/*вычисление определителя*/

double Turn(int k);

void Solve_Kram(matr a; double x);

/* подпрограмма, реализующая метод Крамера

 

/*Основная программа*/

void main(void)

{ int I; matr a; vectr z; int n=3;

   Data(a); Print(a); Solve_Kram(a,z);

   for (I=1; I<= n; I++) cout<<[“<<=’<<j];

   getch();                                                               

}.

void Data(matr a)

........................

void Print(matr a)

........................

void Swap(double a,b)

........................

 double Det(matr a)

double Turn(int k)

{   double s=0.0; int k1,k2,k3,k4;

            k1=2-k; k2=2; k3=2+k;

             for (I=1;I<= n;i++)

                {

                   s=s + a[1,k1]*a[2,k2]*a[3,k3];

                   k4=k1; k1=k2; k2=k3; k3=k4

                 };

             return(s);

          };

      {

           return(Turn(1)-Turn(-1))

      };   

 

  void Solve_Kram(matr a; double x)

{   double d; int I,j;

          d=Det(a);

      if (abs(d) < 1.0e-6 ); { cout>>’Error’; Exit };

      for (j=1; j<=n; j++)

         {

            for (I=1; I<=n; I++) {Swap(a[I,j],a[I,j+1]);}

            x[j]=Det(a)/d;

            for (I=1; I<=n; I++) Swap(a[I,n+1],a[I,j])

          };

    }.

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

 










Последнее изменение этой страницы: 2018-05-10; просмотров: 198.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...