Оценка достоинств и недостатков языка программирования С++

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 20.05.2013
Размер файла 254,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Введение

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

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

С++ является языком программирования общего назначения. Естественная для него область применения - системное программирование, понимаемое в широком смысле этого слова. Кроме того, С++ успешно используется во многих областях. Реализации С++ теперь есть на всех машинах, начиная с самых скромных микрокомпьютеров - до самых больших супер-ЭВМ, и практически для всех операционных систем. Таким образом, знание этого языка программирования служит начальным, базовым инструментом для написания соответствующих программ. При автоматизации каких-либо процессов одним из основных умений является умение составлять алгоритмы, т.е. задание ряда последующих действий в зависимости от начального условия. В этом смысле практика программирования как нельзя лучше влияет на уровень подготовки соответствующего специалиста. Не секрет, что нынешний век - это век глобальных и локальных информационных сетей, программное обеспечение для которых обладает специфическими свойствами, основанными на элементарных знаниях о связи. По словам профессиональных программистов, такой мощный инструмент сетевого программирования как JAVA синтаксически очень похож на C Builder, который в свою очередь базируется на предыдущих версиях языка С. В автоматике на транспорте широко используется сетевое оборудование и ЭВМ, поэтому специалистам данного профиля необходимы знания в области информационных технологий.

1. Постановка задачи и алгоритм решения

Задача:

Очереди и стеки.

Написать программу, демонстрирующую принцип заполнения очереди и стека и принцип удаления элементов из очереди и стека.

В блоке Cur.cpp определен класс win. Данный класс создает объект, содержащий информацию об окне (кнопке).

Определение класса:

class win

{

public:

int dx, height, width, top, selected;

char *text;

void DrawWindow (int, int, int, int, int, char*);

void HideWindow (int, int, int, int);

void TextOut (char*, int, int, int, int);

};

dx-координата по х левого края окна относительно начала координат.

height - высота окна (кнопки).

width - ширина окна (кнопки).

top - координата по у верхнего края окна (кнопки) относительно начала координат.

selected-параметр окна (кнопки), определяющий его закраску в зависимости от того активное оно или нет (1-активное, 0-неактивное).

*text - указатель на строку выводимую в окно.

void DrawWindow (int, int, int, int, int, char*) - функция, которая по заданным координатам рисует окно. В нее передаются параметры dx, height, width, top, selected и *text.

void HideWindow (int, int, int, int) - функция, которая по заданным координатам зарисовывает (удаляет) окно. В нее передаются параметры dx, height, width, top, selected.

void TextOut (char*, int, int, int, int) - функция, которая по заданным координатам окна выводит в него текстовую строку. В нее передаются параметры *text, dx, height, width, top.

Определения всех перечисленных функций:

void win: DrawWindow (int lx, int hght, int wdth, int t, int slct, char*str)

{height=hght; width=wdth; top=t; selected=slct; text=str;

setcolor(WHITE);

setfillstyle (SOLID_FILL, selected? MAGENTA:BLUE);

dx=lx;

bar (dx, top, dx+width, top+height);

TextOut (text, dx, height, width, top);

int poly [12];

poly[0] = dx;

poly[1] = top;

poly[2] = dx+width;

poly[3] = top;

poly[4] = dx+width-3;

poly[5] = top+3;

poly[6] = dx+3;

poly[7] = top+3;

poly[8] = dx+3;

poly[9] = top+height-3;

poly[10] = dx;

poly[11] = top+height;

setfillstyle (SOLID_FILL, selected? CYAN:LIGHTBLUE);

fillpoly (6, poly);

poly[0] = dx;

poly[1] = top+height;

poly[2] = dx+width;

poly[3] = top+height;

poly[4] = dx+width;

poly[5] = top;

poly[6] = dx+width-3;

poly[7] = top+3;

poly[8] = dx+width-3;

poly[9] = top+height-3;

poly[10] = dx+3;

poly[11] = top+height-3;

setfillstyle (SOLID_FILL, BLACK);

fillpoly (6, poly);

}

void win: HideWindow (int lx, int hght, int wdth, int t)

{dx=lx; height=hght; width=wdth; top=t;

setfillstyle (SOLID_FILL, BLUE);

bar (dx, top, dx+width, top+height);

}

void win: TextOut (char *text, int dx, int height, int width, int top)

{

int w = textwidth(text);

int h = textheight(text);

int y = (height-h)/2;

int x = (width-w)/2;

outtextxy (dx+x, top+y, text);

}

В блоке Menu.cpp определены:

struct coord {int x, lx, ly, rx, ry;} - структура содержащая параметры окна.

x - координата по х левого края окна относительно начала координат.

lx - высота окна (кнопки).

ly - ширина окна (кнопки).

rx - координата по у верхнего края окна (кнопки) относительно начала координат.

ry - параметр окна (кнопки), определяющий его закраску в зависимости от того активное оно или нет (1-активное, 0-неактивное).

void mnu_bild (win *mnu, coord *t, int reakt, int flag, char**name) - функция, в которую передаются параметры окна (кнопки), указатель на указатель на строку и указатель на созданный объект класса win, в свою очередь она активизирует или деактивизирует заданное окно.

void mnu_bild (win *mnu, coord *t, int reakt, int flag, char**name)

{if (flag==1)

{

t[reakt].ry=1;

mnu[reakt].DrawWindow (t[reakt].x, t[reakt].lx, t[reakt].ly, t[reakt].rx, t[reakt].ry, name[reakt]);

}

else {

if (reakt!=0) t[reakt].ry=0;

mnu[reakt].DrawWindow (t[reakt].x, t[reakt].lx, t[reakt].ly, t[reakt].rx, t[reakt].ry, name[reakt]);

}

}

void steck(void) - функция демонстрирующая работу со стеком.

void steck(void)

{

win unit;

win main_win[3];

char *str[]={{«1»}, {«2»}, {«3»}, {«4»}, {«5»}, {«6»}, {«7»}};

char *dialog[]={{«Добавление элементов в стек»},

{«Удаление элементов из стека»},

{«Нажмите любую клавишу»}};

coord mwin[]={{260,460,366,10,0}, {350,20,183,30,0}, {350,400,250,60,0}};

coord unit_c={310,20,20,60,1};

win temp=unit;

mnu_bild (main_win, mwin, 0,0, name);

mnu_bild (main_win+1, mwin+1,0,1, name+2);

mnu_bild (main_win+2, mwin+2,0,0, name);

main_win[2].TextOut (*dialog, main_win[2].dx, 40, main_win[2].width, main_win[2].top);

Text (main_win+2, «Стек.txt»);

mnu_bild (&unit,&unit_c, 0,1, str);

getch();

coord tmp=unit_c;

for (int j=6; j>=0; j-)

{

mnu_bild (&temp,&tmp, 0,1, str+6-j);

for (int i=0; i<j+10; i++)

{

moveDOWN(&temp);

delay(50);

}

}

tmp.x=temp.dx;

tmp.lx=temp.height;

tmp.ly=temp.width;

tmp.rx=temp.top;

tmp.ry=temp.selected;

while(1)

{main_win[2].HideWindow (362,40,230,63);

delay(500);

main_win[2].TextOut(*(dialog+2), main_win[2].dx, 40,240, main_win[2].top+1);

delay(500);

if (kbhit()!=0) {int i=getch(); if (i!=0) break;}

}

main_win[2].HideWindow (main_win[2].dx+6,30, main_win[2].width-11, main_win[2].top+4);

main_win[2].TextOut(*(dialog+1), main_win[2].dx, 40, main_win[2].width-1, main_win[2].top);

for (j=6; j>=0; j-)

{

mnu_bild (&temp,&tmp, 0,1, str+j);

tmp.rx+=20;

for (int i=9+6-j; i>=0; i-)

{

moveUP(&temp);

delay(50);}

}

temp. HideWindow (temp.dx, temp.height, temp.width, temp.top);

while(1)

{main_win[2].HideWindow (362,40,230,63);

delay(500);

main_win[2].TextOut(*(dialog+2), main_win[2].dx, 40,240, main_win[2].top+1);

delay(500);

if (kbhit()!=0) {int i=getch(); if (i!=0) break;}

}

}

void turn(void) - функция демонстрирующая работу с очередью.

void turn(void)

{

win unit;

win main_win[3];

char *str[]={{«1»}, {«2»}, {«3»}, {«4»}, {«5»}, {«6»}, {«7»}};

char *dialog[]={{«Добавление элементов в очередь»},

{«Удаление элементов из очереди»},

{«Нажмите любую клавишу»}};

coord mwin[]={{260,460,366,10,0}, {350,20,183,30,0}, {350,400,250,60,0}};

coord unit_c={310,20,20,60,1};

win temp=unit;

win temp1;

mnu_bild (main_win, mwin, 0,0, name);

mnu_bild (main_win+1, mwin+1,0,1, name+1);

mnu_bild (main_win+2, mwin+2,0,0, name);

main_win[2].TextOut (*dialog, main_win[2].dx, 40, main_win[2].width, main_win[2].top);

Text (main_win+2, «Очередь.txt»);

mnu_bild (&unit,&unit_c, 0,1, str);

getch();

coord tmp=unit_c;

for (int j=6; j>=0; j-)

{

mnu_bild (&temp,&tmp, 0,1, str+6-j);

for (int i=0; i<j+5; i++)

{

moveDOWN(&temp);

delay(50);

}

if (j==6) temp1=temp;

tmp.x=temp1.dx;

tmp.lx=temp1.height;

tmp.ly=temp1.width;

tmp.rx=temp1.top;

tmp.ry=temp1.selected;

while(1)

{main_win[2].HideWindow (355,40,240,63);

delay(500);

main_win[2].TextOut(*(dialog+2), main_win[2].dx, 40,240, main_win[2].top+1);

delay(50);

if (kbhit()!=0) {int i=getch(); if (i!=0) break;}

}

main_win[2].HideWindow (main_win[2].dx+6,30, main_win[2].width-11, main_win[2].top+4);

main_win[2].TextOut(*(dialog+1), main_win[2].dx, 40, main_win[2].width-1, main_win[2].top);

mnu_bild (&temp,&tmp, 0,1, str);

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

{

mnu_bild (&temp,&tmp, 0,1, str+j);

tmp.rx-=20;

for (int i=6+j; i>=0; i-)

{

moveDOWN(&temp);

delay(50);}

}

temp. HideWindow (temp.dx, temp.height, temp.width, temp.top);

while(1)

{main_win[2].HideWindow (360,40,230,63);

delay(500);

main_win[2].TextOut(*(dialog+2), main_win[2].dx, 40,240, main_win[2].top+1);

delay(500);

if (kbhit()!=0) {int i=getch(); if (i!=0) break;}

}

}

void stud_info(void) - функция выводящая информацию о студенте.

void stud_info(void)

{

win main_win;

coord win_coord={160,240,320,120,1};

mnu_bild (&main_win,&win_coord, 0,1, name);

Text (&main_win, «Studinfo.txt»);

delay(5000);

getch();

}

В блоке Move.cpp опредены:

void moveDOWN (win *tmp) - функция, которая перемещает заданный объект на один шаг вниз. В нее передается указатель на объект класса win.

void moveDOWN (win *tmp)

{

tmp[0].HideWindow (tmp[0].dx, tmp[0].height, tmp[0].width, tmp[0].top);

tmp[0].DrawWindow (tmp[0].dx, tmp[0].height, tmp[0].width, tmp[0].top+20, tmp[0].selected, tmp[0].text);

}

void moveUP (win *tmp) - функция, которая перемещает заданный объект на один шаг вверх. В нее передается указатель на объект класса win.

void moveUP (win *tmp)

{

tmp[0].HideWindow (tmp[0].dx, tmp[0].height, tmp[0].width, tmp[0].top);

tmp[0].DrawWindow (tmp[0].dx, tmp[0].height, tmp[0].width, tmp[0].top-20, tmp[0].selected, tmp[0].text);

}

В блоке Text.cpp опредены:

void Text (win *tmp, char *fname) - функция основная задача которой прочитать из текстового файла информацию и вывести ее в заданное окно. В нее передается указатель на объект класса win (заданное окно) и указатель на имя файла.

void Text (win *tmp, char *fname)

{

int left=tmp[0].dx;

int right=tmp[0].width;

int up=tmp[0].top+50;

int down=3;

FILE *in;

in=fopen (fname, «r»);

char cimb;

char *string[100];

char *str_out;

str_out=(char *) calloc (right/8, sizeof(char));

int qs;

int j=0;

while (qs!=-1)

{

for (int i=0; i<right/8-1; i++)

{

qs=fscanf (in, «%c», str_out+i);

}

string[j]=str_out;

str_out= (char *) calloc (right/8, sizeof(char));

j++;

}

fcloseall();

printf («\n»);

for (int i=0; i<j; i++)

{tmp[0].TextOut (string[i], left, down+10*i, right, up+10*i); delay(50);}

}

2. Программа на языке С

#include<graphics.h>

#include<stdio.h>

#include<conio.h>

#include<process.h>

class win

{

public:

int dx, height, width, top, selected;

char *text;

void DrawWindow (int, int, int, int, int, char*);

void HideWindow (int, int, int, int);

void TextOut (char*, int, int, int, int);

};

void win: DrawWindow (int lx, int hght, int wdth, int t, int slct, char*str)

{height=hght; width=wdth; top=t; selected=slct; text=str;

setcolor(WHITE);

setfillstyle (SOLID_FILL, selected? MAGENTA:BLUE);

dx=lx;

bar (dx, top, dx+width, top+height);

TextOut (text, dx, height, width, top);

int poly [12];

poly[0] = dx;

poly[1] = top;

poly[2] = dx+width;

poly[3] = top;

poly[4] = dx+width-3;

poly[5] = top+3;

poly[6] = dx+3;

poly[7] = top+3;

poly[8] = dx+3;

poly[9] = top+height-3;

poly[10] = dx;

poly[11] = top+height;

setfillstyle (SOLID_FILL, selected? CYAN:LIGHTBLUE);

fillpoly (6, poly);

poly[0] = dx;

poly[1] = top+height;

poly[2] = dx+width;

poly[3] = top+height;

poly[4] = dx+width;

poly[5] = top;

poly[6] = dx+width-3;

poly[7] = top+3;

poly[8] = dx+width-3;

poly[9] = top+height-3;

poly[10] = dx+3;

poly[11] = top+height-3;

setfillstyle (SOLID_FILL, BLACK);

fillpoly (6, poly);

}

void win: HideWindow (int lx, int hght, int wdth, int t)

{dx=lx; height=hght; width=wdth; top=t;

setfillstyle (SOLID_FILL, BLUE);

bar (dx, top, dx+width, top+height);

}

void win: TextOut (char *text, int dx, int height, int width, int top)

{

int w = textwidth(text);

int h = textheight(text);

int y = (height-h)/2;

int x = (width-w)/2;

outtextxy (dx+x, top+y, text);

}

#include "cur3.cpp»

#include "move.cpp»

#include<conio.h>

#include<dos.h>

#include "text.cpp»

void turn(void);

void steck(void);

void stud_info(void);

struct coord {int x, lx, ly, rx, ry;};

win menu[7];

coord wind_coord[7]={{0,480,640,0,0}, {50,30,200,33,1}, {50,30,200,76,0},

{50,30,200,117,0}, {50,30,200,158,0}};

char *name[5]={{«»}, {«Демонстрация очереди»}, {«Демонстрация стека»}, {«Выход»}, {«Информация о студенте»}};

void mnu_bild (win *mnu, coord *t, int reakt, int flag, char**name)

{if (flag==1)

{

t[reakt].ry=1;

mnu[reakt].DrawWindow (t[reakt].x, t[reakt].lx, t[reakt].ly, t[reakt].rx, t[reakt].ry, name[reakt]);

}

else {

if (reakt!=0) t[reakt].ry=0;

mnu[reakt].DrawWindow (t[reakt].x, t[reakt].lx, t[reakt].ly, t[reakt].rx, t[reakt].ry, name[reakt]);

}

}

void main(void)

{

int gdriver = DETECT, gmode, errorcode;

initgraph (&gdriver, &gmode, «egavga.bgi»);

errorcode = graphresult();

if (errorcode!= grOk) /* an error occurred */

{printf («Graphics error:%s\n», grapherrormsg(errorcode));

printf («Press any key to halt:»);

getch();

exit(1); /* return with error code */

}

while(1)

{

for (int i=0; i<5; i++)

mnu_bild (menu, wind_coord, i, 0, name);

mnu_bild (menu, wind_coord, 1,1, name);

int kod, metka=1;

kod=getch();

while (kod!=13)

{

kod=getch();

if (kod==0) kod=getch();

if (kod==72)

{mnu_bild (menu, wind_coord, metka, 0, name);

if (metka==1) {metka=4; mnu_bild (menu, wind_coord, metka, 1, name);}

else - metka;

mnu_bild (menu, wind_coord, metka, 1, name);

}

if (kod==80)

{mnu_bild (menu, wind_coord, metka, 0, name);

if (metka==4) {metka=1; mnu_bild (menu, wind_coord, metka, 1, name);}

else ++metka;

mnu_bild (menu, wind_coord, metka, 1, name);

}}

switch(metka)

{case 1: turn(); break;

case 2: steck(); break;

case 4: stud_info(); break;

default: exit(1); break;

}

}

}

void steck(void)

{

win unit;

win main_win[3];

char *str[]={{«1»}, {«2»}, {«3»}, {«4»}, {«5»}, {«6»}, {«7»}};

char *dialog[]={{«Добавление элементов в стек»},

{«Удаление элементов из стека»},

{«Нажмите любую клавишу»}};

coord mwin[]={{260,460,366,10,0}, {350,20,183,30,0}, {350,400,250,60,0}};

coord unit_c={310,20,20,60,1};

win temp=unit;

mnu_bild (main_win, mwin, 0,0, name);

mnu_bild (main_win+1, mwin+1,0,1, name+2);

mnu_bild (main_win+2, mwin+2,0,0, name);

main_win[2].TextOut (*dialog, main_win[2].dx, 40, main_win[2].width, main_win[2].top);

Text (main_win+2, «Стек.txt»);

mnu_bild (&unit,&unit_c, 0,1, str);

getch();

coord tmp=unit_c;

for (int j=6; j>=0; j-)

{

mnu_bild (&temp,&tmp, 0,1, str+6-j);

for (int i=0; i<j+10; i++)

{

moveDOWN(&temp);

delay(50);

}

}

tmp.x=temp.dx;

tmp.lx=temp.height;

tmp.ly=temp.width;

tmp.rx=temp.top;

tmp.ry=temp.selected;

while(1)

{main_win[2].HideWindow (362,40,230,63);

delay(500);

main_win[2].TextOut(*(dialog+2), main_win[2].dx, 40,240, main_win[2].top+1);

delay(500);

if (kbhit()!=0) {int i=getch(); if (i!=0) break;}

}

main_win[2].HideWindow (main_win[2].dx+6,30, main_win[2].width-11, main_win[2].top+4);

main_win[2].TextOut(*(dialog+1), main_win[2].dx, 40, main_win[2].width-1, main_win[2].top);

for (j=6; j>=0; j-)

{

mnu_bild (&temp,&tmp, 0,1, str+j);

tmp.rx+=20;

for (int i=9+6-j; i>=0; i-)

{

moveUP(&temp);

delay(50);}

}

temp. HideWindow (temp.dx, temp.height, temp.width, temp.top);

while(1)

{main_win[2].HideWindow (362,40,230,63);

delay(500);

main_win[2].TextOut(*(dialog+2), main_win[2].dx, 40,240, main_win[2].top+1);

delay(500);

if (kbhit()!=0) {int i=getch(); if (i!=0) break;}

}

}

void turn(void)

{

win unit;

win main_win[3];

char *str[]={{«1»}, {«2»}, {«3»}, {«4»}, {«5»}, {«6»}, {«7»}};

char *dialog[]={{«Добавление элементов в очередь»},

{«Удаление элементов из очереди»},

{«Нажмите любую клавишу»}};

coord mwin[]={{260,460,366,10,0}, {350,20,183,30,0}, {350,400,250,60,0}};

coord unit_c={310,20,20,60,1};

win temp=unit;

win temp1;

mnu_bild (main_win, mwin, 0,0, name);

mnu_bild (main_win+1, mwin+1,0,1, name+1);

mnu_bild (main_win+2, mwin+2,0,0, name);

main_win[2].TextOut (*dialog, main_win[2].dx, 40, main_win[2].width, main_win[2].top);

Text (main_win+2, «Очередь.txt»);

mnu_bild (&unit,&unit_c, 0,1, str);

getch();

coord tmp=unit_c;

for (int j=6; j>=0; j-)

{

mnu_bild (&temp,&tmp, 0,1, str+6-j);

for (int i=0; i<j+5; i++)

{

moveDOWN(&temp);

delay(50);

}

if (j==6) temp1=temp;

}

tmp.x=temp1.dx;

tmp.lx=temp1.height;

tmp.ly=temp1.width;

tmp.rx=temp1.top;

tmp.ry=temp1.selected;

while(1)

{main_win[2].HideWindow (355,40,240,63);

delay(500);

main_win[2].TextOut(*(dialog+2), main_win[2].dx, 40,240, main_win[2].top+1);

delay(50);

if (kbhit()!=0) {int i=getch(); if (i!=0) break;}

}

main_win[2].HideWindow (main_win[2].dx+6,30, main_win[2].width-11, main_win[2].top+4);

main_win[2].TextOut(*(dialog+1), main_win[2].dx, 40, main_win[2].width-1, main_win[2].top);

mnu_bild (&temp,&tmp, 0,1, str);

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

{

mnu_bild (&temp,&tmp, 0,1, str+j);

tmp.rx-=20;

for (int i=6+j; i>=0; i-)

{

moveDOWN(&temp);

delay(50);}

}

temp. HideWindow (temp.dx, temp.height, temp.width, temp.top);

while(1)

{main_win[2].HideWindow (360,40,230,63);

delay(500);

main_win[2].TextOut(*(dialog+2), main_win[2].dx, 40,240, main_win[2].top+1);

delay(500);

if (kbhit()!=0) {int i=getch(); if (i!=0) break;}

}

}

void stud_info(void)

{

win main_win;

coord win_coord={160,240,320,120,1};

mnu_bild (&main_win,&win_coord, 0,1, name);

Text (&main_win, «Studinfo.txt»);

delay(5000);

getch();

}

#include<graphics.h>

#include<stdio.h>

#include<stdlib.h>

void Text (win *tmp, char *fname)

{

int left=tmp[0].dx;

int right=tmp[0].width;

int up=tmp[0].top+50;

int down=3;

FILE *in;

in=fopen (fname, «r»);

char cimb;

char *string[100];

char *str_out;

str_out=(char *) calloc (right/8, sizeof(char));

int qs;

int j=0;

while (qs!=-1)

{

for (int i=0; i<right/8-1; i++)

{

qs=fscanf (in, «%c», str_out+i);

}

string[j]=str_out;

str_out= (char *) calloc (right/8, sizeof(char));

j++;

}

fcloseall();

printf («\n»);

for (int i=0; i<j; i++)

{tmp[0].TextOut (string[i], left, down+10*i, right, up+10*i); delay(50);}

}

void moveDOWN (win *tmp)

{

tmp[0].HideWindow (tmp[0].dx, tmp[0].height, tmp[0].width, tmp[0].top);

tmp[0].DrawWindow (tmp[0].dx, tmp[0].height, tmp[0].width, tmp[0].top+20, tmp[0].selected, tmp[0].text);

}

void moveUP (win *tmp)

{

tmp[0].HideWindow (tmp[0].dx, tmp[0].height, tmp[0].width, tmp[0].top);

tmp[0].DrawWindow (tmp[0].dx, tmp[0].height, tmp[0].width, tmp[0].top-20, tmp[0].selected, tmp[0].text);

}

3. Описание возможностей языка С, используемых для реализации алгоритма

программа алгоритм стек очередь

Прежде всего, надо пояснить понятия очереди и стека. Оба они связаны с понятием списка.

Линейный список - это конечная последовательность однотипных элементов (узлов), возможно, с повторениями. Количество элементов в последовательности называется длиной списка, причем длина в процессе работы программы может изменяться. Линейный список F, состоящий из элементов D1, D2,…, Dn, записывают в виде последовательности значений заключенной в угловые скобки F=.

Очереди и стеки являются лишь частным способом представления линейного списка.

В зависимости от метода доступа к элементам линейного списка различают разновидности линейных списков называемые стеком, очередью и двусторонней очередью.

Cтек - это конечная последовательность некоторых однотипных элементов - скалярных переменных, массивов, структур или объединений, среди которых могут быть и одинаковые. Стек обозначается в виде: S= и представляет динамическую структуру данных; ее количество элементов заранее не указывается и в процессе работы, как правило, изменяется. Если в стеке элементов нет, то он называется пустым и обозначается S=<>.

Допустимыми операциями над стеком являются:

- проверка стека на пустоту S=<>,

- добавление нового элемента Sn+1 в конец стека - преобразование < S1,…, Sn> в < S1,…, Sn+1>;

- изъятие последнего элемента из стека - преобразование < S1,…, Sn-1, Sn> в < S1,…, Sn-1>;

- доступ к его последнему элементу Sn, если стек не пуст.

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

Очередь - это линейный список, где элементы удаляются из начала списка, а добавляются в конце списка (как обыкновенная очередь в магазине).

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

В данной программе активно используется графический ражим, а работа в графическом режиме соответствует определенным особенностям работы в С.

Для более наглядного пояснения рассмотрим один из фрагментов программы.

int gdriver = DETECT, gmode, errorcode;

initgraph (&gdriver, &gmode, «egavga.bgi»);

errorcode = graphresult();

if (errorcode!= grOk) /* an error occurred */

{printf («Graphics error:%s\n», grapherrormsg(errorcode));

printf («Press any key to halt:»);

getch();

exit(1); /* return with error code */

}

Перевод системы в графический режим осуществляется при помощи функции void far initgraph (int far *graphdriver, int far *graphmode, char far* pathtodriver()

Первый параметр характеризует подключаемый графический драйвер, его проще всего инициализировать при помощи стандартного имени DETECT, что в программе и делается. Второй характеризует графический режим по умолчанию 640 на 480. Третий указывает путь к нужному графическому драйверу. Функция graphresult() проверяет инициализацию графического режима и возвращает соответствующий код ошибки, если она есть. Функция graperrormsg() по переданному ей коду ошибки возвращает соответствующее сообщение об этой ошибке.

В программе инициализирован класс, согласно возможностям языка С обладает всеми присущими классу свойствами, а именно инкапсуляция, наследование и др. В программе широко используется адресная арифметика примером этого может служить такая строка: main_win[2].TextOut(*(dialog+2), main_win[2].dx, 40,240, main_win[2].top+1);

Но в целом программа не использует каких-то особенных возможностей, в основном происходит обращение к библиотеке ввода-вывода и к графической библиотеке.

4. Результаты расчета, анализ и тестирование

При запуске программы на экране появляется следующая картина. Нажимая клавиши вверх, вниз можно изменять позицию активного окна.

После выбора первого пункта и его запуска мы видим следующее. Элементы по порядку, начиная с первого, заполняют список, а потом в таком же порядке удаляются из него.

После выбора третьего пункта на экране следующее: элементы по порядку, начиная с первого и заканчивая седьмым, заполняют список, а потом, начиная с последнего, удаляются из него.

При выборе пункта «Информация о студенте» появляется окно в котором отображена информация о студенте.

При выборе вкладки выход программа завершает свою работу.

Заключение

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

Язык «C» - это язык относительно «низкого уровня». В такой характеристике нет ничего оскорбительного; это просто означает, что «C» имеет дело с объектами того же вида, что и большинство ЭВМ, а именно, с символами, числами и адресами. В языке «C» отсутствуют операции, имеющие дело непосредственно с составными объектами, такими как строки символов, множества, списки или с массивами, рассматриваемыми как целое. Язык не предоставляет никаких других возможностей распределения памяти, кроме статического определения и механизма стеков, обеспечиваемого локальными переменными функций. Наконец, сам по себе «C» не обеспечивает никаких возможностей ввода-вывода: здесь нет операторов READ или WRITE и никаких встроенных методов доступа к файлам. Все эти механизмы высокого уровня должны обеспечиваться явно вызываемыми функциями. Аналогично, язык «C» предлагает только простые, последовательные конструкции потоков управления: проверки, циклы, группирование и подпрограммы, но не мультипрограммирование, параллельные операции, синхронизацию или сопрограммы. Отсутствие некоторых из этих средств выглядит как удручающая неполноценность. Но удержание языка в скромных размерах дает реальные преимущества. Так как «C» относительно мал, он не требует много места для своего описания и может быть быстро выучен. Компилятор с «C» может быть простым и компактным. Это обеспечивает высокую степень мобильности языка. Поскольку типы данных и структуры управления, имеющиеся в «C», непосредственно поддерживаются большинством существующих ЭВМ, библиотека, необходимая во время прогона изолированных программ, оказывается очень маленькой.

Программы на «C» оказываются достаточно эффективными, и не возникает побуждения писать вместо этого программы на языке ассемблера. Наиболее убедительным примером этого является сама операционная система «UNIX», которая почти полностью написана на «C». Из 13000 строк программы системы только около 800 строк самого низкого уровня написаны на ассемблере.

Хотя «C» соответствует возможностям многих ЭВМ, он не зависит от какой-либо конкретной архитектуры машины и в силу этого без особых усилий позволяет писать «переносимые» программы, т.е. программы, которые можно пропускать без изменений на различных аппаратных средствах.

Язык «C» включает основные конструкции потока управления, требуемые для хорошо структурированных программ: группирование операторов, принятие решений (IF), циклы с проверкой завершения в начале (WHILE, FOR) или в конце (DO) и выбор одного из множества возможных вариантов (SWITCH).

В языке «C» имеются указатели и возможность адресной арифметики. Аргументы передаются функциям посредством копирования значения аргумента, и вызванная функция не может изменить фактический аргумент в вызывающей программе. Если желательно добиться «вызова по ссылке», можно неявно передать указатель, и функция сможет изменить объект, на который этот указатель указывает. Имена массивов передаются указанием начала массивов, так что аргументы типа массивов эффективно вызываются по ссылке. К любой функции можно обращаться рекурсивно, и ее локальные переменные обычно «автоматические», т.е. Создаются заново при каждом обращении. Описание одной функции не может содержаться внутри другой, но переменные могут описываться в соответствии с обычной блочной структурой.

Функции в «C» - программе могут транслироваться отдельно переменные по отношению к функции могут быть внутренними, внешними, но известными только в пределах одного исходного файла, или полностью глобальными. Внутренние переменные могут быть автоматическими или статическими.

Язык «C» не является языком со строгими типами в смысле Паскаля. Он сравнительно снисходителен к преобразованию данных, хотя и не будет автоматически преобразовывать типы данных с буйной непринужденностью. Наконец, язык «C», подобно любому другому языку, имеет свои недостатки. Некоторые операции имеют неудачное старшинство; некоторые разделы синтаксиса могли бы быть лучше; существует несколько версий языка, отличающихся небольшими деталями. Тем не менее, язык «C» зарекомендовал себя как исключительно эффективный и выразительный язык для широкого разнообразия применений программирования. Итак, подводя вывод всему сказанному, отметим, что как язык низкого уровня «C» имеет много преимуществ и удобств, однако он не идет ни в какое сравнение с языками высокого уровня.

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

1. Язык С Б.В. Керниган, Д.М. Ричи.,

2. В.В. Подбельский. Язык C++: Учебное пособие. - Москва: Финансы и статистика, 2001.

3. К. Джамса. Учимся программировать на языке C++: Пер. с англ. - Москва: Мир, 1997.

4. Стенли Б. Липпман. C++ для начинающих: Пер. с англ. 2 тт. - Москва: Унитех; Рязань: Гэлион, 1992, 304-345 с.

Размещено на Allbest.ru


Подобные документы

  • Понятие стека как структуры данных, где элемент, занесенный первым, извлекается последним. Порядок добавления и удаления элементов списка. Реализация функций стека. Использование стека в алгоритме быстрой сортировки. Основные требования к элементам стека.

    презентация [591,2 K], добавлен 22.10.2013

  • Создание стека с помощью языка программирования C#. Блок-схема работы алгоритма программы, ее интерфейс. Добавление, удаление и вывод элементов в стеке. Реализация методов "Начало-конец" (переприсвоение индексов) и "Приоритет" (сортировка по возрастанию).

    лабораторная работа [924,7 K], добавлен 26.12.2014

  • Описание используемых понятий и механизмов объектно-ориентированного программирования. Разработка и описание необходимых классов. Демонстрационный модуль с кратким описанием использованных стандартных компонентов. Внешний вид и листинг программы.

    курсовая работа [1,3 M], добавлен 24.07.2013

  • Понимание принципа работы очереди. Возможности обращения к первому и последнему элементов очереди. Создание очереди с помощью массива. Рассмотрение примеров использования очереди с приоритетом в программе. Формирование односвязного и двусвязного списков.

    контрольная работа [345,6 K], добавлен 26.11.2020

  • Разработка класса "очередь с приоритетами" на языке С++ с использованием объектно-ориентированного проектирования. Построение алгоритмов обработки очереди, методов вставки, удаления, вывода на экран элементов. Анализ вариантов реализации очередей.

    курсовая работа [398,6 K], добавлен 28.05.2016

  • Основы программирования на 32-битном Ассемблере, разработка с его помощью программы, демонстрирующей работу одного из разделов ОС Windоws. Описание используемых АРI-функций как интерфейса программирования приложений. Листинг программы, результаты работы.

    курсовая работа [164,5 K], добавлен 18.05.2014

  • Основные понятия объектно-ориентированного программирования, особенности описания функций и классов. Разработка программы для работы с универсальной очередью установленного типа, добавления и удаления ее элементов и вывода содержимого очереди на экран.

    курсовая работа [187,2 K], добавлен 27.08.2012

  • Постановка задачи и алгоритм решения. Листинг программы, иллюстрирующей работу с символами, строками и блоками. Описание возможностей языка С, используемых для реализации алгоритма. Тестирование итоговой программы, анализ полученных результатов расчета.

    курсовая работа [63,0 K], добавлен 27.12.2012

  • Программа для расчета полинома. Описание и схема алгоритма, распределение памяти под код программы, под данные и стек. Схема хранения операций ввода-вывода и их подключение. Изменения стека во время прогона программы. Листинг программы с комментариями.

    курсовая работа [59,0 K], добавлен 02.12.2009

  • Создание приложения, исполняющего трансляцию программы из языка Паскаль в язык Си: разработка алгоритма реализации задачи, описание необходимых констант, переменных, функций и операторов, представление листинга программы и распечатка результатов.

    курсовая работа [305,9 K], добавлен 03.07.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.