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

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

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

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

23.09.2012, 18:02. Просмотров 529. Ответов 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++
//--------------------------------------------------------------------------- #include &lt;stdio.h&gt; #include &lt;conio.h&gt; ...

В чем ошибка? - C++
Здравствуйте, не пойму почему не работает exit? stdlib.h подключил, вот код: private: System::Void...

в чем ошибка? - C++
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main() { cout &lt;&lt;&quot;20 &amp; 50 = &quot;&lt;&lt;(20&amp;50)&lt;&lt;endl; cout...

в чем ошибка? - C++
только начинаю на c++, хочу простой калькулятор для общего развития сделать, с возведением в степень ошибка. что не так? заранее...

В чем ошибка? - C++
#include &lt;stdafx.h&gt; #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;conio.h&gt; using namespace std; int main() ...

В чем ошибка? - C++
Никак не найду ошибку error C2061: syntax error : identifier 'cout' #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include&quot;conio.h&quot; ...

В чем ошибка? - C++
Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…). Определить другие методы. Написать...

В чем ошибка? - C++
Программа компиллируется, но после ввода данных возникает непонятная ошибка. Задание: Определить банки, где выгоднее всего покупать и...

в чем ошибка? - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { float x,y; cout&lt;&lt;&quot;vvedite x:&quot;; ...

В чем ошибка ?! - C++
задача такая: написать программу что бы символ двигался в консоле при помощи стрелок. и почему оно не работает? уже все перепробывал...


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

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

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