2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 
Сообщение13.05.2006, 18:27 
Аватара пользователя
Alenka_kiss писал(а):
Ну а так, восторгу сына не было предела и он сразу попросил сделать такую же по математике "потому что математику он любит".

Уже есть варианты ТЗ на программу? :) Т.е. варианты тех. задания, проще говоря - идеи, как она должна выглядеть, что делать и т.п.

 
 
 
 
Сообщение14.05.2006, 07:47 
На математику пока сценария нет.
Диктант доработала с учетом пожеланий подрастающего поколения, даже звуковое сопровождение имеется. правда мелодия не фонтан. Есть идея еще добавить рожицу типа смайлов. Если удача - то она улыбается, если ошибка - дразнит. Но нарисовать такую в Паскале чтоб не примитивно получилось довольно затруднительно, во всяком случае трудоемко. В интернете нашла программку, которая переводит bmp-файл в .PAS. Но у меня она чего-то не работает :(
тут ее скачала. http://pascal.sources.ru/graph/bmp2pas.zip

 
 
 
 
Сообщение14.05.2006, 20:48 
Аватара пользователя
Alenka_kiss писал(а):
...В интернете нашла программку, которая переводит bmp-файл в .PAS. Но у меня она чего-то не работает :(...

:)
Её надо скомпилировать, а потом запустить из командной строки с двумя аргументами, и bmp-файл должен быть не больше не меньше чем 320x200, с 256 цветами.

В общем, для рисования смайлов не подойдёт. Так что забудьте про неё, лучше скажите, где и как нужно рисовать смайлик :) Что-нибудь придумаем.

Звуковое сопровождение. На паскале, под DOS его делать - задача весьма нетривиальная. Вряд ли кто возьмётся.

Если уж нужны звук и смайлы в несложном алгоритме - лучше предпочесть досовскому паскалю что-нибудь другое. html, например.

 
 
 
 
Сообщение15.05.2006, 01:29 
Аватара пользователя
Cube писал(а):
Alenka_kiss писал(а):
...В интернете нашла программку, которая переводит bmp-файл в .PAS. Но у меня она чего-то не работает :(...

:)
Её надо скомпилировать, а потом запустить из командной строки с двумя аргументами, и bmp-файл должен быть не больше не меньше чем 320x200, с 256 цветами.

В общем, для рисования смайлов не подойдёт. Так что забудьте про неё, лучше скажите, где и как нужно рисовать смайлик :) Что-нибудь придумаем.

Звуковое сопровождение. На паскале, под DOS его делать - задача весьма нетривиальная. Вряд ли кто возьмётся.

Если уж нужны звук и смайлы в несложном алгоритме - лучше предпочесть досовскому паскалю что-нибудь другое. html, например.

А может,в Делфи делать?

 
 
 
 
Сообщение15.05.2006, 09:01 
PSP писал(а):
А может,в Делфи делать?

Нашла программу Турбограф: рисуешь в нем картинку, как в Paint. А потом можно сделать файл PAS. Работает! А Делфи я не знаю, Делфи я не изучала еще.

 
 
 
 
Сообщение15.05.2006, 09:12 
Аватара пользователя
Alenka_kiss писал(а):
PSP писал(а):
А может,в Делфи делать?

Нашла программу Турбограф: рисуешь в нем картинку, как в Paint. А потом можно сделать файл PAS. Работает! А Делфи я не знаю, Делфи я не изучала еще.

Ну Делфи почти тот же Паскаль,только обьектно-ориентированный..Попробуйте,в нём Вам интереснее будет работать...

 
 
 
 
Сообщение15.05.2006, 11:23 
PSP писал(а):
Ну Делфи почти тот же Паскаль,только обьектно-ориентированный..Попробуйте,в нём Вам интереснее будет работать...

ну что значит попробуйте? В данный момент я учусь в университете, заочно, получаю техническое образование. Чему преподаватели учат, то и осваиваю потихоньку. Знаете как трудно, особенно когда преподавателей в глаза не знаешь.

 
 
 
 
Сообщение15.05.2006, 19:29 
Alenka_kiss писал(а):
... правда мелодия не фонтан...

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

 
 
 
 
Сообщение16.05.2006, 00:06 
Аватара пользователя
Alenka_kiss писал(а):
PSP писал(а):
Ну Делфи почти тот же Паскаль,только обьектно-ориентированный..Попробуйте,в нём Вам интереснее будет работать...

ну что значит попробуйте? В данный момент я учусь в университете, заочно, получаю техническое образование. Чему преподаватели учат, то и осваиваю потихоньку. Знаете как трудно, особенно когда преподавателей в глаза не знаешь.

Ну,я,к примеру,когда в Бауманском ЭВМ и С кончил,то фактически ассемблер и Делфи освоил самостоятельно...Были бы книги под рукои и дистрибутив языка-освоите.. :wink: :D

 
 
 
 
Сообщение16.05.2006, 02:31 
Werwolf писал(а):
Alenka_kiss писал(а):
... правда мелодия не фонтан...

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

Пригодилось бы! Мультипликацию я уже сделала! Красиво получилось. Ну, для DOCа красиво.
присылайте на адрес Aleynka@yandex.ru

 
 
 
 Pascal: обучающая игрушка для второклассника
Сообщение09.08.2008, 05:25 
По сабжу - кто-то предложил использовать Delphi...

Вот - вариант первоначальной программы в виде консольного приложения Delphi:
Код:
program Dictant;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;

const
  N = 10;
var
  i,k,ocenka : Integer;
  c : Char;
  s : string;
  index : array [1..N] of boolean;
  words : array [1..N] of string;
begin
  s := 'СЛОВАРНЫЙ ДИКТАНТ';  CharToOem(PChar(s),PChar(s)); Writeln(s);
  s := 'НАЖМИ КЛАВИШУ ВВОД'; CharToOem(PChar(s),PChar(s)); Writeln(s);
  ReadLn;

  { слова: }
  words[01] := 'Б...реза';
  words[02] := 'Быстр...';
  words[03] := 'Вдру...';
  words[04] := 'Весел...';
  words[05] := 'Вет...р';
  words[06] := 'В...робей';
  words[07] := 'В...рон ';
  words[08] := 'Гор...д';
  words[09] := 'Дев...чка';
  words[10] := 'Д...журный';{}
  { Строка пропущенных букв: }

  s := 'еогоеоооое'; CharToOem(PChar(s),PChar(s));
  for i := 1 to N do CharToOem(PChar(words[i]),PChar(words[i]));

  Randomize;

  ocenka := 0;
  for i := 1 to N do begin
    repeat k := 1+Random(N) until not index[k];
    index[k] := true;
    Write(words[k],' ? -> '); Readln(c);
    if c = s[k] then inc(ocenka);
  end;

  if ocenka >= 9 then
    s := 'Ваша оценка 5' else
      if ocenka >= 7 then
        s := 'Ваша оценка 3' else
          s := 'Ваша оценка 2';
  CharToOem(PChar(s),PChar(s)); Writeln(s);

  ReadLn;
end.


На самом деле консольное приложение Delphi не сильно отличается от привычного Вам варианта - т.к. внешне работа идёт в режиме эмуляции DOS-консоли - как и в Турбо-Паскале, поэтому Вам легко будет постепенно переходить на новый продукт.

Но при этом там открываются новые возможности использования весьма полезных класссов - для начала, например: TStringList!

TStringList в Delphi - это класс для хранения коллекции строк, обладающий богатыми возможностями для манипулирования ими.

Как пример - ещё один вариант той же программы, более универсальной:
список слов диктанта теперь хранится во внешнем текстовом файле с расширением <имя экзешника программы>.ini ("Dictant.ini"), а не в программе, которую раньше при изменении списка слов требовалось перекомпилировать каждый раз, меняя при этом все константы.

Теперь экзешник универсален и требует лишь "подсовывания" соответствующего текстового файла в виде списка строк формата: (содержимое внешнего текстового файла Dictant.ini)
    Б...реза=е
    Быстр...=о
    Вдру...=г
    ...
    и т.д.
Вот другой вариант той же программы (тоже - в консольном режиме), но с использованием TStringList:
Код:
program Dictant;

{$APPTYPE CONSOLE}

uses
  SysUtils,Classes,Windows;
var
  n,k,q : Integer;
      c : Char;
      s : string;
begin
  s := 'СЛОВАРНЫЙ ДИКТАНТ';  CharToOem(PChar(s),PChar(s)); Writeln(s);
  s := 'НАЖМИ КЛАВИШУ ВВОД'; CharToOem(PChar(s),PChar(s)); Writeln(s);
  ReadLn;

   Randomize;
   q := 0;

  with TStringList.Create do begin
    LoadFromFile(ChangeFileExt(ParamStr(0),'.ini'));     // <-- считывание ini-файла
    n := Count;

    s := Text; CharToOem(PChar(s),PChar(s)); Text := s;  //  <-- конвертация ini-файла

    while Count > 0 do begin
      k := Random(Count);
      Write(n-Count+1:3,') ',Names[k],' - '); Readln(c);
      if c = ValueFromIndex[k][1] then inc(q);
      Delete(k);
    end;

    Free
  end;

  WriteLn;
  s := 'Ваша оценка: '; CharToOem(PChar(s),PChar(s));
  Writeln(s,2+int(3*q/n):2:0);

  ReadLn;
end.


Длина списка произвольна и "на ходу" может изменяться без перекомпиляции самой программы. Конвертация же Ansi-OEM ini-файла необходима только в том случае, если текст строк диктанта набирается в кодировке Ansi (из под Windows), в противном случае эту строчку следует закомментировать.

Рабочее же тело программы (при сильно возросшей универсальности!) свелось всего к нескольки строкам:
Код:
    while Count > 0 do begin
      k := Random(Count);
      Write(n-Count+1:3,') ',Names[k],' - '); Readln(c);
      if c = ValueFromIndex[k][1] then inc(q);
      Delete(k);
    end;

а также сильно сократилось количество переменных и констант (снижающих универсальность).

 
 
 
 
Сообщение09.08.2008, 13:46 
В продолжение предыдущего поста...

Если не "заморачиваться" с перекодировкой, т.е. если текст приводимой программы скопировать и сохранить в кодировке DOS, также как и файл ini - либо набивать под DOS-ом, либо тоже сохранить в кодировке DOS, то можно избавиться от лишних операторов переконвертации CharToOem...

Тогда выщелоченная программа примет вид вот такой крохи:
Код:
program Dictant; {$APPTYPE CONSOLE}
uses
  SysUtils,Classes,Windows;
var
  c : Char; n,k,q : Integer;
begin
  Writeln('СЛОВАРНЫЙ ДИКТАНТ!');
  Writeln('НАЖМИ КЛАВИШУ ВВОД'); ReadLn;

  with TStringList.Create do begin
    LoadFromFile(ChangeFileExt(ParamStr(0),'.ini'));
    n := Count; q := 0; Randomize;
    while Count > 0 do begin k := Random(Count);
      Write(n-Count+1:3,') ',Names[k],' - '); ReadLn(c);
      if c = ValueFromIndex[k][1] then inc(q); Delete(k);
    end; Free
  end;

  WriteLn; WriteLn('Ваша оценка: ',2+int(3*q/n):2:0); ReadLn;
end.

При сохранении всех своих универсальных качеств! - Сравните с размером первоначальной - в темообразуещем топике! :wink:

 
 
 
 Ещё раз вдогонку к предыдущим постам
Сообщение09.08.2008, 22:35 
Кстати, используя аналогичную технику программирования - т.е. объектно ориентированные коллекции строк, можно набросать вариант этой программы для Турбо Паскаля:
Код:
program Dictant; {Turbo Pascal}

uses
  Objects;
var
  n,k,q : Integer; c : Char;
      s : string;  f : Text;
  Words : TStringCollection;

begin
  Writeln('æïÄéÇÉì¢ë äêèÆÇìÆ!');
  Writeln('ìÇåîê èïÇéêÿô ééÄä'); ReadLn;

  Words.Init(128,64);

  with Words do begin
    Assign(f,ParamStr(1)); ReSet(f);
    while not eof(f) do begin ReadLn(f,s);
      if s <> '' then Insert(NewStr(s));
    end; Close(f);

    n := Count; q := 0; Randomize;

    while Count > 0 do begin k := Random(Count); s := string(At(k)^);
      Write(n-Count+1:3,') ',Copy(s,1,length(s)-2),' - '); ReadLn(c);
      if c = s[length(s)] then inc(q); AtFree(k)
    end; Done
  end;

  WriteLn; WriteLn('éáΦá «µÑ¡¬á: ',2+int(3*q/n):2:0); ReadLn;
end.

Русскоязычные надписи здесь те же, просто они искажены из-за того, что этот файл дан в Dos-кодировке, чтобы сразу скопировать и без лишних манипуляций по конвертированию бросить в работу - под компилятор TPC.EXE.

Единственное алгоритмическое различие - теперь запуск программы происходит с параметром:
Код:
dictant.exe AnyFile.txt

где в качестве параметра выступает подготовленный файл со списком слов в описанном выше формате (как в Dictant.ini из примера, приведённого ранее для варианта консольного приложения для Delphi).

Аналогом класса TStringList в Delphi здесь выступает объект TStringCollection, являющийся по сути его предтечей в до-Дельфовую эру, поэтому их методы, используемые в приводимых программах, практически идентичны:

    Create - Init
    Free - Done
    Strings[k] - At(k)
    Delete(k) - AtFree(k)
    Count - Count
    и т.д.
Только вот Дельфовый LoadFromFile(...) - <загрузку из файла списка строк> - пришлось выписывать руками, поэтому код чуть длиннее на этот блок. Это же касается и новых свойств Names[k] и ValueFromIndex[k]. Но ничего удивительного - ведь Delphi - наследница Турбо-Паскаля: многие идеи, рожденные там получили дальнейшее развитие.

 
 
 [ Сообщений: 28 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group