Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Двумерные массивы и циклическая алгоритмическая конструкция (http://www.tehnari.ru/f41/t42793/)

garik 01.12.2010 20:59

Двумерные массивы и циклическая алгоритмическая конструкция
 
Вложений: 1
Добрый день.нужна помощь в исправлении ошибок 2х заданий на языке Pascal.
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.
Прошу помогите.Заранее спасибо

Vladimir_S 01.12.2010 21:27

Цитата:

Сообщение от garik (Сообщение 424676)
Добрый день.нужна помощь в исправлении ошибок 2х заданий на языке Pascal.
1е по массивам:Найти сумму элементов нечетных строк матрицы.(моя программа на фото)Преподаватель сказал,что нужен ввод строк и столбцов и тд. И дальнейший расчет сумм элементов неч. строк матрицы.

Подозреваю, что Вы просто не поняли преподавателя. Программа, будучи по идее правильной, содержит, тем не менее, несколько ошибок. Выложите нормальный листинг, обсудим.
Цитата:

И 2я задача на Циклическую алгоритмическую конструкцию:
Вычислить значение y, которое соответствует каждому значению x
(x = 1, dx = 0,5), по формуле: .
По какой?
Цитата:

Но преподаватель сказал,что код не правильный т.к. нету ввода в программе х и dx.
Абсолютно правильно сказал.

garik 01.12.2010 21:35

Цитата:

Сообщение от Vladimir_S (Сообщение 424687)
Подозреваю, что Вы просто не поняли преподавателя. Программа, будучи по идее правильной, содержит, тем не менее, несколько ошибок. Выложите нормальный листинг, обсудим.
По какой?

Абсолютно правильно сказал.

Листинг по массивам:
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);

Vladimir_S 01.12.2010 22:05

Цитата:

Сообщение от garik (Сообщение 424692)
Преподаватель сказал,что ввод n и m должен осуществлятся после запуска программы,т.е. нужно написать,чтобы после запуска программы была надпись введите строку и введите столбец соответственно.И я не знаю как мою программу переделать,чтобы это все было

И поэтому Вы в листинге вообще выкинули ввод данных? Лихо...
Не знаю, правильно ли я понимаю ход мысли преподавателя, но поступить можно так: задать, как у Вас это и сделано на фото, массив "с запасом", затем ввести 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. В соответствии с условиями задачи, подсчитывается и выводится сумма элементов КАЖДОЙ нечетной строки, а не всех скопом, как у Вас.

Vladimir_S 01.12.2010 22:40

Теперь по второй задаче. Увы, при небольшом объеме программы ошибок в ней куча:
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.


garik 01.12.2010 23:16

cпасибо большое:)очень сильно помог


Часовой пояс GMT +4, время: 07:06.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.