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 и др.) можно нарулить.