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

RFpro.ru: Алгоритмы и теория программирования


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 1422
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1147
∙ повысить рейтинг »
Micren
Статус: Бакалавр
Рейтинг: 1051
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Алгоритмы и теория программирования

Номер выпуска:105
Дата выхода:20.11.2009, 12:00
Администратор рассылки:Alexey G. Gladenyuk, Управляющий
Подписчиков / экспертов:778 / 201
Вопросов / ответов:2 / 3

Вопрос № 174221: Доброго времени суток! Необходимо составить блок-схему к задаче по сортировке в одномерном массиве: “В одномерном массиве (пусть будет массив A) расположить элементы [9,23,41,14,0,4,5,1,-12,0] в порядке убывания”. Причём решить 3 способами: ме...


Вопрос № 174233: Доброго времени суток! Есть задача: "Найти наибольший элемент побочной диагонали заданной матрицы A(N, N)" т.е. нужен алгоритм в виде блок схемы. Пока не понимаю организацию цикла в цикле. Заранее благодарю....

Вопрос № 174221:

Доброго времени суток!
Необходимо составить блок-схему к задаче по сортировке в одномерном массиве:
“В одномерном массиве (пусть будет массив A) расположить элементы [9,23,41,14,0,4,5,1,-12,0] в порядке убывания”. Причём решить 3 способами: методом сортировки обменами, методом сортировки вставками и методом сортировки выбором.
Дело в том, что мне не с чем сравнить свои блок-схемы и соответственно нет возможности определить в том ли направлении я думаю, а это крайне необходимо.
Заранее благодарен.

Отправлен: 14.11.2009, 15:23
Вопрос задал: starcode, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Megaloman, Бакалавр :
Здравствуйте, starcode.
С методами сортировки я ознакомился здесь. Там приведены примеры сортировка по возрастанию (см в приложении). Вот блок-схемы для трёх методов с сортировкой по убыванию. Предполагается, что индексы массива изменяются от 1 до N.

Здесь можно скачать картинку с блок-схемами.
Не берусь утверждать, что оформление блок-схемы как-то соответствует канонам оформления, но здесь можно скачать экселовский файл с блок-схемами и макросами в VBA, написанными по этим блок-схемам. Они работают. Вот их код.
Код:
Sub puz()
' Сортировка обменами (пузырьковая)

N = 10
ReDim A(N)

A(1) = 9
A(2) = 23
A(3) = 41
A(4) = 14
A(5) = 0
A(6) = 4
A(7) = 5
A(8) = 1
A(9) = -12
A(10) = 0

For i = 1 To N
Sheets("Лист1").Range("A1").Offset(i - 1, 0) = A(i)
Next

For i = 2 To N
For j = N To i Step -1
If A(j - 1) < A(j) Then
y = A(j - 1)
A(j - 1) = A(j)
A(j) = y
End If
Next
Next

For i = 1 To N
Sheets("Лист1").Range("A1").Offset(i - 1, 1) = A(i)
Next

End Sub
Sub vstav()

' Сортировка вставками

N = 10
ReDim A(1 To N)

A(1) = 9
A(2) = 23
A(3) = 41
A(4) = 14
A(5) = 0
A(6) = 4
A(7) = 5
A(8) = 1
A(9) = -12
A(10) = 0

For i = 1 To N
Sheet s("Лист1").Range("A1").Offset(i - 1, 0) = A(i)
Next

For i = 2 To N
For j = 1 To i - 1
If A(j) < A(i) Then
y = A(i)
For k = i To j + 1 Step -1
A(k) = A(k - 1)
Next
A(j) = y
End If
Next
Next

For i = 1 To N
Sheets("Лист1").Range("A1").Offset(i - 1, 2) = A(i)
Next

End Sub
Sub vybor()

' Сортировка выбором

N = 10
ReDim A(1 To N)

A(1) = 9
A(2) = 23
A(3) = 41
A(4) = 14
A(5) = 0
A(6) = 4
A(7) = 5
A(8) = 1
A(9) = -12
A(10) = 0

For i = 1 To N
Sheets("Лист1").Range("A1").Offset(i - 1, 0) = A(i)
Next

For i = 1 To N - 1
k = i

For j = i + 1 To N
If A(k) < A(j) Then
k = j
End If
Next

y = A(k)
A(k) = A(i)
A(i) = y

Next

For i = 1 To N
Sheets("Лист1").Range("A1").Offset(i - 1, 3) = A(i)
Next

End Sub
Следует заметить, что в приведенных кодах предполагается, что в массиве не менее N=2 элементов (никаких проверок на меньшее количество там нет, коды мне были нужны для уверенности, что блок-схему рисую правильно), однако блок-схема правильна для любого N

Приложение:

-----
Нет времени на медленные танцы

Ответ отправил: Megaloman, Бакалавр
Ответ отправлен: 14.11.2009, 19:37

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 256514 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 174233:

    Доброго времени суток!
    Есть задача: "Найти наибольший элемент побочной диагонали заданной матрицы A(N, N)" т.е. нужен алгоритм в виде блок схемы.
    Пока не понимаю организацию цикла в цикле.
    Заранее благодарю.

    Отправлен: 15.11.2009, 10:01
    Вопрос задал: starcode, Посетитель
    Всего ответов: 2
    Страница вопроса »


    Отвечает Warnes, 2-й класс :
    Доброго времени суток.
    Вот блок схема нахождения максимума побочной диагонали матрицы. И он не содержит вложенных циклов.


    Подробно по алгоритму.
    Оговорюсь сразу, что в БС предусмотрено, что данные вы уже ввели.
    Переменная I это строка матрицы.
    Переменная J это столбец матрицы
    Переменная Max это соответственно максимум который мы ищем.
    1)Приравниваем переменной J значение переменной N это делается потому что в алгоритме мы будем проходить по столбцам в обратном порядке(по убыванию)
    2) Присваеваем переменной Max значение a[1,n] то есть число которое находится в самом правом верхнем углу (на побочной диагонали) это мы делаем для того чтобы нам можно было сравнивать эту переменную с другими элементами на диогонали. Можно было бы и прировнять max к 0, но вдр уг элементы будут все отрицательны, и в итоге 0 и останется самым большим.
    3) Начинаем цикл от 1 до N(размера матрицы).
    4)В теле цикла проверяем, если Max меньше текущего значения элемента матрицы (а именно a[i,j]) тогда присваиваем переменной max значение этого элемента матрицы, так как он больше max
    5) Уменьшаем переменную J на единицу, так как побочная диагональ идет по принципу, чем больше строка, тем меньше столбец.

    Если что-то не понятно, то отвечу на все вопросы.
    Чуть попозже постараюсь объяснить вложенные циклы.

    P.S. Вот код программы написанный на Pascal/ Delphi.
    Исправлено использование BBCode.
    -----
    ∙ Отредактировал: Николай Владимирович / Н.В., Старший модератор
    ∙ Дата редактирования: 15.11.2009, 15:56 (время московское)

    Приложение:

    Ответ отправил: Warnes, 2-й класс
    Ответ отправлен: 15.11.2009, 11:17

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 256531 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Megaloman, Бакалавр :
    Здравствуйте, starcode.
    Для начала, определимся о чём речь. Упрощенно, матрицей A размерности N*N назовём таблицу чисел из N строк, в каждой строке по N чисел.
    С точки зрения программирования таблицу можно представить в виде двумерного массива A(N,N) (способ описания массива зависит от конкретного языка программирования).
    Адресовать каждый элемент массива можно индексами, то есть элемент, стоящий в, допустим, i строке на j месте записывается как A(i,j), где i,j=1,2...N
    Главной диагональю матрицы размерности N*N называют совокупность элементов при i=j, то есть A(1,1),A(2,2)... A(N,N)
    Побочной диагональю матрицы размерности N*N называют совокупность элементов A(1,N),A(2,N-1)...A(N,1)
    То есть, в общем виде A(i,N+1-i), где i=1...N
    Чтобы было предметно ясно, нарисуйте таблицу, например 3*3 на бумаге.
    Итак, по теме Вашего вопроса, чтобы найти наибольший элемент побочной диагонали, надо просмотреть элементы A(i,N+1-i), где i=1...N;
    Как видите, мы имее м только 1 переменную, по которой вычисляется индекс. То есть, необходимость цикла в цикле, как Вы ставите вопрос, не возникает.
    Надо найти только одно значение индекса, например, строки. Второй индекс побочной диагонали вычисляется однозначно.
    Вот блок-схема алгоритма.

    Вот как это реализовано в VBA

    Код:
    imax = 1
    For i = 1 To N
    If A(i, N + 1 - i) > A(imax, N + 1 - imax) Then imax = i
    Next

    По сравнению с предыдущим ответом я ищу значение индекса максимального элемента, так как я понимаю "наибольший элемент побочной диагонали заданной матрицы" именно как индекс этого элемента, а значение максимума A(imax, N + 1 - imax) однозначно определяется индексом imax.
    -----
    Нет времени на медленные танцы

    Ответ отправил: Megaloman, Бакалавр
    Ответ отправлен: 15.11.2009, 11:41

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 256532 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.11 от 17.11.2009

    В избранное