Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 01.12.2010, 20:59   #1 (permalink)
garik
Новичок
 
Регистрация: 01.12.2010
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Двумерные массивы и циклическая алгоритмическая конструкция

Добрый день.нужна помощь в исправлении ошибок 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.
Прошу помогите.Заранее спасибо
Миниатюры
20101201_004.jpg  
garik вне форума   Ответить с цитированием

Старый 01.12.2010, 20:59
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Возможно, этот вопрос уже решен ранее одним из участников форума

Двумерные массивы и процедуры PASCAL
Двумерные массивы через процедуру

Старый 01.12.2010, 21:27   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от garik Посмотреть сообщение
Добрый день.нужна помощь в исправлении ошибок 2х заданий на языке Pascal.
1е по массивам:Найти сумму элементов нечетных строк матрицы.(моя программа на фото)Преподаватель сказал,что нужен ввод строк и столбцов и тд. И дальнейший расчет сумм элементов неч. строк матрицы.
Подозреваю, что Вы просто не поняли преподавателя. Программа, будучи по идее правильной, содержит, тем не менее, несколько ошибок. Выложите нормальный листинг, обсудим.
Цитата:
И 2я задача на Циклическую алгоритмическую конструкцию:
Вычислить значение y, которое соответствует каждому значению x
(x = 1, dx = 0,5), по формуле: .
По какой?
Цитата:
Но преподаватель сказал,что код не правильный т.к. нету ввода в программе х и dx.
Абсолютно правильно сказал.
Vladimir_S вне форума   Ответить с цитированием
Старый 01.12.2010, 21:35   #3 (permalink)
garik
Новичок
 
Регистрация: 01.12.2010
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

Абсолютно правильно сказал.
Листинг по массивам:
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);
garik вне форума   Ответить с цитированием
Старый 01.12.2010, 22:05   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от garik Посмотреть сообщение
Преподаватель сказал,что ввод 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   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 01.12.2010, 23:16   #6 (permalink)
garik
Новичок
 
Регистрация: 01.12.2010
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

cпасибо большоеочень сильно помог
garik вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.