Форум программистов, компьютерный форум CyberForum.ru

переделать на с++ - C++

Восстановить пароль Регистрация
 
pmipmi
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 44
16.09.2013, 08:57     переделать на с++ #1
Последовательность 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, …, состоящая из нулей и единиц строится так: первый ее элемент равен 1, а остальные получаются из предшествующих с помощью логической операции отрицания: not(1) = 0, not (0) = 1. Второй элемент равен отрицанию первого, третий и четвертый – отрицанию первого и второго соответственно и т.д. По заданному n вычислить n-ый член указанной последовательности.
примерный код на паскале

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
Uses Crt;
Var i,k,N,indm:integer;
    m:array[1..300000]of boolean;
Begin
    m[1]:=true; indm:=trunc(power(2,k)); N:=98568;
    repeat
        for i:=1 to indm do m[indm+i]:=not(m[i]);
        if indm>=N then break;
        inc(k); indm:=trunc(power(2,k));
    until false;
    write(N); if m[N]=false then write(0:2) else write(1:2);
End.
не могу переделать на с++.. помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2013, 08:57     переделать на с++
Посмотрите здесь:

Переделать из С++ в С C++
Переделать из С++ в С C++
Переделать else if на switch C++
C++ переделать из С в с++
C++ переделать из с++ в си
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
16.09.2013, 12:06     переделать на с++ #2
А что именно не получается? Напиши, что переделал и где возникают проблемы? Тут то знаний С++ первые 20 страниц любого учебника.
pmipmi
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 44
16.09.2013, 15:30  [ТС]     переделать на с++ #3
int i,k,N,indm;
int array[300000];

m[1]=true; // ? что тут
indm=floor(power(2,k));


for (int i=1;i<indm;i++)
{ m[indm+i]:=not(m[i]);
if indm>=N;
break;
indm=floor(power(2,k));
until false; // ?? а это как?
write(N);
if m[N]=false then write(0:2) else write(1:2); // тут совсем непонятно
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
16.09.2013, 15:35     переделать на с++ #4
Цитата Сообщение от pmipmi Посмотреть сообщение
until false
На сколько я понимаю until выполняется до тех пор пока условие после него будет не выполнено, а после него стоит false - следовательно цикл бесконечный -
C++
1
2
3
4
while(true)
{
...
}
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
16.09.2013, 16:09     переделать на с++ #5
Цитата Сообщение от pmipmi Посмотреть сообщение
int i,k,N,indm;
int array[300000];

m[1]=true; // ? что тут
indm=floor(power(2,k));


for (int i=1;i<indm;i++)
{ m[indm+i]:=not(m[i]);
if indm>=N;
break;
indm=floor(power(2,k));
until false; // ?? а это как?
write(N);
if m[N]=false then write(0:2) else write(1:2); // тут совсем непонятно
m[1]=true в С++ будет m[0]=true так как в С++ индекс массива начинается с 0
так же и цикл for начинаться должен с 0.
вместо uses crt в С++ будет #include <iostream> для ввода/вывода

короче как то так будет, проверь

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main()
{
    
    int i,k=0,N,indm;
    bool m[290000];
    m[0]=true;
    indm=pow(2.0,k);
    N=98568;
    do
    {
        for(int i=0;i<=indm;i++)
            m[indm+i]=!m[i];
        if (indm>=N) break;
        k++;
        indm=pow(2.0,k);
    }
        while(true);
        cout<<N<<endl;
        if (!m[N]) cout<<"0";
        else cout<<"1"; 
}
pmipmi
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 44
16.09.2013, 16:20  [ТС]     переделать на с++ #6
Peperovich, большое спасибо
но не работает...
может в начальном коде ошибка..

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function aaa(x: integer):boolean;
var b: integer;
begin                    
b:=1;
While (x-b*2)>0 do b:=b*2;
x:=x-b;
if x<>1 then
   result:=not(aaa(x))
   else
   result:=false;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var x: integer;
    znach: boolean;
begin
try
x:=StrToInt(edit1.Text);
if x=1 then label1.Caption:='1' else
begin
znach:=aaa(x);
if znach=true then label1.Caption:='1' else label1.Caption:='0';
end;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 16:56     переделать на с++
Еще ссылки по теме:

C++ Переделать из С в С++
переделать клас C++
Переделать из C# в C++ C++

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

Или воспользуйтесь поиском по форуму:
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
16.09.2013, 16:56     переделать на с++ #7
А что выдает компилятор, потому что у меня собирается и даже что то выводит.

Добавлено через 24 минуты
Сейчас прочитал твое задание из первого поста и не понял зачем тебе переменная indm?
По заданию должно вот так быть.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main()
{
    
    int i,N;
    bool m[290000];
    m[0]=true;
 //   indm=pow(2.0,k);  не нужно
    N=98568;
        for(int i=1;i<=N;i++)
            m[i]=!(m[--i]);
       // indm=pow(2.0,k);  тоже не понятно для чего
        cout<<N<<endl;
        if (!m[N]) cout<<"0";
        else cout<<"1"; 
}
Yandex
Объявления
16.09.2013, 16:56     переделать на с++
Ответ Создать тему
Опции темы

Текущее время: 04:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru