Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Язык программирования Turbo Pascal

Читайте также:
  1. БИС ППИ КР580ВВ55А. Принцип действия, порядок программирования.
  2. Блок программирования, регуляции и контроля сложных форм деятельности
  3. Геометрическая интерпретация задачи линейного программирования
  4. Задачи линейного программирования
  5. Метод динамического программирования как алгоритмическое выражение достаточно общей теории управления
  6. Общие принципы и средства программирования для Windows. Язык Windows. Краткий обзор среды Windows. Преимущества использования Windows.
  7. Определение оптимальной схемы доставки груза с помощью распределительного метода линейного программирования

Задание на разработку

Бесконечную десятичную периодическую дробь, заданную в виде непериодической части и периода, перевести в Р-ичную систему счисления (1<Р<10), выделив непериодическую часть и период у результата.

 

Метод решения

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

1) если при умножении периода дроби на некоторое число количество цифр в произведении равно количеству цифр в периоде исходного числа, то период результата равен полученному произведению. В этом случае переходим к п. 6, в противном случае – к п. 2;

2) «лишними» цифрами считаются n-k первых слева цифр результата, где n - количество цифр в результате, k – количество цифр в периоде исходной дроби;

3) Число, образованное «лишними» цифрами, складывается с числом, образованным правыми k цифрами промежуточного результата;

4) если количество цифр, получившихся в результате сложения, больше, чем k, то процесс следует повторить с п. 2;

5) если количество цифр результата сложения стало равным количеству цифр периода исходной дроби, то период произведения равен последнему результату суммирования;

6) непериодическая (целая – для чисто периодических дробей) часть результата равна сумме чисел, образованных из «лишних» цифр каждого этапа.

 

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

in out
n per p  
      4.(45)
      5.(267365374526)
      3.12407(32407)

 

 

Язык программирования Turbo Pascal

Turbo Pascal является реализацией Pascal'я. Самая первая версия Pascal быля разработана на кафедре информатики Стэндфордского университета швейцарским ученым Николаусом Виртом в 1968 году. С момента появления Pascal на рынке продуктов прошло много времени прежде чем он получил всеобщее признание. В середине 80-х годов американской фирмой Borland International, Inc была создана реализация языка Pascal, известная и по сей день под именем Turbo Pascal. Эта фирма объединила очень быстрый компилятор с редактором текста и добавила к стандартному Паскалю мощное расширение, что способствовало успеху первой версии этого языка.

В 1985 году на рынке ПЭВМ появился язык программирования Турбо Паскаль (версия 3.0) с компилятором стандартного Паскаля. С тех пор Паскаль стал применяться в общеобразовательных, профессионально-технических школах и в сфере высшего образования в качестве «первого» языка программирования. Благодаря простоте использования язык Турбо Паскаль получил широкое распространение и в любительских кругах. Повышению популярности Турбо Паскаля способствовал набор небольших сопутствующих программ (Toos), позволяющих получать чрезвычайно компактную, быструю и легко читаемую программу. Эти качества Турбо Паскаля были высоко оценены и в среде профессиональных программистов. Встроенный редактор текста использует достаточно широко распространенную систему команд, берущую начало от пакета WordStar и хорошо знакомую каждому, кто интенсивно использует ПЭВМ.

В появившемся со временем пакете Турбо Паскаль 4.0 было устранено большинство подвергавшихся критике ограничений компилятора и была повышена производительность системы. Кроме того, новый компилятор версии 4.0 имел существенные отличия от предыдущей версии. Наиболее важным нововведением была ИNIТ-концепция, заимствованная из языка Модула-2. Это дало возможность реализовать в рамках ТП разработку крупных программных продуктов.

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

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

Кроме того, в ТП 5.0 были расширены возможности отладки программ и обеспечена возможность поддержки расширенной памяти в стандарте Lotus-Intel-Microsoft (SLIMS/EMS 4.0). Сокращение EMS обозначает Expanded Memory Specification (спецификация расширенной памяти). Нельзя путать этот вид дополнительной памяти с другим — Extended Memory. EMS имеется на обычных ПЭВМ класса XT, в то время как Extended Memory — только на машинах АТ-класса (с процессором 286, 386 и выше) при объеме памяти свыше 1 Мбайта.

В этой версии были также исправлены и улучшены библиотеки графических процедур, поставляемые вместе с пакетом ТП и обеспечивающие полную совместимость с графическими адаптерами класса VGA (Video Graphics Array).

В рамках версии ТП 5.5 были осуществлены дальнейшие преобразования в направлении улучшения технических характеристик пакета. Наряду с внутренними улучшениями и новыми возможностями встроенной справочной системы Help, а также большим набором учебных примеров, важным нововведением явилась реализация в языке концепции объектно-ориентированного программирования (ООП).

Через некоторое время на рынке появился ТП 6.0, в котором теоретическая концепция объектно-ориентированного программирования была реализована практически с полным набором объектов, которые могли использоваться для решения прикладных задач. Кроме того, реализация системы меню приведена в соответствие со стандартом SAA (Turbo Vision). В качестве практического примера использования новых возможностей был реализован текстовый редактор, встроенный в IDE ~ Integrated Development Environment — интегрированную инструментальную оболочку. При этом сторонники программирования на ТП 6.0 получили возможность не только работать со встроенным многооконным текстовым редактором, но и использовать мышь, которая значительно облегчает работу пользователя.

В 1992 году фирма Borland International представила пользователям очередную версию языка Паскаль — Турбо Паскаль 7.0. Наряду со всеми преимуществами, которые унаследованы от предыдущей версии (многооконный режим работы, возможность использования мыши, возможность использования языка программирования низкого уровня Ассемблер, возможность создавать объектно-ориентированные программы), в ТП 7.0 были произведены изменения и улучшения. Во-первых: появилась возможность выделять определенным цветом различные элементы исходного текста (зарезервированные слова, идентификаторы, числа и т. д.), позволяющая даже неопытным пользователям устранять ошибки на этапе ввода исходного текста. Во-вторых: язык программирования ТП 7.0 был расширен (появилась возможность использовать типизированный адресный оператор, открытые массивы и строки и т. д.), что предоставило пользователю дополнительные возможности при решении повседневных задач. В-третьих: был улучшен компилятор, вследствие чего «коды программ» стали более эффективными. В-четвертых: был улучшен интерфейс пользователя. Кроме того, в ТП 7.0 расширены возможности объектно-ориентированного программирования (в частности, расширены и улучшены возможности Turbo Vision).

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

Си (англ. C) — стандартизированный процедурный язык программирования, разработанный в начале 1970-х годов сотрудниками Bell Labs Кеном Томпсоном и Денисом Ритчи как развитие языка Би. Си был создан для использования в операционной системе UNIX. С тех пор он был портирован на многие другие операционные системы и стал одним из самых используемых языков программирования. Си ценят за его эффективность. Он является самым популярным языком для создания системного программного обеспечения. Его также часто используют для создания прикладных программ. Несмотря на то, что Си не разрабатывался для новичков, он активно используется для обучения программированию. В дальнейшем синтаксис языка Си стал основой для многих других языков. Для языка Си характерны лаконичность, стандартный набор конструкций управления потоком выполнения, структур данных и обширный набор операций.

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

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

Си (как и ОС UNIX, с которой он долгое время был связан) создавался программистами и для программистов, круг которых был бы ненамного шире круга разработчиков языка. Несмотря на это, область использования языка значительно шире задач системного программирования.

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

· простую языковую базу, из которой вынесены в библиотеки многие существенные возможности, вроде математических функций или функций управления файлами;

· ориентацию на процедурное программирование, обеспечивающую удобство применения структурного стиля программирования;

· систему типов, предохраняющую от бессмысленных операций;

· использование препроцессора для, например, определения макросов и включения файлов с исходным кодом;

· непосредственный доступ к памяти компьютера через использование указателей;

· минимальное число ключевых слов;

· передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке эмулируется с помощью указателей);

· указатели на функции и статические переменные

· области действия имён;

· структуры и объединения — определяемые пользователем собирательные типы данных, которыми можно манипулировать как одним целым;

Вот некоторые особенности других языков программирования, которых не имеет Си:

· автоматическое управление памятью;

· поддержка объектно-ориентированного программирования (при этом первые версии C++ генерировали код программы на языке Си);

· замыкание;

· вложенные функции (существуют компиляторы языка Си реализующие эту функцию, например компилятор GNU);

· полиморфизм функций и операторов;

· встроенная поддержка многозадачности и сети

· функции высшего порядка

· карринг.

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

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

 

 

Функция NextDig

 

 

Листинг

На ТР

{

input:

1) n - nonperiodic part

2) per - periodic part

3) w - base of new number

 

output:

p-based number with period inside braces.

}

 

function nextDig(var a,per: longint; p,pf,pp: longint): char;

var

x: char;

begin

a:=a*w;

per:=per*w;

while (per div pp)<>0 do begin

a:=a+(per div pp);

per:=per+(per div pp);

per:=per mod pp;

end;

x:=chr(ord('0') + (f div pf));

a:=a mod pf;

nextDig:=x;

end;

 

var

xf,xxf,x,xx,l: longint;

r: double;

pf,pp,i,re,f,per,p: longint;

s: string;

 

begin

 

readln(r);

readln(per);

readln(p);

re:=trunc(r);

pf:=1;

while abs(frac(r))>0.000001 do begin

r:=r*10;

pf:=pf*10;

end;

a:=trunc(r) mod pf;

s:='';

while re<>0 do begin

s:=chr(ord('0')+(re mod p))+s;

re:=re div p;

end;

if s='' then s:='0';

s:=s+'.';

pp:=1;

while pp<=per do pp:=pp*10;

x:=per;

xf:=a;

for i:=1 to pp do begin

nextDig(xf,x,p,pf,pp);

end;

l:=0;

xx:=x;

xxf:=xf;

repeat

l:=l+1;

nextDig(xxf,xx,p,pf,pp);

until (xx=x) and (xxf=xf);

x:=per;

xf:=a;

for i:=1 to l do nextDig(xf,x,p,pf,pp);

while (per<>x) or (f<>xf) do begin

s:=s+nextDig(f,per,p,pf,pp);

end;

s:=s+'(';

for i:=1 to l do begin

s:=s+nextDig(f,per,p,pf,pp);

end;

s:=s+')';

writeln(s);

 

 

end.

 

 

На ТС

/*

input:

1) n - nonperiodic part

2) per - periodic part

3) p - base of new number

 

output:

p-based number with period inside braces.

*/

#include <stdio.h>

#include <math.h>

#include <string.h>

 

char* nextDig(long* f, long* per, long p, long pf, long pp)

{

char* c = new char[2];

f[0]=f[0]*p;

per[0]=per[0]*p;

while (per[0]/pp) {

f[0]+=(per[0]/pp);

per[0]+=(per[0]/pp);

per[0]%=pp;

}

c[0]= '0'+(f[0]/pf);

c[1]=0;

f[0]%=pf;

return c;

}

 

 

long xf,xxf,x,xx,l;

double r;

long pf,pp,i,re,f,per,p,k;

char* s;

char* ts;

 

int main(void) {

scanf("%lf",&r);

scanf("%d",&per);

scanf("%d",&p);

re=long(floor(r));

pf=1;

while (fabs(r-floor(r))>0.000001) {

r*=10;

pf*=10;

}

f = long(floor(r)) % pf;

s = new char[200];

s[0] = 0;//strcat(s, "");

while (re) {

ts = new char[2];

ts[0] = '0'+(re%p);

ts[1] = 0;

ts = strcat(ts, s);

s = ts;

re/=p;

}

if (strlen(s)==0) {s = strcat(s, "0");}

s = strcat(s, ".");

pp=1;

k=0;

while (pp<=per) {pp*=10;k++;}

xf=f;

while (xf) {k++; xf/=p;}

x=per;

xf=f;

for (i=1; i<=2*k+2; i++) {

nextDig(&xf,&x,p,pf,pp);

}

l=0;

xx=x;

xxf=xf;

do {

l++;

nextDig(&xxf,&xx,p,pf,pp);

} while (!((xx==x) && (xxf==xf)));

x=per;

xf=f;

k=0;

for (i=0; i<l; i++) nextDig(&xf,&x,p,pf,pp);

xx=per;

xxf=f;

while (!((xx==x) && (xxf==xf))) {

k++;

nextDig(&xf,&x,p,pf,pp);

nextDig(&xxf,&xx,p,pf,pp);

}

x=per;

xf=f;

for (i=0; i<k; i++) nextDig(&xf,&x,p,pf,pp);

while ((per!=x) || (f!=xf)) {

s = strcat(s, nextDig(&f,&per,p,pf,pp));

}

s = strcat(s, "(");

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

s = strcat(s, nextDig(&f,&per,p,pf,pp));

}

s = strcat(s, ")");

printf("%s",s);

 

return 0;

}


Дата добавления: 2015-12-07; просмотров: 112 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.04 сек.)