01.12.2010, 20:59 | #1 (permalink) |
Новичок
Регистрация: 01.12.2010
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Двумерные массивы и циклическая алгоритмическая конструкция
1е по массивам:Найти сумму элементов нечетных строк матрицы.(моя программа на фото)Преподаватель сказал,что нужен ввод строк и столбцов и тд. И дальнейший расчет сумм элементов неч. строк матрицы. И 2я задача на Циклическую алгоритмическую конструкцию: Вычислить значение y, которое соответствует каждому значению x (x = 1, dx = 0,5), по формуле: . Считать y до тех пор, пока подкоренное выражение больше или равно 0,05. Определить k – количество вычисленных y. Мой код: program d; uses crt ; var y,x, k,dx: integer; begin clrscr; k:=0; while y=<0.05 do begin x:=x+dx; y:=sqrt((x+2)/x*x*x); K:=K+1; Writeln( ‘k=’ k); End; End. Но преподаватель сказал,что код не правильный т.к. нету ввода в программе х и dx. Прошу помогите.Заранее спасибо |
01.12.2010, 20:59 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Возможно, этот вопрос уже решен ранее одним из участников форума Двумерные массивы и процедуры PASCAL Двумерные массивы через процедуру |
01.12.2010, 21:27 | #2 (permalink) | |||
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Цитата:
Цитата:
|
|||
01.12.2010, 21:35 | #3 (permalink) | |
Новичок
Регистрация: 01.12.2010
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
program p2; uses crt; const n=8; m=7; var i,j,p:integer; matrix: array[0..n,0..m] of integer; begin p:=0; for i:=0 to n do if i mod 2 = 1 then for j:=0 to m do p:=p+matrix[i,j]; writeln('answer: ',p); readln; end. Преподаватель сказал,что ввод n и m должен осуществлятся после запуска программы,т.е. нужно написать,чтобы после запуска программы была надпись введите строку и введите столбец соответственно.И я не знаю как мою программу переделать,чтобы это все было Формула для 2й задачи y:=sqrt((x+2)/x*x*x); |
|
01.12.2010, 22:05 | #4 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Не знаю, правильно ли я понимаю ход мысли преподавателя, но поступить можно так: задать, как у Вас это и сделано на фото, массив "с запасом", затем ввести n и m (порознь, потому что матрица может быть и не квадратной!), а затем вводить саму матрицу, причем не "вслепую", как у Вас, а с выводом номера строки и столбца. В итоге я бы написал так: Код:
program p2; uses crt; var i,j,p,n,m:integer; matrix: array[1..100,1..100] of integer; begin Write('Number of rows = '); ReadLn(n); Write('Number of columns = '); ReadLn(m); For i:=1 to n do For j:=1 to m do begin Write('matrix[',i,',',j,']= '); ReadLn(matrix[i,j]); end; WriteLn; For i:=1 to n do begin For j:=1 to m do Write(matrix[i,j]:5); WriteLn; end; WriteLn; for i:=1 to n do if i mod 2 = 1 then begin p:=0; for j:=1 to m do p:=p+matrix[i,j]; writeln('The sum of elements of ',i,' row is ',p); end; readln; end. 1. Нумерацию строк и столбцов матрицы принято начинать с 1, а не с 0. 2. По завершении ввода элементов предусмотрен вывод на экран всей матрицы. 3. В соответствии с условиями задачи, подсчитывается и выводится сумма элементов КАЖДОЙ нечетной строки, а не всех скопом, как у Вас. |
|
01.12.2010, 22:40 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Теперь по второй задаче. Увы, при небольшом объеме программы ошибок в ней куча:
1. Вы вычисляете вещественную функцию вещественного аргумента - так почему же формат параметров x, y, dx Вы указываете целочисленный (integer)? Только real! 2. Действительно не определены начальное значение х и шаг. Это нужно сделать либо с консоли, либо введя эти величины в виде констант. 3. Абсолютно неправильно задан цикл. Во-первых, в Паскале отношение "больше или равно" и "меньше или равно" записывается так: сначала - неравенство, а потом равенство, т. е. ">=", "<=" - правильно, а вот "=>", "=<" - недопустимо. Во-вторых, поскольку мы наперед не знаем начального значения y, цикл "while ... do" не годится, следует использовать "repeat ... until". В-третьих, в любом случае неравенство по у записано неверно, смысл его в том, что цикл продолжается до тех пор, пока условие не станет истинным. 4. Неправильно записана сама функция. Там, как я понимаю, в знаменателе подкоренного выражения стоит х в кубе. Вашу же формулу транслятор интерпретирует так: (х+2)/х, результат умножить на х и результат опять умножить на х. 5. Нет вывода самих значений х и у. Исходя из всего вышеизложенного, предлагаю такой вариант: Код:
program d; uses crt ; var k:integer; y,x,dx: real; begin clrscr; Write('Initial x value = '); ReadLn(x); Write('Step dx = '); ReadLn(dx); k:=0; x:=x-dx; Repeat x:=x+dx; y:=sqrt((x+2)/(x*x*x)); K:=K+1; Writeln(k:2, x:7:1, y:7:2); Until y<0.05; ReadKey; end. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
01.12.2010, 23:16 | #6 (permalink) |
Новичок
Регистрация: 01.12.2010
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
cпасибо большоеочень сильно помог
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|