написать функцию с масивом, который содержит название сторон света:nord,east,south,west. Функция, полученное обозначение(1 или 2 буквы) переделывает в название направление стороны света.
Какая-то лёгкая задачка.
В массив, сначала вводишь названия сторон света.
Пользователь вводит одну или две первые буквы.
Функция перебирает весь :-) массив и сравнивает с введёным пользователем словом.
Результатом работы функции будет название стороны света или сообщение о том, что такой стороны света не бывает.
Для сравнения можно использовать pos, как использовать, можно прочитать в help`e
Можешь взять здесь
SS.txt ( 350 байт )
Кол-во скачиваний: 476
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.
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.
Вот функция, но она не правильно работает - возвращает название сторони только последней буквы 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;
RaV твоя прога имеет один недостаток - при вводе, например rd , она пичатает
nord, хотя такой сторонны не существует.
А теперь вопрос к автору: для чего вводить 2 буквы?
Я понял для того чтобы можна было выводить "промежуточные" стороны.
Например, если ты ввел "ne", то результат должен быть nord east.
Правильно?
Вот они ошибки!
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;
Не долго исправить!
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.
RaV, вместо того, чтобы повторять все время:
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 ОТДЕЛЬНОЕ СПАСИБО,за все проги!!!!!!!
Я так понял что RaV исправил мою прогу по подобию своей, хотя
она должна искать
for i:=1 to length(str) do; { <--- Как ты думаешь, что ЗДЕСЬ делает точка с запятой ??? }
begin
...
end;
А с чего ругаться? Согласно синтаксису - все правильно... Мало ли, что ты делаешь? Может, тебе понадобился "пустой" цикл... Компилятор пропустил... Дальше - Begin ... End : везде, где допускается один оператор, допускается и блок операторов, взятый в операторные скобки... Тоже все по правилам...
Это такие ошибки - где компилятор - не помощник...