Вінницький форум

Вінницький форум (https://forum.vn.ua//index.php)
-   Технічний форум (https://forum.vn.ua//forumdisplay.php?f=8)
-   -   Pascal (https://forum.vn.ua//showthread.php?t=3859)

Magnetto 31-03-2006 02:34

Цитата:

Повідомлення від Elic
Вопрос: а Delphi здесь тоже в тему? :rolleyes: Есть задачка: GUI для консольной проги. Надо галочками, кнопочками и прочими элементами задать параметры, которые потом пойдут в командную строку, потом запустить программу, перехватить её stdout и по мере выполнения отображать результаты (процент готовности, предеупреждения, ошибки) в отдельном окне. Подготовку командной строки я уже сделал, а вот выполнение и перехват вывода - никак, и даже не знаю, с какого конца браться.
Хочется примерно так, как это сделано в программе mmg из пакета mkvtoolnix, либо как в Mode2CDMaker GUI.

ЗЫ. Я работаю на C, а сделать это надо в Delphi 3, а я в нём плаваю...

ууу....ничего не понял.... :cry: :cry: :cry:

Elic 31-03-2006 08:52

Цитата:

Повідомлення від Magnetto
ууу....ничего не понял.... :cry: :cry: :cry:

Ну, вот первый этап: все параметры заданы, собрана командная строка (панель. Теперь надо эту команду запустить и её результаты по мере выполнения выдавать в Memo. Как это сделать?

Magnetto 31-03-2006 11:18

Цитата:

Повідомлення від Elic
Ну, вот первый этап: все параметры заданы, собрана командная строка (панель. Теперь надо эту команду запустить и её результаты по мере выполнения выдавать в Memo. Как это сделать?

ты не в меня спрашивай..я только начинаю учить паскаль... :cry:

Lenok 01-04-2006 01:27

Ну не знаю, по-моему ГПД она полная ПД, а вот Пасихова лучше послушай. вот он может научить.
Главное уметь учится.

Elic 01-04-2006 15:36

Цитата:

Повідомлення від Magnetto
я только начинаю учить паскаль... :cry:

Хм. Во времена MS-DOS было несколько компиляторов Паскаля (про Delphi, само собой, никто не слыхивал). Мы его изучали. Полный курс - два вечера. После первого вечера мы на нём свободно читали, после второго - свободно писали. Или ты учишь какой-то другой Паскаль? :rolleyes:

Magnetto 01-04-2006 15:41

Цитата:

Повідомлення від Elic
Хм. Во времена MS-DOS было несколько компиляторов Паскаля (про Delphi, само собой, никто не слыхивал). Мы его изучали. Полный курс - два вечера. После первого вечера мы на нём свободно читали, после второго - свободно писали. Или ты учишь какой-то другой Паскаль? :rolleyes:

пока что Turbo Pascal

Elic 01-04-2006 16:54

Цитата:

Повідомлення від Magnetto
пока что Turbo Pascal

Во-во. Тот самый. Два вечера.

Endy48 01-04-2006 17:00

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

*Barthez 04-04-2006 21:55

Кто-то может помочь с алгоритмами шифрования текста.
ЗЫ У меня есть один но он не работает с кирилицей :(

ArmHorse 05-04-2006 00:13

Цитата:

Повідомлення від Elic
Вопрос: а Delphi здесь тоже в тему? :rolleyes: Есть задачка: GUI для консольной проги. Надо галочками, кнопочками и прочими элементами задать параметры, которые потом пойдут в командную строку, потом запустить программу, перехватить её stdout и по мере выполнения отображать результаты (процент готовности, предеупреждения, ошибки) в отдельном окне. Подготовку командной строки я уже сделал, а вот выполнение и перехват вывода - никак, и даже не знаю, с какого конца браться.
Хочется примерно так, как это сделано в программе mmg из пакета mkvtoolnix, либо как в Mode2CDMaker GUI.

ЗЫ. Я работаю на C, а сделать это надо в Delphi 3, а я в нём плаваю...

Посмотри в МСДН на ProcessStartInfo.RedirectStandardInput если мне не подводит память, то это то, что тебе нужно причём с примером, но меня терзают смутные сомения, что в Делфях этого нету.

ЗЫ. Каким макаром вызываешь консольную программу: CreateProcess, ExecAndWait, ShellExecute, WinExec? Если через CreateProcess, то хендл процесса хранится в lpProcessInformation, а там уже можно от этого хэндла плясать, чтобы легче было плясать, вот ноты:
AttachConsole
ReadConsole
ReadConsoleOutput
GetConsoleSelectionInfo

ЗЫЫ. Почему именно 3-и Делфя? Бери тогда уж первые :) интерфейс под 3.11 рулит.

ArmHorse 05-04-2006 00:16

Цитата:

Повідомлення від LittlIS
а других вариантоав нет?на фри паскале буквы пишет,но почемуто нифига не компилирует.

Конечно есть другие варианты, ставь Делфи и пиши в консоли, разницы никакой, зато удобная среда разработки. И зарисоваться можно, тоже плюс :)
ЗЫ. Про графику прийдётся забыть.

ArmHorse 05-04-2006 00:21

Цитата:

Повідомлення від *Barthez
Кто-то может помочь с алгоритмами шифрования текста.
ЗЫ У меня есть один но он не работает с кирилицей :(

http://www.google.ru/search?hl=ru&q=...1%81%D0%BA&lr=

ArmHorse 05-04-2006 00:24

Среда разработки УАМа это вообще интерпритатор, как его с Паскалем сравнивать ума не приложу.
Сам УАМ это просто язык для алгоритмизации учебных примеров.

Elic 05-04-2006 08:54

Цитата:

Повідомлення від ArmHorse
Почему именно 3-и Делфя? Бери тогда уж первые :)

Не могу. Это для совместимости. На 3-м пишет kerberos002 (мы с ним на пару разрабатываем - он своё, а я своё :) ). У него есть почти нужный мне кусок - три сотни строк, разобраться пока не могу, а он писал очень давно и тоже всех тонкостей не помнит. :(
Цитата:

ProcessStartInfo.RedirectStandardInput
[...]
чтобы легче было плясать, вот ноты:
Ага. Сенькс!
Цитата:

Каким макаром вызываешь консольную программу: CreateProcess, ExecAndWait, ShellExecute, WinExec?
ХЗ... Я вообще-то привык такие вещи проделывать через fork() / dup2() / execxx(), но сильно сомневаюсь, что в Delphi можно безгеморройно юзать CRT. :rolleyes:

ArmHorse 05-04-2006 15:39

Цитата:

Повідомлення від Elic
ХЗ... Я вообще-то привык такие вещи проделывать через fork() / dup2() / execxx(), но сильно сомневаюсь, что в Delphi можно безгеморройно юзать CRT. :rolleyes:

Я рекомендовал бы через CreateProcess, инфы по этому делу есть немеряно и работает оно как нужно, хотя если работает, но можно как угодно :)

Elic 05-04-2006 21:56

Цитата:

Повідомлення від ArmHorse
Я рекомендовал бы через CreateProcess, инфы по этому делу есть немеряно и работает оно как нужно

...то есть, по-микрософтовски - вот поднаберусь опыта и пойду сдавать экстерном на проктолога. :d

LittlIS 05-04-2006 22:17

выложите ктонебудь русфонт плз............

ArmHorse 06-04-2006 01:09

Цитата:

Повідомлення від LittlIS
Выложите ктонить русфонт....плз...

Тебе кейрус нужен что-ли?
На, держи, думаю как работает разберёшься.

*Barthez 08-04-2006 15:16

:umnik2::umnik2::umnik2:Как создать ряд рэндомных значений от 1 до 10 чтобы они не повторялись?

Cronus 08-04-2006 15:24

Цитата:

Повідомлення від *Barthez
:umnik2::umnik2::umnik2:Как создать ряд рэндомных значений от 1 до 10 чтобы они не повторялись?

Создай массив из 10-ти элементов, в цикле делай примерно так:
a[1]:=random(10);
for i:=2 to 10 do
begin a[i]:=random(10);
1: for j:=1 to 10 do
begin if i<>j then
begin if a[i]=a[j] then begin a[i]:=random(10); goto 1; end;
end;
end;
end;
Вроде должно сработать.

ArmHorse 08-04-2006 18:30

Цитата:

Повідомлення від Cronus
Создай массив из 10-ти элементов, в цикле делай примерно так:
a[1]:=random(10);
for i:=2 to 10 do
begin a[i]:=random(10);
1: for j:=1 to 10 do
begin if i<>j then
begin if a[i]=a[j] then begin a[i]:=random(10); goto 1; end;
end;
end;
end;
Вроде должно сработать.

Программа неоправданно усложнена двумя циклами, если не ошибась, то оно не сработает, нужно вроде Randomize вызвать сначала, но могу ошибаться. Причём за вызов goto будут сильно бить и лабу не примут.
ЗЫ. Так вроде проще немного:
Код:

program rand;
uses crt;
var i,j : integer;
    s : set of byte;
Begin
  clrscr;
  s := [0..9];
  randomize;
  while s <> [] do
    begin
      j := random(10);
      if j in s
        then begin
              writeln(j+1);
              s := s - [j];
            end;
    end;
  repeat until keypressed;
End.


Elic 08-04-2006 20:21

Цитата:

Повідомлення від ArmHorse
Так вроде проще немного:
Код:

program rand;
uses crt;
var i,j : integer;
    s : set of byte;
Begin
  clrscr;
[...]
    end;
  repeat until keypressed;
End.


Это называется "проще"? %\ Я бы сделал так: массив result_array из 10 элементов, а дальше
Код:

var
  jx, jy: integer;
  result_array[ 10 ]: integer;
begin
  for jx := 1 to 10 do { начальная зачистка } result_array[ jx ] := 0;
  jx := 1;
  while ( jx <= 10 ) do begin
    jy := int( random( 10 ) ) + 1;
    if ( result_array[ jy ] > 0 ) then { такое число уже было } continue;
      result_array[ jy ] := jx;
    inc( jx );
  end; { готово: во всех 10 элементах массива - случайные ненулевые значения, все разные).
end;

ЗЫ. А на C это ещё изящнее %\

ArmHorse 08-04-2006 21:58

Цитата:

Повідомлення від Elic
Это называется "проще"? %\

Твой способ очень интересен.
Под словом "проще" я имел ввиду не очевидность кода, а скорость работы программы.
ЗЫ. Мне стало интересно и я провёл маленький тест:
1000000 раз вызвал оба кода и посмотрел сколько раз исполняются выч. операции:
В итоге функция Ранд вызавалась и в твоём коде и в моём примерно 29.28 раз.
Но самым интересным оказалось время работы, твой код выполнился миллион раз примерно за 2 сек, мой примерно за 9 сек.
А мне то всегда казалось, что работа с множествами быстрее чем с масивами.

Elic 08-04-2006 23:12

Цитата:

Повідомлення від ArmHorse
твой код выполнился миллион раз примерно за 2 сек, мой примерно за 9 сек.
А мне то всегда казалось, что работа с множествами быстрее чем с масивами.

Не-а. :d Множество реализуется через связный список, для которого требуется выделение памяти (из кучи или иным образом - неважно) на каждый элемент в отдельности, а при работе - сплошная беготня по указателям (в нашем случае, правда, это незаметно; а вот если бы элементов был миллион...); массив же выделяется один раз (или вообще берётся за счёт стека) - дальше только манипуляции индексным регистром.

ЗЫ. И вообще, я давно заметил: проги на C++ работают медленнее C'шных - когда вдвое, а когда и в миллионы раз... В объектном мире почти всякий изящный кусок исходника (даже пара строчек) всегда имеет шанс вылиться в целый косяк вызовов конструкторов/деструкторов... %\

ЗЗЫ. А ещё у тебя есть writeln и keypressed - вполне могли тоже внести свой алтын в тормозуку :rolleyes:

ЗЗЗЫ. Конструкция
Код:

if j in s then
- это ИМХО то же самое, что
Код:

var
  tj: integer;
.........
  j := 0;
  for tj := 0 to мощность( s ) do begin
    if ( s[ tj ] = чему-то ) then begin
      j := tj;
      break;
    end;
  end;
  if ( j <> 0 ) then

т.е. неявный перебор по всему множеству, нет? :rolleyes:

*Barthez 08-04-2006 23:45

Помогите:

У меня есть коды процедур для шифрования строк.
Код HTML:

const
csCryptFirst = 20;
csCryptSecond = 230;
csCryptHeader = 'Crypted';
 
type
ECryptError = class(Exception);
 
function CryptString(Str:String):String;
var i,clen : Integer;
begin
clen := Length(csCryptHeader);
SetLength(Result, Length(Str)+clen);
Move(csCryptHeader[1], Result[1], clen);
For i := 1 to Length(Str) do
begin
if i mod 2 = 0 then
Result[i+clen] := Chr(Ord(Str[i]) xor csCryptFirst)
else
Result[i+clen] := Chr(Ord(Str[i]) xor csCryptSecond);
end;
end;
 
function UnCryptString(Str:String):String;
var i, clen : Integer;
begin
clen := Length(csCryptHeader);
SetLength(Result, Length(Str)-clen);
if Copy(Str, 1, clen) <>csCryptHeader then
raise ECryptError.Create('UnCryptString failed');
For i := 1 to Length(Str)-clen do
begin
if (i) mod 2 = 0 then
Result[i] := Chr(Ord(Str[i+clen]) xor csCryptFirst)
else
Result[i] := Chr(Ord(Str[i+clen]) xor csCryptSecond);
end;
end;

Проблема в том что Chr неработает с кирилицей может у кого-то есть какие-нибудь советы, что можна сделать....

ЗЫ Большое спасибо за оказаную помощь
ЗЗЫ и вообще это код Делфи написал сюда потому что тема популярная на неё отвечают активно:rolleyes:

ArmHorse 09-04-2006 00:08

Цитата:

Повідомлення від Elic
т.е. неявный перебор по всему множеству, нет? :rolleyes:

В том то и дело, что нет. По идее 1 байт может хранить множество из 8 сущностей. И проверка принадлежности элемента сводится к проверке установлен ли определённый бит или нет, причём мы знаем точно адрес байта содержащего этот бит и расположение самого бита в байте, это тот же масив, только он содержит биты. Я не видел каким именно реализованы множества на Паскале, но боюсь, что через колено, как и сам язык.
writeln и keypressed на скорость не влияли, потому что в тесте я их естественно убрал. Попробую позже потестить этот код в среде Делфи, может там расклад изменится.
ЗЫ. Миллион элементов моим способом сделать не получится так как на Паскале множества не могут содержать больше 256 элементов, хотя почему нельзя было сделать индексацию не 8-ми битным ключём, а 16-битным я не понимаю.

ArmHorse 09-04-2006 00:10

Цитата:

Повідомлення від *Barthez

Проблема в том что Chr неработает с кирилицей может у кого-то есть какие-нибудь советы, что можна сделать....

Первый раз слышу, что Chr не работает с кирилицей, завтра проверю.

mitris 22-06-2006 18:25

Цитата:

Повідомлення від XXL
где можно скачать паскаль, очень нада!!!

Internet
где-то быс сайт, не могу найти...

Smartfon 27-08-2006 16:56

в кого е дуже треба :confused:

reider 27-08-2006 17:25

Цитата:

Повідомлення від Smartfon
в кого е дуже треба :confused:

у меня есть.

Smartfon 28-08-2006 11:40

Цитата:

Повідомлення від reider
у меня есть.

даш? :confused:

reider 28-08-2006 11:42

Цитата:

Повідомлення від Smartfon
даш? :confused:

Дам. Каким образом? Занимает он 21 Мб.

CodeGrinder 28-08-2006 11:45

Цитата:

Повідомлення від reider
Дам. Каким образом? Занимает он 21 Мб.


Я так понял нужен паскаль?

Smartfon 28-08-2006 11:50

Цитата:

Повідомлення від reider
Дам. Каким образом? Занимает он 21 Мб.

на сд :confused:

reider 28-08-2006 11:52

Цитата:

Повідомлення від Smartfon
на сд :confused:

Он у меня на винту, могу записать.

Ganriet 28-08-2006 12:14

Цитата:

Повідомлення від reider
Он у меня на винту, могу записать.

а версия какая???

reider 28-08-2006 12:27

Цитата:

Повідомлення від Ganriet
а версия какая???

7.0 + учебник

EvoLuTioN | rOleX 29-08-2006 00:57

Вот бы было круто если-бы я хоть что-то понимал с етого! :|
Не знаете на каком курсе в ВТК(Винницкий Техничиский Коледж) начинают учить еНту белеберДУ? :rolleyes:

reider 29-08-2006 07:20

Цитата:

Повідомлення від EvoLuTioN | rOleX
Вот бы было круто если-бы я хоть что-то понимал с етого! :|
Не знаете на каком курсе в ВТК(Винницкий Техничиский Коледж) начинают учить еНту белеберДУ? :rolleyes:

Знаю, что в ВНТУ(Политехе Универ) учат Паскаль с первого курса и только полгода, а плтом учат С и С++. Сам там учусь на програмера.

Smartfon 29-08-2006 18:51

Цитата:

Повідомлення від reider
7.0 + учебник

запишешь?


Поточний час: 17:14. Часовий пояс GMT +3.

Copyright ©2000 - 2025