Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Турбо Паскаль. Программирование на Pascal
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ]
Модераторы: paradise, KMA
  

miss_graffiti


Долгожитель

Katerina, ну да... местами или. но кое-где все же останется и.

Всего сообщений: 670 | Присоединился: сентябрь 2005 | Отправлено: 23 дек. 2006 0:33 | IP
KMA



Долгожитель

miss graffiti, я понял это, совсем недавно. Да тупил. Может просто замусолилась задача. Ну в общем, я нерационально нашел решение, согласен. Но понял я это только сегодня, когда сидел, на уроке. =)

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 23 дек. 2006 0:57 | IP
norma


Удален

Здравствуйте.
Позвольте со своей проблемой.

Задача из зачетных  1-го курса 1-го семестра мех-мата,
с предварительным пояснением, звучит так:

В последующих задачах под удалением элемента массива следует понимать исключение этого элемента из массива путем смещения всех следующих за ним элементов на 1 позицию.
Последнему элементу массива присваивается значение 0.

Дан массив, состоящий из N целых чисел. Удалить из массива каждый второй элемент.
Значение номера определяется по положению в исходном массиве.


Решение напросилось, примерно, такое:


Пусть количество элементов в массиве  n.
Поделим его на 2, округлив до ближайшего целого,
получим число m - количество неудаленных (оставшихся) элементов.

Далее цикл по i от 2 до m,  переприсваиваем:  

mas(i):=mas(2*i-1) ,

и ещё один цикл по i от m+1 до n, в котором зануляем оставшиеся элементы:

mas(i):=0

Но данный способ как-то не вяжется с методой предварительного пояснения к задаче.

Как должен выглядеть более грамотный алгоритм?

Спасибо. (Если это возможно, то подробнее и с пояснениями).

Всего сообщений: N/A | Присоединился: N/A | Отправлено: 23 дек. 2006 19:20 | IP
miss_graffiti


Долгожитель

Почему же не вяжется?
В пояснении оговаривается только одно: фактического удаления не происходит (то есть было в массиве 5 элементов, 5 и осталось). Псевдоудаление осуществляется путем сдвига - ты это и делаешь.
В общем, имхо, все правильно.

Всего сообщений: 670 | Присоединился: сентябрь 2005 | Отправлено: 23 дек. 2006 19:38 | IP
norma


Удален

Мой подход - он как бы больше от математических соображений, чем алгоритмических. И вследствие этого, как-то не обобщенно выглядит.
И есть предположение, что предисловие к задаче необходимо понимать как жесткое предписание к способу составлению алгоритма.
На самом деле мне кажется, что необходимо организовать алгоритм так, что бы в нём просвечивалась как-бы  по-элементная последовательность действий в цикле:  сместил вперёд  -  занулил хвост, потом следующее смещение - и опять занулил уже следующую вылезшую часть хвоста . . . и т.д. до окончания цикла.
Но как обусловить эту процедуру для каждого второго элемента массива ?.  Не соображу.
Может быть я уже лишнего чего-то надумываю.

     

Всего сообщений: N/A | Присоединился: N/A | Отправлено: 23 дек. 2006 20:20 | IP
KMA



Долгожитель

norma, в принципе ваш метод очень хорош, и даже наиболее правилен для данной задачи. Самый быстрый алгоритм. Если же ваше жесткое предписание, то делаете одну общую процедуру, такого типа:

procedure sdvigInMassiv (Var mas: massiv; n, m: byte);
Var buf: integer;
     i: byte;
Begin
       {n это количество элементов в массиве, m номер элемента, которого надо удалить}
        mas[m]:=0;
        for i:=m to n-1 do
         begin
           buf:=mas[ i ];
           mas[ i ]:=mas[i+1];
           mas[i+1]:=buf
         end  
End;

Я не говорю, что мой метод самый рациональный, можно написать и лучше. Типа такого

for i:=m to n-1 do
mas[ i ]:=mas[i+1];
mas[n]:=0;

Можно и так, покороче. А твоя задача тогда решиться следующим образом.

for i:=2 to (n div 2)+1 do
sdvigInMassiv (mas, n, i);

Но лучше всегда индивидуальный подход, тогда задача решается быстрее.  


(Сообщение отредактировал KMA 24 дек. 2006 0:09)

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 23 дек. 2006 22:46 | IP
Guest



Новичок

Здраствуйте! Помогите плиз с задачей:

Дана действительная матрица А размером N*M. Назовем «особым»  элемент А(i,j), если в его строке слева от него элементы составляют строго монотонную последовательность, а справа все элементы являются простыми числами. Вывести на экран количество «особых» элементов.

Я не могу понять какая процедура нужна для выщитывания монотонной последовательности и для простых чисел. (что такое простые числа, и монотонная последовательность я понимаю).

Всего сообщений: Нет | Присоединился: Never | Отправлено: 24 дек. 2006 0:17 | IP
KMA



Долгожитель


Помогите если можете. Дан файл со строками  из строки нужно удалить все цифры


Guest правильно подсказал, единственное, что надо немного подкорректировать, если символ удалить, то ты можешь перескочить, это можно исправить немного изменив.

i:=1;
while i<length (s) do
  if s[ i ] in ['0'..'9']
     then delete (s, i, 1)
     else inc (i);

Есть и другой способ, он может и быстрее, это перекопировать все в новую строчку, при этом исключая все цифры.

stroka:='';
for i:=1 to length (s) do
if not (s[ i ] in ['0'..'9'])
   then stroka:=stroka+s[ i ];

Какой из них лучше решать тебе. С одной стороны, мы и там и там делаем n шагов, где n длина строки, но во втором случае однозначно n, при этом копирая, а в первом, возможно и меньше но там мы удаляем (сдвигаем), поэтому это занимает немного больше операций.

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 24 дек. 2006 1:51 | IP
Guest



Новичок

Помогите! Опишите пожалуйста процедуру нахождения простого числа?

Всего сообщений: Нет | Присоединился: Never | Отправлено: 24 дек. 2006 2:29 | IP
Guest



Новичок

Хотябы словестно опишите пожалуйста.

Всего сообщений: Нет | Присоединился: Never | Отправлено: 24 дек. 2006 2:30 | IP

Эта тема закрыта, новые ответы не принимаются

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ]

Форум работает на скрипте © Ikonboard.com