Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
NikitaKunn
0 / 0 / 0
Регистрация: 09.11.2018
Сообщений: 9
1

Программа из C++ в Паскаль

10.09.2019, 23:21. Просмотров 296. Ответов 8
Метки нет (Все метки)

У нас есть вот такая программа на языке 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
38
39
40
41
42
43
44
45
46
47
48
49
50
    INT n;
    cin >> n;
    
    int notComplited = 1;
    
    INT temp;
    INT max1 = -INF, max2 = -INF, max3 = -INF, min1 = INF, min2 = INF;
    
    forn(i, 0, n){
        cin >> temp;
//      if(notComplited == 1){
//          notComplited = 0;
//          max1 = max2 = max3 = min1 = min2 = temp;
//      }
        if(temp > max1 && temp > max2 && temp > max3){
            max1 = max2;
            max2 = max3;
            max3 = temp;
        }
        else if(temp > max1 && temp > max2 && temp < max3){
            max1 = max2;
            max2 = temp;
        }
        else if(temp > max1 && temp < max2){
            max1 = temp;
        }
        
        if(temp < min1 && temp < min2){
            min1 = min2;
            min2 = temp;
        }
        else if(temp < min1 && temp > min2){
            min1 = temp;
        }
//      cout << min2 << " " << min1 << " " << max1 << " " << max2 << " " << max3 << endl;       
    }
    
//  cout << min2 << " " << min1 << " " << max1 << " " << max2 << " " << max3 << endl;
     
    if(max1 * max2 * max3 > min1 * min2 * max3){
        cout << max1 << " " << max2 << " " << max3 << endl;
        cout << max1 * max2 * max3 << endl;
    }
    else{
        cout << min1 << " " << min2 << " " << max3 << endl;
        cout << min1 * min2 * max3 << endl;
    }
     
 r0
}
Её нужно "перевести" на язык Pascal...или хотя бы составить алгоритм, потому что я никак не могу разобрать работу этой штуки без составления массива(ов). Заранее спасибо
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2019, 23:21
Ответы с готовыми решениями:

Программа Паскаль рисование
1-что не получилось program z1; var a,b:text:a1,b1,d,i:integer; begin assing(a,'a.dat');...

программа заяц- волк паскаль
программа заяц- волк. дан массив 100 x 100. вводим количество зайцев и волков с клавиатуры. в...

Паскаль. Условный оператор - программа не компилируется
var res,otv: real; begin writeln('Сколько будет 11*11?'); writeln('Введите ответ и нажмите...

Дана программа на Бейсике. Нужно перевести ее на Паскаль
Дана программа на Бейсике, которая создает двоичный файл &quot;66-838&quot; с участком таблицы FAT. Нужно...

Какое значение выведет данная Паскаль-программа?
Какое значение выведет данная Паскаль-программа? Type color=(red, green, blue, black,...

8
Sun Serega
674 / 452 / 225
Регистрация: 07.04.2017
Сообщений: 1,951
10.09.2019, 23:53 2
0. Предоставьте нормальный код, который хотя бы в C++ будет компилироваться. И выделите соответствующей кнопкой над окном ответа слева.
1. Что делает программа?
2. В задаче сказано не использовать массивы? Какие ещё ограничения?
3. Говорите конкретно с переводом чего у вас не получается. Тут даже указателей нету. А с "ничего не получается" - поможет только морг.
0
NikitaKunn
0 / 0 / 0
Регистрация: 09.11.2018
Сообщений: 9
11.09.2019, 00:18  [ТС] 3
Sun Serega,
0.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
#include <functional>
#include <algorithm>
#include <iostream>
#include <limits.h>
#include <iterator>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <fstream>
#include <stdio.h>
#include <complex>
#include <iomanip>
#include <math.h>
#include <vector>
#include <bitset>
#include <string>
#include <time.h>
#include <ctime>
#include <cmath>
#include <deque>
#include <queue>
#include <map>
#include <set>
 
#define r0 return 0;
#define bn cout << endl;
#define INT long long int
#define vfind(vecName, num) find(vecName.begin(), vecName.end(), num)
#define hmap unordered_map
#define hset unordered_set
#define rnd(n, m) n + rand() % (m+1)
#define resz(a, n) a.resize(n)
#define pb push_back
#define srt(a) sort(a.begin(), a.end())
#define srt2(a) sort(a.begin(), a.end(), [](p a1, p b1)
#define rev(n) reverse(n.begin(), n.end())
#define forn(i, j, n) for (INT i = j; i < n; ++i)
#define forc(i, n) for (int i = n - 1; i >= 0 ; --i)
#define ford(i, j, n) for (INT i = n - 1; i >= j ; --i)
#define foreach(i, a) for (INT i : a)
#define cok cout << "OK" << endl;
#define ARRin(a, n) forn(i, 0, n) cin >> a[i];
#define ARROut(a, c) for (INT i : a) {cout << i << c;}
#define ARROutString(a, sp) for (string i : a) {cout << i << sp;}
#define im int main(int argc, const char * argv[])
#define sync  {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); }
#define SETout(setName, symb) copy( setName.begin(), setName.end(), ostream_iterator<char>(cout, symb));
#define forSet(setName, type) for (set<type>::iterator i = setName.begin(); i != setName.end(); ++i)
#define dve(type, name, n, m) vector<vector<type> > name(n, vector<type> (m, 0))
 
INT INF = 1e9+337;
 
using namespace std;
 
im {
    sync
    
//  INT n;
//  cin >> n;
//  vector<INT> a(n);   
//  ARRin(a, n);
//  srt(a);
//  cout << ( ( ( (a[n - 1] * a[n - 2] * a[n - 3]) > (a[0] * a[1] * a[n - 1]) ) ? (a[n - 1] * a[n - 2] * a[n - 3]) : (a[0] * a[1] * a[n - 1]) ) ) << endl;
     
    INT n;
    cin >> n;
    
    int notComplited = 1;
    
    INT temp;
    INT max1 = -INF, max2 = -INF, max3 = -INF, min1 = INF, min2 = INF;
    
    forn(i, 0, n){
        cin >> temp;
//      if(notComplited == 1){
//          notComplited = 0;
//          max1 = max2 = max3 = min1 = min2 = temp;
//      }
        if(temp > max1 && temp > max2 && temp > max3){
            max1 = max2;
            max2 = max3;
            max3 = temp;
        }
        else if(temp > max1 && temp > max2 && temp < max3){
            max1 = max2;
            max2 = temp;
        }
        else if(temp > max1 && temp < max2){
            max1 = temp;
        }
        
        if(temp < min1 && temp < min2){
            min1 = min2;
            min2 = temp;
        }
        else if(temp < min1 && temp > min2){
            min1 = temp;
        }
//      cout << min2 << " " << min1 << " " << max1 << " " << max2 << " " << max3 << endl;       
    }
    
//  cout << min2 << " " << min1 << " " << max1 << " " << max2 << " " << max3 << endl;
     
    if(max1 * max2 * max3 > min1 * min2 * max3){
        cout << max1 << " " << max2 << " " << max3 << endl;
        cout << max1 * max2 * max3 << endl;
    }
    else{
        cout << min1 << " " << min2 << " " << max3 << endl;
        cout << min1 * min2 * max3 << endl;
    }
     r0
}
1. Находит 3 наибольших множителя из n количества чисел, выводит их и полученное произведение
2. Ограничений нет...ну, сделать максимально простую программу.
3. Не могу понять значение некоторых команд и алгоритм самой программы. Т.Е. как работает данная программа.
P.S. Хорошо, изменю вопрос. Создать похожую программу, но только на языке Паскале. Дан массив чисел. Нужно найти 3 максимальных множителя и вывести их, опираясь на программу, написанную на C++

Добавлено через 8 минут
+ 9 класс обычной школы...немножко сложноватое задание, как по мне
0
Sun Serega
674 / 452 / 225
Регистрация: 07.04.2017
Сообщений: 1,951
11.09.2019, 00:50 4
0. Я же сказал выделить нормально, вот так:
C++
1
код
Как я и сказал, для этого есть кнопка слева сверху над окном ответа.

Цитата Сообщение от NikitaKunn Посмотреть сообщение
алгоритм самой программы
Обычный алгоритм нахождения максимального значения массива. Только переменных для максимального значения 3, и для каждого элемента массива проверяет все.

Цитата Сообщение от NikitaKunn Посмотреть сообщение
+ 9 класс обычной школы...немножко сложноватое задание, как по мне
Кода получается много если использовать методы прошлого века. Но в логике задания ничего сложного. Если, конечно, пытаться думать, а не бегать по форумам и ныть про то как сложно.

Если надо решение проще всего - надо использовать функционал .Net в .Net языке. В данном случае с Linq - всего несколько строк (технически всего 1 но длинная и разбитая на несколько для читабельности):
Pascal
1
2
3
4
5
6
7
begin
  ReadSeqInteger('Введите числа:', ReadInteger('N ='))
  .OrderDescending
  .Take(3)
  .Product
  .Print;
end.
Чтоб понять эту программу достаточно уметь двигать мышку и наводить её на слова. Или хотя бы знать несколько слов из англ. языка. Поэтому проще не будет.
0
11.09.2019, 00:50
mr-Crocodile
167 / 124 / 45
Регистрация: 19.03.2019
Сообщений: 399
11.09.2019, 14:01 5
Цитата Сообщение от Sun Serega Посмотреть сообщение
Если надо решение проще всего - надо использовать функционал .Net в .Net языке.
Pascal
1
2
3
 ReadSeqInteger('Введите числа:', ReadInteger('N ='))
  .OrderDescending
  .Take(3)
это неправильное решение.

например, если заданы 5 чисел: 4 -700 10 -1 5
то ответ
Код
-1 -700 10
7000
https://ideone.com/IGTT4F
1
Sun Serega
674 / 452 / 225
Регистрация: 07.04.2017
Сообщений: 1,951
11.09.2019, 15:01 6
Ага, вижу, если обходить это так же как в C++ коде:
Pascal
1
2
3
4
5
6
7
8
begin
  var A := ReadArrInteger('Введите числа:', ReadInteger('N ='));
  A.Sort;
  Max(
    A[0]*A[1]*A[A.Length-1],
    A.TakeLast(3).Product
  ).Println;
end.
1
mr-Crocodile
167 / 124 / 45
Регистрация: 19.03.2019
Сообщений: 399
11.09.2019, 15:52 7
Цитата Сообщение от Sun Serega Посмотреть сообщение
Ага, вижу, если обходить это так же как в C++ коде:
теперь работает как надо!

Цитата Сообщение от NikitaKunn Посмотреть сообщение
Находит 3 наибольших множителя из n количества чисел, выводит их и полученное произведение
Теперь нужно вывести не только произведение, но и три числа.

если корявенько, то будет так
Pascal
1
2
3
4
5
6
7
8
9
10
11
begin
  var A := ReadArrInteger('Введите числа:', ReadInteger('N ='));
  A.Sort;
  var P := Max(
    A[0]*A[1]*A[A.Length-1],
    A.TakeLast(3).Product
  );
  if A[0]*A[1]*A[A.Length-1]=P then WriteLn(A[0],' ',A[1],' ',A[A.Length-1])
  else A.TakeLast(3).PrintLn;
  P.Println;
end.
0
Sun Serega
674 / 452 / 225
Регистрация: 07.04.2017
Сообщений: 1,951
11.09.2019, 16:14 8
А если не корявенько:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
begin
  var A := ReadArrInteger('Введите числа:', ReadInteger('N ='));
  A.Sort;
  
  var res :=
    Arr(
      Lst(A[0], A[1], A[A.Length-1]),
      Lst(A.TakeLast(3))
    ).Tabulate(l->l.Product)
    .MaxBy(t->t[1])
  ;
  
  res[0].Println;
  res[1].Println;
end.
1
mr-Crocodile
11.09.2019, 16:32     Программа из C++ в Паскаль
  #9

Не по теме:

Цитата Сообщение от Sun Serega Посмотреть сообщение
А если не корявенько:
круто! И уже за гранью моего понимания! но это и следует из того, что "не корявенько" :D :D

0
11.09.2019, 16:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2019, 16:32
Привет! Вот еще темы с ответами:

Какое значение выведет данная Паскаль-программа?
Какое значение выведет данная Паскаль-программа? Var x,z : char; y: integer; Begin

программа на паскаль, объясните для чего нужна каждая строка
uses crt; var a,s:string; b:arrayof string; i,k,j:integer; begin write('введите строку '); -...

А есть ли какая-нть программа для построния блок-схем из кода Паскаль?
Мне просто интересно, когда-то видел такую программу, но она не работала хорошо???


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

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

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