Форум программистов, компьютерный форум CyberForum.ru

Пишем свой интерпретатор языка BASIC - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Меню и список http://www.cyberforum.ru/cpp-beginners/thread41194.html
Здравствуйте форумчане. Помоги пожалуйста в следующем вопросе: У меня есть 2связный список, написано меню. Но в моменте когда написано make a list и delete custom необходимо чтобы выводились: Введите элемент и номер. вот сам код: #ifndef __list_h #define __list_h #include <iostream>
C++ Здравствуйте! Не могу поместить class в один файл с программой. file.hpp #include "Cat.hpp" // здесь классы "2)" Cat::Cat(int initialAge) { itsAge = initialAge; } Cat::~Cat() { http://www.cyberforum.ru/cpp-beginners/thread41186.html
Массивы строк C++
Привет всем! Задан массив строк. Как узнать который символ встечаетса найбольшое количество раз в етом массиве?
C++ вывод на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер
Please, help me!!! Вот текст программы, которая выводит на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер только квадратов. Проблема в том, что необходимо исправить код, чтоб фигуры не исчезали за экран (т.е. 640х460) и были компактным набором, т.е. двигались неменяя своего положения относительно друг друга и стукаясь об стенку экрана меняли свое...
C++ Округление дробного числа до целого в большую сторону. http://www.cyberforum.ru/cpp-beginners/thread41139.html
Доброго дня. Я новичок в программирование на Visual C++. Проблема такая программа должна считать кол-во месяцев, если числа целые то программа шла дальше, если дробное то (например 3.33333) программа не округляет это число (в большую сторону) до 4. Перелопатил тонны литературы, но пропустил или не нашёл этого, большая просьба написать функцию которая могла бы это делать, или способ какой.
C++ Код из Delphi в C++ Нужно написать курсовую на C++. Сам я в программировании плохо шарю (не программист). Попросил у народу помощи, помогли. Но решение на Delphi: {$APPTYPE CONSOLE} type byteset=set of byte; var d:array of longint; procedure c; var a,b,i:longint; подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,672
Записей в блоге: 26
10.10.2009, 11:11     Пишем свой интерпретатор языка BASIC
Цитата Сообщение от #pragma Посмотреть сообщение
Интересует вариант создания отдельного пакета к программе
Ну... в твоём случае под линухом, например, это можно было бы сделать в виде отдельной динамической библиотеки *.so. Под виндами это будет *.dll. Но для начала сделай, чтобы хотябы на одной платформе заработало. Или как вариант, сначала попробуй без графики под винду пернести. И ещё как вариант постоянно проверять под линухом и виндой

Добавлено через 37 минут
По поводу трассировки. Возьмём, например, программу (WHILE я по-человечески ещё не переделал, а потому он в дебильном синтаксисе)

PureBasic
1
2
3
4
5
6
7
8
9
10
DIM A(4)
LET I=1
WHILE I<4 DO
  IF I+1 < 5-I THEN
    LET A(I)=1
  ELSE
    LET A(I)=2
  END IF
  LET I=I+1
END_WHILE
Далее запускаю с опцией трассировки записи в переменные

Код
$ ./interp -w
TRACE: a.txt:2 WRITE I = 1
TRACE: a.txt:5 WRITE A(1) = 1
TRACE: a.txt:9 WRITE I = 2
TRACE: a.txt:7 WRITE A(2) = 2
TRACE: a.txt:9 WRITE I = 3
TRACE: a.txt:7 WRITE A(3) = 2
TRACE: a.txt:9 WRITE I = 4
По этой трассировке чётко видно, что проинициализированы только три элемента массива, а не 4, как хотелось бы. Ну и когда выясняешь, что в каком-то фрагменте кода переменная имеет не то значение, которое ожидалось, то по такой трассировке это можно легко найти. В качестве вариантов это можно дополнить фичами типа отслеживать печать только в какую-то конкретную переменную и т.д.

Трассировка исполнения

Код
$ ./interp -e
TRACE: a.txt:11 EXEC LET
TRACE: a.txt:2 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:3 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:4 EXEC LABEL
TRACE: a.txt:4 EXEC LET
TRACE: a.txt:5 EXEC BRANCH
TRACE: a.txt:6 EXEC LABEL
TRACE: a.txt:8 EXEC LET
TRACE: a.txt:9 EXEC BRANCH
TRACE: a.txt:10 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:3 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:4 EXEC LABEL
TRACE: a.txt:6 EXEC LET
TRACE: a.txt:7 EXEC LABEL
TRACE: a.txt:8 EXEC LET
TRACE: a.txt:9 EXEC BRANCH
TRACE: a.txt:10 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:3 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:4 EXEC LABEL
TRACE: a.txt:6 EXEC LET
TRACE: a.txt:7 EXEC LABEL
TRACE: a.txt:8 EXEC LET
TRACE: a.txt:9 EXEC BRANCH
TRACE: a.txt:10 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:3 EXEC LABEL
В данном случае какой-то особенно пользы нет, т.к. трассировка записей однозначно вскрыло проблему и оказалось более наглядной. Но в случае каких нибудь сложных ветвлений, внутри которых вызываются какие-то прочие функции (типа отрисовки линий и окружностей) и при этом нет никаких записей, то трассировка исполнения может помочь увидеть "снимок" того, как отработала задача. Сейчас печатается имя statementa (того, который на уровне промежуточного представления). Для пользователя это неудобно, удобнее, когда печатается имя того оператора, который написан в исходнике - т.е. чтобы вместо CBRANCH и BRANCH печаталось "WHILE" и "WEND" и.т.п. Пока что-то лениво этим заморачиваться

Ну и как вариант комбинация этих двух трассировок

Код
$ ./interp -w -e
TRACE: a.txt:11 EXEC LET
TRACE: a.txt:2 WRITE I = 1
TRACE: a.txt:2 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:3 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:4 EXEC LABEL
TRACE: a.txt:4 EXEC LET
TRACE: a.txt:5 WRITE A(1) = 1
TRACE: a.txt:5 EXEC BRANCH
TRACE: a.txt:6 EXEC LABEL
TRACE: a.txt:8 EXEC LET
TRACE: a.txt:9 WRITE I = 2
TRACE: a.txt:9 EXEC BRANCH
TRACE: a.txt:10 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:3 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:4 EXEC LABEL
TRACE: a.txt:6 EXEC LET
TRACE: a.txt:7 WRITE A(2) = 2
TRACE: a.txt:7 EXEC LABEL
TRACE: a.txt:8 EXEC LET
TRACE: a.txt:9 WRITE I = 3
TRACE: a.txt:9 EXEC BRANCH
TRACE: a.txt:10 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:3 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:4 EXEC LABEL
TRACE: a.txt:6 EXEC LET
TRACE: a.txt:7 WRITE A(3) = 2
TRACE: a.txt:7 EXEC LABEL
TRACE: a.txt:8 EXEC LET
TRACE: a.txt:9 WRITE I = 4
TRACE: a.txt:9 EXEC BRANCH
TRACE: a.txt:10 EXEC LABEL
TRACE: a.txt:3 EXEC CBRANCH
TRACE: a.txt:3 EXEC LABEL
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru