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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2011, 21:07   #1
Rexonik
Новичок
Джуниор
 
Регистрация: 04.12.2011
Сообщений: 9
По умолчанию переписать задачу с Паскаля в Visual C++

Здравствуйте, помогите пожалуйста переписать задачу с Паскаля в С++.
ВОпрос именно в том где и как описывать в С++ вот это:
Код:
input = record
last,next,new : word;
и вот это:
Код:
m : array[1..1 shl maxk] of input;
Procedure concat(a,b : word);
и это:
Код:
i:=a;while m[i].next<>n+1 do i:=m[i].next;
j:=b; while m[j].next<>n+1 do j:=m[j].next;
while j<>0 do
begin
nj:=m[j].last; m[i].next:=j; m[j].last:=i; i:=j; j:=nj;
end;
m[i].next:=n+1;
end;
Вот полный код программы на Паскале:
Код:
uses crt;
const
maxk = 13; {Максимальное значение для k}
type
input = record
last,next,new : word;
end;
var
k,i,j,n,cn,half : word;
m : array[1..1 shl maxk] of input;
Procedure concat(a,b : word);
var i,j,nj : word;
begin
i:=a;while m[i].next<>n+1 do i:=m[i].next;
j:=b; while m[j].next<>n+1 do j:=m[j].next;
while j<>0 do
begin
nj:=m[j].last; m[i].next:=j; m[j].last:=i; i:=j; j:=nj;
end;
m[i].next:=n+1;
end;
begin
Write('Enter k...');readln(k);
n:=1 shl k; {Определение длины полоски}
for i:=1 to n do{Начальные значения}
with m[i] do
begin
last:=0;
next:=n+1;
new:=0;
end;
cn:=n;
while cn>1 do {Сгибание полоски}
begin
half:=cn div 2;
for i:=1 to half do concat(i,cn-i+1);
cn:=half;
end;
j:=1;
for i:=1 to n do {Нумерация клеток}
begin
m[j].new:=i; j:=m[j].next;
end;
for i:=1 to n do write(m[i].new:5);
writeln;
end.
Помогите пожалуйста, уже все доступные источники перерыл... Я новичок в С++, но курсовую делать как-то надо)

Вот условие задачи, если кому-то понадобится:

Задана полоска длиной 2k клеток и шириной в одну клетку. Полоску сгибают пополам так, чтобы правая половинка оказалась под левой. Сгибание продолжают до тех пор, пока сверху находится больше одной клетки. Необходимо пронумеровать клетки таким образом, чтобы после окончания сгибания полосы номера клеток в получившейся колонке были расположены в порядке 1,2,3,4,...,2k.

З.Ы: Тапками сильно не кидайтесь) Я конечно понимаю, что задал много, но сам я в этом разберусь где-то недельки через 2(если начну читать какой-нибудь учебник), а сдать надо в конце недели...
З.Ы.Ы: И пожалуйста, посоветуйте хороший и понятный учебник по с++.

Последний раз редактировалось Rexonik; 04.12.2011 в 21:12.
Rexonik вне форума Ответить с цитированием
Старый 04.12.2011, 21:20   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Код:
input = record
last,next,new : word;
->
Код:
struct input {
unsigned int last,next,new;
};
Код:
m : array[1..1 shl maxk] of input;
1..1 shl maxk - это вообще как ?
Код:
Procedure concat(a,b : word);
->
Код:
void concat(unsigned int a, unsigned int b);
Код:
i:=a;while m[i].next<>n+1 do i:=m[i].next;
j:=b; while m[j].next<>n+1 do j:=m[j].next;
while j<>0 do
begin
nj:=m[j].last; m[i].next:=j; m[j].last:=i; i:=j; j:=nj;
end;
m[i].next:=n+1;
end;
:= -> =
<> -> !=
begin -> {
end -> }
все предикаты помещаем в (...)
после while - do убрать.

Код:
И пожалуйста, посоветуйте хороший и понятный учебник по с++.
Герберт Шилдт
onewho вне форума Ответить с цитированием
Старый 04.12.2011, 21:26   #3
Rexonik
Новичок
Джуниор
 
Регистрация: 04.12.2011
Сообщений: 9
По умолчанию

Цитата:
Сообщение от onewho Посмотреть сообщение
1..1 shl maxk - это вообще как ?
Массив чисел от 1 до 1, изменяющейся от 1 до 13 - это я загнул так просто) вообще это массив чисел от 1 до 13.
onewho огромное спасибо) теперь стало на 27 ошибок меньше :DD
Rexonik вне форума Ответить с цитированием
Старый 04.12.2011, 21:36   #4
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

было бы неплохо посмотреть код
onewho вне форума Ответить с цитированием
Старый 04.12.2011, 21:37   #5
Rexonik
Новичок
Джуниор
 
Регистрация: 04.12.2011
Сообщений: 9
По умолчанию

Цитата:
Сообщение от onewho Посмотреть сообщение
было бы неплохо посмотреть код
Код написан в Microsoft Visual Studio 2008.
Сейчас сброшу.

Последний раз редактировалось Rexonik; 04.12.2011 в 21:55.
Rexonik вне форума Ответить с цитированием
Старый 04.12.2011, 21:50   #6
Rexonik
Новичок
Джуниор
 
Регистрация: 04.12.2011
Сообщений: 9
По умолчанию

Код:
ref struct input
		{
			unsigned int last, next, nov;
		};
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
				 int maxk = 13;
				 void concat(unsigned int a, unsigned int b);
				 unsigned int k,i,j,n,cn,half,nj;
				 i=a;
				 while (m[i].next!=n+1)
				 {
					 i=m[i].next;
				 };
				 j=b;
				 while (m[j].next!=n+1)
				 {
					 j=m[j].next;
				 };		
				 while (j!=0)
				 {
					 nj=m[j].last; 
					 m[i].next=j; 
					 m[j].last=i; 
                     i=j; 
                     j=nj;
				 }
				 m[i].next=n+1;
				 k=Convert::ToInt32(this->textBox1->Text);
				 n=1 shl k;
				 for (i=0; i<n; i++)
				 {
					 ЗДЕСЬ ЧТО-ТО НЕПОНЯТНОЕ
				 }
			 }
	};
А как записать еще вот это:
Код:
with m[i] do
begin
Ругается на error C2065: 'a' : undeclared identifier
Хотя оно же здесь обьявлено:
Код:
void concat(unsigned int a, unsigned int b);
Как обьявить это:
Код:
m : array[1..13] of input;

Последний раз редактировалось Rexonik; 04.12.2011 в 21:55.
Rexonik вне форума Ответить с цитированием
Старый 04.12.2011, 22:20   #7
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Вот так
Код:
input m[13];
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 04.12.2011, 22:30   #8
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию

Цитата:
Сообщение от onewho Посмотреть сообщение
Код:
input = record
last,next,new : word;
->
Код:
struct input {
unsigned int last,next,new;
};
new зарезервировано в C++. Нельзя использовать в названиях переменных
viron вне форума Ответить с цитированием
Старый 04.12.2011, 22:30   #9
Rexonik
Новичок
Джуниор
 
Регистрация: 04.12.2011
Сообщений: 9
По умолчанию

А как записать еще вот это:
Код:
with m[i] do
begin
я переменную new заменил на nov
Rexonik вне форума Ответить с цитированием
Старый 04.12.2011, 23:10   #10
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию

Вот эту запись на Pascal
Код:
with m[i] do
begin
  last:=0;
  next:=n+1;
  new:=0;
end;
Можно переписать
Код:
 m[i].last = 0;
 m[i].next = n + 1;
 m[i].now = 0;  // now вместо new
viron вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переписать с Паскаля на С++ gvilon Общие вопросы C/C++ 2 09.11.2011 22:54
Переписать с Паскаля на С++ gvilon Помощь студентам 0 09.11.2011 22:13
Нужно переписать процедуры с Паскаля на функции в С++ gvilon Общие вопросы C/C++ 1 21.10.2011 21:16
переписать из паскаля в делфи(выдать уровни на ногу порта) ovram Фриланс 4 04.01.2011 22:04
Переписать задачу из паскаля на СИ Drago56 Общие вопросы C/C++ 1 14.12.2010 17:40