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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Егор Ярыславски
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
#1

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

23.09.2012, 18:02. Просмотров 505. Ответов 4
Метки нет (Все метки)

Подскажите,пожалуйста, в чем ошибка?
Вот условие задачи: Составить две программы, первая из которых вводит составные части структуры данных, приведенной в Вашем варианте индивидуального задания, и формирует из них заданную упакованную структуру. Вторая программа вводит упакованную структуру как 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++
C++ в чем ошибка?
C++ в чем ошибка?
C++ В чем ошибка?
В чем ошибка? C++
В чем ошибка? C++
C++ В чем ошибка?
С++ в чем ошибка? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1479 / 1055 / 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
1479 / 1055 / 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     В чем ошибка
Ответ Создать тему
Опции темы

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