Помощь - Поиск - Пользователи - Календарь
Полная версия: стороны света
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Kristina20
написать функцию с масивом, который содержит название сторон света:nord,east,south,west. Функция, полученное обозначение(1 или 2 буквы) переделывает в название направление стороны света.
pascal65536
Какая-то лёгкая задачка.
В массив, сначала вводишь названия сторон света.
Пользователь вводит одну или две первые буквы.
Функция перебирает весь :-) массив и сравнивает с введёным пользователем словом.
Результатом работы функции будет название стороны света или сообщение о том, что такой стороны света не бывает.
Для сравнения можно использовать pos, как использовать, можно прочитать в help`e
RaV
Можешь взять здесьНажмите для просмотра прикрепленного файла
Bokul
function func (var ch : char): string;
const
ss : array [1..4] of string=('nord','west','east','south');
var k,i : integer;
begin
for i:=1 to 4 do
if pos(ch,ss[i])<>0 then
k:=i;
if k<>0 then
write(ss[k])
else write('Не существует такой стороны света');
end;

var
ch : char;

begin
read(ch);
func(ch);
end.


Читай внимательно
Цитата
полученное обозначение(1 или 2 буквы)

У тебе работает только с одной smile.gif
RaV
Цитата(Bokul @ 27.05.2006 11:58) *

Не долго исправить! good.gif
function func (var ch : string{<---изменение}): string;
const
ss : array [1..4] of string=('nord','west','east','south');
var k,i : integer;
begin
k:=0;{<---изменение}
for i:=1 to 4 do
if pos(ch,ss[i])<>0 then
k:=i;
if k<>0 then
write(ss[k])
else write('Не существует такой стороны света');
end;

var
ch : string;{<---изменение}

begin
read(ch);
func(ch);
end.


k нужно обнулить, иначе там может быть не ноль
Bokul
Вот функция, но она не правильно работает - возвращает название сторони только последней буквы str.
function world(str:string):string;
const mas:array[1..4] of string[5]=('nord',
'east',
'south',
'west');
var i,j:byte; buf:string;
begin
buf:='';
for i:=1 to length(str) do;
for j:=1 to 4 do
if str[i]=mas[j][1] then
buf:=buf+' '+mas[j];
world:=buf;
end;



А когда делаю такую проверку

const mas:array[1..4] of string[5]=('nord',
'east',
'south',
'west');
var i,j:byte; buf:string;
begin
buf:='';
for i:=1 to length(str) do;
begin
writeln('i = ',i);
readln;
for j:=1 to 4 do
if str[i]=mas[j][1] then
buf:=buf+' '+mas[j];
end;
world:=buf;
end;

то і выводиться только один раз и равняется length(str), даже когда длинна str больше 1.
Где ошибка?
Bokul
RaV твоя прога имеет один недостаток - при вводе, например rd , она пичатает
nord, хотя такой сторонны не существует.

А теперь вопрос к автору: для чего вводить 2 буквы?
Я понял для того чтобы можна было выводить "промежуточные" стороны.
Например, если ты ввел "ne", то результат должен быть nord east.
Правильно?
RaV
Вот они ошибки! smile.gif

function world(str:string):string;
const mas:array[1..4] of string[5]=('nord',
'east',
'south',
'west');
var i,j:byte; buf:string;
begin
buf:='';
for i:=1 to length(str) do{<----удалить эту строку }
for j:=1 to 4 do
if (str[1]=mas[j][1]) and (str[2]=mas[j][2]) then{<--Здесь изменено}
buf:=mas[j];
world:=buf;
end;


И все нормально будет.
Только если вводить 1 или 2 буквы!!!Иначе по первым двум будет выводить сторону света.
RaV
Не долго исправить!

function func (var ch : string): string;
const
ss : array [1..4] of string=('nord','west','east','south');
var k,i : integer;
begin
k:=0;
for i:=1 to 4 do
if pos(ch,ss[i])=1{<-- изменение} then
k:=i;
if k<>0 then
write(ss[k])
else write('Не существует такой стороны света');
end;

var
ch : string;

begin
read(ch);
func(ch);
end.


Скорее всего 2 буквы предназначены именно для "промежуточной" стороны
текст программы с "промежуточной" стороной Нажмите для просмотра прикрепленного файла
volvo
RaV, вместо того, чтобы повторять все время:
Цитата(RaV @ 27.05.2006 8:36)
Не долго исправить!

возьми и исправь! У тебя программа (та, что в аттаче) по-прежнему содержит МИНИМУМ одну ошибку!!!

Не веришь? Введи 'nn' на запрос... Что получишь? 'nord nord'? Очень остроумно...

Вот вариант, который лишен этого недостатка:
Нажмите для просмотра прикрепленного файла

(хотя и здесь еще не все предусмотрено) no1.gif
Гость
Bokul,ti vse praveljno ponjal,4to esli vvoditj 'ne',to na ekrane dolzno vivoditsa 'nord east'!!!!!!
Sapsibo vam vsem ogromnoe!!!!!!!!!vi mne namnogo obleg4ili ziznj!!!!!!!!!teperj,blagodorja va,ja uze pol ekzamena sdala!!!!!!!!СПАСИБО!!!!
PS:VOLVO ОТДЕЛЬНОЕ СПАСИБО,за все проги!!!!!!! wub.gif wub.gif wub.gif wub.gif
Bokul
Я так понял что RaV исправил мою прогу по подобию своей, хотя
она должна искать
Цитата
"промежуточные" стороны.

Вопрос остается: где моя ошибка?
volvo
Цитата(Bokul @ 27.05.2006 7:32)
Где ошибка?

blink.gif blink.gif
Цитата(Bokul @ 27.05.2006 7:32)

for i:=1 to length(str) do; { <--- Как ты думаешь, что ЗДЕСЬ делает точка с запятой ??? }
begin
...
end;
Bokul
Цитата
for i:=1 to length(str) do; { <--- Как ты думаешь, что ЗДЕСЬ делает точка с запятой ??? }

Почему компилятор не ругается? blink.gif
volvo
А с чего ругаться? Согласно синтаксису - все правильно... Мало ли, что ты делаешь? Может, тебе понадобился "пустой" цикл... Компилятор пропустил... Дальше - Begin ... End : везде, где допускается один оператор, допускается и блок операторов, взятый в операторные скобки... Тоже все по правилам...

Это такие ошибки - где компилятор - не помощник... smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.