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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    163,59 Кб
  • Опубликовано:
    2013-05-20
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

Введение

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

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

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

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

 

Задача:

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

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

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

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

class win

{

public:

int dx, height, width, top, selected;*text;

void DrawWindow (int, int, int, int, int, char*);HideWindow (int, int, int, int);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;[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);

}

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;main_win[3];*str[]={{«1»}, {«2»}, {«3»}, {«4»}, {«5»}, {«6»}, {«7»}}; *dialog[]={{«Добавление элементов в стек»},

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

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

coord mwin[]={{260,460,366,10,0}, {350,20,183,30,0}, {350,400,250,60,0}};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;

(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;.lx=temp.height;.ly=temp.width;.rx=temp.top;.ry=temp.selected;

(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);_win[2].TextOut(*(dialog+1), main_win[2].dx, 40, main_win[2].width-1, main_win[2].top);

(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);(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)

{unit;main_win[3];

*str[]={{«1»}, {«2»}, {«3»}, {«4»}, {«5»}, {«6»}, {«7»}}; *dialog[]={{«Добавление элементов в очередь»},

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

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

coord mwin[]={{260,460,366,10,0}, {350,20,183,30,0}, {350,400,250,60,0}};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;

(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;.lx=temp1.height;.ly=temp1.width;.rx=temp1.top;.ry=temp1.selected;

(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);_win[2].TextOut(*(dialog+1), main_win[2].dx, 40, main_win[2].width-1, main_win[2].top);

_bild (&temp,&tmp, 0,1, str);(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);

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

{(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++;

}();(«\n»);(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>

win

{:dx, height, width, top, selected;*text;

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

};

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);(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;[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);

}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;};

menu[7];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}};*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;(&gdriver, &gmode, «egavga.bgi»);

= graphresult();(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;main_win[3];

*str[]={{«1»}, {«2»}, {«3»}, {«4»}, {«5»}, {«6»}, {«7»}};*dialog[]={{«Добавление элементов в стек»},

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

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

coord mwin[]={{260,460,366,10,0}, {350,20,183,30,0}, {350,400,250,60,0}};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»);_bild (&unit,&unit_c, 0,1, str);

getch();

coord tmp=unit_c;

(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;.lx=temp.height;.ly=temp.width;.rx=temp.top;.ry=temp.selected;

(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);_win[2].TextOut(*(dialog+1), main_win[2].dx, 40, main_win[2].width-1, main_win[2].top);

(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);(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)

{unit;main_win[3];*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}};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;

(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;.lx=temp1.height;.ly=temp1.width;.rx=temp1.top;.ry=temp1.selected;

(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);_win[2].TextOut(*(dialog+1), main_win[2].dx, 40, main_win[2].width-1, main_win[2].top);_bild (&temp,&tmp, 0,1, str);(j=0; j<7; j++)

{

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

tmp.rx-=20;(int i=6+j; i>=0; i-)

{

moveDOWN(&temp);

delay(50);}

}

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

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

{(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++;

}();(«\n»);(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=.

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

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

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

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

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

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

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

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

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

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

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

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

int gdriver = DETECT, gmode, errorcode;(&gdriver, &gmode, «egavga.bgi»);

= graphresult();(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.

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

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

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!