Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Помогите решить программку на паскале (http://forum.oszone.net/showthread.php?t=260131)

grethin999 07-05-2013 17:45 2146090

Помогите решить программку на паскале
 
Вывести на экран символ, предшествующий первому вхождению буквы «а» или сообщить о том, что буквы «а» нет в предложении.

Iska 07-05-2013 18:21 2146105

Цитата:

Цитата grethin999
Помогите… »

И что у Вас самого получилось? Приведите Ваш код или Ваши рассуждения по решению.

mrcnn 07-05-2013 21:07 2146186

Буква «а» означает, что тип данных языка программирования должен быть строковым. Сперва выясняем, каким образом на паскале объявляется строковый тип данных.
Устанавливаем среду для разработки, например, fpc. Скачать эту среду можно по ссылке http://sourceforge.net/projects/freepascal/files/ выбрав Download fpc-2.6.2.i386-win32.exe (41.2 MB) Запускаем скачанный файл и устанавливаем.
Заходим в папку doc и открываем документацию.
Логично предположить что справочник по языку содержиться в файле ref.pdf (от англ. reference ) Открываем файл ref.pdf c помощью Adobe Acrobat Reader. Скачивается по ссылке: http://get.adobe.com/reader/
Нужно выяснить структуру исходного кода на языке паскаль. Для этого заходим в папку examples. Выбираем папку opengl и открываем файл morph3d.pp . Бегло просмотриваем.
Возвращаемся к файлу ref.pdf и открываем раздел types (англ. типы). Интересует Character types (англ. символьные типы), далее strings (по англ. string это строка, а нужен строковый тип данных)
С англ binary (двоичные исполняемые файлы) сокращается до bin. Заходим и директорюи bin, даее в i386-win32 . i386 это платформа, а win32 это операционная система.
Запускаем fp.exe
В меню выбираем File - New.
В начале должно быть
program название_программы ;
например,
Код:

program a;
Тело программы заключается в
Код:

begin
end.

begin( англ. начало), end (англ. конец)

Переменные объявляются перед телом программы в разделе var.

Заглядываем в пример в документации в файле ref.pdf и видим пример
Код:

Type
NameString = String[10];

Type используется для объявления пользовательского типа данных.
NameString это название нового типа данных
String[10] это составляющие этого типа, массива из 10 строк.

Можно упростить до следующего объявления, так как достаточно одной строки:
Код:

Type
NameString = String;

Можно проверить правильность компилирования с помощью функции writeln
Вбиваем простейшую программу:
Код:

program a;
type
namestring = string;
var
bc : namestring;
begin
writeln('1');
end.

Программа скомпилировалась и выполнилась.
Для компилирования выбираем в меню Compile - пункт меню Compile
Для запуска выбираем в меню Run - пункт меню Run.
Результат выполнения можно посмотреть выбрав в меню Debug пункт Output (с англ. переводится как вывод)
Возвращаемся к окну программы. Меняем программу на следующую:
Код:

program a;
type
namestring = string;
var
bc : namestring;
begin
bc := 'qweertyui';
writeln(bc);
end.

Здесь определяется строка следующим образом bc := 'qweertyui';
Оператором присваивания значения переменной является :=
Теперь нужно узнать как создается цикл. В файле ref.pdf открываем раздел Statements - Structured Statements - The For ..in.. do statement где можно посмотреть примеры кода. Раз тип строковый, то элементом строкового типа является символ (англ. char)
В разделе var вводим новую переменную
Код:

var
i: char;

которая будет посимвольно выводить строку в цикле следующим образом
Код:

for i  in bc do
begin
writeln(i);
end;

Для того, чтобы сравнить символы нужно узнать, каким будет условный оператор. В файле ref.pdf раздел Statements - Structured Statements - The if..then..else statement

Нужна еще одна переменная типа символ для того, чтобы в ней хранить значение смивола который является предыдущим.
Код:

var
j:char;

Код:

program a;
type
namestring = string;
var
i : char;
j : char;
bc : namestring;
begin
bc := 'qweertyui';
for i  in bc do
begin
writeln(i);
if i = 'a' then
writeln (': ' + j);
j:= i;
end;
end.

Для того, чтобы сообщить, что буквы «а» нет в предложении, вводим переменную k и переписываем программу следующим образом:

Код:

program a;
type
namestring = string;
var
i : char;
j : char;
k : integer;
bc : namestring;
begin
bc := 'qweertyui';
k := 0;
for i  in bc do
begin
writeln(i);
if i = 'a' then
begin
writeln (': ' + j);
k : = 1;
end
j:= i;
end;
if k = 0 then
writeln ('no');
end.

Если a является первым символом в строке, то j неопределено, и это вызовет ошибку. Устраняем эту ошибку:

Код:

program a;
type
namestring = string;
var
i : char;
j : char;
k : integer;
l : integer;
bc : namestring;
begin
bc := 'aqweertyui';
k := 0;
l : = 0;
for i  in bc do
begin
writeln(i);
if i = 'a' then
begin
if l <> 0 then
writeln (': ' + j);
k : = 1;
l := 1;
end
j:= i;
end;
if k = 0 then
writeln ('no');
end.

Оператором неравенства является <>.

Извините, если путано. Старался объяснить подробно, как умел.

lxa85 07-05-2013 22:41 2146247

mrcnn, и не лень тебе было ...

Iska 08-05-2013 06:05 2146366

Цитата:

Цитата lxa85
mrcnn, и не лень тебе было ... »

Коллеге mrcnn, наверное, было просто скучно ;).

grethin999 08-05-2013 15:14 2146588

Большое спасибо за помощь


Время: 13:00.

Время: 13:00.
© OSzone.net 2001-