Алгоритмізація та програмування

Автор работы: Пользователь скрыл имя, 08 Июня 2015 в 22:42, курсовая работа

Описание работы

Си - универсальный язык программирования. Он тесно связан с системой UNIX, так как был разработан в этой системе, которая, как и большинство программ, работающих в ней, написаны на Си. Однако язык не привязан жестко к какой-то одной операционной системе или машине. Хотя он и назван «языком системного программирования», поскольку удобен для написания компиляторов и операционных систем, оказалось, что на нем столь же хорошо писать большие программы другого профиля.

Файлы: 1 файл

КурсачПрограммирование.docx

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

 

 

 

 

 

 

 

 

 

 

 

 

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

 

  1. Керниган Б., Ритчи Д. Язык программирования Си. Пер. с англ., 2-е  изд., испр. —СПб.: "Невский Диалект", 2001. - 352 с: ил.
  2. Керниган Б., Ритчи Д. Язык программирования Си. Пер. с англ., 3-е  изд., испр. —СПб.: "Невский Диалект", 2001. - 352 с: ил.
  3. Холзнер С. Visual C++ 6. Учебный курс. — СПб.: Питер, 2006. — 570с.: ил.
  4. Страуструп Б. Язык программирования Си++, спец. изд./Пер. с англ. – М.;СПб.: ”Издательство БИНОМ” – “Невский Диалект”, 2001 г. – 1099c., ил.
  5. Культин Н.Б. С/С++ в задачах и примерах. — СПб.: БХВ-Петербург, 2006. — 288с.: ил.
  6. Франка П. С++: Учебный курс. — СПб.: Питер, 2005. — 522с.: ил.

 

 

 

 

 

 

 

 

 

 

 

 

Приложения

Приложение А – Листинг программы

 

Файл cl.h

enum ConsoleColor

{

        Black         = 0,

        Blue          = 1,

        Green         = 2,

        Cyan          = 3,

        Red           = 4,

        Magenta       = 5,

        Brown         = 6,

        LightGray     = 7,

DarkGray      = 8,

        LightBlue     = 9,

        LightGreen    = 10,

        LightCyan     = 11,

        LightRed      = 12,

        LightMagenta  = 13,

        Yellow        = 14,

        White         = 15

};

void SetColor(ConsoleColor text, ConsoleColor background)

{

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));

}

 

Файл first.h

void random (int*A,int n)

{int i;

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

{*(A+i)=-100+rand()%200;}}

 

 

void klava (int *A, int n)

{int i;

printf ("Введите элементы массива: \n\n");

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

{ printf("A[%d]=",i+1);

scanf("%d",&A[i]);

}

}

 

void file(char*name, int *A, int n)

{

int i;

FILE*f;

printf ("\n\nВведите имя файла: ");

scanf("%s",name);

f=fopen(name,"r");

for (i=0; i<n && !feof(f); i++)

{

if(fscanf(f,"%d",&A[i])==0)

break;

}

if(i<n)

while (i<n)

{

A[i]=-100+rand()%200;

i++;

}

}

 

void vivod (int *A, int n)

{int i;

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

{printf ("%5d",A[i]);}

}

 

 

void vivod2 (int *A, int n)

{int i;

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

{SetColor(LightGray,Black);

if (A[i]<0) SetColor(Red,Black);

printf ("%5d",A[i]);

}

printf("\n");

}

 

void obrabotka (int *A, int n, int p)

{

int i, j, tmp,k;

int *C;

C=new int[n];

k=0;

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

{

if(A[i]>0)

{

        C[k]=A[i];

k++;

}

}

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

{

j = i;

while (j > 0 && C[j - 1] > C[j])

{

tmp = C[j];

C[j] = C[j - 1];

C[j - 1] = tmp;

j--;

 

 

 

}

int l=0,q;

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

if (A[q] > 0)

{

A[q]=C[l];

l++;

}

if(p==1){

printf ("\n");

vivod2(A,n);}

}

 

if(p==2){

printf ("\n");

vivod2(A,n);}

 

}

 

 

void programma2(int vibor)

{

time_t t;

srand(time(&t));

setlocale (LC_ALL,"Russian");

int i,n;

int *A;

int p;

char name [20];

do

{

printf("Введите кол-во элементов массива: ");

scanf("%d",&n);

if (n<3||n>15) printf("Неверное значение. Введите повторно.\n\n");

}

while(n<3||n>15);

A = new int[n];

switch(vibor)

{

case 1: klava(A,n);break;

case 2: random(A,n);break;

default: file(name,A,n);

}

printf("\n\t\tИсходный массив:\n\n");

vivod(A,n);

printf("\n\n\n");

printf ("\t\tВыберите нужный вариант\n\n1. Пошаговый вывод\n2. Вывод результата\n\nВаш выбор:");

scanf("%d",&p);

printf("\n\t\tОтсортированный массив:\n\n");

obrabotka(A,n,p);

free(A);

delay (100000);

}

 

 

Файл second.h

 

void round (int R, int d)

{

int cv,bk;

int x,h=(int) d/50;

cv=0;

char ch;

setcolor(cv);

int i=1;

bk=rand()%15;

setbkcolor(bk);

setfillstyle(SOLID_FILL, bk);floodfill(1,1,0);

do

{

for(x=R; x<d-R; x+=h)

{

cv++;

if (cv>15) cv=1;

if(kbhit()==TRUE)

{

ch=getch();

if(ch==99)

{

bk=rand()%15; setfillstyle(SOLID_FILL, bk);

}

if(ch==27) exit(0);

}

setfillstyle (1,cv);

fillellipse(x,x,R,R);

delay(100);

i++;

if(i>3||x>=d-R)

{

setfillstyle(SOLID_FILL, bk);floodfill(200,2,cv);i=0;

}

}

}while (1);

}

 

void programma1()

{

initwindow(300,300);

do

round (50,300);

while(getch()!=27);

}

 

 

Файл third.h

 

#define Count 12

char N[Count][10]={"я","моя","мой","мне","мною","меня"};

char K[Count][10]={""мы","наша","наш","нам","нами","нас"};

char separate[]=" .,!?:;";

 

 

int filesize (FILE*f,int cur)

{

int n;

char c;

n=0;

fseek(f,0,SEEK_SET);

while(!feof(f))

{

if (fread(&c,sizeof(c),1,f) > 0)

n++;

 

}

fseek(f,cur,SEEK_SET);

return n;

}

 

void zamena(FILE*f,fpos_t pos, int k)

{

int i=pos;

char c;

 

int size;

size=filesize(f,pos);

fseek(f,pos,SEEK_SET);

if(strlen(N[k])==strlen(K[k]))

fwrite(K[k],strlen(K[k]),1,f);

else

if(strlen(N[k])<strlen(K[k]))

//sdvig vpravo

{

for(i=size-1; i>pos; i--)

{

fseek(f,i,SEEK_SET);

fread(&c,1,1,f);

fseek(f,i+1,SEEK_SET);

fwrite(&c,1,1,f);

}

 

fseek(f,pos,SEEK_SET);

fwrite(K[k],strlen(K[k]),1,f);

}

else

// sdvig vlevo

{

for(i=pos+1; i<size; i++)

{

fseek(f,i,SEEK_SET);

fread(&c,1,1,f);

fseek(f,i-1,SEEK_SET);

fwrite(&c,1,1,f);

}

 

fseek(f,pos,SEEK_SET);

fwrite(K[k],strlen(K[k]),1,f);

}

 

}

 

int isseparate (char *s, char c)

{ int i;

for( i = 0; i < strlen (s); i++)

{

if (c==s[i]) break;

}

if (i<strlen(s)) return i;

else return -1;

}

 

int mestoimenie(char*s)

{int i;

 

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

{

if (strcmp(s,N[i])==0)

{return i;

break;

}

}

return -1;

}

 

void vivod(char *s)

{

FILE *f;

char c;

f=fopen(s,"rb");

while(!feof(f))

{

fread(&c,sizeof(c),1,f) ;

printf("%c",c);

}

fclose(f);

}

 

 

void programma3()

{

setlocale(LC_ALL,"Russian");

char c;

char name[20];

printf ("Введите имя файла: ");

scanf("%s",name);

printf("\n\t\tИсходный файл\n");

vivod(name);

FILE *f;

fpos_t p;

int k;

char word[255];

char tmp[2];

 

word[0]='\0';

f=fopen(name,"rb+");

while (!feof(f))

{

 

while (!feof(f) )

{fread(&c,sizeof(c),1,f) ;

if(c!=32)

if( isseparate(separate,c)==-1) break;

}

if(!feof(f))

{

fgetpos(f,&p);

p-=sizeof(c);

tmp[0]=c;

tmp[1]='\0';

strcat(word,tmp);

while (!feof(f) && fread(&c,sizeof(c),1,f) > 0 && isseparate(separate,c)==-1)

{tmp[0]=c;

tmp[1]='\0';

strcat(word,tmp);

}

k=mestoimenie(word);

if(k!=-1) zamena(f,p,k);

p+=strlen(word)+1;

fseek(f,p,SEEK_SET);

word[0]='\0';

 

}  

}

fclose(f);

printf("\n\n\n\t\tОбработанный файл\n");

vivod(name);

delay(100000);

}

 

Файл menu_f.h

#include "graphics.h"

#include "stdio.h"

#include "math.h"

#include "stdlib.h"

#include "string.h"

#define up 72

#define down 80

#define enter 13

#define esc 27

 

typedef struct

{

int x[5];

char *text;}key;

 

typedef struct

{key *p;

int n,m;}Menu;

 

void knopka(key *p,int active)

{

int poly[10];

if(active==0)

{

poly[0]=p->x[0]+35;

poly[1]=p->x[1]-24;

poly[2]=p->x[0]+85;

poly[3]=poly[1]+30;

poly[4]=p->x[0]+35;

poly[5]=poly[1]+1.6*p->x[2];

poly[6]=p->x[0]-12;

poly[7]=poly[1]+30;

}

else

{

poly[0]=p->x[0];

poly[1]=p->x[1]-20;

poly[2]=p->x[0]+1.6*p->x[2];

poly[3]=poly[1];

poly[4]=poly[2];

poly[5]=poly[1]+1.6*p->x[2];

poly[6]=poly[0];

poly[7]=poly[1]+1.6*p->x[2];

setfillstyle(1,DARKGRAY);

bar(poly[2],poly[3],poly[4]+6,poly[5]+6);

bar(poly[6]-5,poly[7],poly[4]+6,poly[5]+6);

setfillstyle(1,WHITE);

bar(poly[0]-5,poly[1]-5,poly[2]+6,poly[3]);

bar(poly[0]-5,poly[1]-5,poly[6],poly[7]);

}

setfillstyle(1,14);

fillpoly(4,poly);

 

setbkcolor(14);

setcolor(RED);

outtextxy(p->x[0]+4,p->x[1]-1,p->text);

setbkcolor(3);}

 

void panel(int a,int b,int r)

{ int po[10];

po[0] = a-10;    

po[1] = b-r-10;

po[2] = a+2*r+10;  

po[3] = po[1];

po[4] = a+2*r+10; 

po[5] = b+r+4*10+8*r;

po[6] = po[0];  

po[7] = po[5];

po[8] = po[0]; 

po[9] = po[1];

setcolor(RED);

setlinestyle(0,0,3);

setfillstyle(1,RED);

fillpoly(5,po);

setcolor(DARKGRAY);

rectangle(po[2]+3,po[3]-1,po[4]+6,po[5]+4);

rectangle(po[6]-5,po[7]+3,po[4]+6,po[5]+5);

setcolor(WHITE);

rectangle(po[0]-6,po[1]-2,po[6]-3,po[7]);

rectangle(po[0]-6,po[1]-4,po[2]+8,po[3]-2);

}

 

Menu menu_initial (char *punkt[], int l,int top, int r, int n)

{

int i;

Menu M;

M.n=n;

M.m=0;

M.p=new key[n];

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

{

M.p[i].x[0]=l;

M.p[i].x[2]=r;

if(i==0)

{M.p[i].x[1]=top;}

else

{M.p[i].x[1]=M.p[i-1].x[1]+2*r;}

M.p[i].text=new char[strlen(punkt[i])+1];

strcpy(M.p[i].text,punkt[i]);

}return M;

}

 

 

void menu_delete (Menu *M)

{ int i;

for(i=0;i<M->n;i++)

delete[]M->p[i].text;

delete []M->p;}

 

 

int menu (Menu *M,int l,int top, int r, int n,void panel(int a,int b,int r))

{int i;

char ch;

int active;

do

{

panel(l,top,r);

for(i=0;i<M->n;i++) 

{if(M->m==i)

{active=1;

setcolor(WHITE);}

else

{active=0;} 

knopka(&(M->p[i]),active);

setcolor(WHITE);}

ch=getch();

switch(ch)

{case up: if(M->m==0) M->m=M->n-1;

else (M->m)--;

break;

case down: if(M->m==M->n-1)

   M->m=0;

   else (M->m)++;}

}

while(ch!=enter&&ch!=esc);

if(ch==esc)M->m=M->n-1;

return M->m;}

Файл about.h

void about()

{FILE* f=fopen("about.txt","r");

char l[20];

char ch;

while(!feof(f))

  {

  fgets(l,60,f);

  printf("%s\n",l);

  }

fclose(f);

delay (100000);

}

Файл menu.cpp

#include "graphics.h"

#include "stdio.h"

#include "math.h"

#include "cl.h"

#include "stdlib.h"

#include "string.h"

#include "time.h"

#include "float.h"

#include <windows.h>

#include "locale.h"

#include "menu_f.h"

#include "second.h"

#include "first.h"

#include "third.h"

#include "about.h"

#define up 72

#define down 80

#define enter 13

#define esc 27

 

void main()

{setlocale( LC_ALL,"Russian" );

initwindow(800,600,"Меню");

int c=3;

setbkcolor(c);

cleardevice();

char *s[]={"FIGURE","SORT","FILES","ABOUT","EXIT"};

char *s1[]={"FIGURE","SORT","FILES","AUTHOR","BACK"};

char *s2[]={"CONSOLE","RANDOM","FILE","BACK"};

int m=0,n=0;

int a=20,b=100,r=37,r1=37,a1=20,b1=50,b2=250;

Menu M=menu_initial (s,a,b,r,5);

 

do {

m=menu (&M,a,b,r,5,&panel);

switch(m)

{

case 0:

programma1();

setbkcolor(3);

cleardevice();

M=menu_initial (s,a,b,r,5);

break;

case 1: 

{

int vibor;

Menu M=menu_initial (s2,150,165,40,4);

m=menu (&M,150,165,35,4,&panel);

switch(m)

{

 case 0: vibor=1;

break;

 case 1: vibor=2;

break;

 case 2: vibor=3;

break;

 case 3: vibor=0;

 break;

}

 

if(vibor!=0)

{

closegraph();

programma2(vibor);

initwindow(800,600,"Меню");

}

setbkcolor(3);

M=menu_initial (s,a,b,r,5);

cleardevice();

 

break;

  }

case 2:

closegraph();

programma3();

M=menu_initial (s,a,b,r,5);

break;

case 3:

closegraph();

about();

    cleardevice();

break;

 

}

}

while(m!=4);

closegraph();

menu_delete (&M);

}  

Приложение В – Файлы, используемые программой

Файл 1.txt

-10 2 5 4 -3 -2 1 9 0 -6 7

Файл 2.txt

Добрый вечер, дамы и господа. Я и моя молодая команда, мне делают портрет.

Вчера мне купили мотоцикл и мой отец первым опробовал его.

Этот подарок мне? Спасибо, мне приятно.

Заинтересовался я в одной фирме, отправлю туда резюме.

Старая машина мне не нужна. Я купил новую.

Сегодня я думал, что мне не придётся выполнять эту работу.

Но меня заставили её сделать.

Работа была выполнена мною. 

Поручение было выполнено мною.

Знакомый не позвал меня на праздник и я огорчился.

Файл about.txt

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

 

Инструкции по работе с программой:

 Для перемещения по  пунктам меню используйте клавиши "вверх", "вниз".

 Для выбора пункта  меню нажмите клавишу "Enter".

 Для ввода значений  с клавиатуры - пункт "CONSOLE".

 Для случайного формирования  значений выберите пункт "RANDOM".

 Для чтения значений  из файла - пункт "FILE".

 

Информация об авторе:

ФИО: Стрельников Егор Александрович

ВУЗ: ДонНТУ

Группа: КН-13-Б

Год создания: 2014 г.


Информация о работе Алгоритмізація та програмування