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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2010, 15:12   #1
agent007
Пользователь
 
Регистрация: 06.07.2010
Сообщений: 53
Стрелка Перевод задачи из pascal в c(c++)

Имеется такой код на псевдо-паскале (Задача про счастливые билеты), но так как в паскале я нуль, то есть пару вопросов по конвертации кода на язык Си(c++)
Код:
Код:
program Bilet; 
Uses Crt; 
var N : array[0..1] of array[0..5000] of QWord; 
N_tot : Qword; 
s, s_, k, k_,p:integer; 
BEGIN 
 write('Enter p,k >'); readln(p,k); 
  for s_:=0 to p-1 do N[0][s_]:=1; 
   for k_:=2 to k do begin 
   for s:=0 to k_*(p-1) do begin 
   N[1]:=0; 
    for s_:=0 to p-1 do 
    if (s-s_>=0) and (s-s_<=(k_-1)*(p-1)) 
    then N[1]:=N[1]+N[0][s-s_]; 
    end; 
   N[0]:=N[1]; 
  end; 
 N_tot:=0; 
  for s:=0 to k*(p-1) do 
  N_tot:=N_tot+sqr(N[0]); 
 writeln(N_tot); 
End.
Собственно что интересует меня:
1) Что за тип QWord? какой у него аналог в Си?
3) Что за array of array ? Русскими словами массив в массиве, а на деле это как и для чего? и как Си с этим дружит? Это двумерный массив или нет?
4) Неочень ясно что за запись: N_tot:=N_tot+sqr(N[0]); was ist das SQR ?
5) И ещё: N[1]:=0; если думать Сишным языком, то это двойной массив, но судя по задаче и реализации это далеко не так, что же это тогда ?


Ах да, если необходимо условие то вот оно:
В городе А общепринята p-ичная система счисления, а номера биллетов состоят из 2к разрядов. Биллет счастливый- если сумма первых к разрядов, равна сумме последних к-разрядов.


Читая теорию решения вроде как бы более менее суть понял, но хотелось бы и по коду понять как они делают, но паскаль мне неизвестен и их методы также

Задача из "Алгоритмы и Программы": решение олимпиадных задач, Порублёв, Ставровский. с.289 з.10.2.3
agent007 вне форума Ответить с цитированием
Старый 07.11.2010, 15:16   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,849
По умолчанию

Цитата:
1) Что за тип QWord? какой у него аналог в Си?
Видимо, учетверенное слово, типа int64.
Цитата:
3) Что за array of array ? Русскими словами массив в массиве, а на деле это как и для чего? и как Си с этим дружит? Это двумерный массив или нет?
Да, получается двумерный массив.
Цитата:
4) Неочень ясно что за запись: N_tot:=N_tot+sqr(N[0]); was ist das SQR ?
Квадрат числа.
Цитата:
5) И ещё: N[1]:=0; если думать Сишным языком, то это двойной массив, но судя по задаче и реализации это далеко не так, что же это тогда ?
Не знаю, что это означает на псевдо Паскале, но на Паскале такое бы не сработало.
Arigato вне форума Ответить с цитированием
Старый 07.11.2010, 15:18   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

QWord 0..18446744073709551615 8 Квадро слово, 64 бита
с остальным опоздал((
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 07.11.2010, 15:41   #4
agent007
Пользователь
 
Регистрация: 06.07.2010
Сообщений: 53
По умолчанию

Мда, как реализовть тогда сие чудо?
agent007 вне форума Ответить с цитированием
Старый 07.11.2010, 16:57   #5
Kolyanu4
 
Регистрация: 07.11.2010
Сообщений: 3
По умолчанию

Пробуй.
Код:
#include <stdio.h>
void main()
{
int x,z,s,i,a,b,c,d,e,f;
s=0;
printf("Vvedit' diapazon:\n");
scanf("%d%*c%d",&x,&z);
do{
a=x/100000;
b=(x/10000)%10;
c=(x/1000)%10;
d=(x/100)%10;
e=(x/10)%10;
f=x%10;
if (a+b+c==d+e+f) s++;
x++;
} while (x!=(z+1));
printf("%d",s);
}
Kolyanu4 вне форума Ответить с цитированием
Старый 07.11.2010, 19:31   #6
agent007
Пользователь
 
Регистрация: 06.07.2010
Сообщений: 53
По умолчанию

Как понимать их комбинаторное решение? N(s,p,k`) ??
N(s,p,k`)=Summ(from i=0 to p-1) N(s-i,p,k`-1) мдэ бред какойто. Может кто знает как мне одолеть её? хотя бы в теоретической части
agent007 вне форума Ответить с цитированием
Старый 07.11.2010, 20:58   #7
agent007
Пользователь
 
Регистрация: 06.07.2010
Сообщений: 53
По умолчанию

Блин реккурентным соотношением понял как, а как по ихнему хз
agent007 вне форума Ответить с цитированием
Старый 06.12.2010, 17:26   #8
Balthazar
 
Регистрация: 06.12.2010
Сообщений: 5
По умолчанию

помогите перевести эту задачу пожалуйста:
uses crt;
var st:string;
i,j:byte;
begin
writeln('Введите арифметическое выражение: ');
readln(st);
for i:=2 to length(st) do begin
if st[i-1] in ['+','-','*','/'] then
if st[i] in ['+','-','*','/'] then
inc(j);
end;
for i:=2 to length(st) do begin
if (st[i-1] in ['0'..'9']) and (st[i] in [' '])
and (st[i+1] in ['0'..'9'])then inc(j);
if (st[i-1] in ['+','-','*','/']) and (st[i] in [' '])
and (st[i+1] in ['+','-','*','/'])then inc(j);
end;
if j=0 then
writeln('Данное выражение записано верно!')
else
writeln('Данное выражение записано не верно!');
end.
как не пытался постоянно выдаёт какую-то ошибку
Balthazar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из C++ в Pascal maximumtf2 Помощь студентам 1 25.03.2010 10:24
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28
перевод из Pascal в C++ Valerik Общие вопросы C/C++ 5 22.04.2009 21:57
Перевод кода из Pascal в Object Pascal zemskov77 Общие вопросы Delphi 1 03.01.2009 09:37