| 
			| 
					
						| ФФФ 
								Гость
 | 
								|  | «  : 20-11-2005 12:03 »  |  | 
 
 такое задание в кадом байте длинного целого числа N поменять двоичные разряды в зеркальном порядке #include <stdio.h>#include <stdlib.h>
 #include <conio.h>
 void main(void)
 {
 char  buffer[100];
 int   N;
 int   i,tmp;
 
 i=0;
 clrscr();
 printf("Vvedute chuslo:\n\n");
 scanf("%d",&N);
 itoa(N,buffer,2);
 printf("Dvouchnoe predstavlenue chusla:%s\n\n",buffer);
 tmp=0;
 printf("v zerkalnom poriadke");
 while (buffer[i]!='\0')
 {
 tmp++;
 i++;
 }
 for (i=tmp;i>=0;i--)
 
 {
 
 printf("%c",buffer[i]);
 }
 
 printf("\n");
 
 }
 
 скажите то ли я сделала,или я че то не догнала=) если не так подскажите как Finch :flowers: |  
						| 
								|  |  
								| « Последнее редактирование: 18-12-2007 21:42 от Алексей1153++ » |  Записан | 
 |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #1 : 20-11-2005 13:32 »  |  | 
 
 Как сказать. Ты переворачиваешь число полностью, но тебе, судя по заданию, надо перевернуть каждый байт числа. Все хорошо, если будет введено число <=255, т.к. это 1 байт. Если же ввести 300, то это уже 2 байта.Для числа 300 рассмотрим пример:
 двоичное представление: 100101100 , т.е. 2 байта |00000001|00101100|
 зеркальное отражеие твоей проги: 001101001
 как должно быть, судя по заданию:  |10000000|00110100|
 Т.е. тебе надо брать на рассмотрение в отдельности каждый байт числа.
 Для этого, очень удобно использовать указатели. Возьми указатель типа char (он как раз в 1 байт), присвой ему адрес переменной в которой будет твое число. Таким образом можешь рассмотреть один байт. Потом смести указатель на единицу и рассмотришь следующий байт и т.д., пока не рассмотришь столько байт, скоько тебе необходимо.
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #2 : 20-11-2005 15:27 »  |  | 
 
 Мда не читаю я внимательно задание    Вот исправленное решение: #include <stdio.h>
 void PrintBit(unsigned int a)
 {
 
 int len = sizeof(int)*8;
 unsigned int fl=1 << (len-1);
 while (len>0)
 {
 if ((len % 4) == 0) printf(" ");
 if ((a & fl) != 0) printf("1");
 else printf("0");
 len--;
 fl >>=1;
 }
 printf("\n");
 }
 
 int main()
 {
 
 unsigned int a;
 printf("Vvedite chislo: ");
 scanf("%d",&a);
 unsigned int b=0;
 unsigned int temp=a;
 int len = sizeof(int);
 unsigned char *ta=(unsigned char *)&temp;
 unsigned char *tb=(unsigned char *)&b;
 int i;
 
 while (len>0)
 {
 i=8;
 while (i>0)
 {
 (*tb) <<=1;
 (*tb)+=((*ta) & 1);
 (*ta) >>=1;
 i--;
 }
 len--;
 ta++;
 tb++;
 }
 printf("Dvouchnoe predstavlenue chisla:\n");
 printf("Do:    ");
 PrintBit(a);
 printf("Posle: ");
 PrintBit(b);
 return 0;
 }
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| ФФФ 
								Гость
 | 
								|  | « Ответ #3 :  21-11-2005 06:04 »   |  | 
 
 Nickdeforest thnxX Finch спасиб но ну так же прога не будет работать? #include <stdio.h>
 void PrintBit(unsigned int a)
 {
 
 int len = sizeof(int)*8;
 unsigned int fl=1 << (len-1);
 while (len>0)
 {
 if ((len % 4) == 0) printf(" ");
 if ((a & fl) != 0) printf("1");
 else printf("0");
 len--;
 fl >>=1;
 }
 printf("\n");
 }
 
 int main()
 {
 
 unsigned int a;
 
 unsigned int b=0;
 unsigned int temp=a;
 int len = sizeof(int);
 unsigned char *ta=(unsigned char *)&temp;
 unsigned char *tb=(unsigned char *)&b;
 int i;
 printf("Vvedite chislo: ");
 scanf("%d",&a);
 while (len>0)
 {
 i=8;
 while (i>0)
 {
 (*tb) <<=1;
 (*tb)+=((*ta) & 1);
 (*ta) >>=1;
 i--;
 }
 len--;
 ta++;
 tb++;
 }
 printf("Dvouchnoe predstavlenue chisla:\n");
 printf("Do:    ");
 PrintBit(a);
 printf("Posle: ");
 PrintBit(b);
 return 0;
 }
двоичное представление то правильно, но вот зеркалка,ваще что то странное выводит? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #4 : 21-11-2005 16:34 »  |  | 
 
 в кадом байте длинного целого числа N поменять двоичные разряды в зеркальном порядке
 Тип int для 32 разрядных систем состоит из 4 байт. В твоем задании просят перевернуть именно каждый байт. Что программа и делает. В первоначальном варианте проги переворачивалось все число разом. Пример : Vvedute chuslo: 123654789Dvouchnoe predstavlenue chisla:
 Do:     0000 0111 0101 1110 1101 0010 1000 0101
 Posle:  1110 0000 0111 1010 0100 1011 1010 0001
 Press any key to continue
 
 Байт состояит из 8 битов. 1 байт 0000 0111 его зеркало 1110 0000 2 байт 0101 1110 его зеркало 0111 1010 3 байт 1101 0010 его зеркало 0100 1011 4 байт 1000 0101 его зеркало 1010 0001 |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| ФФФ 
								Гость
 | 
								|  | « Ответ #5 : 22-11-2005 05:48 »  |  | 
 
 Финч извини конечно что достаю но! Vvedute chuslo: 123654789 Dvouchnoe predstavlenue chisla: DO       1101 0010 1000 0101 POSLE  0100 0000 0001 1000 вот этот код #include <stdio.h>
 void PrintBit(unsigned int a)
 {
 
 int len = sizeof(int)*8;
 unsigned int fl=1 << (len-1);
 while (len>0)
 {
 if ((len % 4) == 0) printf(" ");
 if ((a & fl) != 0) printf("1");
 else printf("0");
 len--;
 fl >>=1;
 }
 printf("\n");
 }
 
 int main()
 {
 
 unsigned int a;
 
 unsigned int b=0;
 unsigned int temp=a;
 int len = sizeof(int);
 unsigned char *ta=(unsigned char *)&temp;
 unsigned char *tb=(unsigned char *)&b;
 int i;
 printf("Vvedite chislo: ");
 scanf("%d",&a);
 while (len>0)
 {
 i=8;
 while (i>0)
 {
 (*tb) <<=1;
 (*tb)+=((*ta) & 1);
 (*ta) >>=1;
 i--;
 }
 len--;
 ta++;
 tb++;
 }
 printf("Dvouchnoe predstavlenue chisla:\n");
 printf("Do:    ");
 PrintBit(a);
 printf("Posle: ");
 PrintBit(b);
 return 0;
 }
скажи ошибка может где? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Hooter | 
								|  | « Ответ #6 : 22-11-2005 07:47 »  |  | 
 
 Ошибка в том, что scan для переменной a вызывается после того, как значение переменной a копируется в переменную temp: 	unsigned int a;
 unsigned int b=0;
 unsigned int temp=a;
 ...
 printf("Vvedite chislo: ");
 scanf("%d",&a);                      // <== ошибка
 ...
 
скажи ошибка может где?А должно быть так: 	unsigned int a;
 printf("Vvedite chislo: ");
 scanf("%d",&a);                 // <== вот сюда
 
 unsigned int b=0;
 unsigned int temp=a;
 ...
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ФФФ 
								Гость
 | 
								|  | « Ответ #7 : 22-11-2005 09:20 »  |  | 
 
 так если так ошибка постоянно
 declaration si now allowed here=((((((((((((((((((((((((((((((((((((((((((((((((((((((((
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #8 : 22-11-2005 09:40 »  |  | 
 
 Альтернативный вариант. Вроде протестил, нормально работает. Предоставляется выбор   #include "stdio.h"#include "conio.h"
 int main()
 {
 clrscr();
 unsigned int x=0;
 unsigned int res_x=0;
 unsigned int temp=0;
 
 printf("Input unsigned digit ");
 scanf("%d",&x);
 res_x=x;
 //////////////////////////////////////////////////////////
 printf("binary :");
 for(int i=0;i<sizeof(res_x)*8;i++)
 {
 temp=res_x;
 res_x<<=1;
 res_x>>=1;
 if(res_x==temp)
 printf("0");
 else
 printf("1");
 
 if((i+1)%8==0)
 printf("|");
 
 res_x<<=1;
 }
 ///////////////////////////////////////////////////////
 res_x=x;
 printf("\nzerkalo:");
 for(int j=sizeof(res_x);j>0;j--)
 {
 res_x=x;
 res_x>>=8*(j-1);
 
 for(i=0;i<8;i++)
 {
 temp=res_x;
 res_x>>=1;
 res_x<<=1;
 if(res_x==temp)
 printf("0");
 else
 printf("1");
 
 if((i+1)%8==0)
 printf("|");
 
 res_x>>=1;
 }
 }
 
 return 1;
 }
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| Hooter | 
								|  | « Ответ #9 : 22-11-2005 10:02 »  |  | 
 
 так если так ошибка постоянно
 declaration si now allowed here=((((((((((((((((((((((((((((((((((((((((((((((((((((((((
 
 Это что, сообщение об ошибке?  Ты пробовала просто скопировать текст программы Finch'а из его первого поста и попытаться откомпилировать? |  
						| 
								|  |  
								| « Последнее редактирование: 18-12-2007 21:45 от Алексей1153++ » |  Записан | 
 |  |  | 
	| 
			| 
					
						| ФФФ 
								Гость
 | 
								|  | « Ответ #10 : 22-11-2005 10:23 »  |  | 
 
 hooterконечно
 да эту ошибку дает
 
 nikdeforest
 спасиб!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Hooter | 
								|  | « Ответ #11 : 22-11-2005 10:48 »  |  | 
 
 hooterконечно
 да эту ошибку дает
 
 А ты не могла бы полностью привести текст сообщения компилятора? И номер строки, где возникает ошибка? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #12 : 22-11-2005 10:56 »  |  | 
 
 Кстати, правильность ответа не проверял, а вот то, что код Finch'a компилится - это 100%.ФФФ, выделяй код программы, что Finch написал. Копируй (ctrl+insert), открывай текстовый файл (в блокноте)
 и вставляй в него код программы (shift+insert) и сохраняй. Все будет ОК.
 |  
						| 
								|  |  
								| « Последнее редактирование: 18-12-2007 21:47 от Алексей1153++ » |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| ФФФ 
								Гость
 | 
								|  | « Ответ #13 : 22-11-2005 11:03 »  |  | 
 
 Nike так и сделала вот код мой,копия ФИнча #include <stdio.h>void PrintBit(unsigned int a)
 {
 
 int len = sizeof(int)*8;
 unsigned int fl=1 << (len-1);
 while (len>0)
 {
 if ((len % 4) == 0) printf(" ");
 if ((a & fl) != 0) printf("1");
 else printf("0");
 len--;
 fl >>=1;
 }
 printf("\n");
 }
 
 int main()
 {
 
 unsigned int a;
 printf("Vvedite chislo: ");
 scanf("%d",&a);
 unsigned int b=0;
 unsigned int temp=a;
 int len = sizeof(int);
 unsigned char *ta=(unsigned char *)&temp;
 unsigned char *tb=(unsigned char *)&b;
 int i;
 
 while (len>0)
 {
 i=8;
 while (i>0)
 {
 (*tb) <<=1;
 (*tb)+=((*ta) & 1);
 (*ta) >>=1;
 i--;
 }
 len--;
 ta++;
 tb++;
 }
 printf("Dvouchnoe predstavlenue chisla:\n");
 printf("Do:    ");
 PrintBit(a);
 printf("Posle: ");
 PrintBit(b);
 return 0;
 }
 
ошибка в 24 строке Declaration is not allowed here |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Hooter | 
								|  | « Ответ #14 : 22-11-2005 11:20 »  |  | 
 
 Вот этот кусок  	unsigned int a;printf("Vvedite chislo: ");
 scanf("%d",&a);
 unsigned int b=0;
 unsigned int temp=a;
 int len = sizeof(int);
 unsigned char *ta=(unsigned char *)&temp;
 unsigned char *tb=(unsigned char *)&b;
 int i;
 
 while (len>0)
 {
 
 
попробуй заменить вот этим: 	unsigned int a;unsigned int b=0;
 unsigned int temp;
 int len = sizeof(int);
 unsigned char *ta=(unsigned char *)&temp;
 unsigned char *tb=(unsigned char *)&b;
 int i;
 
 printf("Vvedite chislo: ");
 scanf("%d",&a);
 temp=a;
 
 while (len>0)
 {
 
 
ЗЫ. Интересно, что код компилируется и под MSVC++ и под gcc. Что за компилятор ты используешь? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #15 : 22-11-2005 11:20 »  |  | 
 
 Ты не поверишь, но у меня скомпилился код (вставлял твой, котрый ты даешь в последнем посте).А мой скомпилился? Если нет, то наверное дело в компилятрое. Ты в чем работаешь?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| ФФФ 
								Гость
 | 
								|  | « Ответ #16 : 22-11-2005 11:23 »  |  | 
 
 у меня Borland C3.1
 
 твой компилится
 =))
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #17 : 22-11-2005 12:34 »  |  | 
 
 Я пробовал на Turbo C++ 3.0 все было ОК.  Насколько я знаю Turbo C++ и Borland C++ - это те же яйца только в профиль   . |  
						| 
								|  |  
								|  |  Записан | 
 
 ещё один вопрос ... |  |  | 
	|  |