PDA

Показать полную графическую версию : [решено] Помогите решить программку на паскале


grethin999
07-05-2013, 17:45
Вывести на экран символ, предшествующий первому вхождению буквы «а» или сообщить о том, что буквы «а» нет в предложении.

Iska
07-05-2013, 18:21
Помогите… »
И что у Вас самого получилось? Приведите Ваш код или Ваши рассуждения по решению.

mrcnn
07-05-2013, 21:07
Буква «а» означает, что тип данных языка программирования должен быть строковым. Сперва выясняем, каким образом на паскале объявляется строковый тип данных.
Устанавливаем среду для разработки, например, 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
mrcnn, и не лень тебе было ...

Iska
08-05-2013, 06:05
mrcnn, и не лень тебе было ... »
Коллеге mrcnn, наверное, было просто скучно ;).

grethin999
08-05-2013, 15:14
Большое спасибо за помощь




© OSzone.net 2001-2012