6 / 6 / 7
Регистрация: 16.05.2013
Сообщений: 351
1

Ошибка при переводе программы с языка Pascal

25.10.2014, 14:36. Показов 448. Ответов 7
Метки нет (Все метки)

Задание гласит:
Вычислить 18 значений функции https://www.cyberforum.ru/cgi-bin/latex.cgi?a{x}^{2}+bx+c на отрезке [e,f], сохранив их в массиве Y и определить, имеет ли уравнение на отрезке [e,f] по крайней мере хотя бы один корень.

Имею код Pascal
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Program lab7;
Uses Crt;
const 
  n=18;
var a,b,c,e,f,delta,x,d:real;
    y:array[1..n] of real;
    i:byte;
    x1,x2:real;
begin
  ClrScr;
  repeat
    writeln('Vvedite koeficient funkcii a,b,c, a<>0:');
    readln(a,b,c);
  until a<>0;
  repeat
    writeln('Vvedite granici intervala e<f:');
    readln(e,f);
  until e<f;
  delta:=(f-e)/(n-1); {shag=rasstoyanie megdu tochkami}
    WriteLn('Massiv Y');
     for i:=1 to n do {scet4ik cikla}
       begin
         y[i]:=(a*x*x+b*x+c)*(e+(i-1)*delta); {elementu y[i] prisvaivaem zna4enie
         func v to4ke, udalennoi ot na4ala e na proizvedenie (i-1)
         na veli4inu shaga}
         writeln('x=',x:4:1,'  y=',y[i]:6:1);
       end;
    writeln;
    readln;
d:=sqr(b)-(4*a*c);
writeLn('Diskriminant:',d:3:0);
if (d>=0) then
begin
 x1:=(-b-sqrt(d))/(2*a);
 x2:=(-b+sqrt(d))/(2*a);
 if (d>0) and (x2>=e) and (x2<=f) then
 write('Est korni');
end else
begin
write('Net korney');
end;
ReadLn;
end.
Перевел на C++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <cmath>
using namespace std;
void main()
{
    const double n=18;
    double a,b,c,e,f,delta,x,d,x1,x2;
    int y[18];
    int i;
 
    cout << "Vvedite koeficient funkcii a,b,c, a<>0:";
    cin>> a,b,c;
    cout << "Vvedite granici intervala e<f:";
    cin >> e,f;
 
    delta=(f-e)/(n-1);
    cout << "Massiv Y:";
    for (i=1;i<n;i++)
    {
        y[i]=(a*x*x+b*x+c)*(e+(i-1)*delta);
        cout << "x=" << x << "y=" << y[i] <<endl;
        system("pause");
    }
    
    d= sqr(b)-(4*a*c);
    cout << "Diskriminant:" << d;
    if (d>=0)
    {
        x1=(-b-sqrt(d))/(2*a);
        x2=(-b+sqrt(d))/(2*a);
    }
    if (d>0,x2>=e,x2<=f)
        cout << "Est korni";
    else
        cout << "Net korney";
    system("pause");
}
подчеркивает ошибкой sqr в строке
C++
1
d= sqr(b)-(4*a*c);
что делать? cmath вводе ввел...
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2014, 14:36
Ответы с готовыми решениями:

Ошибка в переводе программы с паскаля на с++
вот код паскаля. я перевел эти коды в с++. но в с++ не работает помогите найти ошибку пожалуйста...

При переводе программы с VS c++ 6.0 на VS c++ 2010 express выходят ошибки, как их исправить?
На Vusial Studio c++ 6.0 все прекрасно работало, но стоило мне все это перевести на visual c++ 2010...

Перевод из double в int (ошибка при переводе)
При переводе некого получившегося числа из double в int, выводится неправильное число. Не могу...

Ошибка при переводе строчных букв в прописные и обратно
Здравствуйте, начал изучать C++ по Герберту Шилдту, второе издание для начинающих. Застопорился...

7
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
25.10.2014, 14:52 2
А что пишет то?

Добавлено через 1 минуту
Цитата Сообщение от SnapeEye Посмотреть сообщение
if (d>0,x2>=e,x2<=f)
Зачем здесь запятая?
0
6 / 6 / 7
Регистрация: 16.05.2013
Сообщений: 351
25.10.2014, 15:36  [ТС] 3
я заменил sqr(b) на b*b, не подумал что тат можно)
запятые ставил, так как это три разных условия, вот и писал их через запятую
а из ошибок пока выводит, что "х" не указан - The variable 'x' is being used without being initialized.
0
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
25.10.2014, 15:48 4
Цитата Сообщение от SnapeEye Посмотреть сообщение
запятые ставил, так как это три разных условия, вот и писал их через запятую
Не может быть двух, трёх, или сорока условий под одним ифом. Условие может быть ровно одно и ни как иначе, а запятая исполняет то всё, а возвращает только первый операнд. То есть получается условие
C++
1
if (d>0)
, но сделать надо сначала проверку условия, потом проверить x2>=e потом ещё проверить x2<=f, результаты выбросить и только после этого если первая проверка дала тру, то выполнить
C++
1
cout << "Est korni";
.
0
6 / 6 / 7
Регистрация: 16.05.2013
Сообщений: 351
25.10.2014, 16:34  [ТС] 5
исправил
C++
1
2
3
4
5
6
if (d>0)
        if(x2>=e)
            if(x2<=f)
        cout << "Est korni";
    else
        cout << "Net korney";
а что делать с "х"???
0
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
25.10.2014, 16:58 6
Цитата Сообщение от SnapeEye Посмотреть сообщение
if (d>0) if(x2>=e) if(x2<=f) cout << "Est korni"; else cout << "Net korney";
А так else не сработает, если d оказалось <=0, или x2<e. Условие должно быть одно, но ни где не сказано, что оно должно быть элементарным. Правильно будет
C++
1
2
3
4
5
6
7
if ((d>0)&&(x2>=e)&&(x2<=f))
{
 cout << "Est korni";
}
{
 сout << "Net korney";
}
.

Добавлено через 3 минуты
Цитата Сообщение от SnapeEye Посмотреть сообщение
а что делать с "х"???
А чему он должен быть равен? В нём до 20-й строки включительно мусор, а потом он уже используется. То, что это проглотил паскаль, не говорит о том, что так правильно. Может на паскале все переменные инициируются нолями? Или Никлаус не сообразил, что кто то может забыть инициировать переменную?
0
6 / 6 / 7
Регистрация: 16.05.2013
Сообщений: 351
25.10.2014, 18:55  [ТС] 7
Ну по идее "х" - часть квадратного уравнения, которое с++ должно было решить, вычислив дискриминант, х1 и х2.
В паскале проблем не было, быть может вы знаете как успокоить компилятор с++?

Добавлено через 1 час 2 минуты
решил проблему =) приравнял "х" к 1 (х=1), теперь все работает)
0
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
25.10.2014, 19:20 8
Цитата Сообщение от SnapeEye Посмотреть сообщение
Ну по идее "х" - часть квадратного уравнения, которое с++ должно было решить, вычислив дискриминант, х1 и х2.
В паскале проблем не было, быть может вы знаете как успокоить компилятор с++?
Что за фигня? Решения - это x1 и x2.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2014, 19:20

Ошибка при переводе значения из переменной char в переменную wchar_t
День всем добрый! Подскажите, пожалуйста, что я делаю не так? Я пытаюсь использовать функцию...

Выделение в исходном коде программы ключевых слов языка и операторов языка по словарю
Разбор исходного текста на языке программирования. Выделение в исходном коде программы ключевых...

В чем ошибка? При запуске программы открывается консоль и сразу ошибка о завершении программы
К тому же выдает warning: deprecated conversion from string constant to 'char*' . #include...

Не найден модуль Graph при переводе кода с Pascal на PascalABC.NET
Доброго времени суток всем, помогите пожалуйста перевести код с паскаля на паскальАВС, или что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru