Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 20 из 27

Тема: Конвертация кода из С++ в Pascal

  1. #1

    Exclamation Конвертация кода из С++ в Pascal

    Господа ,возникла проблема ,надо как можно скорее перевести код с С++ на Pascal , первый язык не знаю ,поэтому возникают проблемы . Знаю,что можно почитать литературу и таки конвертировать этот проклятый код ,но времени мало ,а курсач скоро сдавать . Собственно вот код :
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>

    // <--Структуры данных-->
    enum optype {power = 3, devide = 2, multiply = 2, minus = 1, plus = 1, null=0}; // приоритеты операций

    struct stack {
    char val[100]; // непосредственно значение элемента
    optype type; // приоритет операции, необходим для правильного расставления скобок
    stack * next;
    } *head;

    // <--Функции работы со стеком-->
    void push(char[], optype);
    void push(stack *);
    stack * pop();
    // <--Функция выполняющая наш алгоритм-->
    void fromRPN(char *, char *); // (RPN) Reverse polish notation

    int main() {
    char infix[100], postfix[100]; // входная и выходная строка
    gets(infix);
    fromRPN(infix, postfix);
    printf("%s\n", postfix);
    system("PAUSE");
    return 0;
    }

    void push(stack *t) {
    t->next = head;
    head = t;
    }

    void push(char str[], optype type) {
    stack *t;
    t = new stack;
    strcpy(t->val, str);
    t->type = type;
    t->next = head;
    head = t;
    }

    stack * pop() {
    stack *t;
    if(head == NULL) return NULL;
    t = head;
    head = t->next;
    return t;
    }

    void fromRPN(char * input, char * output) {
    char c, temp[100];
    int p_temp=0;
    stack *h1, *h2; // переменные для хранения первых двух элементов стека
    optype type;
    head = NULL;
    while(*input) { // пока есть символы строке
    c = (*input);
    if(c>='0' && c<='9' || c=='.') { //если текущий символ часть числа
    temp[p_temp++] = c; //то добавляем его во временную строку
    temp[p_temp] = '\0';
    } else if(c==' ') {
    if(p_temp!=0) {
    push(temp, null); // добавляем число в стек
    p_temp=0; }
    temp[0] = '\0'; // опустошаем временную строку
    } else if(c=='+' || c=='-'|| c=='*' || c=='/' || c=='^') { //если читаем знак операции
    h1 = pop(); // выталкиваем первый элемент
    h2 = pop(); // выталкиваем второй элемент
    // находим приоритет операции
    if(c=='+') type = plus;
    else if(c=='-') type = minus;
    else if(c=='*') type = multiply;
    else if(c=='/') type = devide;
    else if(c=='^') type = power;
    if(h2->type!=null && h2->type<type) { // если приоритет для 1-го элемента меньше
    temp[0]='('; temp[1] = '\0'; // берем выражение в скобки
    h2->val[strlen(h2->val)+2] = '\0';
    h2->val[strlen(h2->val)+1] = c; // приписываем знак операции
    h2->val[strlen(h2->val)] = ')';
    } else {
    h2->val[strlen(h2->val)+1] = '\0';
    h2->val[strlen(h2->val)] = c;
    }
    strcat(temp, h2->val);
    if(h1->type!=null && h1->type<type) { // если приоритет для 2-го элемента меньше
    strcat(temp, "(");
    h1->val[strlen(h1->val)+1] = '\0';
    h1->val[strlen(h1->val)] = ')'; // берем выражение в скобки
    }
    strcat(temp, h1->val);
    strcpy(h2->val, temp); // что бы не выделять память под новый элемент, копируем полученное выражение во второй элемент
    delete h1; // удаляем первый элемент
    h2->type = type; // устанавливаем новый приоритет операции
    push(h2); // добавляем новый элемент в стек
    }
    input++;
    }
    strcpy(output, (pop())->val); // копируем выражение из вершины стека в строку результата
    }
    http://habrahabr.ru/post/147104/ (ссылка откуда взял ,там много полезной информации ,которая тем не менее не сильно помогла мне ) Всем отписавшимся буду благодарен :3
    Последний раз редактировалось Krevetka; 08.06.2014 в 20:15.

  2. #2
    упоролся ? или ты собираешся и библиотеки конвертировать?

  3. #3
    Новичок
    Регистрация
    13.09.2010
    Сообщений
    6
    Вообще-то это C, а не C++.

  4. #4
    Моя не знать,что ответить ,С++ мне совершенно неизвестен Нужна программа для перевода из постфиксной формы в инфиксную ,на Pascal ее нет нигде , есть только на С++ , пришел к выводу ,что надо конвертировать один код в другой .

    - - - Добавлено - - -

    Там ,где я это взял , было написано , что реализация на С++ ,но спорить не буду ,как уже говорил я их не знаю и следовательно не отличаю

  5. #5
    Новичок
    Регистрация
    18.11.2013
    Сообщений
    0
    Цитата Сообщение от ForNeVeR Посмотреть сообщение
    Вообще-то это C, а не C++.
    Вообще-то нет
    t = new stack;

  6. #6
    Цитата Сообщение от ForNeVeR Посмотреть сообщение
    Вообще-то это C, а не C++.
    Код отвечает стандартам С++, будет успешно транслироваться и С++ компиляторами, поэтому абсолютно корректно утверждать, что это С++.

    - - - Добавлено - - -

    Цитата Сообщение от _Panzer Посмотреть сообщение
    Вообще-то нет
    t = new stack;
    упс, не заметил, тогда это только С++, в С ключевого слова new нет.

  7. #7
    Цитата Сообщение от Krevetka Посмотреть сообщение
    на Pascal ее нет нигде
    А тут смотрел?
    http://lmgtfy.com/?q=postfix+infix+notation+pascal
    http://www.chasanc.com/old/infix_to_post.htm
    http://kd5col.info/swag/PARSING/0011.PAS.html

  8. #8
    Новичок
    Регистрация
    18.11.2013
    Сообщений
    0
    У меня от этого кода Гуф умер
    Segmentation fault

    http://www.compileonline.com/compile_cpp11_online.php

  9. #9
    /
    Все это Infix to Postfix а мне надо Postfix to Infix в этом проблема Гуглил около часа ,ничего
    Последний раз редактировалось Krevetka; 08.06.2014 в 20:30.

  10. #10
    Read-Only
    Регистрация
    20.02.2014
    Сообщений
    12
    Цитата Сообщение от Krevetka Посмотреть сообщение
    Нужна программа для перевода из постфиксной формы в инфиксную ,на Pascal ее нет нигде , есть только на С++
    То есть тебе задали написать программу, но вместо того, что бы хоть как-то разобраться как это делается, ты потратил пол вечера на поиск кода, затем, найдя нужный код на другом языке, даже не потрудился вникнуть в него, а ищешь, чтоб тебе дали готовый транслятор, а еще лучше - чтоб тебе просто дали нужный код.

    Я все правильно понял? Гамбургер и маленький спрайт, будь так добр.
    Последний раз редактировалось Баноежик; 08.06.2014 в 20:31.

  11. #11
    Цитата Сообщение от Баноежик Посмотреть сообщение
    Я все правильно понял? Гамбургер и маленький спрайт, будь так добр.
    У него неплохие навыки поиска, так что лучше будет пойти в курьеры
    such troll. much wow.

  12. #12
    Цитата Сообщение от Баноежик Посмотреть сообщение
    То есть тебе задали написать программу, но вместо того, что бы хоть как-то разобраться как это делается, ты потратил пол вечера на поиск кода, затем, найдя нужный код на другом языке, даже не потрудился вникнуть в него, а ищешь, чтоб тебе дали готовый транслятор, а еще лучше - чтоб тебе просто дали нужный код.

    Я все правильно понял? Гамбургер и маленький спрайт, будь так добр.
    В точку Я понимаю ,что поступаю неправильно и должен был сам разобраться ,но в конце концов никто не отменял взаимопомощь ,иначе я бы сюда и не стал писать
    Последний раз редактировалось Krevetka; 08.06.2014 в 20:38.

  13. #13
    Цитата Сообщение от Krevetka Посмотреть сообщение
    В точку
    Да ты станешь отличным php-кодером и допилишь адольфу новый сайт!

  14. #14
    Освоившийся
    Регистрация
    08.01.2011
    Сообщений
    140
    Дайте мне это развидеть
    http://sc2tv.ru/content/polovykhtv

  15. #15
    Цитата Сообщение от Heart Посмотреть сообщение
    У него неплохие навыки поиска, так что лучше будет пойти в курьеры
    Это 10 из 10!

  16. #16
    Krevetka, Никак нельзя потому что библиотеки ты не конвертнешь.

    - - - Добавлено - - -

    Krevetka, Если трудно разобратся пиши мне. Будем разбиратся в этом коде.
    scype sliver803
    Последний раз редактировалось Спалланцани; 08.06.2014 в 21:06.

  17. #17
    Цитата Сообщение от Спалланцани Посмотреть сообщение
    Если трудно разобратся пиши мне. Будем разбиратся в этом коде.
    Код - лютое гавно, которое просто источает зловонные миазмы быдлокодерства. Лучше разберитесь в самом алгоритме и напишите заново. Сам алгоритм довольно прост (только что погуглил ).
    Последний раз редактировалось Winterhearted; 08.06.2014 в 21:23.

  18. #18
    Видимо ,как выше сказали ,придется писать самому ,за что спасибо господам с форума ,которые вдохновили меня таки взяться за ум
    Последний раз редактировалось Krevetka; 08.06.2014 в 21:32.

  19. #19
    Освоившийся
    Регистрация
    09.11.2010
    Адрес
    планета Земля
    Сообщений
    102
    Цитата Сообщение от Krevetka Посмотреть сообщение
    из постфиксной формы в инфиксную
    ТС а ты не пробовал из постфиксной в обычную запись а потом в инфиксную переводить

  20. #20
    Цитата Сообщение от Спалланцани Посмотреть сообщение
    Никак нельзя потому что библиотеки ты не конвертнешь.
    Кстати единственный годный конвертер из Паскаля в С++, который мне попадался, даже не пытался этого делать. Он просто переводил языковые конструкции, а в места вызова стандартных библиотек вставлял заглушки, потом допилить этот код до рабочего было плевым делом.

    - - - Добавлено - - -

    Цитата Сообщение от Winterhearted Посмотреть сообщение
    Код - лютое гавно, которое просто источает зловонные миазмы быдлокодерства. Лучше разберитесь в самом алгоритме и напишите заново. Сам алгоритм довольно прост (только что погуглил ).
    ++ код оче плох, проще с нуля написать
    such troll. much wow.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Pascal, C, C++
    от Nipokana в разделе Поболтать
    Ответов: 296
    Последнее сообщение: 21.10.2012, 17:30
  2. Решение задачи на Pascal
    от Nipokana в разделе Поболтать
    Ответов: 16
    Последнее сообщение: 27.09.2012, 22:21
  3. Cybergame.tv обновление кода вставки плеера
    от Zerocul в разделе Cайт SC2TV.RU
    Ответов: 5
    Последнее сообщение: 07.02.2012, 18:54
  4. Конвертация Русской версии в Европейскую
    от Lekarstvo в разделе Поболтать
    Ответов: 22
    Последнее сообщение: 17.06.2011, 04:25

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •