1 / 1 / 0
Регистрация: 07.02.2016
Сообщений: 6
1

Что за версия языка с++?

09.05.2019, 14:20. Показов 1054. Ответов 3
Метки нет (Все метки)

Скачал исходник с MIT, датируемый 1990 годом. Вроде как плюсы, но синтаксис неясный, gcc его не компилит.

C++
1
2
3
4
5
6
void main(argc,argv)
     int argc;
     char *argv[];
{
...
}
Вот такие конструкции я обнаружил уже внутри.

Может кто подсказать, как скомпилировать это чудо?

Кликните здесь для просмотра всего текста
/* ACMS_EXAMPLE.C */
/* Example main program to demonstrate arithmetic coding and decoding */
/* Ashok Popat 6/90 --- modified version of prog. given in thesis */

/*
* Copyright 1990 Massachusetts Institute of Technology
* All rights reserved.
*
* Permission to use, copy, or modify this software and its documentation
* for educational and research purposes only and without fee is hereby
* granted, provided that this copyright notice appear on all copies and
* supporting documentation. For any other uses of this software, in
* original or modified form, including but not limited to distribution
* in whole or in part, specific prior permission must be obtained from
* M.I.T. and the author. These programs shall not be used, rewritten,
* or adapted as the basis of a commercial software or hardware product
* without first obtaining appropriate licenses from M.I.T. M.I.T. makes
* no representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/


#include <stdio.h>
#include <math.h> /* for log and pow */

#define MAXK 512 /* max allowable size of source alphabet */
#define MAXN 10000 /* max allowable length of source string */
#define MAXM 90000 /* max allowable length of codestring (be conservative) */

extern void encode(),decode(); /* routines we're trying to demonstrate */
long random();
double maxran;
double peakiness;

void main(argc,argv)
int argc;
char *argv[];
{
void gensource(); /* generates random source sequence according to probs*/
double entropy(); /* computes source entropy */
int strings_match(); /* to check for correct decoding */

double avelength; /* average number of bits per letter */
long nlet,nbits; /* length of source string and code string */
int alphsize; /* number of letters in source alphabet */

double diff;
static double probs[MAXK];

int sourcebuf[MAXN],codebuf[MAXM],destbuf[MAXN];

double totprob = 0.0;
int i;

if (argc != 3) {
fprintf(stderr,"usage: %s alphsize peakiness\n", argv[0]);
fprintf(stderr,"\twhere 2 <= alphsize < %d\n",MAXK);
fprintf(stderr,"\tand peakiness > 0\n",MAXK);
exit(-1);
}
sscanf(argv[1],"%d",&alphsize);
sscanf(argv[2],"%lf",&peakiness);

maxran = pow(2.0,31.0) - 1.0; /* max poss. val. of random() */

/* probabilties are random in this version --- change as desired */
/*
* for (i=0; i<alphsize; i++) {
* probs[i] = ((double) random())/maxran;
* totprob += probs[i];
* }
*/

/* probabilities have a discretized Laplacian distribution */
/* reduce entropy by increasing peakiness */

for (i=0; i<alphsize; i++) {
diff = fabs((double) (i-alphsize/2));
probs[i] = exp(-diff*peakiness);
totprob += probs[i];
}
for (i=0; i<alphsize; i++) probs[i] /= totprob;


nlet = 10000;

/* fill up source buffer: */
printf("generating source...\n");
gensource(sourcebuf,alphsize,nlet,probs);

/* encode source, putting resulting bits in codebuf, and set nbits: */
printf("encoding...\n");
encode(alphsize,probs,sourcebuf,nlet,16,15,codebuf ,&nbits);

avelength = ((double) nbits)/((double) nlet); /* ave. per-letter length */

printf("decoding...\n");
/* decode, putting result in destbuf: */
decode(alphsize,probs,destbuf,nlet,16,15,codebuf,n bits);

printf("verifying...\n");
/* verify results: */
if (strings_match(nlet,sourcebuf,destbuf))
printf("No errors.\n");
else
printf("Errors were found.\n");

/* report performance: */
printf("Entropy = %lf\nActual codebits per letter = %lf\n",
entropy(alphsize,probs),avelength);
}

int strings_match(n,a,b)
long n;
int *a,*b;
{
long i;
for (i=0;i<n;i++) {
if (*(a+i) != *(b+i)) return(0);
}
return(1);
}

#define SMALLNUM 1.0e-14
#define happylog(x) ( x>SMALLNUM ? log(x) : log(SMALLNUM))

double entropy(k,p)
int k;
double *p;
{
double sum = 0.0;

while (k-- > 0) sum -= *(p+k) * happylog(*(p+k));

return(sum/log(2.0));
}
#undef SMALLNUM

void gensource(buf,k,n,p)
double *p;
int *buf,k;
long n;
{
double ranvar,thresh[MAXK], invmaxran;
int *bufcopy;
int i;

/* divide unit interval into k segments, each corresponding to a
** different source letter, and each having a width equal to the
** probability of the corresponding source letter. Select a letter
** by generating a uniformly-distributed random number between
** 0 and 1, then finding the letter that corresponds to the segment
** that contains the random number. */

invmaxran = 1.0/maxran;

bufcopy = buf;
/* set up thresholds to be cum. prob of letters: */
thresh[0] = 0;
for (i=1;i<k;i++) thresh[i] = thresh[i-1] + *(p+i-1);

while (n-- > 0) {
ranvar = ((double) random()) * invmaxran;
for (i=k-1;i>=0;i--) {
if (thresh[i] < ranvar) {
*bufcopy++ = i;
break;
}
}
}
}




__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2019, 14:20
Ответы с готовыми решениями:

Какая версия языка у языка С++?
Здравствуйте! Собираюсь писать егэ по информатике уже меньше, чем через две недели. Собираюсь...

Что за конструкция языка
int a={{{1,2},3},{{4,5},6},{{7,8},9}}; как можно вывести значение 6 например? как вообще...

Что такое HWND с точки зрения языка?
Привет, начал потихоньку с win api знакомиться, полез вглубь исходников студии, чтобы понять, чем...

Что изучать после изучения основ языка
Доброго дня друзья. У меня такой вопрос. Подруга изучила основы С++, параллельно изучает книгу по...

3
Продавец времени
7128 / 4004 / 924
Регистрация: 12.03.2015
Сообщений: 18,825
09.05.2019, 14:27 2
MSQC очень похож.
0
16085 / 8686 / 2121
Регистрация: 30.01.2014
Сообщений: 14,972
09.05.2019, 14:42 3
Лучший ответ Сообщение было отмечено greenisius как решение

Решение

Цитата Сообщение от greenisius Посмотреть сообщение
Вроде как плюсы
Это не "плюсы", а язык Си.
Декларация функции в стиле K&R. Современные компиляторы С все еще его поддерживают.

Добавлено через 9 минут
Цитата Сообщение от greenisius Посмотреть сообщение
gcc его не компилит.
Прекрасно компилирует: https://rextester.com/GFDD49157
Нужно только обеспечить наличие функций
C++
1
extern void encode(),decode(); /* routines we're trying to demonstrate */
Как видно из комментария, они умышленно оставлены без определения.
Вероятно в том месте, откуда вы его скачали, есть какие-то пояснения.
0
Эксперт С++
8719 / 4262 / 950
Регистрация: 15.11.2014
Сообщений: 9,669
09.05.2019, 14:42 4
Цитата Сообщение от greenisius Посмотреть сообщение
void main(argc,argv)
старая добрая сишка
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2019, 14:42
Помогаю со студенческими работами здесь

Версия языка
На егэ по информатике в 27 задании требуют указать: язык программирования и его версию(...укажите...

Версия языка
Всем привет. Возможно, слишком глупый вопрос. Но. Если я использую компилятор Dev-C++ 5.11 и пишу...

как просит биос леново ноутбук версия биоса 2-54 на офисал саите версия 2-53 что ето такое?
вопрос как просит биос леново ноутбук версия биоса 2-54 на офисал саите версия 2-53 сто ето такое?

Старые книги, новая версия языка
Здравствуйте! Сейчас версия 6.0. Я могу безполезненно для себя читать &quot;Шилдта. Полное руководство&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru