4 / 4 / 0
Регистрация: 29.11.2012
Сообщений: 68
1

Перевод из С

29.11.2012, 11:06. Показов 1598. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется код:
C
1
for(i=0;i<n;i++;ia++)for(os=0;os<8;os++)s=s>>1^((s^*ia>>os)&1)*k
Начинаю переводить в Делфи:

Pascal
1
2
3
4
5
6
7
8
for i:=0 to n do
begin
   ia:=ia+1;
   for os:=0 to 8 do
      begin
        s:=                  //Вот этот участок кода не понятен
      end 
end
Помогите пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2012, 11:06
Ответы с готовыми решениями:

Перевод кода с Паскаля (перевод в метры)
var a,b,d:integer; c,e:real; begin writeln('1-дециметр 2-километр'); writeln('3-метр ...

Заменить в строке все пробелы на перевод строки, а перевод строки изменить на два перевода
Меня интересует следующий вопрос: как заменить в моем стринге все пробелы на переходы на новую...

Разбиение строки на части, перевод строки в число и перевод числа
Есть задание: 1. Необходимо реализовать консольное приложение, позволяющее манипулировать строкой,...

If I'll + перевод
How can I be sure? I don’t know if I’ll be able to fight With a tortured soul And an honest...

22
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.11.2012, 11:18 2
Цитата Сообщение от General Motors Посмотреть сообщение
Начинаю переводить в Делфи:
А при чём здесь раздел плюсов? Оригинал на сях, перевод нужен на обджект паскаль. Ни тот, ни другой язык плюсами не является.

Добавлено через 29 секунд
0
Модератор
Эксперт по электронике
8876 / 6651 / 912
Регистрация: 14.02.2011
Сообщений: 23,420
29.11.2012, 11:22 3
Цитата Сообщение от General Motors Посмотреть сообщение
for(i=0;i<n;i++;ia++)
давно у нас у Фора 4 аргумента?
0
4 / 4 / 0
Регистрация: 29.11.2012
Сообщений: 68
29.11.2012, 11:23  [ТС] 4
Цитата Сообщение от taras atavin Посмотреть сообщение
А при чём здесь раздел плюсов? Оригинал на сях, перевод нужен на обджект паскаль. Ни тот, ни другой язык плюсами не является.

Добавлено через 29 секунд
Код на с++ Ошибся не тот тег указал.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.11.2012, 11:24 5
Цитата Сообщение от General Motors Посмотреть сообщение
s:= * * * * * * * * *//Вот этот участок кода не понятен
А что здесь не понятного?
Цитата Сообщение от General Motors Посмотреть сообщение
s=s>>1
- правый сдвиг на 1 бит, то есть деление нацело пополам,
Цитата Сообщение от General Motors Посмотреть сообщение
^
- побитовая (не булевая) ксорка,
Цитата Сообщение от General Motors Посмотреть сообщение
*ia
данные по указателю ia,
Цитата Сообщение от General Motors Посмотреть сообщение
>>os
правый сдвиг на os, то есть деление на цело на 2 в степени os,
Цитата Сообщение от General Motors Посмотреть сообщение
&1
побитовое (не булевое) and с единицей, то есть выделение младшего бита и обнуление остальных, то есть взятие остатка от деления на цело пополам.
Цитата Сообщение от General Motors Посмотреть сообщение
*k
- умножение на k.
0
4 / 4 / 0
Регистрация: 29.11.2012
Сообщений: 68
29.11.2012, 11:26  [ТС] 6
Цитата Сообщение от ValeryS Посмотреть сообщение
давно у нас у Фора 4 аргумента?
Это нормально код на C++.
При изменении переменной i от 0 до n переменные i и ia увеличиваются на 1.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.11.2012, 11:26 7
Цитата Сообщение от ValeryS Посмотреть сообщение
давно у нас у Фора 4 аргумента?
for на плюсах имеет три позиции, в первой и в последней можно написать произвольное количество операторов от ноля и больше. На чистых сях вроде тоже. Только разделять их надо запятыми.
0
Модератор
Эксперт по электронике
8876 / 6651 / 912
Регистрация: 14.02.2011
Сообщений: 23,420
29.11.2012, 11:29 8
Цитата Сообщение от taras atavin Посмотреть сообщение
for на плюсах имеет три позиции, в первой и в последней можно написать произвольное количество операторов от ноля и больше.
через запятую а не точку с запятой
т.е вот так нормально
C++
1
for(i=0;i<n;i++,ia++)
а так не уверен
C++
1
for(i=0;i<n;i++;ia++)
по крайней мере никогда не видел
0
4 / 4 / 0
Регистрация: 29.11.2012
Сообщений: 68
29.11.2012, 11:31  [ТС] 9
Цитата Сообщение от ValeryS Посмотреть сообщение
через запятую а не точку с запятой
т.е вот так нормально
C++
1
for(i=0;i<n;i++,ia++)
а так не уверен
C++
1
for(i=0;i<n;i++;ia++)
по крайней мере никогда не видел
Да ты прав! Совершенно верно через запятую.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.11.2012, 11:36 10
Судя по вике,
C++
1
s=s>>1^((s^*ia>>os)&1)*k
,
C
1
s=s>>1^((s^*ia>>os)&1)*k
означает
Pascal
1
s:=((s shr 1)xor((s xor ia^) shr os))*k;
.

Добавлено через 4 минуты
Цитата Сообщение от General Motors Посмотреть сообщение
ia:=ia+1;
Уверен? Так как ia - указатель, то
C++
1
++ia
,
C++
1
ia++
, означает увеличение ia не на 1, а на sizeof(<тот тип, на который может указывать ia>).
C
1
++ia
,
C
1
ia++
вроде бы тоже. А что означает
Pascal
1
ia:=ia+1;
с учётом того, что ia - указатель? На сколько я помню, на паскале типизированные указатели вообще не складываются с простыми целыми, а для не типизированного это увеличение на 1. На сях и плюсах нетипизированные тоже инкрементятся на 1.
0
4 / 4 / 0
Регистрация: 29.11.2012
Сообщений: 68
29.11.2012, 11:44  [ТС] 11
Цитата Сообщение от taras atavin Посмотреть сообщение
Судя по вике,
C++
1
s=s>>1^((s^*ia>>os)&1)*k
,
C
1
s=s>>1^((s^*ia>>os)&1)*k
означает
Pascal
1
s:=((s shr 1)xor((s xor ia^) shr os))*k;
.

Добавлено через 4 минуты
Уверен? Так как ia - указатель, то
C++
1
++ia
,
C++
1
ia++
, означает увеличение ia не на 1, а на sizeof(<тот тип, на который может указывать ia>).
C
1
++ia
,
C
1
ia++
вроде бы тоже. А что означает
Pascal
1
ia:=ia+1;
с учётом того, что ia - указатель? На сколько я помню, на паскале типизированные указатели вообще не складываются с простыми целыми, а для не типизированного это увеличение на 1. На сях и плюсах нетипизированные тоже инкрементятся на 1.
Судя по вике у меня не правильно, пошел переделывать. Спасибо. Переделаю, проверю отпишусь.
0
4 / 4 / 0
Регистрация: 29.11.2012
Сообщений: 68
08.08.2013, 16:16  [ТС] 12
Возвращаюсь к этой старой задаче
И так правлю:
Pascal
1
2
3
4
5
6
for i:=0 to sizeof(ia) do
  for os:=0 to 7 do
      begin
        s:= s:=((s shr 1)xor((s xor ia^) shr os))*k;
      end 
end
, где к - полином.
Только такая конструкция даже не компилируется. Ошибка на ia^. ia[i] - компилируется но считает не верно.
ia array of byte;
0
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
08.08.2013, 16:22 13
Цитата Сообщение от General Motors Посмотреть сообщение
Переделаю, проверю отпишусь.
Цитата Сообщение от General Motors Посмотреть сообщение
Возвращаюсь к этой старой задаче

Не по теме:

Напоминает мне это про старый боян; ТС вопрос: как прошить KDE2 под FreeBSD? - Ответ через 5 лет - Все спасибо, сам разобрался :rofl:

0
4 / 4 / 0
Регистрация: 29.11.2012
Сообщений: 68
08.08.2013, 16:28  [ТС] 14
Цитата Сообщение от coloc Посмотреть сообщение

Не по теме:

Напоминает мне это про старый боян; ТС вопрос: как прошить KDE2 под FreeBSD? - Ответ через 5 лет - Все спасибо, сам разобрался :rofl:

Да весело, но для переделки времени было 0. Вот вернулся к этой теме, но опять не получается.
0
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
08.08.2013, 21:01 15
C++
1
for(i=0;i<n;i++...
for i:=0 to n-1 do...
0
4 / 4 / 0
Регистрация: 29.11.2012
Сообщений: 68
09.08.2013, 09:55  [ТС] 16
Цитата Сообщение от Praktolock Посмотреть сообщение
C++
1
for(i=0;i<n;i++...
for i:=0 to n-1 do...
Что-то я явно делаю не так!
Для полной картины
Устанавливаю размер массива ia. ia - array of byte
Pascal
1
SetLength(ia,F.size);
Далее устанавливаю позицию от куда надо считать.
Pascal
1
F.seek(0,soFromBeginning);
Собственно считываю
Pascal
1
F.Read(Pointer(ia)^,length(ia));
Обнуляю начальное значение суммы:
Pascal
1
S:=0;
А есть разница между S:=0 или S:=$FFFF ?
Далее я так понимаю что n это длина самого массива.
for i:=0 to length(ia)-1 do
for os:=0 to 7 do
s:=((s shr 1) xor ((s xor ia[i]) shr os))*$a001;

Я понимаю что я делаю что-то не правильно, вот что?
Мне кажется что я неправильно указываю на массив ia[i] но вот как будет правильнее?
0
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
09.08.2013, 10:06 17
Чо-то я вообще не понимаю, что это за код, но вот на что тебе нужно обратить внимание. на сколько мне известно, во всяких там паскалях, массивы индексируются с 1 а не с 0. То бишь, если в си у тебя так:
C++
1
2
3
4
for(int i=0;n<8;n++)
 {
  massiv[i]=..... 
 };
То в паскале оно будет считать от 1 до 8:
Pascal
1
2
for i:=1 to 8 do
 massiv[i]=.....
Ну и в принципе, циклы немного по разному работают. В си:
C++
1
for(int i=0;i<3;i++)...//выполнится 3 раза со значениями i  0,1,2
Pascal
1
for i:=0 to 3 do....//выполнится 4 раза со значениями 0,1,2,3
Чуешь разницу?
0
4 / 4 / 0
Регистрация: 29.11.2012
Сообщений: 68
09.08.2013, 10:17  [ТС] 18
Цитата Сообщение от Praktolock Посмотреть сообщение
Чо-то я вообще не понимаю, что это за код, но вот на что тебе нужно обратить внимание. на сколько мне известно, во всяких там паскалях, массивы индексируются с 1 а не с 0. То бишь, если в си у тебя так:
Код C++
1
2
3
4
for(int i=0;n<8;n++)
*{
* massiv[i]=.....
*};
То в паскале оно будет считать от 1 до 8:
Код Pascal
1
2
for i:=1 to 8 do
*massiv[i]=.....
А почему не от нуля до 7 к примеру?

Добавлено через 1 минуту
Цитата Сообщение от Praktolock Посмотреть сообщение
Ну и в принципе, циклы немного по разному работают. В си:
Код C++
1
for(int i=0;i<3;i++)...//выполнится 3 раза со значениями i *0,1,2
Код Pascal
1
for i:=0 to 3 do....//выполнится 4 раза со значениями 0,1,2,3
Это и так понятно! т.к i<3, а значит трем равно быть не может.
0
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
09.08.2013, 11:52 19
Цитата Сообщение от General Motors Посмотреть сообщение
А почему не от нуля до 7 к примеру?
В паскале первый элемент массива massiv[1], в си - massiv[0]. Паскаль такой паскаль.
Цитата Сообщение от General Motors Посмотреть сообщение
Это и так понятно! т.к i<3, а значит трем равно быть не может.
Ну так учитывай это в своём коде
Вот твой исходный код:
C++
1
for(i=0;i<n;i++;ia++)for(os=0;os<8;os++)s=s>>1^((s^*ia>>os)&1)*k
И вот как ты перевел на паскаль:
Pascal
1
2
3
4
5
6
7
8
for i:=0 to n do
begin
   ia:=ia+1;
   for os:=0 to 8 do
      begin
        s:=                  //Вот этот участок кода не понятен
      end 
end
В сишном варианте у тебя цикл в котором счётчик i выполняется n раз, в паскальном коде n+1 раз

Добавлено через 11 минут
С циклом os аналогично в сишном он тикает от 0 до 7 (8 итераций) в паскале от 0 то 8 (9 итераций). Если i и os играют роли индексов в массивах то в коде на паскале циклы нужно начинать с 1:
Pascal
1
2
3
4
5
6
7
8
for i:=1 to n do
begin
   ia:=ia+1;
   for os:=1 to 8 do
      begin
        s:=                  //Вот этот участок кода не понятен
      end 
end
0
4 / 4 / 0
Регистрация: 29.11.2012
Сообщений: 68
09.08.2013, 13:28  [ТС] 20
Цитата Сообщение от Praktolock Посмотреть сообщение
Чо-то я вообще не понимаю, что это за код, но вот на что тебе нужно обратить внимание. на сколько мне известно, во всяких там паскалях, массивы индексируются с 1 а не с 0. То бишь, если в си у тебя так:
C++
1
2
3
4
for(int i=0;n<8;n++)
 {
  massiv[i]=..... 
 };
То в паскале оно будет считать от 1 до 8:
Pascal
1
2
for i:=1 to 8 do
 massiv[i]=.....
Ну и в принципе, циклы немного по разному работают. В си:
C++
1
for(int i=0;i<3;i++)...//выполнится 3 раза со значениями i  0,1,2
Pascal
1
for i:=0 to 3 do....//выполнится 4 раза со значениями 0,1,2,3
Чуешь разницу?
Цитата Сообщение от Praktolock Посмотреть сообщение
В паскале первый элемент массива massiv[1], в си - massiv[0]. Паскаль такой паскаль.
Ну так учитывай это в своём коде
Вот твой исходный код:
C++
1
for(i=0;i<n;i++;ia++)for(os=0;os<8;os++)s=s>>1^((s^*ia>>os)&1)*k
И вот как ты перевел на паскаль:
Pascal
1
2
3
4
5
6
7
8
for i:=0 to n do
begin
   ia:=ia+1;
   for os:=0 to 8 do
      begin
        s:=                  //Вот этот участок кода не понятен
      end 
end
В сишном варианте у тебя цикл в котором счётчик i выполняется n раз, в паскальном коде n+1 раз

Добавлено через 11 минут
С циклом os аналогично в сишном он тикает от 0 до 7 (8 итераций) в паскале от 0 то 8 (9 итераций). Если i и os играют роли индексов в массивах то в коде на паскале циклы нужно начинать с 1:
Pascal
1
2
3
4
5
6
7
8
for i:=1 to n do
begin
   ia:=ia+1;
   for os:=1 to 8 do
      begin
        s:=                  //Вот этот участок кода не понятен
      end 
end
Это я всё понял я уже попробовал и так и эдак бесполезно. У меня не правильно организован видимо подсчет сам.
Pascal
1
s:= s:=((s shr 1)xor((s xor ia^) shr os))*k;
0
09.08.2013, 13:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2013, 13:28
Помогаю со студенческими работами здесь

Перевод с С++ на С
нашел код программы написанный на С++) попытался переписать в С, с заменой элементарных ф-ций.. ...

перевод
переведите пожалуйста на паскль function IntegralSimpson(a, b: double; f: TFun; e: double):...

Перевод на c#
program Param16; type RArray = array of real; Matrix = array of real; var A:RArray; ...

Перевод с vb на C#
Здравствуйте. Нужно перевести на С# Dim iOffsetDays As Integer =...

Перевод
Может кто на С++ перевести? uses crt; const t=0.01;//точность сравнения вычисленных величин...

Перевод в 16 из 10
Помогите решить задачу. С помощью этого кода надо перевести из 10 в 16 при помощи switch case. Не...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru