Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru

RusFAQ.ru: Программирование на языке Pascal

Выпуск № 352
от 05.12.2004, 10:40

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 563
Отправлено ответов: 2134
Активность: 379.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Alien
Статус: Опытный
Общий рейтинг: 130.81
[Подробней >>]
Boriss
Статус: Профессиональный
Общий рейтинг: 155.49
URL: Программирование на Паскале
[Подробней >>]
DSota
Статус: Опытный
Общий рейтинг: 122.56
[Подробней >>]
 
Strory
Статус: Опытный
Общий рейтинг: 159.91
URL: МУАТ
Телефон: +7 (845-3) 54-16-74
[Подробней >>]
sir henry
Статус: Профессиональный
Общий рейтинг: 163.56
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 558. Здраствуйте. Задача: Дан массив целых чисел М1. Вводим массив М2, размерность кот значительно меньше... (ответов: 5)

Вопросов: 1, ответов: 5


 Вопрос № 558

Здраствуйте.
Задача:
Дан массив целых чисел М1. Вводим массив М2, размерность кот значительно меньше чем у М1. Определить сколько раз массив М2 встречается в М1.
В приложении решение, но оно почему-то выводит , что массив М2 всегда встречается один раз(я там явно массиву М1 два раза присвоил одни и теже цифры - 0,0,25).
В чем ошибка?


Приложение:


Вопрос отправлен: 01.12.2004, 14:48
Отправитель: Семен

[Следующий вопрос >>] [Список вопросов]

Отвечает Alien

Доброе время суток, Семен!
блин, а че на турбо паскале то? если шибко прибъет, пиши, поможем

Ответ отправлен: 01.12.2004, 18:19
Отправитель: Alien


Отвечает Boriss

Добрый день, Семен!
Во первых, лучше в таких ситуациях использовать Read, а не ReadLn. Проще ввод
2) Излишне сложный алгоритм решения простой задачи: проще сразу все три проверять
for i:=1 to 17 do
if (m2[1] = m1[i]) and (m2[2]=m1[i+1]) and (m2[3] = m1[i+2]) then Inc(k);


Ответ отправлен: 01.12.2004, 17:48
Отправитель: Boriss


Отвечает DSota

Поменяй строку fl:=(m2[j]=m1[i+j-1]); на fl:=(m1[j]=m2[i+j-1]);
А так все нормально, массив м1 (три его первых числа) действительно
встречается в массиве м2 один раз.
И еще для совсем уж крайнего случая можно где-то в начале написать k:=0;


Ответ отправлен: 01.12.2004, 15:23
Отправитель: DSota


Отвечает Strory

Привет, Семен!
Ошибка в 31 строке:
  fl:=(m1[j]=m2[i+j-1]);
У меня твоя прога вылетела при i=4 и j=1 по 201-й ошибке (Ошибка при проверке границ). Считаем: i+j-1 = 4+1-1, а m2[4] не существует.
Семён, как постоянному клиенту, ещё расскажу как эту ошибку исправить ;) Короче, я тут посидел, помедитировал и понял, что ты перепутал массивы m1 и m2. Если заменить 31-ю строку на:
  fl:=(m1[i+j-1]=m2[j]);
то всё работает :)
И ещё позволю себе дать несколько советов. Во-первых, выражения типа i:=i+1 лучше заменять на inc(i).
Во-вторых, от кучи присваиваний можно избавиться, используя массивы-константы.
В третьих, пробелы улучшают читабельность кода.
В четвёртых, побольше медитируй, тогда не будешь путаться ;)
С учётом вышеизложенного, вот твоя программа:

uses crt;
const
  m1: array [1..20] of integer = (0,0,25,3,5,7,5,0,0,25,1,4,2,7,4,3,8,2,5,3);
 &n bsp;m2: array [1..3] of integer = (0,0,25);
var
  i, j, k: integer;
  fl: boolean;
begin
  ClrScr;
  while i < 20 do begin
    inc(i);
    fl := true;
    j := 1;
    while (fl) and (j <= 3) do begin
      fl := (m2[j] = m1[i + j - 1]);
      inc(j)
    end;
    if fl then inc(k);
  end;
  WriteLn('massiv m2 vstrech ', k, ' raz');
  while not KeyPressed do;
end.

Всех благ,
  Strory...

Ответ отправлен: 02.12.2004, 06:24
Отправитель: Strory


Отвечает sir henry

Доброе время суток, Семен!
High(m1) div High(m2);
Целочисленное деление, больше там ничего не нужно.

Ответ отправлен: 02.12.2004, 05:27
Отправитель: sir henry



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (21)
C / C++ (20)
Perl (4)
Builder / Delphi (19)
Pascal (20)
Basic / VBA (12)
Java / JavaScript (5)
PHP (18)
Криптография (8)
WinAPI (20)
Радиоэлектроника (15)
Пользователю
Windows 95/98/Me (40)
Windows NT/2000/XP (60)
"Железо" (38)
Поиск информации (22)
Администратору
Windows NT/2000/XP (37)
Linux / Unix (17)
Юристу
Гражданское право (11)
Семейное право (6)
Трудовое право (10)
КоАП (6)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Web-студия "Kalashnikoff.ru"


hotlog_js="1.0";hotlog_d=document; hotlog_n=navigator;hotlog_rn=Math.random(); hotlog_n_n=(hotlog_n.appName.substring(0,3)=="Mic")?0:1; hotlog_r=""+hotlog_rn+"&s=25513&im=127&r="+escape(hotlog_d.referrer)+"&pg="+ escape(window.location.href); hotlog_d.cookie="hotlog=1"; hotlog_r+="&c="+(hotlog_d.cookie?"Y":"N"); hotlog_d.cookie="hotlog=1; expires=Thu, 01-Jan-70 00:00:01 GMT" hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2";hotlog_s=screen; hotlog_r+="&wh="+hotlog_s.width+'x'+hotlog_s.height+"&px="+((hotlog_n_n==0)? hotlog_s.colorDepth:hotlog_s.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; hotlog_d.write("HotLog") Яндекс цитирования
© 2001-2004 Россия, Москва. Идея, дизайн, программирование: Калашников О.А. ICQ: 68951340
При перепечатке материалов ссылка на данный сайт обязательна!

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.pasplus
Отписаться

В избранное