• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Двумерные массивы и циклическая алгоритмическая конструкция

  • Автор темы Автор темы garik
  • Дата начала Дата начала

garik

Ученик
Регистрация
1 Дек 2010
Сообщения
6
Реакции
0
Баллы
0
Двумерные массивы и циклическая алгоритмическая конструкция

Добрый день.нужна помощь в исправлении ошибок 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.webp
    20101201_004.webp
    86.2 KB · Просмотры: 114
Добрый день.нужна помощь в исправлении ошибок 2х заданий на языке Pascal.
1е по массивам:Найти сумму элементов нечетных строк матрицы.(моя программа на фото)Преподаватель сказал,что нужен ввод строк и столбцов и тд. И дальнейший расчет сумм элементов неч. строк матрицы.
Подозреваю, что Вы просто не поняли преподавателя. Программа, будучи по идее правильной, содержит, тем не менее, несколько ошибок. Выложите нормальный листинг, обсудим.
И 2я задача на Циклическую алгоритмическую конструкцию:
Вычислить значение y, которое соответствует каждому значению x
(x = 1, dx = 0,5), по формуле: .
По какой?
Но преподаватель сказал,что код не правильный т.к. нету ввода в программе х и dx.
Абсолютно правильно сказал.
 
Подозреваю, что Вы просто не поняли преподавателя. Программа, будучи по идее правильной, содержит, тем не менее, несколько ошибок. Выложите нормальный листинг, обсудим.
По какой?

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

Листинг по массивам:
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);
 
Преподаватель сказал,что ввод 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. В соответствии с условиями задачи, подсчитывается и выводится сумма элементов КАЖДОЙ нечетной строки, а не всех скопом, как у Вас.
 
Теперь по второй задаче. Увы, при небольшом объеме программы ошибок в ней куча:
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.
 
cпасибо большое:)очень сильно помог
 
Назад
Сверху