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

Pascal to C++ - C++

13.01.2011, 19:21. Просмотров 955. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Pascal to C++ (C++):

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...

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

16
TAVulator
3950 / 1109 / 160
Регистрация: 27.07.2009
Сообщений: 3,457
13.01.2011, 19:29 #2
Цитата Сообщение от FahrenheitIndi Посмотреть сообщение
Хотел перевести в C++. И встрял.
покажи как перевел - может найдем ошибку.
0
FahrenheitIndi
0 / 0 / 1
Регистрация: 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
3950 / 1109 / 160
Регистрация: 27.07.2009
Сообщений: 3,457
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 / 1
Регистрация: 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
3950 / 1109 / 160
Регистрация: 27.07.2009
Сообщений: 3,457
13.01.2011, 19:47 #6
Цитата Сообщение от FahrenheitIndi Посмотреть сообщение
Но проблема не в этом.А при расчёте вот это части
проблема в том, что у тебя это не вложенные циклы, как в варианте на паскале, а два отдельных цикла. вложи второй цикл в первый.
1
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,436
Записей в блоге: 30
13.01.2011, 19:50 #7
Цитата Сообщение от TAVulator Посмотреть сообщение
в С++ массивы начинаются не с 1 индекса, а с 0...
Это как бы фиолетово. Единственное - при объявлении массива надо указывать размер на 1 больше (при этом нулевой элемент попросту не будет использоваться)

Добавлено через 1 минуту
Вместо "const a = -3.02;" надо "const double a = -3.02;"
1
TAVulator
3950 / 1109 / 160
Регистрация: 27.07.2009
Сообщений: 3,457
13.01.2011, 19:51 #8
Цитата Сообщение от Evg Посмотреть сообщение
Это как бы фиолетово. Единственное - при объявлении массива надо указывать размер на 1 больше (при этом нулевой элемент попросту не будет использоваться)
согласен, но все-же решил упомянуть об этом, чтобы ТС был в курсе.
0
FahrenheitIndi
0 / 0 / 1
Регистрация: 13.01.2011
Сообщений: 8
13.01.2011, 19:52  [ТС] #9
Те ошибки пропали.Появилось Access Violation (нарушение доступа)
0
TAVulator
3950 / 1109 / 160
Регистрация: 27.07.2009
Сообщений: 3,457
13.01.2011, 19:55 #10
Цитата Сообщение от FahrenheitIndi Посмотреть сообщение
Те ошибки пропали.Появилось Access Violation (нарушение доступа)
в какой строке?
0
FahrenheitIndi
0 / 0 / 1
Регистрация: 13.01.2011
Сообщений: 8
13.01.2011, 19:56  [ТС] #11
Так..тоже разобрался..выход за пределы массива))
Забавно..если добавить double к константе а то начинается таже ошибка.
0
TAVulator
3950 / 1109 / 160
Регистрация: 27.07.2009
Сообщений: 3,457
13.01.2011, 19:59 #12
Цитата Сообщение от FahrenheitIndi Посмотреть сообщение
выход за пределы массива
замени еще в циклах <= на <
1
FahrenheitIndi
0 / 0 / 1
Регистрация: 13.01.2011
Сообщений: 8
13.01.2011, 20:05  [ТС] #13
Ответы различаются между C++ и Pascal
0
Миниатюры
Pascal to C++   Pascal to C++  
FahrenheitIndi
0 / 0 / 1
Регистрация: 13.01.2011
Сообщений: 8
13.01.2011, 20:20  [ТС] #14
ну вот и тут стало ясно))sqrt на abs поменял))
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,436
Записей в блоге: 30
13.01.2011, 21:28 #15
Цитата Сообщение от TAVulator Посмотреть сообщение
замени еще в циклах <= на <
Если в коде работа идёт с единицы, то надо <=, чтобы осталось по-паскалевски
0
TAVulator
3950 / 1109 / 160
Регистрация: 27.07.2009
Сообщений: 3,457
13.01.2011, 21:33 #16
Цитата Сообщение от Evg Посмотреть сообщение
Если в коде работа идёт с единицы, то надо <=, чтобы осталось по-паскалевски
и тут я с тобой согласен. Но, как я понял, ТС уже сменил единицу на ноль, поэтому я ему это и порекомендовал
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,436
Записей в блоге: 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
Привет! Вот еще темы с решениями:

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

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

Перевести в код Pascal ABC из кода Pascal Delphi
procedure TForm1.Button1Click(Sender: TObject); const n=8; var x:array of...

Перевод программы с Turbo Pascal на Pascal ABC.NET
написала программу в паскаль турбо на рабочем компьютере. перенесла в паскаль...


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

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

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