Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 4
1

Подсчитать количество единиц на главной диагонали матрицы

26.04.2010, 16:57. Показов 1979. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста с решением задач.
Миниатюры
Подсчитать количество единиц на главной диагонали матрицы  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2010, 16:57
Ответы с готовыми решениями:

Подсчитать количество нулей на главной диагонали матрицы
дана вещественная матрица 9х6 подсчитать кол-во нулей на главной диагонале (через процедуру) ...

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

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

Подсчитать количество положительных элементов ниже главной диагонали матрицы
всем привет, помогите пожалуйста сделать эту задачу от начало до конца, заранее спасибо. ...

15
Платежеспособный зверь
8926 / 4354 / 1642
Регистрация: 28.10.2009
Сообщений: 11,568
26.04.2010, 16:59 2
MaKu, это 7 разных задач. Желательно для каждой задачи иметь отдельную тему, тогда есть шансы, что вам помогут, а большое количество задач отпугивает помощников. Да и вообще,сомневаюсь, что кто-то бесплатно станет вам решать 7 задач. Может, вам лучше во фриланс?
0
5001 / 1673 / 409
Регистрация: 25.04.2010
Сообщений: 4,623
Записей в блоге: 2
26.04.2010, 17:12 3
Знал бы я ещё, что такое главная и побочная диагональ, мож помог бы, а то универ уже 2 года назад закончил всё позабывал нафиг.
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 4
26.04.2010, 17:39  [ТС] 4
Цитата Сообщение от кот Бегемот Посмотреть сообщение
Да и вообще,сомневаюсь, что кто-то бесплатно станет вам решать 7 задач.
Ну мне ненужно что бы один человек мне все решал. Один человек одну решит, другой другую, так глядишь и все решится
0
Платежеспособный зверь
8926 / 4354 / 1642
Регистрация: 28.10.2009
Сообщений: 11,568
26.04.2010, 17:45 5
Пройди по предыдущим темам и посчитай тех, кто решал. Наберёшь 7?
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 4
26.04.2010, 20:02  [ТС] 6
кот Бегемот, Ну хотя бы несколько номеров кто нибудь решил.
0
Платежеспособный зверь
8926 / 4354 / 1642
Регистрация: 28.10.2009
Сообщений: 11,568
26.04.2010, 20:03 7
Ну, жди. Я уже всё сказал.
0
5001 / 1673 / 409
Регистрация: 25.04.2010
Сообщений: 4,623
Записей в блоге: 2
27.04.2010, 08:32 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

1.

PureBasic
1
2
3
4
5
6
7
8
9
10
' Матрица
DIM M(1 TO 7, 1 TO 7)
' Кол-во единиц
DIM Edinic AS INTEGER
    ' Ищем единицы и увеличиваем их счётчик
    FOR i = 1 to 7
       IF M(i, i) = 1 THEN Edinic = Edinic + 1
    NEXT
 
PRINT "Edinic na glavnoj diagonali:"; Edinic
MaKu, объяснишь что такое побочная диагональ мб решу.
1
Платежеспособный зверь
8926 / 4354 / 1642
Регистрация: 28.10.2009
Сообщений: 11,568
27.04.2010, 09:31 9
>Quiet Snow<, побочная диагональ начинается из правого верхнего угла матрицы и идёт в левый нижний a(i,n+1-i)
0
5001 / 1673 / 409
Регистрация: 25.04.2010
Сообщений: 4,623
Записей в блоге: 2
27.04.2010, 13:09 10
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

кот Бегемот ясно, спасибо за разъяснение...

Первый и второй пункты, исправил кое-что...

PureBasic
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
' Матрица
DIM M(1 TO 7, 1 TO 7)
' Счетчик кол-ва единиц
DIM Edinic AS INTEGER
' Произведение эл-ов
DIM Proizved AS DOUBLE
'(опять же никто ничего не уточняет, посему удобнее так,
' ибо матрица по умолчанию типа SINGLE)
 
  RANDOMIZE 755   'Кому надо поменяет цифру(так удобней)
 
    ' Заполним матрицу случайными числами
    FOR ix = 1 TO 7: FOR iy = 1 TO 7
       M(ix, iy) = (RND * 5) -2.5
       ' Случайным образом расставим единицы на главной диагонали
       IF (INT(RND*2) = 1) AND (ix = iy) THEN M(ix, iy) = 1
    NEXT: NEXT
 
    ' Ищем единицы и увеличиваем их счётчик
    FOR i = 1 TO 7
       IF M(i, i) = 1 THEN Edinic = Edinic + 1
    NEXT
 
    ' Ищем произведение эл-ов
    FOR i = 1 TO 7
       IF i = 1 THEN
         Proizved = M(1, 7)
       ELSEIF i <> 1 THEN
         Proizved = Proizved * M(i, 8-i)
       END IF
    NEXT
 
 
PRINT "Edinic na glavnoj diagonali:"; Edinic
PRINT "Proizvedeniye elementov pobochn diagonali:"; Proizved
1
Платежеспособный зверь
8926 / 4354 / 1642
Регистрация: 28.10.2009
Сообщений: 11,568
27.04.2010, 13:26 11
>Quiet Snow<, повторюсь: никто не требует от новичков описания типов переменных, поэтому в объявлении массива достаточно
PureBasic
1
DIM M(7,7)
А поскольку Бейсик - вообще язык не строгий, объявлять другие переменные, кроме массивов, вообще не надо, они по умолчанию - вещественные.

Ваш способ задания случайных чисел - это не из QBASIC, в нем задаётся вход в таблицу псевдослучайных чисел - как функция времени, прошедшего от начала суток, то есть
PureBasic
1
RANDOMIZE TIMER
, а само случайное (целое) число из некоторого интервала (например, -50+50) задается как
PureBasic
1
m(i,j)=int(rnd*101)-50
и последнее, IF..END IF, конечно, удобный блок, но по возможности лучше обходиться без него, сразу подозрение: шибко умный. Несколько команд после IF можно просто разделять двоеточиями в той же строке.

А по алгоритму никаких вопросов
1
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 4
28.04.2010, 15:14  [ТС] 12
Мне вот алгоритм словами написали:
1) главная диагональ - когда у элемента a[i,j], индексы i=j.

k=0
цикл i от 1 до n делать
если a[i,i]=1 тогда
k=k+1
конец если
конец цикла

на выходе имеем k=число единиц на главной диагонали.

2) побочная диагональ, когда у элемента a[i,j], индексы i+j=n+1 или j=n+1-i.

p=1
цикл i от 1 до n делать
p=p*a[i,n+1-i]
конец цикла

на выходе имеем p=произведение элементов побочной диагонали.

3) элемент над главной диагональю, когда j>i.
считаем что максимальный - первый элемент из верхнего треугольника.

max=a[1,2]
maxi=1
maxj=2
цикл i от 1 до n делать
цикл j от i+1 до n делать
если a[i,j]>max тогда
max=a[i,j]
maxi=i
maxj=j
конец если
конец цикла
конец цикла

на выходе max=максимальный элемент, maxi и maxj - его индексы

4) менять будем через временную переменную temp

цикл i от 1 до n делать
temp=a[i,1]
a[i,1]=a[i,4]
a[i,4]=temp
конец цикла

5) что такое "удалить четвертую строку?"
если забить нулями, то так:

цикл j от 1 до n делать
a[4,j]=0
конец цикла

6) среднее арифметическое всех элементов? тогда так:

avr=0
цикл i от 1 до n делать
цикл j от 1 до n делать
avr=avr+a[i,j]
конец цикла
конец цикла
avr=avr/(n*n)

7) вставить второй столбец с клавиатуры, какой-нить оператор INPUT небось.

цикл i от 1 до n делать
ввести (a[i,2])
конец цикла

или

цикл i от 1 до n делать
ввести (temp)
a[i,2]=temp
конец цикла
Добавлено через 22 часа 5 минут
В самом Basic'е все это пропечатываю, ничего не получается (((
0
5001 / 1673 / 409
Регистрация: 25.04.2010
Сообщений: 4,623
Записей в блоге: 2
28.04.2010, 20:28 13
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

>IF..END IF, конечно, удобный блок, но по возможности лучше обходиться без него

кот Бегемот, я не помню когда последний раз серьёзно напрягал мозги, но ты меня вогнал в такие рамки, что даже будучи матёрым программистом знающим все операнды диалекта сложно сообразить в таких экстримальных условиях, не говоря уже про новичков, которым хоть за что нибудь бы ухватиться - понять суть и объяснить олдскульному фортранному() преподу who is who.
Ну вот что должен знать новичёк?
Как определить массив, переменные их типы...
Как заполнить оные(ввод/вывод данных). Естественно семантические особенности, хотя бы общие понятия.
Написание математических/логических выражений, оператор присваивания.
Ключевые слова ветвлений, циклов, условий.
Это базовые вещи, без них вообще никуда, указанные задания не выполняются без них.
Заниматься оптимизацией на уровне "сложно/просто" это тоже с какой стороны посмотреть, препод сам не дурак(кому как не мне знать, что значит пытаться доказать что-то кандидату математических наук, знающему Asm и тонны теорий о всяких машинах Тьюринга и прочих прелестях типа Lisp).
Я не в укор говорю, а просто реально теряюсь, судя по всему размах знаний для таких дел нужен существенно меньше.

псевдокод появился, это радует, посмотрю и если буду уверен в его правильности, перефигачу в *.BAS* (те пункты в которых уверен)...

>что такое "удалить четвертую строку?"
Матрица с нулями в 4 строке и матрица без 4 строки - это 2 разных матрицы, к тому же разной размерности, в этом случае нужно перенести оставшуюся часть матрицы в 4-ю, 5-ю, 6-ю строки и "формально" уменьшить размерность при дальнейших операциях, матрица станет 7x6 (7 столбцов, 6 строк).

Добавлено через 48 минут
Всё кроме пункта 3, в нём я не уверен.

PureBasic
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
' Матрица
DIM M(1 TO 7, 1 TO 7)
' Счетчик кол-ва единиц
DIM Edinic AS INTEGER
' Произведение эл-ов
DIM Proizved AS DOUBLE
'(опять же никто ничего не уточняет, посему удобнее так,
' ибо матрица по умолчанию типа SINGLE)
DIM SredneeM
 
  CLS
  RANDOMIZE TIMER   'Таблица случ. ч. по таймеру
 
    ' Заполним матрицу случайными числами
    FOR ix = 1 TO 7: FOR iy = 1 TO 7
       M(ix, iy) = (RND * 5) - 2.5 ' Пусть все числа будут веществ, кроме тех
                                           ' которые будут переодич. появляться на диагонали  
       ' Случайным образом расставим единицы на главной диагонали
       IF (INT(RND * 2) = 1) AND (ix = iy) THEN M(ix, iy) = 1
    NEXT: NEXT
 
        PRINT "Ishodnaya matrica :"
 
     FOR iy = 1 TO 7: FOR ix = 1 TO 7
       PRINT M(ix, iy);
     NEXT: PRINT : NEXT
 
 
    ' Ищем единицы и увеличиваем их счётчик (Пункт 1)
    FOR i = 1 TO 7
       IF M(i, i) = 1 THEN Edinic = Edinic + 1
    NEXT
 
    ' Ищем произведение эл-ов (Пункт 2)
    FOR i = 1 TO 7
       IF i = 1 THEN
         Proizved = M(1, 7)
       ELSEIF i <> 1 THEN
         Proizved = Proizved * M(i, 8 - i)
       END IF
    NEXT
 
 
PRINT "Edinic na glavnoj diagonali:"; Edinic
PRINT "Proizvedeniye elementov pobochn diagonali:"; Proizved
 
    'Меняем столбцы (Пункт 4)
    FOR i = 1 TO 7
      SWAP M(1, i), M(4, i)
    NEXT
 
    'Копируем 5,6,7 строки в 4,5,6 соотв. (Пункт 5)
    'Теперь 7-ой строки для нас НЕТ
     FOR iy = 4 TO 6: FOR ix = 1 TO 7
       M(ix, iy) = M(ix, iy + 1)
     NEXT: NEXT
 
        PRINT "Novaya matrica :"
 
     FOR iy = 1 TO 6: FOR ix = 1 TO 7
       PRINT M(ix, iy);
     NEXT: PRINT : NEXT
 
    'Ищем среднее арифм. эл-в изменённой матрицы (Пункт 6)
     FOR iy = 1 TO 6: FOR ix = 1 TO 7
       SredneeM = SredneeM + M(ix, iy)
     NEXT: NEXT: SredneeM = SredneeM / 42
      PRINT "Srednee arifmeticheskoye matrici:"; SredneeM
 
    'Ввести 2 столбик с клавиатуры (Пункт 7)
      PRINT "Vvedite elementi vtorogo stolbca po odnomy"
      INPUT "1:", M(2, 1): INPUT "2:", M(2, 2): INPUT "3:", M(2, 3)
      INPUT "4:", M(2, 4): INPUT "5:", M(2, 5): INPUT "6:", M(2, 6)
0
Платежеспособный зверь
8926 / 4354 / 1642
Регистрация: 28.10.2009
Сообщений: 11,568
28.04.2010, 21:11 14
>Quiet Snow<, я понимаю, как не хочется корежить себя, но вот беда: уровень преподавания в наших учебных заведениях таков, что всё даётся по минимуму, к примеру, если это объявление массива, то не

PureBasic
1
DIM masiv( 1 to 20,1 to 10)as single
а
PureBasic
1
а dim a(20,10)
не
PureBasic
1
2
3
4
if nomerStr>maxNomer then
indeks=indeks+1
massiv(indeks)=nomerStr
end if
а
PureBasic
1
if n>m then k=k+1:a(k)=n
а в нормальную запись не врубаются ни ученики, ни их тупые преподы
вот в чём беда!
а если ещё объявлять переменные или писать значок %, то тут можно ввести ученика (и учителя) в ступор!
0
5001 / 1673 / 409
Регистрация: 25.04.2010
Сообщений: 4,623
Записей в блоге: 2
28.04.2010, 21:45 15
кот Бегемот, во-во точняк...

>объявлять переменные
Вообще реально странно, преподы совсем обленились чтоли? Лет 5 назад такого ещё не было, основы давали как полагается пусть и без % ! # & $...
0
кот Бегемот
28.04.2010, 22:06     Подсчитать количество единиц на главной диагонали матрицы
  #16

Не по теме:

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2010, 22:06

Подсчитать количество положительных элементов ниже главной диагонали матрицы
всем привет, помогите пожалуйста сделать эту задачу от начало до конца, заранее спасибо. ...

Подсчитать количество элементов матрицы, лежащих выше главной диагонали
В двумерном массиве подсчитать количество элементов лежащих выше главной диагонали.

Матрицы. Подсчитать количество положительных элементов на и ниже главной диагонали
В TurboPascal 2)Двухмерный массив задан последовательностью случайных чисел от 0 до M....

Подсчитать количество нечетных элементов, расположенных ниже главной диагонали матрицы
Дана квадратная матрица А(N,N). Составить программу подсчета количества нечетных элементов,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru