Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 10:41   #1
Wizard_Adeptus
 
Аватар для Wizard_Adeptus
 
Регистрация: 06.02.2007
Сообщений: 8
Сообщение Pascal, вопрос по коду.

Здравствуйте, дорогие программисты. ) Я студент, пишу прграммку. Столкнулся с проблемой. Т. к. салага в этом деле, самостоятельно не могу разобраться. Помогите чем сможете? )
Почему условие if search <> 0 then не срабатывает при search = от 1 до 8? При search = 9 или 10, writeln ('Есть!') срабатывает. Почему??? Укажите студенту на его ошибки?

Код:
Program mission_5;
Uses
        crt;
Const
        N = 20;
        M = 3;
Type
        arr = array [0..20, 1..3] of string;
Var
        hill: arr;
        i, j: integer;
        str: string;

//////////////////////////////////////////////////////////////////////////////////
/////                       Поиск строки в массиве.
/////       Требует массив типа 'arr', размерность и искомое слово
//////////////////////////////////////////////////////////////////////////////////
Procedure searchWord (hill: arr; N, M: integer; str: string);
        var
                i, j, search: integer;
        begin
                for i := 1 to N do begin
                        for j := 1 to M do begin
                                search := pos(str, hill[i, j]);
                                writeln (search);
                        end;
                        if search <> 0 then
                                writeln ('Есть!');
                end;
        end;
///////////////////////////////////////////////////////////////////////////////////
Begin
        clrscr;
        writeln ('Задача №5');
        writeln ('---------');
        writeln ('Ввести в ЭВМ список характеристик N горных вершин мира,');
        writeln ('содержащий информацию вида (N<=20): Название Страна Высота.');
        writeln ('Обеспечить следующие виды операций со списком:');
        writeln ('  а) Определение самой высокой вершины;');
        writeln ('  б) Упорядочение списка по убыванию высоты;');
        writeln ('  в) Ввод некоторого названия по запросу, поиск его в списке');
        writeln ('     и выдача полной информации о запрошенной вершине.');
        writeln;
        writeln ('Решение:');
        writeln ('--------');

        //заранее введенный массив вершин
        hill[1, 1] := 'Джомолунгма';   hill[1, 2] := 'Непал';     hill[1, 3] := '8848 метров';
	hill[2, 1] := 'Аконкагуа';     hill[2, 2] := 'Аргентина'; hill[2, 3] := '6962 метра ';
	hill[3, 1] := 'Мак-Кинли';     hill[3, 2] := 'США';       hill[3, 3] := '6194 метра ';
	hill[4, 1] := 'Килиманджаро';  hill[4, 2] := 'Танзания';  hill[4, 3] := '5895 метров';
	hill[5, 1] := 'Эльбрус';       hill[5, 2] := 'Россия';    hill[5, 3] := '5642 метра ';
	hill[6, 1] := 'Пунчак-Джая';   hill[6, 2] := 'Индонезия'; hill[6, 3] := '4884 метра ';
	hill[7, 1] := 'Косцюшко';      hill[7, 2] := 'Австралия'; hill[7, 3] := '2228 метров';
	hill[8, 1] := 'Канченджанга';  hill[8, 2] := 'Индия';     hill[8, 3] := '8586 метров';
	hill[9, 1] := 'Манаслу';       hill[9, 2] := 'Непал';     hill[9, 3] := '8156 метров';
	hill[10, 1] := 'Нанга Парбат'; hill[10, 2] := 'Пакистан'; hill[10, 3] := '8126 метров';

        //вывод на экран
        writeln ('+---+--------------+---------------+---------------+');
        writeln ('  № |   НАЗВАНИЕ   |     СТРАНА    |     ВЫСОТА    |');
        writeln ('+---+--------------+---------------+---------------+');
        for i := 1 to N do begin
                if hill[i, 1] <> '' then
                        write (i: 3, ' |');
                for j := 1 to M do
                        if hill[i, j] <> '' then
                                write (hill[i, j]: 13, ' | ');
                if hill[i,j] <> '' then begin
                        writeln;
                        writeln ('+---+--------------+---------------+---------------+');
                end;
        end;
        writeln;
        readln (str);
        searchWord (hill, N, M, str);

        readln;

End.
Wizard_Adeptus вне форума Ответить с цитированием
Старый 22.05.2012, 10:50   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

потому что проверка условия "search <> 0" вынесена за цикл по j
Фактически, вы проверяете вхождение str только в элементы hill[i, M].
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.05.2012, 11:00   #3
Wizard_Adeptus
 
Аватар для Wizard_Adeptus
 
Регистрация: 06.02.2007
Сообщений: 8
По умолчанию

Спасибо большое. Ошибку понял. Принимаю меры. )
Wizard_Adeptus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по коду программы на С++. Проверить. AlekCaHdpyLLlka Помощь студентам 5 11.05.2012 18:24
Глобальные переменные. Вопрос по коду. DarkAltair Общие вопросы C/C++ 1 23.02.2012 14:48
Вопрос по коду " ввод десятичных чисел в ассемблере" El_Blasto Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 14.12.2010 10:14
Вопрос по коду BeZone Помощь студентам 10 28.12.2009 13:21
Вопрос по коду(Pascal) DeFt Помощь студентам 6 09.06.2009 21:20