Аналогичные оператоды и методы Pascal в C++

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
_Mikhail_
Сообщения: 1
Зарегистрирован: 09 янв 2017, 16:33

09 янв 2017, 18:16

Здравствуйте!
Необходимо провести в на С++ такаю же операцию как в Паскале

type

2type=Array [1...100] of integer; //Ну тут объявляется тип данных массив от размером 100 как подобное делается в С я не знаю да и не уверен что способен правильно сформулировать запрос в гугл.

var

Komp1,Komp2,Gn: Type2;//(если я правильно понял то объявленные переменные будут типа массив, а вот как сделать так же на с++ я не знаю, после гугления нашел всякие typedef и ему подобные, но это не подходит.

Подскажите пожалуйста в способах осуществления данной операции на С++, или как правильно оформить запрос в гугл по этой теме. Прошу не гнать в шею а получше объяснить т.к. только учусь и во всем приходится самому разбираться.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

09 янв 2017, 18:22

Почему не подходит typedef?

Код: Выделить всё

typedef int type[300];
type Komp1, Komp2, Gn;
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

04 апр 2017, 06:14

Во-первых что такое оператоды? А во-вторых c не нуждается в типе массива. Паскаль имеет свои особенности, там массив в подпрограмму передаётся именно как массив, что требует описания типа и в некоторых реализациях из-за ошибки нельзя передать массив в параметр, если тип этого параметра не совпадает с массива, даже

Код: Выделить всё

program p;
type ta1=array[1..10]of real;
     ta2=array[1..10]of real;
var x:ta1;
    i:integer;
function s(a:ta2):real;
var i:ineger;
    r:real;
begin
     r:=0;
     for i:=1 to 100 do
     begin
          r:=r+a[i]/100;
     end;
     s:=r;
end;
begin
     for i:=1 to 100 do
     begin
          readln(x[i]);
     end;
     writeln(s(x));
end.
с точки зрения некоторых компиляторов содержит синтаксическую ошибку, заключающуюся в том что типы фактического и формального параметров не совпадают. А совпадают типы, или объявленные синонимичными (type <имя типа>=<имя типа>), или если точно совпадает имя типа обеих величин. В том числе совпадают два синонима одного типа. А фактическое совпадение описания значения не имеет. Мой преподаватель встречалась с таким чудом, компилятор не назвала. Так и то есть реализации, где можно прямо в списке параметров описать тип формального параметра как тип массива и ошибки не будет. На c же массив передаётся по указателю на оригинал, что с формальными статическими проверками типов самих массивов согласуется плохо, в отличие от статических проверок базовых типов (типов элементов). То есть хоть типизация на c/c++ строже, чем на паскале, зато на паскале фанатичнее и от этого пострадали в первую очередь именно массивы. Кроме того, на паскале можно присвоить сразу целиком массив другому массиву, что также требует, чтоб у массива был настоящий тип, а на c/c++ этого сделать нельзя. Хотя typedef может определять типы массивов. Но это не нужно. Да и тип будет не полноценен: передача по указателю на оригинал + невозможность присвоить целиком массив другому массиву за одно применение оператора присваивания.
_Mikhail_ писал(а):Подскажите пожалуйста в способах осуществления данной операции на С++, или как правильно оформить запрос в гугл по этой теме. Прошу не гнать в шею а получше объяснить т.к. только учусь и во всем приходится самому разбираться.
По теме видно, что ещё не разобрался. Но может что хорошее и выйдет, Вирт со Страуструпом когда то тоже начинали. И знали ещё меньше.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить