Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
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; просмотров: 242. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |