Разработка на языке программирования С программы, иллюстрирующей работу с символами, строками и блоками

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

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

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

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

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

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

Белорусский государственный

Университет транспорта

Кафедра Информационных технологий

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

тема: Разработка программ на языке программирования С

2010

Введение

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

Применение электронной техники, электронно-вычислительных машин, микропроцессоров и микроЭВМ является в данный момент основным направлением развития автоматики, телемеханики и связи.

В настоящее время на железнодорожном транспорте широко применяются системы автоматики, телемеханики и связи , которые позволяют увеличить пропускную и провозную способность ж/д. и безопасность движения поездов. С их развитием человек все чаще стал задумываться об упрощении эксплуатации данных систем.

В связи с этим Министерство Транспорта Республики Беларусь приняло решение о введении в эксплуатацию на ж/д. ЭВМ. Они первоначально должны были использоваться для упрощения ведения технической документации. В дальнейшем их стали применять для составления графиков движения поездов, проектирования строительства ж/д., определения экономической рациональности того или иного “маршрута” и многого другого.

В свою очередь железная дорога “потребовала” от ВУЗов специалистов владеющих знаниями об эксплуатации , ремонте , проверки надежности и усовершенствовании ЭВМ.

Разрабатывают и поэтапно внедряют отраслевую автоматизированную систему управления железнодорожным транспортом АСУЖТ. В рамках АСУЖТ функционируют Главный вычислительный центр МПС вычислительные центры на дорогах и ряде заводов МПС. На всех дорогах созданы и используются информационно-справочные системы по грузовой работе и работе парков, а также системы обработки данных об эксплуатационной работе, слежения за крупными подвижными составами. Да, применение ЭВМ для повышения надежности технических средств железнодорожного транспорта и обеспечения безопасности движения становится одним из основных направлений нашей профессии.

Постановка задачи

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

Главное меню данной программы состоит из 4 пунктов:

1. Работа с символами.

2. Работа со строками.

3. Работа с блоками.

4. Выход.

При выборе одного из первых трёх пунктов меню появляется дополнительное меню.

1. Выбор файла.

2. Просмотр файла.

3. Ввод информации.

4. Изменение информации.

5. Удаление информации.

6. Очистка файла.

7. Удаление файла.

Далее для выполнения необходимой операции нужно просто выбрать интересующий вас пункт меню.

Листинг программы:

#include <conio.h>

#include <stdio.h>

#include <string.h>

#include <ctype.h>

#include <stdlib.h>

#include <values.h>

#define menu_bg_color WHITE

#define menu_sel_bg_color LIGHTGREEN

#define menu_txt_color BLACK

#define block_size 20

#define str_maxlen 100

#define str_maxkol 500

#define symb_maxkol 50000

#define block_maxkol 1000

typedef char tstring[str_maxlen];

typedef char tblock[block_size];

typedef struct {

int x,y,dx,dy;

char status[80],captions[10][25];

} tmenu;

int worktype;

char filename[3][13]={"","",""};

tmenu menu1={30,10,19,4,"Для управления используйте клавиши<Вверх>,<Вниз>,<Ввод>, <Esc>","Работа с символами","Рабрта со строками","Работа с блоками","Выход"};

tmenu menu2={34,13,21,7,"д Для управления используйте клавиши<Вверх>,<Вниз>,<Ввод>, <Esc>","Выбор файла","Просмотр файла","Ввод информации","Изменение информации","Удаление информации","Очистка файла","Удаление файла"};

void showstatus(char s[])

{

window(1,25,80,25);

textbackground(LIGHTGRAY);

textcolor(BLACK);

clrscr();

cprintf(s);

}

void showcaption(char s[])

{

window(1,1,80,1);

textbackground(LIGHTGRAY);

textcolor(BLACK);

clrscr();

cprintf(s);

}

void showitem(tmenu m, int num, int sel)

{

gotoxy(1,num+1);

if (sel)

textbackground(menu_sel_bg_color);

else textbackground(menu_bg_color);

cprintf(m.captions[num]);

}

void border(int x,int y,int dx,int dy)

{

int j;

window(x-1,y-1,x+dx,y+dy);

clrscr();

window(x-1,y-1,x+dx,y+dy+1);

for(j=1; j<=dx; j++) {

gotoxy(j+1,1);cprintf("=");gotoxy(j+1,dy+2);cprintf("=");

}

for(j=1; j<=dy; j++) {

gotoxy(1,j+1);cprintf("¦");gotoxy(dx+2,j+1);cprintf("¦");

}

gotoxy(1,1);cprintf("г");gotoxy(1,dy+2);cprintf("L");

gotoxy(dx+2,1);cprintf("¬");gotoxy(dx+2,dy+2);cprintf("-");

}

int menu(tmenu m,int save=0)

{

int i,j,sel,cmd,buffer[2000];

textbackground(menu_bg_color);

textcolor(menu_txt_color);

if (save) gettext(m.x-1,m.y-1,m.x+m.dx,m.y+m.dy,buffer);

border(m.x,m.y,m.dx,m.dy);

textbackground(menu_bg_color);

window(m.x,m.y,m.x+m.dx-1,m.y+m.dy-1);

clrscr();

showstatus(m.status);

window(m.x,m.y,m.x+m.dx,m.y+m.dy);

for (i=0; i<m.dy; i++)

showitem(m,i,0);

sel=0;

cmd=1;

showitem(m,sel,1);

while ((cmd!=27)&&(cmd!=13)) {

cmd=getch();

if (cmd==0) cmd=getch();

switch (cmd) {

case 80:

showitem(m,sel,0);

if (++sel==m.dy) sel=0;

showitem(m,sel,1);

break;

case 72:

showitem(m,sel,0);

if (--sel<0) sel=m.dy-1;

showitem(m,sel,1);

break;

}

}

window(1,1,80,25);

textbackground(BLUE);

if (save) puttext(m.x-1,m.y-1,m.x+m.dx,m.y+m.dy,buffer);

if (cmd==13) return(sel);

else return(-1);

}

void inputbox(char caption[],int x,int y,int dx,char s[],int maxlen=12)

{

char str[100],buffer[4000];

textbackground(menu_bg_color);

textcolor(menu_txt_color);

gettext(x-1,y-1,x+dx,y+1,buffer);

border(x,y,dx,1);

gotoxy(2,2);

cprintf(caption);

str[0]=maxlen+1;

cgets(str);

s[0]=NULL;

memcpy(s,str+2,strlen(str)-1);

window(1,1,80,25);

textbackground(BLUE);

puttext(x-1,y-1,x+dx,y+1,buffer);

}

void inputboxnum(char caption[],int x,int y,int dx,long &l)

{

char buffer[4000],c;

int i;

textbackground(menu_bg_color);

textcolor(menu_txt_color);

gettext(x-1,y-1,x+dx,y+1,buffer);

do {

border(x,y,dx,1);

gotoxy(2,2);

cprintf(caption);

i=-1;

cscanf("%i",&i);

cscanf("%c",&c);

} while (i==-1);

l=i;

window(1,1,80,25);

puttext(x-1,y-1,x+dx,y+1,buffer);

}

char showmessage(int dx,int dy,char caption[],char text[],char type=0,int save=1)

{

char buffer[4000],ch;

if (save) gettext(39-dx/2,11-dy/2,41+dx/2,13+dy/2,buffer);

if (type==0){

textcolor(menu_txt_color);

textbackground(menu_bg_color);

}

else {

textcolor(WHITE);

textbackground(RED);

}

border(40-dx/2,12-dy/2,dx,dy);

window(40-dx/2,11-dy/2,40-dx/2+dx-1,12-dy/2+dy);

gotoxy((dx-strlen(caption))/2,1);

cprintf(caption);

gotoxy(1,3);

cprintf(text);

ch=getch();

if (save) puttext(39-dx/2,11-dy/2,41+dx/2,13+dy/2,buffer);

return(ch);

}

int answeryn(char answer[])

{

if (toupper(showmessage(30,4,"Внимание",answer))=='Y')

return(1);

else return(0);

}

void selectfile()

{

FILE *fp;

char s[13];

int ok;

ok=0;

inputbox("Введите имя файла : ",20,11,40,s);

fp=fopen(s,"r");

if (fp==NULL) {

if (answeryn("Файл с таким именем не найден, создать новый? (Y/N)")){

fp=fopen(s,"w");

if (fp==NULL)

showmessage(30,4,"Ошибка!"," Ошибка создания файла.!",1);

else ok=1;

}}

else ok=1;

if (ok==1) {

fclose(fp);

filename[worktype][0]=NULL;

strcat(filename[worktype],s);

showmessage(30,3,"Текущий файл:",filename[worktype]);

}

}

void viewfile()

{

char buffer[4000],buffer2[block_size+1];

tstring s1;

FILE *fp;

int kol,lines;

char s[40]="Просмотр файла: ",c;

if (filename[worktype][0]==NULL)

showmessage(30,3,"Ошибка"," Рабочий файл не задан",1);

else {

fp=fopen(filename[worktype],"rb");

if (fp==NULL)

showmessage(30,3," Ошибка "," Ошибка открытия файла",1);

else {

gettext(1,1,80,25,buffer);

strcat(s,filename[worktype]);

showcaption(s);

showstatus(" Для продолжения нажмите любую клавишу...");

textcolor(WHITE);

textbackground(BLUE);

window(1,2,80,24);

clrscr();

lines=0;

switch (worktype) {

case 0:{

while (!feof(fp)){

c=getc(fp);

cprintf("%c",c);

if (c=='\n') lines++;

if (lines==23){

lines=1;

getch();

}

}

break;

}

case 1:{

while (!feof(fp)){

if (fgets(s1,str_maxlen,fp)){

cprintf("%s",s1);

lines++;

if (lines==23){

lines=1;

getch();

}

}

}

break;

}

case 2:{

while (!feof(fp)){

kol=fread(buffer2,block_size,1,fp);

if (kol){

buffer2[block_size]=NULL;

cprintf("%s",buffer2);

cprintf("\r\n");

lines++;

if (lines==23){

lines=1;

getch();

}

}

}

}

}

fclose(fp);

getch();

puttext(1,1,80,25,buffer);

}

}

}

void inputdata()

{

char buffer[4000];

FILE *fp;

int i;

char s[40]="Ввод данных в файл: ";

if (filename[worktype][0]==NULL)

showmessage(30,3," Ошибка "," Рабочий файл не задан ",1);

else {

fp=fopen(filename[worktype],"ab");

if (fp==NULL)

showmessage(30,3," Ошибка "," Ошибка открытия файла ",1);

else {

textcolor(WHITE);

textbackground(BLUE);

gettext(1,1,80,25,buffer);

clrscr();

strcat(s,filename[worktype]);

showcaption(s);

showstatus("После окончания ввода данных нажмите <ENTER>");

switch (worktype) {

case 0:{

inputbox("Вводите символы: ",10,12,60,s,40);

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

putc(s[i],fp);

break;

}

case 1:{

inputbox("Вводите строку: ",10,12,60,s,40);

fputs(strcat(s,"\r\n"),fp);

break;

}

case 2:{

inputbox("Вводите блок (21 символ) : ",10,12,60,s,block_size);

if (strlen(s)<block_size)

while (strlen(s)!=block_size)

strcat(s,"?");

fwrite(s,block_size,1,fp);

}

}

fclose(fp);

showstatus(" Для продолжения нажмите любую клавишу...");

showmessage(30,3,"Ввод данных,"Данные успешно записаны в файл.");

puttext(1,1,80,25,buffer);

}

}

}

void correct()

{

char buffer[4000];

tstring s1,strs[str_maxkol];

FILE *fp;

int i,kol;

long n;

char s[40]="Изменение файла: ";

if (filename[worktype][0]==NULL)

showmessage(30,3," Ошибка "," Рабочий файл не задан ",1);

else {

if ((fp=fopen(filename[worktype],"r+b"))==NULL)

showmessage(30,3," Ошибка "," Ошибка открытия файла ",1);

else {

textcolor(WHITE);

textbackground(BLUE);

gettext(1,1,80,25,buffer);

clrscr();

strcat(s,filename[worktype]);

showcaption(s);

switch (worktype) {

case 0:{

showstatus("Номер символа начиная с которого будут записаны новые данные.");

inputboxnum("Введите номер символа ",25,12,30,n);

showstatus("Новые данные");

inputbox("Вводите символы: ",10,12,60,s,40);

fseek(fp,n,SEEK_SET);

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

putc(s[i],fp);

break;

}

case 1:{

kol=0;

while (!feof(fp))

fgets(strs[kol++],str_maxlen,fp);

showstatus("Номер строки вместо которой будет записана новая строка");

inputboxnum("Введите номер строки: ",25,12,30,n);

showstatus("Введите строку");

inputbox("йуeсїГС ЯГ᫬р: ",10,12,60,s,40);

fclose(fp);

fp=fopen(filename[worktype],"w");

fclose(fp);

fp=fopen(filename[worktype],"r+b");

strcat(s,"\r\n");

strcpy(strs[n],s);

for (i=0;i<kol--;i++)

fputs(strs[i],fp);

break;

}

case 2:{

showstatus("Номер блока вместо которого будет записан новый блок");

inputboxnum("Введите номер блока: ",25,12,30,n);

showstatus("Ввод блока(21 символ )");

inputbox("Введите блок : ",10,12,60,s,block_size);

if (strlen(s)<block_size)

while (strlen(s)!=block_size)

strcat(s,"?");

fseek(fp,n*block_size,SEEK_SET);

fwrite(s,block_size,1,fp);

}

}

fclose(fp);

showstatus(" Для продолжения нажмите любую клавишу...");

showmessage(30,3,"Изменение данных","Изменение в файле сделаны");

puttext(1,1,80,25,buffer);

}

}

}

void delinfo()

{

char buffer[4000];

tstring s1;

FILE *fp;

long kol,n,n1,i;

char s[40]="Удаление информации из файла: ";

if (filename[worktype][0]==NULL)

showmessage(30,3,"Ошибка"," Рабочий файл не задан",1);

else {

if ((fp=fopen(filename[worktype],"r+b"))==NULL)

showmessage(30,3," Ошибка "," Ошибка открытия файла ",1);

else {

textcolor(WHITE);

textbackground(BLUE);

gettext(1,1,80,25,buffer);

clrscr();

strcat(s,filename[worktype]);

showcaption(s);

switch (worktype) {

case 0:{

showstatus("Номер символа который следует удалить");

inputboxnum("Введите номер символа: ",25,12,30,n);

showstatus("Количество символов которые необходимо удалить");

inputboxnum("Количество символов: ",25,12,30,n1);

char sbuf[symb_maxkol];

kol=0;

while (!feof(fp))

sbuf[kol++]=getc(fp);

freopen(filename[worktype],"wb",fp);

for (i=0;i<kol-1;i++)

if ((i<n)||(i>n+n1-1)) putc(sbuf[i],fp);

break;

}

case 1:{

kol=0;

tstring strs[str_maxkol];

while (!feof(fp))

fgets(strs[kol++],str_maxlen,fp);

showstatus("Номер строки которую необходимо удалить");

inputboxnum("Введите номер строки: ",25,12,30,n);

freopen(filename[worktype],"wb",fp);

for (i=0;i<kol-1;i++)

if (i!=n) fputs(strs[i],fp);

break;

}

case 2:{

kol=0;

tblock block[block_maxkol];

while (!feof(fp))

fread(block[kol++],block_size,1,fp);

showstatus("Номер блока который следует удалить");

inputboxnum("Введите номер блока",25,12,30,n);

freopen(filename[worktype],"wb",fp);

for (i=0;i<kol-1;i++)

if (i!=n) fwrite(block[i],block_size,1,fp);

break;

}

}

fclose(fp);

showstatus("Для продолжения нажмите любую клавишу...");

showmessage(30,3,"Удаление данных"," Данные удалены");

puttext(1,1,80,25,buffer);

}

}

}

void clear()

{

FILE *fp;

if (filename[worktype][0]==NULL)

showmessage(30,3," Ошибка"," Рабочий файл не задан ",1);

else {

fp=fopen(filename[worktype],"w+b");

if (fp==NULL)

showmessage(30,3," Ошибка "," Ошибка открытия файла ",1);

else {

fclose(fp);

showstatus("Для продолжения нажмите любую клавишу...");

showmessage(25,3,"Очистка файла"," Файл пуст");

}

}

}

void del()

{

FILE *fp;

if (filename[worktype][0]==NULL)

showmessage(30,3," Ошибка"," Рабочий файл не задан ",1);

else

if (remove(filename[worktype]))

showmessage(25,3,"Ошибка. Невозможно удалить файл.",1);

else {

showmessage(25,3,"Удаление файла","Файл удален с диска");

strset(filename[worktype],NULL);

}

}

void main()

{

int cmd;

textcolor(WHITE);

textbackground(BLUE);

clrscr();

worktype=menu(menu1);

while ((worktype!=-1)&&(worktype!=3)) {

cmd=menu(menu2,1);

while (cmd!=-1) {

switch (cmd) {

case 0: selectfile();break;

case 1: viewfile();break;

case 2: inputdata();break;

case 3: correct();break;

case 4: delinfo();break;

case 5: clear();break;

case 6: del();break;

}

cmd=menu(menu2,1);

}

worktype=menu(menu1);

}

}

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

В программе были использованы основные стандартные операторы и функции. Далее по тексту представлены наиболее часто используемые из них.

Setcolor() - функция, задающая цвет символов в графическом режиме.

Setbkcolor() - функция, задающая цвет фона в графическом режиме.

Random(a) - функция, возвращающая случайное число от 0 до а.

Textcolor() - функция, задающая цвет символов в текстовой графике.

Textbackground() - функция, задающая цвет фона в текстовой графике.

В этих функциях в скобках пишется номер цвета.

Strcpy(arg1,arg2) - функция, копирующая строковую константу arg2 в строковую константу arg1.

_setcursortype(arg) - функция, задающая тип вводимого курсора. Если arg = _NORMALCURSOR, то курсор будет иметь обычный вид, если же _NOCURSOR, то курсора на экране видно не будет.

Window() - функция, выводящая на экран окно в текстовой графике.

Оператор выбора Switch{}. Оператор switch производит сопоставление значения с множеством констант.

Операторы break применяются для выхода из оператора switch. Константы в вариантах case должны быть различными, и если проверяемое значение не совпадает ни с одной из констант, выбирается вариант default. Программисту не обязательно предусматривать default.

Strlen(n)- функция возвращает колличество символов в строковой константе n.

Gotoxy(x,y)- функция перемещает курсор в координату x,y.

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

В данной программе организована работа с файлом:

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

void use_file(const char* fn)

{

FILE* f = fopen(fn,"w");

// работаем с f

fclose(f);

}

программа символ строка блок

Все это выглядит вполне нормально до тех пор, пока вы не поймете, что при любой ошибке, происшедшей после вызова fopen() и до вызова fclose(), возникнет особая ситуация, в результате которой мы выйдем из use_file(), не обращаясь к fclose().

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

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

При запуске программы появляется главное меню:

При выборе какого-нибудь пункта этого меню, возникает подменю:

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

Заключение

Язык "C"(произносится "си") - это универсальный язык программирования, для которого характерны экономичность выражения, современный поток управления и структуры данных, богатый набор операторов. Язык "C" не является ни языком "очень высокого уровня", ни "большим" языком, и не предназначается для некоторой специальной области применения. но отсутствие ограничений и общность языка делают его более удобным и эффективным для многих задач, чем языки, предположительно более мощные. Язык "C", первоначально предназначавшийся для написания операционной системы "UNIX" на ЭВМ DEC PDP-11, был разработан и реализован на этой системе Деннисом Ричи. Операционная система, компилятор с языка "C" и по существу все прикладные программы системы "UNIX" (включая все программное обеспечение, использованное при подготовке этой книги) написаны на "C". Коммерческие компиляторы с языка "C" существуют также на некоторых других ЭВМ, включая IBM SYSTEM/370, HONEYWELL 6000, INTERDATA 8/32. Язык "C", однако, не связан с какими-либо определенными аппаратными средствами или системами, и на нем легко писать программы, которые можно пропускать без изменений на любой ЭВМ, имеющей "C"-компилятор.

А что же такое С++?

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

Ключевым понятием С++ является класс. Класс - это тип, определяемый пользователем. Классы обеспечивают сокрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем.

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

Замечания для программистов на C

Чем лучше кто-нибудь знает C, тем труднее окажется избежать писания на C++ в стиле C, теряя, тем самым, некоторые возможные выгоды C++. Там указывается на области, в которых C++ позволяет делать что-то лучше, чем C. Макросы (#define) в C++ почти никогда не бывают необходимы; чтобы определять провозглашаемые константы, используйте const или enum, и inline - чтобы избежать лишних расходов на вызов функции. Старайтесь описывать все функции и типы всех параметров - есть очень мало веских причин этого не делать. Аналогично, практически нет причин описывать локальную переменную не инициализируя ее, поскольку описание может появляться везде, где может стоять оператор, - не описывайте переменную, пока она вам не нужна. Не используйте malloc() - операция new делает ту же работу лучше. Многие объединения не нуждаются в имени - используйте безымянные объединения.

Эффективность и структура

C++ был развит из языка программирования C и за очень немногими исключениями сохраняет C как подмножество. Базовый язык, C подмножество C++, спроектирован так, что имеется очень близкое соответствие между его типами, операциями и операторами и компьютерными объектами, с которыми непосредственно приходится иметь дело: числами, символами и адресами. За исключением операций свободной памяти new и delete, отдельные выражения и операторы C++ обычно не нуждаются в скрытой поддержке во время выполнения или подпрограммах. В C++ используются те же последовательности вызова и возврата из функций, что и в C. В тех случаях, когда даже этот довольно эффективный механизм является слишком дорогим, C++ функция может быть подставлена inline, удовлетворяя, таким образом, соглашению о записи функций без дополнительных расходов времени выполнения. Одним из первоначальных предназначений C было применение его вместо программирования на ассемблере в самых насущных задачах системного программирования. Когда проектировался C++, были приняты меры, чтобы не ставить под угрозу успехи в этой области. Различие между C и C++ состоит в первую очередь в степени внимания, уделяемого типам и структурам. C выразителен и снисходителен. C++ еще более выразителен, но чтобы достичь этой выразительности, программист должен уделить больше внимания типам объектов. Когда известны типы объектов, компилятор может правильно обрабатывать выражения, тогда как в противном случае программисту пришлось бы задавать действия с мучительными подробностями. Знание типов объектов также позволяет компилятору обнаруживать ошибки, которые в противном случае остались бы до тестирования. Заметьте, что использование системы типов для того, чтобы получить проверку параметров функций, защитить данные от случайного искажения, задать новые операции и т.д., само по себе не увеличивает расходов по времени выполнения и памяти. Особое внимание, уделенное при разработке C++ структуре, отразилось на возрастании масштаба программ, написанных со времени разработки C. Маленькую программу (меньше 1000 строк) вы можете заставить работать с помощью грубой силы, даже нарушая все правила хорошего стиля. Для программ больших размеров это не совсем так. Если программа в 10 000 строк имеет плохую структуру, то вы обнаружите, что новые ошибки появляются так же быстро, как удаляются старые. C++ был разработан так, чтобы дать возможность разумным образом структурировать большие программы таким образом, чтобы для одного человека не было непомерным справляться с программами в 25 000 строк. Существуют программы гораздо больших размеров, однако те, которые работают, в целом, как оказывается, состоят из большого числа почти независимых частей, каждая из которых намного ниже указанных пределов. Естественно, сложность написания и поддержки программы зависит от сложности разработки, а не просто от числа строк текста программы, так что точные цифры, с помощью которых были выражены предыдущие соображения, не следует воспринимать слишком серьезно. Не каждая часть программы, однако, может быть хорошо структурирована, независима от аппаратного обеспечения, легко читаема и т.п. C++ обладает возможностями, предназначенные для того, чтобы непосредственно и эффективно работать с аппаратными средствами, не беспокоясь о безопасности или простоте понимания. Он также имеет возможности, позволяющие скрывать такие программы за элегантными и надежными интерфейсами. В этой книге особый акцент делается на методах создания универсальных средств, полезных типов, библиотек и т.д. Эти средства пригодятся как тем программистам, которые пишут небольшие программы, так и тем, которые пишут большие. Кроме того, поскольку все нетривиальные программы состоят из большого числа полунезависимых частей, методы написания таких частей пригодятся и системным, и прикладным программистам. У кого-то может появиться подозрение, что спецификация программы с помощью более подробной системы типов приведет к увеличению исходных текстов программы. В C++ это не так; C++ программа, описывающая типы параметров функций, использующая классы и т.д., обычно немного короче эквивалентной C программы, в которой эти средства не используются.

Список литературы

1. Бьерн Страуструп «Введение в язык С++».

2. Герберт Шилд «Программирование на Borland C++».

3. А. Л. Фридман “Основы объектно-ориентированного программирования на языке С++”.

4. Т.А.Павловская “Программирование на языке высокого уровня”.

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


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

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

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

  • Постановка задачи и математическое описание ее решения. Назначение программного обеспечения. Описание принятых идентификаторов. Выбор языка программирования и написание программы на входном языке. Методика отладки программы и проведение ее тестирования.

    курсовая работа [96,1 K], добавлен 25.06.2013

  • Разработка программы тестирования студентов по MS PowerPoint с кодом на языке Delphi. Создание алгоритма для решения функциональных требований задачи. Описание переменных, вспомогательных процедур, входных и выходных данных для реализации программы.

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

  • Описание алгоритма решения задачи графическим способом. Вывод элементов массива. Описание блоков укрупненной схемы алгоритма на языке Pascal. Листинг программы, а также ее тестирование. Результат выполнения c помощью ввода различных входных данных.

    контрольная работа [150,4 K], добавлен 03.05.2014

  • Встроенные типы данных, основные конструкции, структуры и применение языка Javа. Введение в интегрированную среду разработки Eclipse. Листинг программы, иллюстрирующей работу с одномерными массивами (создание массива). Спецификация класса Figure.

    методичка [1,4 M], добавлен 30.06.2009

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

    лабораторная работа [51,2 K], добавлен 14.05.2011

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

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

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

    курсовая работа [2,2 M], добавлен 13.12.2015

  • Математическое обоснование метода решения задачи: определенный интеграл, квадратурная формула Симпсона (формула парабол). Словесное описание алгоритма и составление его блок-схемы. Выбор языка программирования. Текст программы решения задачи, ее листинг.

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

  • Описание алгоритма решения задачи по вычислению суммы элементов строк матрицы с использованием графического способа. Детализация укрупненной схемы алгоритма и разработка программы для решения задачи в среде Turbo Pascal. Листинг и тестирование программы.

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

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