2014 dxdy logo

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

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




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


12/10/05
478
Казань
Alenka_kiss писал(а):
Ну а так, восторгу сына не было предела и он сразу попросил сделать такую же по математике "потому что математику он любит".

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

 Профиль  
                  
 
 
Сообщение14.05.2006, 07:47 


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

 Профиль  
                  
 
 
Сообщение14.05.2006, 20:48 
Аватара пользователя


20/01/06
64
оттуда
Alenka_kiss писал(а):
...В интернете нашла программку, которая переводит bmp-файл в .PAS. Но у меня она чего-то не работает :(...

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

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

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

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

 Профиль  
                  
 
 
Сообщение15.05.2006, 01:29 
Заслуженный участник
Аватара пользователя


22/10/05

2601
Москва,физфак МГУ,1990г
Cube писал(а):
Alenka_kiss писал(а):
...В интернете нашла программку, которая переводит bmp-файл в .PAS. Но у меня она чего-то не работает :(...

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

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

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

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

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

 Профиль  
                  
 
 
Сообщение15.05.2006, 09:01 


06/01/06
66
PSP писал(а):
А может,в Делфи делать?

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

 Профиль  
                  
 
 
Сообщение15.05.2006, 09:12 
Заслуженный участник
Аватара пользователя


22/10/05

2601
Москва,физфак МГУ,1990г
Alenka_kiss писал(а):
PSP писал(а):
А может,в Делфи делать?

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

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

 Профиль  
                  
 
 
Сообщение15.05.2006, 11:23 


06/01/06
66
PSP писал(а):
Ну Делфи почти тот же Паскаль,только обьектно-ориентированный..Попробуйте,в нём Вам интереснее будет работать...

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

 Профиль  
                  
 
 
Сообщение15.05.2006, 19:29 


07/02/06
96
Alenka_kiss писал(а):
... правда мелодия не фонтан...

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

 Профиль  
                  
 
 
Сообщение16.05.2006, 00:06 
Заслуженный участник
Аватара пользователя


22/10/05

2601
Москва,физфак МГУ,1990г
Alenka_kiss писал(а):
PSP писал(а):
Ну Делфи почти тот же Паскаль,только обьектно-ориентированный..Попробуйте,в нём Вам интереснее будет работать...

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

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

 Профиль  
                  
 
 
Сообщение16.05.2006, 02:31 


06/01/06
66
Werwolf писал(а):
Alenka_kiss писал(а):
... правда мелодия не фонтан...

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

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

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


09/08/08
3
По сабжу - кто-то предложил использовать 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 


09/08/08
3
В продолжение предыдущего поста...

Если не "заморачиваться" с перекодировкой, т.е. если текст приводимой программы скопировать и сохранить в кодировке 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 


09/08/08
3
Кстати, используя аналогичную технику программирования - т.е. объектно ориентированные коллекции строк, можно набросать вариант этой программы для Турбо Паскаля:
Код:
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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group