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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2010, 15:49   #1
МартинИ
Пользователь
 
Аватар для МартинИ
 
Регистрация: 23.12.2008
Сообщений: 47
По умолчанию Перевод в двоичный код (Pascal -> C++)

Надо перевести разные типы данных в двоичном представление. Есть написанный код на Паскале:
Код:
Program LAB1;
uses crt;
Procedure WriteByte(a : byte);
var i:integer;
begin
for i:=7 downto 0 do begin
if ((a shr i) and $01) <>0 then write('1')
else write('0');
end;
write(' ');
end;

type bytearr = array[1..100] of byte;
type intptr = ^integer;
var k,i:integer;
li:longing;
db:double;
str:string[10];
pint:intptr;
ipt:^intptr;
px:pointer;
bp:^bytearr;
iarr:array[1..5] of integer;

begin
clrscr;
li:=518;
px:=@li;
bp:=px;
writeln('4uslo v tupi LongInt : ',li);
for k:=1 to 4 do writebyte(bp^[k]);
writeln;
writeln;

db:=29.09;
px:=@db;
bp:=px;
writeln('4uslo v tupi Double : ',db:0:2);
for k:=1 to 8 do writebyte(bp^[k]);
writeln;
writeln;

str:='ABCD';
px:=Addr(str);
bp:=px;
writeln('slovo v tupi String :',str);
for k:=1 to 5 do writebyte(bp^[k]);
writeln;
readln;
end.
надо перевести на С++. Пошла от противного. Тупо стала переводить код, ну и тут возникло много ошибок

Код:
#include<iostream.h>
#include<stdio.h>
#include<conio.h>

char WriteByte(char a)
{
	int i;
	for(i=7;i>=0;i--)
	{
		if ((a>>i) && $01)!=0
			cout <<'1'<<endl
			else
			cout<<'0'<<endl;
	}
		cout<<' '<<endl;
	}
void main()
{
	
	int	k,i;
	long int li;
	double db;
	char str;
	int ipt;
	pointer px;
    char bp;


	 li=518;
	 px=@li;
	 bp=px;
	 for (k=1;k<=4;i++)
	 {
		 WriteByte(bp ^k);
	 cout<<endl;
	 }
}
если можно помогите, вот ошибки, которые выбивает:

Compiling...
111.cpp
g:\учеба\1111\111.cpp(10) : error C2065: '$01' : undeclared identifier
g:\учеба\1111\111.cpp(10) : error C2143: syntax error : missing ';' before '!='
g:\учеба\1111\111.cpp(25) : error C2065: 'pointer' : undeclared identifier
g:\учеба\1111\111.cpp(25) : error C2146: syntax error : missing ';' before identifier 'px'
g:\учеба\1111\111.cpp(25) : error C2065: 'px' : undeclared identifier
g:\учеба\1111\111.cpp(30) : error C2018: unknown character '0x40'
Error executing cl.exe.

111.obj - 6 error(s), 0 warning(s)
Люди - отвратительные. Эгоистичные. Шумные. Говорят ерунду. А подумав еще немножко, понимаешь, что ты абсолютно такой же, если не хуже...
МартинИ вне форума Ответить с цитированием
Старый 19.04.2010, 16:19   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

шестнадцатеричные числа пишутся не $01, a 0x01, после !=0 закройте скобку. && - логическая операция, побитовая просто &( (a>>i) & 0x1 ). В С++ тип pointer выражается иначе - звёздочкой
Код:
int* n; // - указатель на int
char* c; // - указатель на char
Операция взятия адреса не @, а &
Код:
int l;
int* n = &l;
Как такового типа строки в С++ нет, используют массив символов
Код:
char str[10] = "Hello"; // инициализировать часть массива символами H e e l l o \0. \0 - нулевой символ, терминатор строки в С
str[2] = 'd';
При этом последний символ - 0
Разыменование указателя по той же звёздочке
Код:
int l;
int* n = &l;
*n = 10; // l == 10
netrino вне форума Ответить с цитированием
Старый 20.04.2010, 19:13   #3
Tusichka
 
Аватар для Tusichka
 
Регистрация: 19.04.2010
Сообщений: 4
По умолчанию

я последовала Вашим советам(за них большое спасибо).И у меня вознкла следующая проблема:
Код:
	 li=518;
	 px=&li;
	 bp=px;
	 for (k=1;k<=4;i++)
	 {
		 WriteByte(bp ^k);
	 cout<<endl;
	 }
}
вот с такой ошибкой:
cvbn.cpp
C:\Windows\System32\cvbn.cpp(31) : error C2440: '=' : cannot convert from 'void *' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Error executing cl.exe.

cvbn.exe - 1 error(s), 0 warning(s)

Как её можно исправить?Подскажите))
Улыбайтесь: это заставляет людей ломать голову над тем, что же у вас на уме….
Tusichka вне форума Ответить с цитированием
Старый 20.04.2010, 20:11   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Наверное надо
Код:
for(k = 0; k < 4; k++)
{
    WriteByte(bp[k]);
}
cout << endl;
netrino вне форума Ответить с цитированием
Старый 20.04.2010, 20:25   #5
Tusichka
 
Аватар для Tusichka
 
Регистрация: 19.04.2010
Сообщений: 4
По умолчанию

Ой,эт только случайно при наборе. Но ошибка та и осталась((((Что делать ?Скоко пробовала переработать не получается, объясните плиз)
Улыбайтесь: это заставляет людей ломать голову над тем, что же у вас на уме….
Tusichka вне форума Ответить с цитированием
Старый 20.04.2010, 20:34   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну а вызов WriteByte точно также как у меня выглядит? Или всё же с шапочкой? Шапочка в С - аналог xor в Паскале. Покажите как сейчас выглядит код полностью
netrino вне форума Ответить с цитированием
Старый 20.04.2010, 20:59   #7
Tusichka
 
Аватар для Tusichka
 
Регистрация: 19.04.2010
Сообщений: 4
По умолчанию

Код:
#include<iostream.h>
#include<stdio.h>
#include<conio.h>

char WriteByte(char a)
{
	int i;
	for(i=7;i>=0;i--)
	{
		if ((a>>i) &( 0x01!=0))
			cout <<'1'<<endl;
			else
			cout<<'0'<<endl;
	}
		cout<<' '<<endl;
	}
void main()
{
	
	int	k,i;
	long int li;
	double db;
	char str;
	int ipt;
	void *px;
    char bp;


	 li=518;
	 px=&li;
	 bp=px;
	 for (k=1;k<4;k++)
	 {
		 WriteByte(bp ^k);
	 cout<<endl;
	 }
}
У меня идёт с шапочкой потому что если ставлю [ ] оно к этому пристаёт.
Улыбайтесь: это заставляет людей ломать голову над тем, что же у вас на уме….
Tusichka вне форума Ответить с цитированием
Старый 20.04.2010, 21:23   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

ох... ) не надо писать шапочку )
Код:
#include <iostream.h>

void WriteByte(char a)
{
     int i;
   
     for(i = 128; i >= 0; i >>= 1) {
         if( a & i )
             cout << '1';
         else
             cout << '0';
     }
     cout << ' ';
}

void main()
{
    int i;
    long int li;
    char*  bp;

    li = 518;
    bp = (char*)&li;
    for(i = 0; i < sizeof(li); i++) {
        WriteByte(bp[i]);
        cout << endl;
    }
}
наверное так, не совсем уловил идею ваших деяний ) но моя идея должна быть ясна
netrino вне форума Ответить с цитированием
Старый 21.04.2010, 00:39   #9
МартинИ
Пользователь
 
Аватар для МартинИ
 
Регистрация: 23.12.2008
Сообщений: 47
По умолчанию

вот рабочая версия
Код:
#include <iostream.h>
#include<conio.h>

void WriteByte(char a)
{
	int i;
	for(i=7;i>=0;i--)
	{
		if ((a>>i) &( 0x01!=0))
			cout <<'1';
			else
			cout<<'0';
	}
		cout<<' ';
	}
//в начале программы клацаем ентер
void main()
{
    int i;
    long int li;
    char*  bp;

    li = 518;
    bp = (char*)&li;
 
    for(i = 3; i >= 0; i--) //вводим і меньше на 1, чем байт в нужном типе данных
	{
        WriteByte(bp[i]);
        
    }
	getch();
}
netrino, у вас программа просто выводит кучу 0, окончания их я не дождалась))) но все равно спасибо за помощь))
Tusichka, с тебя кофе)))
Люди - отвратительные. Эгоистичные. Шумные. Говорят ерунду. А подумав еще немножко, понимаешь, что ты абсолютно такой же, если не хуже...

Последний раз редактировалось МартинИ; 21.04.2010 в 00:42.
МартинИ вне форума Ответить с цитированием
Старый 21.04.2010, 01:59   #10
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Да, действительно ) Неправильно условие в for поставил и не заметил, стоило проверить перед тем как постить )
Код:
for(i = 128; i > 0; i >>= 1)
...
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символ в двоичный код k1r1ch Общие вопросы Delphi 14 09.09.2009 16:41
Перевод кода из Pascal в Object Pascal zemskov77 Общие вопросы Delphi 1 03.01.2009 09:37
Перевод вещественного числа в двоичный код shepelin Свободное общение 9 06.07.2008 10:00
Двоичный код masterx13 Паскаль, Turbo Pascal, PascalABC.NET 4 14.11.2007 20:08