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

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

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

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

23.09.2012, 18:02. Просмотров 538. Ответов 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++
С++ в таблице из 5 строк хранятся данные о товарах: наименование, цена, количество. Определить и вывести наименование товара, цена которого...

Ошибка 2 error LNK2019, не пойму в чем ошибка - C++
Выдает такую ошибку: Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ &quot;int __cdecl game(void)&quot; (?game@@YAHXZ) в функции....

В чем ошибка? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;clocale&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;rus&quot;); ...

В чем ошибка? - C++
#include&lt;stdio.h&gt; #include&lt;conio.h&gt; int main() {int N, i; float p=1, n=2; scanf(&quot;%d&quot;, &amp;N); for (i=1; i&lt;=N; i++) ...

В чем ошибка? - C++
Подчеркивает строку cin.get(c); &quot;Отсутствуют экземпляры, перегруженная функция&quot; и &quot;слишком мало аргументов в вызове функции&quot;.. ...

В чем ошибка? - C++
#include &lt;iostream&gt; using namespace std; void funñ_1(); void func_2(); int count; // Ýòî ãëîáàëüíàÿ ïåðåìåííàÿ. int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DU
1483 / 1059 / 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
1483 / 1059 / 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
Да, программа заработала нормально. Благодарю Вас!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2012, 20:01
Привет! Вот еще темы с ответами:

в чем ошибка - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { setlocale(0, &quot;&quot;); double...

В чем ошибка? - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; struct Time { int h; int m; };

В чем ошибка ? - C++
Задача такова Составить программу для вычисления высоты треугольника по сторонам a,b.c Мой текст таков #include &lt;stdio.h&gt; ...

ошибка в чем то - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { int a,b,c; print(&quot;b? &quot;); scanf(&quot;%d&quot;,&amp;b); print(&quot;c? &quot;);...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.09.2012, 20:01
Ответ Создать тему
Опции темы

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