2 программы на С++, нужно переписать в С.. [HELP]

stm8851547

Programma2__________________________________________________________________________
#define UNIX_PLATFORM 0
#include <stdio.h>
#if UNIX_PLATFORM
#include <map.h>
#include <string.h>
#else
#include <map>
#include <string>
using namespace std;
#endif
#define MAX_BUF 10000
int main {
map <string, int> countwords;
string t;
char buf[MAX_BUF];
while (scanf("%s", buf) == 1) {
t = buf;
// if (t == "QUIT")
// break;
countwords[t]++;
}
for (map<string, int>::const_iterator CI = countwords.begin; CI != countwords.end; CI++) {
int count = CI->second;
t = CI->first;
printf("Count = %4d Word = %s\n", count, t.c_str;
}
scanf("%s", buf);
return 0;
}
Programma3__________________________________________________________________________
#include <stdio.h>
#include <string.h>
#define MAX_BUF 100000
struct Number {
bool minus;
int len;
int * digits;
void Clear {
minus = false;
len = 0;
if (digits)
delete[] digits;
digits = 0;
}
Number {
digits = 0;
Clear;
}
~Number {
Clear;
}
void SetLen(int nlen) {
Clear;
len = nlen;
digits = new int[len];
}
bool ReadFromFile(FILE * fp) {
char Buf[MAX_BUF], *buf = Buf;
Clear;
fgets(buf, MAX_BUF, fp);
while (!*buf == '-') || (*buf == 0) || *buf >= '0') & (*buf <= '9' {
buf++;
}
if (*buf == 0)
return false;
if (*buf == '-') {
minus = true;
buf++;
}
int maxlen = strlen(buf);
digits = new int[maxlen];
int * cur = digits + maxlen - 1;
for (; *buf != 0; buf++) {
if *buf >= '0') & (*buf <= '9' {
*cur-- = *buf - '0';
len++;
}
}
int sh = maxlen - len;
if (sh > 0) {
for (int i = 0; i < len; i++) {
digits[i] = digits[i + sh];
}
}
return true;
}
void WriteToFile(FILE * fp) {
if (minus)
fprintf(fp, "-");
bool first = true;
for (int i = len-1; i >=0; i--) {
if (first) {
if (digits[i] != 0) {
fprintf(fp, "%d", digits[i]);
first = false;
}
} else
fprintf(fp, "%d", digits[i]);
}
}
int GetDigit(int k) {
if (k >= len)
return 0;
else
return digits[k];
}
};
void SimpleSub(Number& A, Number& B, Number& C) {
C.Clear;
C.SetLenA.len >= B.len) ? A.len + 1 : B.len + 1);
int count = 0;
for (int i = 0; i < C.len; i++) {
count += A.GetDigit(i) + B.GetDigit(i);
C.digits[i] = count % 10;
count /= 10;
}
}
void SimpleDif(Number& A, Number& B, Number& C) {
C.Clear;
C.SetLen(A.len);
int count = 0;
for (int i = 0; i < C.len; i++) {
count += A.GetDigit(i) - B.GetDigit(i);
int t = count % 10;
if (t < 0)
t += 10;
C.digits[i] = t;
count = (count - t) / 10;
}
}
bool SimpleGreater(Number& A, Number& B) {
int start = (A.len >= B.len) ? A.len : B.len;
for (int i = start; i >= 0; i--) {
if (A.GetDigit(i) > B.GetDigit(i
return true;
if (A.GetDigit(i) < B.GetDigit(i
return false;
}
return false;
}
bool Greater(Number& A, Number& B) {
if (A.minus) {
if (B.minus) {
return SimpleGreater(B, A);
} else {
return false;
}
} else {
if (B.minus) {
return true;
} else {
return SimpleGreater(A, B);
}
}
}
void Sub(Number& A, Number& B, Number& C) {
if (A.minus == B.minus) {
SimpleSub(A, B, C);
C.minus = A.minus;
} else {
if (SimpleGreater(A, B {
SimpleDif(A, B, C);
C.minus = A.minus;
} else {
SimpleDif(B, A, C);
C.minus = B.minus;
}
}
}
void Dif(Number& A, Number& B, Number& C) {
B.minus = !B.minus;
Sub(A, B, C);
B.minus = !B.minus;
}
int main {
FILE * fp1 = fopen("Number1.txt", "r");
FILE * fp2 = fopen("Number2.txt", "r");
FILE * fp3 = fopen("Number3.txt", "w");
Number A, B, C;
A.ReadFromFile(fp1);
B.ReadFromFile(fp2);
Sub(A, B, C);
C.WriteToFile(fp3);
fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;
}

evgen5555

Ёхарный пездец, обрамляйте в теги [code][/code], если хотите, чтобы хоть кто-то посмотрел, что это за проги.

Ivan8209

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

stm8851547

esli b ya znal kak gramotno/chisto napisat'
to ne vikladival bi

Ivan8209

Выкини эти программы к чёрту и напиши заново.
Ещё лучше было бы сказать, какую задачу ты решаешь.
Возможно, что даже си --- это перебор.
---
...Я работаю антинаучным аферистом...

alexkravchuk

Проблема в первой задаче - в том, что map (хеш-массив, ассоциативный массив - в терминах многих других языков типа perl/php) входит как составляющая в STL, которая является стандартной частью C++, в то время как в C ничего подобного не входит. Грамотная реализация map - это не такая простая вещь, но возможно тебе нужен более простой её аналог, поэтому нужно уточнить задание для этого. Если нет требований к скорости работы, например если устраивает сложность выполнения в оценочно N^2 от числа слов - то в принципе, совсем несложно. Короче, проблема здесь в библиотеках.
Вторая задача - в этом плане проще, но просто объём кода большой... Всё довольно легко переносится, только нужно аккуратно это дело разобрать, и время какое-то нужно. Ничего особо c++ специфичного там нет, всё можно адаптировать к C.

bleyman

Хм.
Если ты вдруг сходишь к метро и купишь мне пять пива (жигулёвского полулитрового а потом принесёшь куда-нибудь в Б-1343, то я прям при тебе за 20 минут (ну или полчаса, вряд ли больше, я проглядел половину кода - минут на пять) переведу это в чистый С.

stm8851547

Спасибо всем, уже помогли!

bleyman

Опс. Не увидел первой задачи. Так вот, на вторую полчаса максимум, на первую - хз. Пять пива за вторую, ещё пять за первую... наверное, у меня получится =)

bleyman

бля =( =)

stm8851547

нет , все еще нужно =)
у нас в группе 8 человек = 8 вариантов исходника нужно...

Ivan8209

Интересно, за сколько времени осилит 80 бутылок пива?
---
...Я работаю антинаучным аферистом...

alexkravchuk

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

bleyman

Асилю. У меня большой опыт и в том, и в том =)

bobby

Я готов помочь с пивом.

evgen5555

А я с мадкрозом помогу.

Bird_V

Опоздали, я уже ему сделал...
Оставить комментарий
Имя или ник:
Комментарий: