Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Конвертер кода


Автор: Жанна23 17.12.2011, 23:38
Уважаемые программисты!
Нужна ваша подсказка. Эта программа - конвертер с Pascal на C++ . На первый взгляд программа работает, но есть ньюансы – ошибки, которые я уже без вашей помощи уже не смогу исправить.
Если я очищаю левое поле и ввожу «program», то всё вроде бы нормально – конвертируется правильный С++. Если же добавляю к program имя программы – эта строчка игнорируется переводчиком.
Помогите исправить. Вот код:

Автор: Данкинг 17.12.2011, 23:48
Как игнорируется?

program asaiaia
procedure aaa

program asaiaia
void aa()

Автор: Жанна23 17.12.2011, 23:59
Вот блин, оказывается со второго раза только конвертация срабатывает. Короче в лучшем случае первая строка на С++ просто остается пустой. Где то я напортачила

Автор: Данкинг 18.12.2011, 00:05
У меня с первого всё работает.

Автор: Жанна23 18.12.2011, 00:15
Ну это наверное только когда вы просто "program", сверху добавляете. А вы попробуйте написать "program ab" , нажмите на "Перевести на С++" и посмотрите на код справа

Автор: Данкинг 18.12.2011, 00:32
Код

program ab
function Min(A:integer;B:integer):integer;
var
  m:integer;
begin
  if A>B then m:=A
  else m:=B;
  Result:=m;
end;

procedure Maximum;
var
  max,N,i:integer;
  a,b:real;
begin
  i:=1;
  write('Enter number of numbers');
  readln(N);
  readln(a);
  max:=a;
  repeat
    i:=i+1;
    write('Enter digit');
    readln(b);
    if b>max then max:=b;
  until i<=N;
  writeln(max);
end;

Код

program ab
main()
int Min(int A,int B)
{
int m;
if(A>B) m=A;
else m=B;
return m;
}
void Maximum()
{
int max,N,i;
double a,b;
i=1;
write('Enter number of numbers');
readln(N);
readln(a);
max=a;
do {
i=i+1;
write('Enter digit');
readln(b);
if(b>max) max=b;
} while(!(i<=N));
writeln(max);
}



Добавлено через 4 минуты и 3 секунды
Кстати, не проще вместо этого:
Код

procedure RemoveUnnessesarySpaces(var S:string);
begin
  while Pos(' ',S)=1 do Delete(S,1,1);
end;

Написать
Код

s:=Trim(s);

?!

Автор: Жанна23 18.12.2011, 00:37
Вообще-то я замышляла так, чтобы справа код С++ был, а значит вместо program - #include<stdio.h>  smile 

Автор: Данкинг 18.12.2011, 00:46
А, вот оно что. smile 
Тогда меняем строчку:
Код

//if Memo1.Lines[0]='program' then Memo2.Lines[0]:= '#include<stdio.h>';
if pos('program',lowercase(Memo1.Lines[0]))<>0 then Memo2.Lines[0]:= '#include<stdio.h>';

Автор: Жанна23 18.12.2011, 01:11
Да, действительно помогло! Спасибо! smile 
Хотела ещё кое-что уточнить, но уже не могу, компьютер перед глазами расплывается. У нас уже пятый час утра. Завтра спрошу. (Т.е. уже сегодня  smile )

Автор: Данкинг 18.12.2011, 01:17
Пятый час утра сейчас где-то в районе Оренбурга. smile 

Цитата(Жанна23 @  18.12.2011,  02:11 Найти цитируемый пост)
Да, действительно помогло!

Естественно: так ищется именно вхождение строки, а не целая строка.

Автор: Жанна23 18.12.2011, 18:03
Добрый вечер!
Я вот что ещё хотела спросить, в этой программе есть ещё такой момент: если пользовтель ввёл начало кода (program) не в первую строку поля Memo1, а во вторую , т.е. весь исходник сместил на строку (или несколько строк) вниз, то конвертируется всё, кроме этого начала. Как это исправить?

Автор: Данкинг 18.12.2011, 19:10
Цитата(Жанна23 @  18.12.2011,  19:03 Найти цитируемый пост)
Как это исправить?

Удалить все пустые строки сверху, и дальше уже работать как обычно. Пустая строка - это если, например,
Код

if length(trim(Memo1.Lines[xxx]))=0 then
...

Автор: Жанна23 18.12.2011, 19:16
Точно ведь, и как мне это не пришло в голову?
Кстати что это за новинка такая "trim" ? С чем её едят? smile 

Автор: Данкинг 18.12.2011, 19:36
Какая ещё новинка - это функция обрезания пробелов с обеих сторон. smile Ты с Фоксом не работала - там без подобных функций никуда.

Автор: Жанна23 18.12.2011, 19:52
Нее, Фокса  я знаю только как бандита из "Место встречи изменить нельзя". smile 
А серьёзно, в первый раз увидела, спасибо

Автор: Данкинг 18.12.2011, 20:04
Цитата(Жанна23 @  18.12.2011,  20:52 Найти цитируемый пост)
Нее, Фокса  я знаю только как бандита из "Место встречи изменить нельзя".

Да, там ещё Кирпич есть. smile Я FoxPro имею в виду, разумеется, где я впервые как раз увидел ALLTRIM всякие.

Автор: Жанна23 18.12.2011, 20:20
Спасибо вам большое за помощь!!!
Надеюсь вас больше smile  не побеспокою!

Автор: Данкинг 18.12.2011, 20:27
Да ничего, разрешаю беспокоить, только несильно. smile 

Автор: Жанна23 19.12.2011, 13:36
Ребятки, ребятки, я совсем  забыла спросить: как-то можно сделать чтобы мой проект компилировался на обычном Паскале. Очень нужно программкой сделать блок схему. У меня не получается, то там подчеркнет, то там подчеркнет

Или может существуют другие программки, которые могут "переварить" Delphi ?

Автор: Данкинг 19.12.2011, 14:38
Как он может компилироваться на Паскале, если написан на Дельфи с VCL и т.п.? smile 

Автор: Жанна23 19.12.2011, 15:35
Ну кроме добавления "program" может можно что-то удалить из кода ?

Автор: Данкинг 19.12.2011, 17:22
Как в Паскале сделать вывод в Memo-то?! smile 

Автор: Жанна23 19.12.2011, 19:43
Сама не пойму. Что-то мне подсказывает, что нужно отрубить интерфейс со всеми компонентами.
Послезавтра консультация, можно конечно спросить у препода, но долго ждать

Автор: Данкинг 19.12.2011, 20:09
И выводить куда?

Автор: Жанна23 19.12.2011, 20:31
Цитата

И выводить куда? 

Не поняла вопрос

Автор: Данкинг 19.12.2011, 22:10
Если Memo не будет, то куда выводить данные?

Автор: Жанна23 19.12.2011, 22:42
Блин, вот я тупанула. Честно, говоря, пока  даже не знаю. Это мне надо обдумать. Вот как в Паскале текст выводится:
Код

writeln('Vvedi kolichestvo sotrudnikov: ');
      readln(n);
      writeln('Vvedi informaciyu o nih:');
      for i:=1 to n do
      begin
      write('nomer: '); readln(rv[i].num);
      write('fio: '); readln(rv[i].fio);
      write('adress: '); readln(rv[i].adress);
      write('god_post: '); readln(rv[i].god_post);
      end;

и никуда вроде не надо указывать место вывода.
Мысль в голове крутится, а как реализовать не соображу

Автор: Жанна23 19.12.2011, 23:42
Пойду отдохну до завтра! smile 

Автор: Данкинг 20.12.2011, 00:05
До сегодня уже. smile Ну, в Паскале, видимо, просто writeln можно указывать вместо добавления строк в Memo.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)