Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Si_2sem.doc
Скачиваний:
61
Добавлен:
20.03.2015
Размер:
677.89 Кб
Скачать

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])

};

}.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]