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

В чем ошибка - C++

Восстановить пароль Регистрация
 
Егор Ярыславски
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
23.09.2012, 18:02     В чем ошибка #1
Подскажите,пожалуйста, в чем ошибка?
Вот условие задачи: Составить две программы, первая из которых вводит составные части структуры данных, приведенной в Вашем варианте индивидуального задания, и формирует из них заданную упакованную структуру. Вторая программа вводит упакованную структуру как 16-ричное число и выводит значения отдельных ее составных частей.
Вариант 1.Физический адрес на диске представляется в виде:
Nразряда 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Значение H H T T T T T T T T T S S S S S
где: HH - номер головки
T..T - номер дорожки
S..S - номер сектора


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<conio.h>
#include<stdio.h>
int main()
 {
  char H;
  unsigned int N;
  unsigned char S;
  unsigned int UnitStateWord;
  clrscr();
  printf("Input head number (0-3) -->");
  scanf("%d",&H);
  printf("Input track number (0-511) -->");
  scanf("%u",&N);
  printf("input sector number (0-31) -->");
  scanf("%d",&S);
  UnitStateWord=((H&11)<<14)|[COLOR="Red"]((N&0x1FF)<<5)[/COLOR]|(S&0x1F);    
  printf("Phisyc adress is %04X\n",UnitStateWord);
  getch();
  return 1;
 }
выводит код физический, но почему-то не корректно отображается часть, выделенная красным цветом, т.е. номер дорожки
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2012, 18:02     В чем ошибка
Посмотрите здесь:

в чем ошибка ?(( C++
В чем ошибка C++
в чем ошибка? C++
в чем ошибка? C++
C++ В чем ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.09.2012, 19:10     В чем ошибка #2
в чем неправильность? что вводите, что хотите получить?
единственную возможноую проблему пока что вижу в том, что
идет получение не тех бит из-за того, что спутано бинарное число в десятичным:
(H&11)
вот это скорее всего и есть причина бага. нужно (H&0x3).
Егор Ярыславски
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
23.09.2012, 19:29  [ТС]     В чем ошибка #3
Исправить программу я попробовал,как вы сказали,но не исправился тот баг. Ошибка заключается в следующем:
Я ввожу элементы:для номера головки 2
для номера трека 56
и для номера сектора 16

Физический адрес должен быть 8710, а он выдаёт 8010
Следующую закономерность я проследил: программа либо обнуляет номер трека(как в этом случае),либо делает его равным 256,при числах больших примерно 300.
Миниатюры
В чем ошибка   В чем ошибка  
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.09.2012, 19:42     В чем ошибка #4
странно, потому что вот такой код работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<conio.h>
#include<stdio.h>
int main()
 {
  char H;
  unsigned int N;
  unsigned char S;
  unsigned int UnitStateWord;
  H = 2;
  N = 56;
  S = 16;
  //scanf("%d",&H);
  //scanf("%u",&N);
  //scanf("%d",&S);
  UnitStateWord=((H&0x3)<<14)|((N&0x1FF)<<5)|(S&0x1F);    
  printf("Phisyc adress is %04X\n",UnitStateWord);
  getch();
  return 1;
 }
http://liveworkspace.org/code/b8a7a6...02aa8a3858ace6

но вот если раскомментарить и вводить числа именно из клавы, то в студии все считается, однако при выходе программа крашится. это потому, что неправильно заданы флаги ввода для scan, что приводит к повреждению. из-за этого может и считаться неверно. сделайте у себя все переменные типа unsigned int и во всех scanf поставте "%u".
Егор Ярыславски
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
23.09.2012, 20:01  [ТС]     В чем ошибка #5
Да, программа заработала нормально. Благодарю Вас!
Yandex
Объявления
23.09.2012, 20:01     В чем ошибка
Ответ Создать тему
Опции темы

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