Язык программирования C++

Автор работы: Пользователь скрыл имя, 04 Мая 2013 в 09:36, курсовая работа

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

C++ - это попытка решения разработчиками языка С задач объектно-ориентированного программирования (Object Oriented Programming, OOP). Построенный на твердом фундаменте С, С++ помимо ООР поддерживает множество других полезных инструментов, не жертвуя при этом ни мощью, ни элегантностью, ни гибкостью С. С++ уже стал универсальным языком для программистов всего мира.
С++ был разработан сотрудником научно-исследовательского центра AT&T Bell Laboratories (Нью-Джерси, США) Бьярном Страуструпом в 1979 году. Первоначальное название «С с классами» было изменено на С++ в 1983 году. Начиная с 1980 года С++ претерпел две существенные модернизации: в 1985 и 1990 годах.

Содержание

1. Введение………….………………………………………………. ….…3
2. Линейное программирование …………………………………….….4
3. Примеры задач линейного программирования ……….…………..6
4. Формы записи задачи линейного программирования………..…..7
5. Свойства задачи линейного программирования…..…….….……10
6. Симплексный метод…………………………………………………...12
5. Вывод ………………………………….……………………………….11
7. Список используемой литературы…….……………………… ……12

Вложенные файлы: 1 файл

Курсовая работа.doc

— 96.00 Кб (Скачать файл)

         void main(){

int i, j;

int dimension1 = 10, dimension2 = 20;;

/*

     Создание массива

*/

 

int **pArr = new int*[ dimension1];

for (i = 0; i < dimension1; i++) pArr[i] = new int[dimension2];

 

/*

     Последовательное уничтожение двумерного массива…

*/

for (i = 0; i < dimension1; i++) delete[]pArr[i];

delete[]pArr;

         }

     Организация двумерного  динамического массива производится  в два этапа. Сначала создаётся  одномерный массив указателей, а  затем каждому элементу этого  массива присваивается адрес  одномерного массива. Для характеристик  размеров массивов не требуется константных выражений.

 

 

 

 

 

 

 

 

 

 

 

6. Вывод.

     В ходе выполнения курсовой работы была изучен язык программирования C++.

В результате работы  была разработана  программа для решения задачи линейного программирования с помощью симплекс метода Результат был представлен в виде двух симплекс-таблиц: первая – исходная симплекс-таблица, вторая – с оптимальным планом. Результат выведен на консоль. Сложность данного алгоритма– О(n)=exp(n).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6. Список используемой литературы.

 

 

1. Г. Шилдт «С++ Базовый курс» - СПб.:БХВ-Петербург. 2001.

2. С. Мейерс «Эффективное использование C++. 50 рекомендаций по улучшению ваших программ и проектов» - ДМК. 2000.

3. В.Г. Давыдов «Технологии программирования C++» - Учебное пособие. 2005.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение

//файл main.cpp

#include <cstdlib>

#include <iostream>

#include "dr.c"

#include<stdio.h>

#include<math.h>

#include<io.h>

using namespace std;

    const int n=3,m=2;

    const long AA[n][m]={

        {6,2},

        {4,3},

        {3,4}

    };

    const int B[n]={600,510,600};

    const int CC[m]={6,3}; 

int main() {

    int i,j,Bas[n];

    dr **A = new dr*[n];

    for (i = 0; i < n; i++) A[i] = new dr[m+n];

    dr *X,*Z,*C,*Cb;

    dr temp,f,temp2;

    X=new dr[n];

    Z=new dr[m+n];

    C=new dr[m+n];

    Cb=new dr[n];

 

   for(i=0; i<n;i++) for(j=0;j<m+n;j++) let(&A[i][j],0,1);

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

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

           let(&A[i][j],AA[i][j],1);

           let(&A[i][m+i],1,1);

    }

   for(i=0;i<n;i++)let(&X[i],B[i],1);

   for(j=0;j<m+n;j++)let(&C[j],0,1);

   for(j=0;j<m;j++)let(&C[j],CC[j],1);

   for(i=0;i<n;Bas[i++]=n+i);

   int indi,indj;

 

printf("Симплексная таблица:\n");

do{

           dr min;

           indi=0;indj=-1;

           let(&min,0,1);

         for(int j=0;j<m+n;j++){

                let(&Z[j],-C[j].v,C[j].n);

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

                    Cb[i]=C[Bas[i]-1];

                    mul(Cb[i], A[i][j], &temp);

                    sum(Z[j],temp,&Z[j]);

                }

         }

         let(&f,0,1);

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

             mul(X[i], Cb[i], &temp);

             sum(f,temp,&f);

         }

 

 

 

 

 

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

           printf("X");printf("%i    ",Bas[i]);

           for(int j=0;j<m+n;j++)look(A[i][j],4);

           printf("%6s","");look(X[i],4);

           printf("\n");

         }

           printf("F");printf("%6s","");

          for(int j=0;j<m+n;j++)look(Z[j],4);

           printf("%6s","");

           look(f,4);printf("\n\n\n\n");

           for(int j=0;j<n+m;j++){

             if(eqw(Z[j],min)==2){

                 let(&min,Z[j].v,Z[j].n);

                 indj=j;

             }

           }

if(indj!=-1){

           int t=0;

           while(A[t][indj].v*A[t][indj].n <= 0)  t++;

           del(X[t],A[t][indj],&min);indi=t;

           for(i=t;i<n;i++){

               del(X[i],A[i][indj],&temp2);

                if((eqw(A[i][indj],temp)==1)&&((min,temp2)==1)){

                   del(X[i],A[i][indj],&min);

                   indi=i;

                }

           }

           let(&min,A[indi][indj].v,A[indi][indj].n);

           for(int j=0;j<n+m;j++){

              del(A[indi][j],min,&A[indi][j]);

           }

           del(X[indi],min,&X[indi]);

             for(i=0;i<indi;i++){

                 let(&min,-A[i][indj].v,A[i][indj].n);

                 for(j=0;j<n+m;j++){

                     mul(min,A[indi][j],&temp);

                     sum(A[i][j],temp,&A[i][j]);}

                 mul(min,X[indi],&temp);

                 sum(X[i],temp,&X[i])

             }

             for(i=n-1;i>indi;i--){

                 let(&min,-A[i][indj].v,A[i][indj].n);

                 for(j=0;j<n+m;j++){

                     mul(min,A[indi][j],&temp);

                     sum(A[i][j],temp,&A[i][j]);

                 }

                 mul(min,X[indi],&temp);

                 sum(X[i],temp,&X[i]);

             }

             Bas[indi]=indj+1;

}

}while(indj!=-1);

for (i = 0; i < n; i++) delete[]A[i];delete[]A;

delete []X;delete []Z;

delete []C;delete []Cb;

getchar();

return 0;

}

 

 

 

 

 

 

//Файл dr.c

 

#include<windows.h>

#define dr struct drob

CONSOLE_SCREEN_BUFFER_INFO bi; HANDLE hd;

dr{

long v;

long n;

};

long nod(long a,long s);

long nok(long a,long s);

void sum( dr a, dr b, dr *c);

void cokr( dr *a);

void S_sum( dr *a, dr b);

void raz(dr a, dr b, dr *c);

void mul(dr a, dr b, dr *c);

void del(dr a, dr b, dr *c);

void look(dr a,int l);

int eqw( dr a, dr b );

void lookeqw( int znach ) ;

int cor( dr a);

void let( dr *c, long a, long b );

void swap( dr *a, dr *b);

 

long nod(long a,long s) {

    long d; =labs(a); =labs (s);

while (a!=s) {d=labs(a-s); if (a>s)  a=d;else s=d; }

return a;

}

long nok(long a,long s){

    return (long)(a*s)/nod(a,s);

}

void cokr(dr *a){

    long d;

    if(cor(*a)==1) exit(1); if(a->v==0) a->n=1; else {

    d=nod(labs(a->v),labs(a->n)); a->v/=d; a->n/=d;

    if (a->v*a->n > 0) {a->v=labs(a->v); a->n=labs(a->n); } }

}

void sum( dr a, dr b, dr *c) {

    if(cor(a)==1) exit(1);(cor(b)==1) exit(1);

    c->n=nok(labs(a.n),labs(b.n));

    c->v=(a.v*c->n/a.n)+(b.v*c->n/b.n); cokr(c);

}

void S_sum(dr *a, dr b){

    dr c;

    if(cor(*a)==1) exit(1);

    if(cor(b)==1) exit(1);

    cokr(a); cokr(&b);

    c.n = nok(labs(a->n),labs(b.n));

    c.v=((a->v)*c.n/(a->n))+(b.v*c.n/b.n);

    cokr(&c); a->n=c.n; a->v=c.v;

}

void raz(dr a, dr b, dr *c) {

    if(cor(a)==1) exit(1);

    if(cor(b)==1) exit(1);

    b.v*=-1; sum (a, b, c) ; cokr(c);

}

void mul(dr a, dr b, dr *c) {

    if(cor(a)==1) exit(1);

    if (cor(b)==1) exit(1);

    c->v=a.v*b.v;

    c->n=a.n*b.n;  cokr(c);

}

void del(dr a, dr b, dr *c) {

    if(cor(a)==1) exit(1);

    if(cor(b)==1) exit(1);

    c->v=a.v*b.n; c->n=a.n*b.v; cokr(c);

}

void look( dr a,int l){

        char sign;int znach, start, finish, len, i;

        cokr(&a);

        hd=GetStdHandle(STD_OUTPUT_HANDLE);

        GetConsoleScreenBufferInfo(hd, &bi);

        start=bi.dwCursorPosition.X;

        if (a.v==0) printf(" 0");

        else{

            znach= ((long)(float)a.v)/((float)a.n)==a.v/a.n ? 1 : 0 ,

            sign=a.v*a.n<0 ? '-' : ' ';

       

        if( znach==1) printf("%c%ld",sign,labs(a.v/a.n));

        else{ printf("%c%ld/%ld",sign,labs(a.v),labs(a.n));}

}

        GetConsoleScreenBufferInfo(hd, &bi);

        finish=bi.dwCursorPosition.X;

        len=l-(finish-start+1);

        for(i=1;i<=len;i++) printf(" ");

}

int eqw( dr a, dr b ){

    dr c; int otv; float znach;

    if(cor(a)==1) exit(1);

    if(cor(b)==1) exit(1);

    raz( a, b, &c ); cokr(&c);

    znach = (c.v==c.n ? 0:((float)c.v)/((float)c.n));

    otv = znach<0 ? 2 :( znach>0 ? 1 : 0);

    return otv;

}

void lookeqw( int znach ){

    switch(znach){

        case 0 :{printf(" = ");break;};

        case 2:{printf(" < ");break;};

        case 1:{printf(" > ");};

    }

}

int cor( dr a){

    if(a.n==0) {

    printf("Çíàìåíàòåëü äðîáè  = 0"); getchar();

    return 1; } return 0;

}

void let( dr *c, long a, long b ){

    if(b==(long)0) b=(long)1;

    c->v=(long)a;  c->n=(long)b;

    cokr(c);

}

 

void swap( dr *a, dr *b){

    dr c;

    c.v=a->v; c.n=a->n;

    a->v=b->v; a->n=b->n;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Информация о работе Язык программирования C++