Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 31.01.2010, 19:45   #1
GoodSpirit
Новичок
Джуниор
 
Регистрация: 31.01.2010
Сообщений: 2
Радость Перевод программы с Pascal в C++

Добрый день! Прошу помочь, подсказать.
Есть программа на Pascal, ее необходимо перевести в C++.
Сам C++ знаю слабо, побробывал сам, но вкрались ошибки.
Pascal
Код:
program Perevod; {Nazvanie programmi}
var A,  i, n, z: integer; B,C,D,E,F: string; res,res1,res2: real; {obyavlenie peremennih}
function RtoDec (s: string; R: word): string; {ob`yavlenie funkcii}
begin
	n:=0;
	A:=0;
	A:=pos('.',S);
	B:=copy(S,0,length(S)-A);
	C:=copy(S,A,8);
	A:=POS('.',C);
	delete(C,1,A);
	res1:=0;
	res2:=0;
	z:=0;
    for i:=length (B) downto 1 do
    begin
		B[i]:=UpCase (B[i]);
		if B[i] in ['0'..'9'] then
			n:=ord (B[i]) - ord ('0');
		if B[i] in ['A'..'Z'] then
			n:=10+ord(B[i])-ord('A');
		res1:=res1+(n*(exp(z*ln(r))));
		z:=z+1;
    end;
	n:=0;
	z:=0;
	for i:=length (C) downto 1 do
	begin
		C[i]:=UpCase (C[i]);
		if C[i] in ['0'..'9'] then
			n:=ord (C[i]) - ord ('0');
		if C[i] in ['A'..'Z'] then
			n:=10+ord(C[i])-ord('A');
		z:=z-1;
		res2:=res2+(n*(exp(z*ln(r))));

    end;
	res2:=abs(res2);
	str(res1:0:0,D);
	str(res2:0:8,E);
A:=pos('.',E);
	delete(E,1,A);
	F:=D+'.'+E;
	RtoDec := f;
end; {konec funkcii}
var B,C,S,F:string; {obyavlenie peremennih}
r: word;
a: integer;
begin
	writeln('Vvedite chislo i nagmite Enter'); {zapros chisla}
	readln(s); {prisvoenie peremennoy "S" chisla}
	writeln('Viberite sistemu chillenia'); {zapros vvoda osnovaniya}
	readln(r); {prisvoenie peremennoy "R" znacheniya osnovaniya}
	F:=RtoDec(s,r); {vipolnenie funkcii perevoda}
	write('Chislo ',s,' v sisteme schisleniya s osnovaniem ',r, ' ravno ', F); {vivod resultata}
	read(s); {ogidania nagatiya luboy klavishi}
end. {konec programmi}
а вот С++

Код:
#include <iostream.h>
#include <math.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>


int RtoDec (int s, int r); 							//ob`yavlenie funkcii/
{
    int A, i, n, z, B, C, D, E, F, res, res1, res2; //obyavlenie peremennih/
	n:=0;
	A:=0;
	A:=pos(".",S);
	B:=copy(S,0,length(S)-A);
	C:=copy(S,A,8);
	A:=POS(".",C);
	delete(C,1,A);
	res1:=0;
	res2:=0;
	z:=0;
    for (i:=length(B); i>=1; i++)
    {
		B[i]:=UpCase (B[i]);
		if B[i] in [<"0","9">] then
			n:=ord (B[i]) - ord ("0");
		if B[i] in [<"A","Z">] then
			n:=10+ord(B[i])-ord("A");
		res1:=res1+(n*(exp(z*log(r))));
		z:=z+1;
    };
	n:=0;
	z:=0;
	for (i:=length(C); i>=1; i++)
	{
		C[i]:=UpCase (C[i]);
		if C[i] in [<"0","9">] then
			n:=ord (C[i]) - ord ("0");
		if C[i] in [<"A","Z">] then
			n:=10+ord(C[i])-ord("A");
		z:=z-1;
		res2:=res2+(n*(exp(z*log(r))));
    };
	res2:=abs(res2);
	str(res1:0:0,D);
	str(res2:0:8,E);
A:=pos(".",E);
	delete(E,1,A);
	F:=D+"."+E;
	RtoDec := f;
}; 												//konec funkcii/



int B, C, S, F, r, a;
{
    clrscr();
	cout <<"Vvedite chislo i nagmite Enter"; 	//zapros chisla/
		cin >> s; 								//prisvoenie peremennoy "S" chisla/
	cout <<"Viberite sistemu chillenia"; 		//zapros vvoda osnovaniya/
		cin >> r; 								//prisvoenie peremennoy "R" znacheniya osnovaniya/
	F:=RtoDec(s,r); 							//vipolnenie funkcii perevoda/
	cout <<"Chislo ",s," v sisteme schisleniya s osnovaniem ",r, " ravno ", F; //vivod resultata/
	cin;
	};
Программа запрашивает число, затем запрашивает систему счисления этого числа, а затем переводит в десятчную систему счисления.
При этом после запятой допускается до 6ти знаков.
После удачного выполнения закрывается
GoodSpirit вне форума
Старый 31.01.2010, 22:13   #2
Александр Елис
Пользователь
 
Регистрация: 18.08.2009
Сообщений: 70
По умолчанию

тьма синтаксических ошибок... во-первых, регист в си имеет значение(S и s - разные переменные);во-вторых,
Код:
n:=0;
для меня это великая тайна) может быть,
Код:
n=0
ну а если смотреть дальше, то нет проверки корректности ввода и многое другое...
Александр Елис вне форума
Старый 01.02.2010, 10:59   #3
GoodSpirit
Новичок
Джуниор
 
Регистрация: 31.01.2010
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Александр Елис Посмотреть сообщение
тьма синтаксических ошибок... во-первых, регист в си имеет значение(S и s - разные переменные);во-вторых,
Код:
n:=0;
для меня это великая тайна) может быть,
Код:
n=0
ну а если смотреть дальше, то нет проверки корректности ввода и многое другое...

Код:
#include <iostream.h>
#include <math.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <stdio.h>

int main(int s, int r) RtoDec; 							//ob`yavlenie funkcii/
{
    int a, i, n, z, B, C, D, E, f, res, res1, res2; //obyavlenie peremennih/
	n=0;
	a=0;
	a=pos(".",s);
	B=copy(s,0,length(s)-a);
	C=copy(s,a,8);
	a=pos(".",C);
	delete(C,1,a);
	res1=0;
	res2=0;
	z=0;
    for (i=length(B); i>=1; i++)
    {
		B[i]=UpCase (B[i]);
		if B[i] in [<"0","9">] then
			n=ord (B[i])-ord ("0");
		if B[i] in [<"a","Z">] then
			n=10+ord(B[i])-ord("a");
		res1=res1+(n*(exp(z*log(r))));
		z=z+1;
    };
	n=0;
	z=0;
	for (i=length(C); i>=1; i++)
	{
		C[i]=UpCase (C[i]);
		if C[i] in [<"0","9">] then
			n=ord (C[i])-ord("0");
		if C[i] in [<"a","z">] then
			n=10+ord(C[i])-ord("a");
		z=z-1;
		res2=res2+(n*(exp(z*log(r))));
    };
	res2=abs(res2);
	str(res1:0:0,D);
	str(res2:0:8,E);
a=pos(".",E);
	delete(E,1,a);
	f=D+"."+E;
	RtoDec=f;
}; 												//konec funkcii/



int (s);
int (f);
int (r);
int (a);
{
    clrscr();
    cout <<"Vvedite chislo i nagmite Enter"; 	        //zapros chisla/
        cin >> s; 								//prisvoenie peremennoy "S" chisla/
    cout <<"Viberite sistemu chillenia"; 		//zapros vvoda osnovaniya/
        cin >> r; 								//prisvoenie peremennoy "R" znacheniya osnovaniya/
    f=RtoDec(s,r); 							//vipolnenie funkcii perevoda/
    cout <<"Chislo ",s," v sisteme schisleniya s osnovaniem ",r, " ravno ", f; //vivod resultata/
	cin;
}
Вот поправил, ошибки остались, правда другие:

1 Declaration syntax error
2 Declaration terminated incorrectly
3 Declaration terminated incorrectly
GoodSpirit вне форума
Старый 19.05.2010, 17:34   #4
Seva23
Новичок
Джуниор
 
Регистрация: 19.05.2010
Сообщений: 1
По умолчанию Pascal - C#

Помогите пожалуста перевести это с паскаля на C#, буду очень благодарен))

{
Даны два массива x[1] <= ... <= x[k], y[1] <= ... <= y[l].
Найти их "пересечение", т.е. массив z[1] <= ... <= z[m],
содержащий их общие элементы, причем, кратность каждого элемента
в массиве z равняется минимуму из его кратностей в массивах x и y.
Число действий должно быть порядка k+l.
}
Program InterSect;

Const
cMaxIndex = 100; { максимальное число элементов для определения массива }

Type
TIndex = 1..cMaxIndex; { тип для описания индекса }
TArray = array [0..cMaxIndex] of Word; { описание массива. Элемент с индексом 0 - верхняя граница массива }

Var
x : TArray; { массив x }
y : TArray; { массив y }
z : TArray; { массив z }

{ Процедура печати массива }
Procedure Print (a : TArray; title : string);
var
i : TIndex;

begin
write (title, \':\');
for i := 1 to a [0] do
write (\' \', a [i]);
writeln;
end;

{ Процедура ввода массива }
Procedure Input (var a : TArray; title : string);
var
i : TIndex;

begin
writeln (\'Введите элементы массива \', title, \' (не более \', cMaxIndex, \' элементов). Введите 0 для окончания ввода\');

a [0] := 0;

for i := 1 to cMaxIndex do
begin
readln (a [i]);
if a [i] = 0 then break
else Inc (a [0]);
end;
end;

{ Процедура для вормирования "пересечения" массивов }
Procedure InterSection (a : TArray; b : TArray; var c : TArray);
var
i : TIndex; { переменная для перебора элементов первого массива }
j : TIndex; { переменная для перебора элементов второго массива }

n : TIndex; { количество элементов первого массива }
m : TIndex; { количество элементов второго массива }

begin
n := a [0];
m := b [0];

c [0] := 0;
j := 1;
i := 1;

{ пока есть элементы в первом массиве }
while i <= n do
begin
{ находим первый элемент во втором массиве, который не меньше текущего из первого }
while (j <= m) and (b [j] < a [i]) do Inc (j);
if j > m then break;

{ добавляем одинаковые элементы в третий массив (меньшая кратность получается автоматически) }
while a [i] = b [j] do
begin
{ Заносим элемент в массив c }
Inc (c [0]);
c [c [0]] := a [i];

{ переходим к следующим элементам исходных массивов }
Inc (i);
Inc (j);

{ проверяем границы массивов }
if (i > n) or (j > m) then break;
end;

{ пропускаем элементы первого массива до тех пор, пока очередной элемент не станет больше или равен текущего элемента второго массива }
while (i <= n) and (a [i] < b [j]) do Inc (i);
end;
end;

Begin
Input (x, \'x\');
Input (y, \'y\');

Print (x, \'x\');
Print (y, \'y\');

InterSection (x, y, z);

Print (z, \'z\');
End.
Seva23 вне форума
Старый 19.05.2010, 18:04   #5
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

1
Цитата:
Seva23
создайте свою тему.
2
Цитата:
GoodSpirit
В С и С++ функция main является основной. С нее начинается выполнение программы т.е в Вашем случае
Код:
int main()
{
  int s ,f, r, a; //Объявление переменных целыми

  clrscr();
  cout <<"Vvedite chislo i nagmite Enter"; 	        //zapros chisla/
  cin >> s; 					//prisvoenie peremennoy "S" chisla
  cout <<"Viberite sistemu chillenia"; 		//zapros vvoda osnovaniya/
  cin >> r; 			//prisvoenie peremennoy "R" znacheniya osnovaniya/
    f=RtoDec(s,r); 	//vipolnenie funkcii perevoda/
    cout <<"Chislo "<<s<<" v sisteme schisleniya s osnovaniem "<<r<< " ravno"<< f; //vivod resultata/
getch();
return 0;
}
Функция, выполняющая преобразование
int RtoDec(int s, int r)
{
описание переменных, аналогично main
операторы;
return результат вычисления;
}
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 19.05.2010 в 18:11.
Sweta вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из Pascal в С Foxtrot_1 Помощь студентам 7 20.06.2009 19:00
перевод из Pascal в C++ Valerik Общие вопросы C/C++ 5 22.04.2009 21:57
Перевод кода из Pascal в Object Pascal zemskov77 Общие вопросы Delphi 1 03.01.2009 09:37