Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
FahrenheitIndi
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 8
1

Pascal to C++

13.01.2011, 19:21. Просмотров 983. Ответов 16
Метки нет (Все метки)

Доброго времени суток.Есть код на паскале.
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
program program7;
const a=-3.02; b=0.01; c =-1.1; d=0.2; m=10;
var max,q:real;
f:array[1..m,1..m] of real;
x,y:array[1..m] of real;
k,n:byte;
begin
writeln('Задание матрицы F:' );
for k:=1 to m do begin
  x[k]:=a+b*k;
  for n:=1 to m do begin
    y[n]:=c+d*n;
    F[k,n]:=7*cos(x[k])*(sin(sqr(x[k])*y[n])-sqr(y[n])/8)   ;
    write(F[k,n]:7:3)  
    end;
  writeln
end;
max:=F[1,1];
for k:=1 to m do
  for n:=1 to m do
    if F[k,n]>max then max:=F[k,n];
writeln('Максимальный элемент в матрице=',max:7:3);
write('Введи действительное число->');
readln(q);
for k:=1 to m do
  for n:=1 to m do
    if F[k,n]>=max-q then writeln('в матрице F элемент стоит на ' ,k,' и ',n, ' месте с х=',x[k]:6:2,' и с у=',y[n]:6:2);
end.
Хотел перевести в C++. И встрял. То заполняет матрицу числом -8012. То выводит +NaN(Not-a-Number).
А застрял вот с этой строки F[k,n]:=7*cos(x[k])*(sin(sqr(x[k])*y[n])-sqr(y[n])/8) ;
Помогите пожалуйста.

Добавлено через 19 минут
ну а само условие задачи звучит как:
Составить блок схему алгоритма и программы на языке C++ заполнения массива F(M, M) значениями функции f(x, y) так, что F(k, n) = f(xk, yn), где xk = a + bk, yn = c + dn; k, n = 1, 2,…, M. Результат вывести на монитор в виде матрицы.

Найти все пары значений (xk, yn), при которых значения функции f(x, y) отличаются от максимального элемента массива не более чем на заданную величину δ.
f(x, y) = 7cosx•(sin (x2 y) – y2/8); a = -3.02; b = 0.01; c = -1.1; d = 0.2; M = 10
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2011, 19:21
Ответы с готовыми решениями:

Turbo Pascal, Pascal ABC, Free Pascal, PascalABC.NET - в чем разница?
Всем привет, решил изучать Паскаль, но на форуме увидел 4 его версии - Turbo...

Различия трансляторов Pascal ABC.Net и Turbo/Borland Pascal
Пожалуйста, объясните различия между компиляторами Pascal ABC.Net и...

Нужно перевести программу с Turbo Pascal в Pascal ABC.NET
Вот есть программный код , но он для турбо паскаля, помогите перевести его в...

Список слов распечатать в алфавитном порядке. В Turbo Pascal или Pascal ABC
Дана непустая последовательность слов, в каждом из которых содержится от 1 до 6...

Нужно перевести код с Pascal ABC на Turbo Pascal - рисование работающей мельницы
Вот код, он должен рисовать работающею мельницу. uses graphABC,crt; type...

16
TAVulator
Эксперт Pascal/Delphi
3966 / 1122 / 165
Регистрация: 27.07.2009
Сообщений: 3,494
13.01.2011, 19:29 2
Цитата Сообщение от FahrenheitIndi Посмотреть сообщение
Хотел перевести в C++. И встрял.
покажи как перевел - может найдем ошибку.
0
FahrenheitIndi
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 8
13.01.2011, 19:31  [ТС] 3
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
38
// ---------------------------------------------------------------------------
 
#include <vcl.h>
#include <iostream.h>
#include <stdlib.h>
#include <ctime>
#include <stdio.h>
#include <math.h>
// ---------------------------------------------------------------------------
 
#pragma argsused
 
int main() {
    const a = -3.02;
    const b = 0.01;
    const c = -1.1;
    const d = 0.2;
    const m = 10;
    double max,q;
    unsigned int k,n;
    double f[m][m];
    double x[m];
    double y[m];
    std :: cout << "Assignment matrix F: \n";
    for (k = 1; k <= m; k++)
    {
      x[k] = a + (b * k);
    }
    for (n = 1; n <= m; n++)
    {
      y[n] = c + (d * n);
      f[k][n] = (7 * cos(x[k]) * sin(sqrt(x[k])) * y[n]) - (sqrt(y[n])/8);//вот отсюда запарка
      std::cout << f[k][n];
    }
    system("Pause");
    return 0;
}
// ---------------------------------------------------------------------------
0
TAVulator
Эксперт Pascal/Delphi
3966 / 1122 / 165
Регистрация: 27.07.2009
Сообщений: 3,494
13.01.2011, 19:38 4
Цитата Сообщение от FahrenheitIndi Посмотреть сообщение
for (k = 1; k <= m; k++)
Цитата Сообщение от FahrenheitIndi Посмотреть сообщение
for (n = 1; n <= m; n++)
в С++ массивы начинаются не с 1 индекса, а с 0...
0
FahrenheitIndi
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 8
13.01.2011, 19:44  [ТС] 5
Так сделал с 0. Но проблема не в этом.А при расчёте вот это части:

f[k][n] = (7 * cos(x[k]) * sin(sqrt(x[k])) * y[n]) - (sqrt(y[n])/8);

Начинается белеберда.
Первое sqrt error.Как понимаю деление либо на ноль либо на отрицательное число.И второе это +NaN(не число).
Увы.Я знаю только Pascal. Код что на паскале писал я. С++ начал читать только сегодня по книге Джесси Либерти.И вот на массивах встрял.Покажите хоть как это должно быть.
0
TAVulator
Эксперт Pascal/Delphi
3966 / 1122 / 165
Регистрация: 27.07.2009
Сообщений: 3,494
13.01.2011, 19:47 6
Цитата Сообщение от FahrenheitIndi Посмотреть сообщение
Но проблема не в этом.А при расчёте вот это части
проблема в том, что у тебя это не вложенные циклы, как в варианте на паскале, а два отдельных цикла. вложи второй цикл в первый.
1
Evg
Эксперт CАвтор FAQ
19313 / 7168 / 533
Регистрация: 30.03.2009
Сообщений: 20,051
Записей в блоге: 30
13.01.2011, 19:50 7
Цитата Сообщение от TAVulator Посмотреть сообщение
в С++ массивы начинаются не с 1 индекса, а с 0...
Это как бы фиолетово. Единственное - при объявлении массива надо указывать размер на 1 больше (при этом нулевой элемент попросту не будет использоваться)

Добавлено через 1 минуту
Вместо "const a = -3.02;" надо "const double a = -3.02;"
1
TAVulator
Эксперт Pascal/Delphi
3966 / 1122 / 165
Регистрация: 27.07.2009
Сообщений: 3,494
13.01.2011, 19:51 8
Цитата Сообщение от Evg Посмотреть сообщение
Это как бы фиолетово. Единственное - при объявлении массива надо указывать размер на 1 больше (при этом нулевой элемент попросту не будет использоваться)
согласен, но все-же решил упомянуть об этом, чтобы ТС был в курсе.
0
FahrenheitIndi
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 8
13.01.2011, 19:52  [ТС] 9
Те ошибки пропали.Появилось Access Violation (нарушение доступа)
0
TAVulator
Эксперт Pascal/Delphi
3966 / 1122 / 165
Регистрация: 27.07.2009
Сообщений: 3,494
13.01.2011, 19:55 10
Цитата Сообщение от FahrenheitIndi Посмотреть сообщение
Те ошибки пропали.Появилось Access Violation (нарушение доступа)
в какой строке?
0
FahrenheitIndi
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 8
13.01.2011, 19:56  [ТС] 11
Так..тоже разобрался..выход за пределы массива))
Забавно..если добавить double к константе а то начинается таже ошибка.
0
TAVulator
Эксперт Pascal/Delphi
3966 / 1122 / 165
Регистрация: 27.07.2009
Сообщений: 3,494
13.01.2011, 19:59 12
Цитата Сообщение от FahrenheitIndi Посмотреть сообщение
выход за пределы массива
замени еще в циклах <= на <
1
FahrenheitIndi
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 8
13.01.2011, 20:05  [ТС] 13
Ответы различаются между C++ и Pascal
0
Миниатюры
Pascal to C++   Pascal to C++  
FahrenheitIndi
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 8
13.01.2011, 20:20  [ТС] 14
ну вот и тут стало ясно))sqrt на abs поменял))
0
Evg
Эксперт CАвтор FAQ
19313 / 7168 / 533
Регистрация: 30.03.2009
Сообщений: 20,051
Записей в блоге: 30
13.01.2011, 21:28 15
Цитата Сообщение от TAVulator Посмотреть сообщение
замени еще в циклах <= на <
Если в коде работа идёт с единицы, то надо <=, чтобы осталось по-паскалевски
0
TAVulator
Эксперт Pascal/Delphi
3966 / 1122 / 165
Регистрация: 27.07.2009
Сообщений: 3,494
13.01.2011, 21:33 16
Цитата Сообщение от Evg Посмотреть сообщение
Если в коде работа идёт с единицы, то надо <=, чтобы осталось по-паскалевски
и тут я с тобой согласен. Но, как я понял, ТС уже сменил единицу на ноль, поэтому я ему это и порекомендовал
0
Evg
Эксперт CАвтор FAQ
19313 / 7168 / 533
Регистрация: 30.03.2009
Сообщений: 20,051
Записей в блоге: 30
13.01.2011, 21:46 17
Цитата Сообщение от TAVulator Посмотреть сообщение
Но, как я понял, ТС уже сменил единицу на ноль
ТС вообще на всех забил и тихо сам с собой беседу ведёт
1
13.01.2011, 21:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2011, 21:46

Из множества выбрать три различные точки по условию -из Turbo Pascal во Free Pascal
Даны 2 множества точек на плоскости. Выбрать три различные точки первого...

Есть ли аналог модуля tpdate.tpu (Turbo Pascal) для Free Pascal
Внимание! Нужно срочно узнать название юнита для freepascal, который выполняет...

Можно как-то переделать код из Turbo Pascal чтобы он работал в pascal abc.net?
Сделайте пожалуйста, я просто не вникаю uses Graph, Crt; var grDriver:...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru