Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите найти ошибки

12K
22 декабря 2005 года
NAINA
12 / / 18.11.2005
Ребята привет! Очень нужен ВАШ хелп.
Вернули к.р. по программированию. Вот делаю работунад ошибками, но с некоторыми задачками разобраться не могу, не понимаю почему они неправильны решены.
Просьба укажите мне на мои ошибки.
За ранее СПАСИБО.


Задание1
b=(x-y)(sin2Z+tg2Z)
x=17,421
y=10,365
z=0,828



Program Exp;
var x, y, Z, B: real;
x:=17.421; y:= 10.365; Z=0.828;
B:=abs (x-y)* ((sin(Z)*sin(Z)*sin(Z))/(Sin(Z)/cos(Z)));
writeln (‘B=’, B:15:4);
end.
_________________________________________________
Задание 2
A= X≥Z X=0,625
y=10,365; Z=0,828
B=sin2Z+tg(x+y), X<Z X=17,421



Program Exp2;
Var X,Y,Z,A,B: real;
Begin
write (‘input X,Y,Z:’);
if x > =Z then
begin
x:=0.625; y:=10.365; Z:=0.828;
A:=(sqrt y + (y+1)* (y+1)* (y+1));
writeln (‘A=’, A:15:4);
end
else
iFX<Z then
begin
X:=17.421; Y:=10.365; Z=0.828;
B:= (sin(x) * sin(x) *Z)+(sin(x)/cos(x))+(sin(y)/cos(y));
writeln (‘B=’, B:15:4);
end;
end.
_________________________________________________
3. Задание
Для одномерного массива Х вещественного типа (массив размерностью N<10 задается студентом) и при А=7 необходимо выполнить задание и вывести на экран полученные результаты.
Найти номер элемента с максимальным значением

Program Mas;
type mass=array <0...9> of real;
var
col_vo: integer;
temp, namb: real;
i: integer;
begin
writeln (‘input mas:’);
for i:=0 to 9 do
begin
readln (mass);
end;
temp:=0;
for i=0 to 9 do
degin
if (mass > temp) then temp:= mass ;
end;
writeln(‘max element of mas;’ ,temp);
readln ();
end.
292
22 декабря 2005 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by NAINA

Задание1
b=(x-y)(sin2Z+tg2Z)
x=17,421
y=10,365
z=0,828

Program Exp;
var x, y, Z, B: real;
x:=17.421; y:= 10.365; Z=0.828;
B:=abs (x-y)* ((sin(Z)*sin(Z)*sin(Z))/(Sin(Z)/cos(Z)));
writeln (‘B=’, B:15:4);
end.


Ошибки в Твоем примере: нету BEGIN, формула у тебя получилась B = |x-y|*(sin(z)^3 / tg(z).

Код:
PROGRAM Exp;
 CONST
  x = 17.421;
  y = 10.365;
  z = 0.828;
 VAR
  b:real;
BEGIN
 b := (x-y)*(sin(2*z) + sin(2*z)/cos(2*z));
 Writeln('b=', b:15:4);
END.


P.S. не помню только правильно ли то что sin(2z) = cos(2z)/sin(2z)
292
22 декабря 2005 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by NAINA

3. Задание
Для одномерного массива Х вещественного типа (массив размерностью N<10 задается студентом) и при А=7 необходимо выполнить задание и вывести на экран полученные результаты.
Найти номер элемента с максимальным значением

Program Mas;
type mass=array <0...9> of real;
var
col_vo: integer;
temp, namb: real;
i: integer;
begin
writeln (‘input mas:’);
for i:=0 to 9 do
begin
readln (mass);
end;
temp:=0;
for i=0 to 9 do
degin
if (mass > temp) then temp:= mass ;
end;
writeln(‘max element of mas;’ ,temp);
readln ();
end.


Ошибки: <0...9> - на сколько помню в паскале такими скобками не оперируют.
type mass=array <0...9> of real; - тут Ты только описал тип mass, но не где не сделал переменную этого типа.
temp:=0; - ты сразу присваиваеш эталонному значению 0. И потом проверяеш его со всеми элементами. Но это не правильно, ведь элементы массива могут оказаться отрицательными числами и тогда програма выдаст неправильный результат ( 0 )

Код:
PROGRAM Exp3;
  VAR
   X:ARRAY[1..10] of real;
   Pos, i, N:integer;
   Max:real;  
 BEGIN
  Write('N=');
  Readln(N);

  for i:=1 to N do begin
    Write('X[',i,'] = ');
    Readln(X);
    end;

  Max := X[1];
  Pos := 1;

  for i:=2 to N do begin
     if(X > Max) then begin
        Max := X;
        Pos : = i;
        end;  
     end;

  Writeln('Max = ', Max, ' Pos = ', Pos);
 END.
292
22 декабря 2005 года
Matush
726 / / 14.01.2004
Задача 2:

При всем желании не смог сформулировать задачу. Условие корявое. Реализация вообще как бы к другому условию. Вобщем задачку сформулируй грамотно.
12K
22 декабря 2005 года
NAINA
12 / / 18.11.2005
Цитата:
Originally posted by Matush
Задача 2:

При всем желании не смог сформулировать задачу. Условие корявое. Реализация вообще как бы к другому условию. Вобщем задачку сформулируй грамотно.






Matush спасибо, с первой задачей я уже вроде разобралась сама.
2 задача дается с таким условием.

12K
22 декабря 2005 года
NAINA
12 / / 18.11.2005
Вот еще 2 задачи, которые отказались засчитать. Главное, что поставили минус, а где и именно какие ошибки я совершила не указали...
пытаюсь исправить...


Задается одномерный массив из 18 элементов. Требуется определить номер элемента, наименее отклоняющегося от числа 5, а также номер элемента наименее отклоняющегося т числа 10.


program prim;
Type=array [0...17] of integer;
var
temp, temp1,rez_a,rez_b,pos_b,pos_a: integer;
procedure modul (matrix: c);
begin
temp:=20;
temp1:=20;
writeln(‘input mas c:’);
for x:= 0 to 17 do
readln (matrix [x]);
for x:=0 to 17 do
begin
rez_a: abs(5 - matrix[x]);
if rez_a<temp then
begin
temp:=rez_a; pos_a:=x;
end;
rez_b=abs(10-matrix[x]);
if rez_b<temp1 then
begin
temp1:= rez_b; pos_b:=x;
end;
end;
writeln (‘positsion for 5:’, pos_a+1);
writeln (‘positsion for 10:’, pos_b+1);
end.

__________________________________________________

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


Program X;
uses forms;
var
a: array [1...6, 1...5] of real;
k,i,j: integer; z: real;
begin
writeln (‘Vvedite elementi matrici 6x5’);
for i:=1 to 6 do
for j:= 1 to 5 do
real (a[i,j]);
for i:=1 to 6 do
begin (‘Vvedite N elementa delenia dla ‘,i,’ stroki);
read (k);
for j:=1 to 5 do
if a [i,k]<>0 then
a [i,j]:=a [i,j]/a[i,k]
else
a[i,j]:=0;
end;
for i:=1 to 6do
begin
writeln (‘’);
for j:= 1to 5 do
write (‘ ’, a [i,j]);
end;
readln; readln;
end.
292
22 декабря 2005 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by NAINA
Matush спасибо, с первой задачей я уже вроде разобралась сама.
2 задача дается с таким условием.


Ну ежеле с таким, тогда попробую ее понять:
A= X&#8805;Z X=0,625
y=10,365; Z=0,828
B=sin2Z+tg(x+y), X<Z X=17,421

эту тексту я понимаю так:
если X>=Z тогда X=0,625
y=10,365; Z=0,828 в другом случае X=17,421.
Откуда берутся X и Z? очевидно вводятся. А Y? При выполнении условия он станет 10.365, а при не выполнении? Опять же с потолка?

Смотрим на Твой код (если не обращать внимания на ошибки):
считываем X, Y, Z если X>=Z тогда делаем такое:
x=0.625; y=10.365; Z=0.828;
a = корень(y) + (y+1)^3;
если же X<Z тогда:
X=17.421; Y=10.365; Z=0.828;
B= sin(x)^2 * Z + tg(x)+tg(y);

В Твоем решении просматривается такое условие:

y=10.365; Z=0.828;
X&#8805;Z X=0,625 A=sqrt(y)+(y+1)^3 // X тогда не нужен
X<Z X=17,421 B=sin2Z+tg(x+y)

Тогда решение будет таким:

Код:
PROGRAM Exp2;
 CONST
  y = 10.365;
  z = 0.828;
 VAR
  A, B, x:real;
BEGIN
 Write('x=');
 Readln(x);

 if(x>=z) then begin
    A := sqrt(y)+(y+1)*(y+1)*(y+1);
    Writeln('A=',A);
    end else begin
    x := 17.421;
    B := sin(2*z)+sin(x+y)/cos(x+y);
    Writeln('B=',B);
    end;
END.
2
22 декабря 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by NAINA
Вот еще 2 задачи, которые отказались засчитать. Главное, что поставили минус, а где и именно какие ошибки я совершила не указали...
пытаюсь исправить...


Задается одномерный массив из 18 элементов. Требуется определить номер элемента, наименее отклоняющегося от числа 5, а также номер элемента наименее отклоняющегося т числа 10.


Код:
....
begin
temp:=20;
for x:=0 to 17 do
begin
   rez_a: abs(5 - matrix[x]);
   if rez_a<temp then
   begin
      temp:=rez_a; pos_a:=x;
   end;
end;
writeln (‘positsion for 5:’, pos_a+1);
end.



я чуть чуть сократил текст первой задачи, чтобы яснее был разбор алгоритма. как я понял, ты считаешь отклонение элемента х от 5 и сравниваешь его с эталонным значение temp. а откуда взялось temp = 20? за это и минус. намек ясен? или пояснить?

292
22 декабря 2005 года
Matush
726 / / 14.01.2004
В этот раз я только укажу ошибки, попробуй их сама исправить и выложи сюда результат. Тогда посмотрим.

Задается одномерный массив из 18 элементов. Требуется определить номер элемента, наименее отклоняющегося от числа 5, а также номер элемента наименее отклоняющегося т числа 10.


Код:
program prim;
Type=array [0...17] of integer; {неверно}
var
temp, temp1,rez_a,rez_b,pos_b,pos_a: integer;
procedure modul (matrix: c); {неверно, тут ты принимаеш в качестве параметра в переменную c типа matrix, но ведь такого типа нет}
begin

{тут ты изначално береш отклонение от 5 и от 10 равное 20. Так неправильно, ведь отклонение может быть и больше}
temp:=20;
 temp1:=20;
writeln(‘input mas c:’);
for x:= 0 to 17 do
readln (matrix [x]);{ну, ок будем считать что matrix - непонятно откуда взялся и является массивом}
for x:=0 to 17 do
begin
rez_a: abs(5 - matrix[x]); {не :  а  := }
if rez_a<temp then
begin
temp:=rez_a; pos_a:=x;
end;
rez_b=abs(10-matrix[x]); {не =  а  := }
if rez_b<temp1 then
begin
temp1:= rez_b; pos_b:=x;
end;
end;
writeln (‘positsion for 5:’, pos_a+1);
writeln (‘positsion for 10:’, pos_b+1);
end. {тут, только конец процедуры, потому надо не .  а  ;}
 

{ну а где само тело програмы?}

Ошибок много, часть из них помоему от невнимательности, другая часть от непонимания дела.
292
22 декабря 2005 года
Matush
726 / / 14.01.2004
Дана матрица из 6 строк и 5 столбцов. Для каждой строки вводится номер элемента, на который необходимо разделить элементы этой строки. Полученную матрицу напечатать. Исключить деление на ноль.

Код:
Program X;
uses forms; {???}
var
a: array [1...6, 1...5] of real; {точек много}
k,i,j: integer; z: real;
begin
writeln (‘Vvedite elementi matrici 6x5’);
for i:=1 to 6 do
for j:= 1 to 5 do
real (a[i,j]); {не real  а  read}

for i:=1 to 6 do
begin (‘Vvedite N elementa delenia dla ‘,i,’ stroki);
read (k);
for j:=1 to 5 do
   if a [i,k]<>0 then a [i,j]:=a [i,j]/a[i,k]
      else a[i,j]:=0;
end;

for i:=1 to 6 do
begin
writeln (‘’);
for j:= 1 to 5 do
write (‘ ’, a [i,j]);
end;
readln; readln;
end.

Если исправить синтаксические ошибки, то все ОК
2
22 декабря 2005 года
squirL
5.6K / / 13.08.2003
Matush, все испортил, я хотел, чтобы девушка сама догадалась :)

синтаксические ошибки - Бог с ними...

Naina, представь, что у тебя твой массив будет состоять из элементов... ну скажем больше 26. тогда твоя программа не заработает.

правильно - начать обработку массива не с нулевого элемента, а с первого. а за эталон взять отклонение нулевого элемента.
292
22 декабря 2005 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by squirL
Matush, все испортил, я хотел, чтобы девушка сама догадалась :)


Ну, это еще кто испортил (читай внимательно пост где я сказал, чтоб она сама исправила).

Цитата:
Originally posted by squirL
синтаксические ошибки - Бог с ними...


А вот и нет.

Цитата:
Originally posted by squirL
правильно - начать обработку массива не с нулевого элемента, а с первого. а за эталон взять отклонение нулевого элемента.


Нумеровать с нулевого элемента мог бы и не советовать - это никак нельзя в ВУЗах. Сам знаеш какие приподы.

2
22 декабря 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Matush
Ну, это еще кто испортил (читай внимательно пост где я сказал, чтоб она сама исправила).


согласен. да и говорил то я в шутку.

Цитата:
Originally posted by Matush

А вот и нет.


сначала алгоритм, потом - синтаксис. правильный синтаксис - рука набьется постепенно (да и компилер материть будет). а вот мышление сразу надо правильное формировать.

Цитата:
Originally posted by Matush

Нумеровать с нулевого элемента мог бы и не советовать - это никак нельзя в ВУЗах. Сам знаеш какие приподы.


забыл, что это паскаль, извините. :) я всю жизнь на С-подобном писал...

2
22 декабря 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Matush

 
Код:
for i:=1 to 6 do
begin (‘Vvedite N elementa delenia dla ‘,i,’ stroki);
read (k);
for j:=1 to 5 do
   if a [i,k]<>0 then a [i,j]:=a [i,j]/a[i,k]
      else a[i,j]:=0;
end;

Если исправить синтаксические ошибки, то все ОК


я бы не сказал, что "все ОК".

во-первых. написано "исключить деление на 0". но это же не значит, что нужно обнулять все элементы строки, если элемент, на который делим равен 0.

во-вторых, в данной реализации - лишняя работа выполняется. если a[i,k] = 0, тогда нужно завершать обрабоку данной строки сразу, а не проходить всю строку. я вижу два варианта решения задачи:

1. выполнять проверку элемента-делителя при вводе числа и, если введеный индекс указывает на 0, просить повторить ввод
2. проверять перед проходом строки делитель и, если он нулевой, пропускать строку.

код, если нетрудно пишите сами, я слабо помню паскаль.

292
22 декабря 2005 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by squirL

во-вторых, в данной реализации - лишняя работа выполняется. если a[i,k] = 0, тогда нужно завершать обрабоку данной строки сразу, а не проходить всю строку.



Так и думал что мне кто-то про это притыкнет.
Это на работоспособность не влияет (только не надо сейчас про оптимизацию рассказывать)

На счет обнулений, то тоже считаю что все ок. По крайней мере ошибки выполнения не будет.

2
22 декабря 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Matush
Так и думал что мне кто-то про это притыкнет.
Это на работоспособность не влияет (только не надо сейчас про оптимизацию рассказывать)

На счет обнулений, то тоже считаю что все ок. По крайней мере ошибки выполнения не будет.



у нас за такой код тоже зачетов не ставили. в таком варианте, препод может спросить - "а зачем вы обнуляете элементы? а вдруг вам потом они понадобятся??". и он будет прав. так что извини, но ты не прав. это плохой стиль программирования. а одна из задачь ВУЗа - привить хороший стиль.

292
22 декабря 2005 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by squirL
"а зачем вы обнуляете элементы? а вдруг вам потом они понадобятся??"


Сегодня я не хочу быть неправым, хочу быть левым, а потому:

в условии сказано исключить деление на ноль. А что делать если там как раз деление на ноль? Несказано ведь. По этому можно либо сказать преподу что условие не однозначно и задачу я решить не могу, либо придумать что делать с делением на ноль.

К примеру я рядок не обнуляю, а оставляю как есть. Тот же Твой припод может сказать: а почему в этом рядке все цифры остались как и были?

Короче. На счет этого вопроса можно спорить вечно. Флудить и флудить. Но сегодня я уйду с работы считая что я прав :)

12K
23 декабря 2005 года
NAINA
12 / / 18.11.2005
Ребята, я конечно, еще не во всем разобралась, но на выходных я это сделаю, промотрю варианты решений, которые вы мне написали.
Еще раз спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог