Пятница, 03.05.2024, 15:39

Delphi

Приветствую Вас Гость

Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Сегодня были:
Самые активные пользователи

Меню сайта
Категории каталога
Основы [8]
Исходники [2]
Наш опрос
Чему уделять больше внимания?
Всего ответов: 64
Главная » Статьи » MIDletPascal » Основы

Работа с массивами
1. Даны целые а1,...,an (n<=200). Все члены последовательности
с четными номеpами, пpедшествующие пеpвому по поpядку члену
со значением max ( a1,...,an ) домножить на max (a1,...,an
), а все члены с нечетными номеpами , следующие за последним
по поpядку членом со значением max (a1,...,an ) уменьшить на
max (a1,...,an ).

Это задача Козачка, которая завалялась на компе.
Вот как я её решал:


program turbopascal;
uses crt;
var
a:array[1..200] of integer;
found:boolean;
k1,k2,n,i,max:integer;
begin
clrscr;
writeln('vvedite razmernost massiva');
readln(n);
writeln('vvedite elementi massiva');
for i:=1 to n do
read(a[i]);
max:=a[1];
for i:=1 to n do
if a[i]>max then
max:=a[i];
found:=false;
for i:=1 to n do
if (a[i]=max) and (found=false) then
begin
found:=true;
k1:=i;
end;
found:=false;
for i:=n downto 1 do
if (a[i]=max) and (found=false) then
begin
found:=true;
k2:=i;
end;
for i:=1 to n do
if (i mod 2=0) then
begin
if iend
else
if i>k2 then a[i]:=a[i]-max;
writeln;
for i:=1 to n do
write(a[i]:4);
end.

То же самое, но с использованием MidletPascal(перед экзаменом по бел. яз. я лазил по интернету в поисках готовой шпоры, вспомнил слова Максима про Pascal на мобильник, а затем наткнулся на эту программу). Изменён только ввод и вывод на экран. Разбирался во всём 20-30 минут, затем копировал нужные куски из справки и заменял вывод. Можно было бы и сделать покороче, сделать процеДуры writeln и readln.Возможно те, кто не проходил TP в школе(модуль graph) с трудом поймут процесс вывода в графическом режиме.У меня экран телефона 176*220: xmax=176, ymax=220 DrawText('vvedite elementi massiva', 0, 0);
Repaint;
Я вывожу строчку 'vvedite elementi massiva'(если мне надо вывести элемент типа integer , то я перевожу его в тип string: s:=integerToString(i);.

Переводит целое число в строковое представление.)).Координаты левого верхнего угла воображаемой рамки с текстом (x=0,y=0).Изображение только сформировалось в памяти мобильника, поэтому надо обновить изображение на экране-Repaint.
Ввод производится через формы(я скопировал куски примеров из справки).
Вот что получилось:

program MidletPascal;

var
itemId : integer;
cmdNext : command;
cmdQuit : command;
a:array[1..200] of integer;
found:boolean;
k1,k2,n,i,max:integer;
s:string;

begin
ShowForm;
itemId := FormAddTextField('vvedite razmernost massiva', '', 2, TF_NUMERIC);
cmdNext := CreateCommand('Go!', CM_OK, 1);
AddCommand(cmdNext);
repeat until GetClickedCommand = cmdNext;
n := StringToInteger(FormGetText(itemId));

ClearForm;
DrawText('vvedite elementi massiva', 0, 0);
Repaint;
delay(1000);
for i:=1 to n do
begin
itemId := FormAddTextField('vvedite '+ IntegerToString(i)+'-tij element massiva', '', 20, TF_NUMERIC);
cmdNext := CreateCommand('Go!', CM_OK, 1);
AddCommand(cmdNext);
repeat until GetClickedCommand = cmdNext;
a[i]:= StringToInteger(FormGetText(itemId));
ClearForm;
end;
ShowCanvas;
max:=a[1];
for i:=1 to n do
if a[i]>max then
max:=a[i];
found:=false;
for i:=1 to n do
if (a[i]=max) and (found=false) then
begin
found:=true;
k1:=i;
end;
found:=false;
for i:=n downto 1 do
if (a[i]=max) and (found=false) then
begin
found:=true;
k2:=i;
end;
SetColor(255, 255, 255);
FillRect(0, 0, GetWidth, GetHeight);
SetColor(0, 0, 0);
s:='';
for i:=1 to n do
s:=s+' '+IntegerToString(a[i]);
DrawText(s, 0, 0);
for i:=1 to n do
if (i mod 2=0) then
begin
if iend
else
if i>k2 then a[i]:=a[i]-max;
s:='';
for i:=1 to n do
s:=s+' '+IntegerToString(a[i]);
DrawText(s, 0, 20);
Repaint;
cmdQuit := CreateCommand('Quit', CM_EXIT, 1);
AddCommand(cmdQuit);
repeat until GetClickedCommand = cmdQuit;
end.

Далее я откомпилировал данный файл, протестировал на эмуляторе java, а затем залил на телефон полученный файл с расширением *.jar.

работа с текстом:
Лабораторная работа №8
Написать программу,которая переставляет слова предложения в обратном порядке.
TP:

uses crt;
var
s1,s2:string;
i,j:integer;
begin
clrscr;
writeln('Введите строку');
readln(s1);
s1:=' '+s1+' ';
j:=length(s1);
s2:='';
for i:=(j-1) downto 1 do
if s1[i]=' ' then
begin
s2:=s2+copy(s1,i+1,j-i);
j:=i;
end;
writeln(s2);
end.

В MidletPascal 2.02(с процедурами и ф-иями writeln,clrscr,readln,exit)

program strings;
var
s1,s2:string;
i,j:integer;

lines:integer;
procedure writeln(s:string);
begin
showcanvas;
drawtext(s,0,lines*10);
lines:=lines+1;
repaint;
delay(1000);
end;
function readln:string;
var
ButtonOK:Command;
data:string;
begin
ShowForm;
ShowTextBox('', '', 255, TF_ANY);
ButtonOK := CreateCommand('OK', CM_OK, 1);
AddCommand(ButtonOK);
repeat until GetClickedCommand = ButtonOK;
data:= getTextBoxString;
ClearForm;
writeln(data);
readln:=data;
end;
procedure clrscr;
begin
showcanvas;
setcolor(0,0,0);
FillRect(0,0,GetWidth,GetHeight);
repaint;
setcolor(255,255,255);
end;
procedure exit;
var
ButtonExit:command;
begin
ButtonExit:=CreateCommand('Exit',CM_Exit,1);
AddCommand(ButtonExit);
repeat until GetClickedCommand=ButtonExit;
end;

//!!!!!!!!!!!!!!!!!!!!!!!программа
begin
clrscr;
writeln('Введите строку');
s1:=readln;
s1:=' '+s1+' ';
j:=length(s1);
s2:='';
for i:=(j-1) downto 0 do
begin
if copy(s1,i,i+1)=' ' then
begin
s2:=s2+copy(s1,i,j);
j:=i;
end;
end;
writeln(s2);
exit;
end.
//конец
Почти одно и то же

Вывод:
Возможно MP штука и не очень для нас полезная, но крутая(типа крута видеть на экране k750 свою программу на Pascal). Да , пользы минимум(если не углубляться в возможности программы-работа с файлами, интернетом, Bluetooth, клиент-серверные приложения, игры и звук, sms), но всё-таки примитивный калькулятор, шпору по физике, использующую некоторую формулу с условиями(if и др.) можно нарулить.







Взято с сайта http://asoi.ucoz.ru/

Категория: Основы | Добавил: Ivin (22.03.2008)
Просмотров: 2980 | Рейтинг: 0.0/0 |