в общем есть файл: http://narod.ru/disk/50601571001.6f196a4f94f840ee158897942c994b4f/8.c.html
программа, написанная на си++ что надо дописать чтобы она стала как си?
или по-другому... как можно скомпилировать файл си++ так, как буд-то он написан на си? (т. е в строке писать не g++ (имя проги) а gcc (имя проги))
Другие языки программирования и технологии
Как из си++ сделать си?)... подробнее
Бинарное дерево на Си (код максимально сжат, чтобы вместится) :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct btt *btp;
typedef struct btt {
int v;
btp l;
btp r;
} btt;
#define anc(n, v) \
do { n = malloc(sizeof(*n)); n->l = 0; n->r = 0; n->v = v; } while (0)
void bins(btp *b, int v) {
if (*b) {
if (v < (*b)->v) {
if ( (*b)->l ) {
bins(&((*b)->l), v);
} else {
anc((*b)->l, v);
}
} else {
if ( (*b)->r ) {
bins(&((*b)->r), v);
} else {
anc((*b)->r, v);
}
}
} else {
anc((*b), v);
}
}
btp bfnd(btp b, int v) {
if (b) {
if (v == b->v) {
return b;
}
if (v > b->v) {
return bfnd(b->r, v);
}
if (v < b->v) {
return bfnd(b->l, v);
}
}
return 0;
}
#define cpf(d, s) do { (d)->v = (s)->v; (d)->l = (s)->l; (d)->r = (s)->r; free(s); } while(0)
void bdel(btp *b, int v) {
if (*b) {
if (v > (*b)->v) {
bdel(&((*b)->r), v);
}
if (v < (*b)->v) {
bdel(&((*b)->l), v);
}
if (v == (*b)->v) {
btp d;
if ( (*b)->l && (*b)->r ) {
d = (*b)->r;
while (d->l) {
d = d->l;
}
(*b)->v = d->v;
bdel(&((*b)->r), v);
} else if ( (*b)->l ) {
d = (*b)->l;
cpf((*b), d);
} else if ( (*b)->r ) {
d = (*b)->r;
cpf((*b), d);
} else {
free(*b);
*b = 0;
}
}
}
return;
}
void btrv(btp b) {
if (b) {
btrv(b->l);
printf("M", b->v);
btrv(b->r);
}
}
#define gi() atoi(fgets(ch, sizeof(ch), stdin))
int main() {
int n;
int run = 1;
btp b = 0;
btp w = 0;
char ch[128];
srand(time(NULL));
for (n = 0; n < 100; n++) {
bins(&b, rand() % 1000);
}
while (run) {
char c;
printf("? ");
c = getchar();
if (c != '\n') {
getchar();
}
switch (c) {
case 's':
printf("n? ");
w = bfnd(b, gi());
printf(w ? "found: %d\n" : "not found\n", w? w->v : 0);
break;
case 'a':
printf("n? ");
bins(&b, gi());
break;
case 'd':
printf("n? ");
bdel(&b, gi());
break;
case 'p':
btrv(b);
puts("");
break;
case 'q':
run = 0;
break;
default:
puts("available cmds: (s)earch, (a)dd, (d)el, (p)rint, (q)uit\n");
break;
}
}
return 0;
}
> как можно скомпилировать файл си++ так, как буд-то он написан на си?
Никак. Переписывай.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct btt *btp;
typedef struct btt {
int v;
btp l;
btp r;
} btt;
#define anc(n, v) \
do { n = malloc(sizeof(*n)); n->l = 0; n->r = 0; n->v = v; } while (0)
void bins(btp *b, int v) {
if (*b) {
if (v < (*b)->v) {
if ( (*b)->l ) {
bins(&((*b)->l), v);
} else {
anc((*b)->l, v);
}
} else {
if ( (*b)->r ) {
bins(&((*b)->r), v);
} else {
anc((*b)->r, v);
}
}
} else {
anc((*b), v);
}
}
btp bfnd(btp b, int v) {
if (b) {
if (v == b->v) {
return b;
}
if (v > b->v) {
return bfnd(b->r, v);
}
if (v < b->v) {
return bfnd(b->l, v);
}
}
return 0;
}
#define cpf(d, s) do { (d)->v = (s)->v; (d)->l = (s)->l; (d)->r = (s)->r; free(s); } while(0)
void bdel(btp *b, int v) {
if (*b) {
if (v > (*b)->v) {
bdel(&((*b)->r), v);
}
if (v < (*b)->v) {
bdel(&((*b)->l), v);
}
if (v == (*b)->v) {
btp d;
if ( (*b)->l && (*b)->r ) {
d = (*b)->r;
while (d->l) {
d = d->l;
}
(*b)->v = d->v;
bdel(&((*b)->r), v);
} else if ( (*b)->l ) {
d = (*b)->l;
cpf((*b), d);
} else if ( (*b)->r ) {
d = (*b)->r;
cpf((*b), d);
} else {
free(*b);
*b = 0;
}
}
}
return;
}
void btrv(btp b) {
if (b) {
btrv(b->l);
printf("M", b->v);
btrv(b->r);
}
}
#define gi() atoi(fgets(ch, sizeof(ch), stdin))
int main() {
int n;
int run = 1;
btp b = 0;
btp w = 0;
char ch[128];
srand(time(NULL));
for (n = 0; n < 100; n++) {
bins(&b, rand() % 1000);
}
while (run) {
char c;
printf("? ");
c = getchar();
if (c != '\n') {
getchar();
}
switch (c) {
case 's':
printf("n? ");
w = bfnd(b, gi());
printf(w ? "found: %d\n" : "not found\n", w? w->v : 0);
break;
case 'a':
printf("n? ");
bins(&b, gi());
break;
case 'd':
printf("n? ");
bdel(&b, gi());
break;
case 'p':
btrv(b);
puts("");
break;
case 'q':
run = 0;
break;
default:
puts("available cmds: (s)earch, (a)dd, (d)el, (p)rint, (q)uit\n");
break;
}
}
return 0;
}
> как можно скомпилировать файл си++ так, как буд-то он написан на си?
Никак. Переписывай.
Похожие вопросы
- Как на языке программирования си сделать, чтобы при вводе полного бреда программа не поломалась?
- Разница между Си и Си++
- Си или Си шарп (С#)???
- Какой СИ. Какой СИ лучше? си плюс плюс или си шарп? что стоит учить в первую очередь?
- С Си++ на си шарп
- Дан массив из 20 элементов. Найти три «соседних» элементов, сумма значений которых максимальна. как это на СИ сделать?
- какая книга лучшая для изучения си или си++ ?с нуля. ну для новичков.
- в языке СИ (просто СИ!!!!) чем отличаются два цикла. for(t=0; t
- Поменять местами первый и последний отрицательные элементы массива B (18). (Язык Си) (Язык Си)
- Программирование. Си шарп, си ++