Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2009, 00:50   #1
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
Восклицание си, структуры, объединения, но трабл в двоично-десятичном хранении чисел

Задачка, очень запутанная, но тем она становится более интересной.
Но у меня трабл в решении. Прошу помощи))

Вот задание:
1. объявить тип данных для хранения информации о компьютерных комплектующих с параметрами: дата изготовления, цена, вид (видеоплата (макс. разрешающая способность, макс. частота, объем видеопамяти), звуковая плата (разрядность, частотный диапазон, амплитуда входного сигнала), сетевая плата (скорость обмена, вид интерфейса));
2. описать, с помощью объявленного типа, заданные переменные и присвоить им заданные значения;
3. объявить тип данных для хранения целых чисел в двоично-десятичном формате (BCD);
4. описать, с помощью объявленного типа, переменные с заданными именами и указатели на них;
5. описать указатель на заданный указатель;
6. написать функцию, выполняющую произведение над двоично-десятичными числами;
7. объявить указатель на функцию;
8. задать начальные значения переменных с использованием:
1) имени переменной,
2) указателя на нее,
3) указателя на указатель;
9. выполнить заданные действия:
1) с использованием вызова функций,
2) с использованием указателя на функцию.

Результаты выполнение п.п.1-2 и 8-9 вывести на экран в виде таблицы. Для структур вывести адреса и значения каждого поля. Для указателей выводить адрес и значение указателя, а также содержимое области памяти, на которую указывает указатель.
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 09.11.2009, 00:51   #2
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

Вот, то, на что хватило моего ума:
Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream.h>

  struct video {
    int allowing_ability;
    int frequency;
    int volume;
  };

  struct audio {
    int bits;
    int frequency_range;
    int amplitude;
  };

  struct net {
    int speed_of_exchange;
    char interface[100];
  };

  enum kind {
    video=0,
    audio=1,
    net=2
  };

  struct eguipment {
    kind ek;
    float cena;
    int vid;
    char data[10];
    union {
	struct video x;
	struct audio z;
	struct net y;
    };
  };

void print_ob (float cena, int vid, char data[]) {
  printf("+----------------+----------------+---------------+----------------+\n");
  printf("|   peremenaya   |     razmer     |     adres     |    znachenie   |\n");
  printf("|----------------|----------------|---------------|----------------|\n");
  printf("|      cena      |       %d        |     %x      |      %.2f      |\n",sizeof(cena),&cena,cena);
  printf("|       vid      |       %d        |     %x      |      %d         |\n",sizeof(vid),&vid,vid);
  printf("|      data      |       %d        |     %x      |      %s         |\n",sizeof(data),&data,data);
  printf("+----------------+----------------+---------------+----------------+\n");
}

  void main() {

    eguipment u, v, w;

  clrscr();

  cout<<endl<<"VVIDITE VID COMPLEKTUUSCHEGO KOMP'UTERA"<<endl<<endl;
  cout<<"0 - video card" <<endl<<endl<<
	"1 - sound card" <<endl<<endl<<
	"2 - network card" <<endl<<endl;
  scanf ("%d", &u.ek);

  if (u.ek==video) {
  cout<<endl<<endl<<"DANNIE VIDEOCARTI"<<endl<<endl;
  cout<<"vvedite cenu tovara\n";
  cin>>u.cena;
  cout<<"\nvvedite datu izgotovleniya\n";
  cin>>u.data;
  cout<<"\nvvedite vid tovara\n";
  cin>>u.vid;
  cout<<"\nvvedite maximalnoe razreahenie videokarti\n";
  cin>>u.x.allowing_ability;
  cout<<"\nvvedite maximalnuy 4astotu videokarti\n";
  cin>>u.x.frequency;
  cout<<"\nvvedite objem videokarti\n";
  cin>>u.x.volume;
  print_ob (u.cena,u. vid,u. data);
  printf("|allowing_ability|       %d        |     %x      |      %d         |\n",sizeof(u.x.allowing_ability),&u.x.allowing_ability,u.x.allowing_ability);
  printf("|   frequency    |       %d        |     %x      |      %d         |\n",sizeof(u.x.frequency),&u.x.frequency,u.x.frequency);
  printf("|    volume      |       %d        |     %x      |      %d         |\n",sizeof(u.x.volume),&u.x.volume,u.x.volume);
  printf("+----------------+----------------+---------------+----------------+\n");
  }

  if(u.ek==audio) {
  cout<<endl<<endl<<"DANNIE AUDIO CARTI"<<endl<<endl;
  cout<<"vvedite cenu tovara\n";
  cin>>u.cena;
  cout<<"\nvvedite datu izgotovleniya\n";
  cin>>u.data;
  cout<<"\nvvedite vid tovara\n";
  cin>>u.vid;
  cout<<"\nvvedite razryadnost\n";
  cin>>u.z.bits;
  cout<<"\nvvedite 4astotniy diapazon\n";
  cin>>u.z.frequency_range;
  cout<<"\nvvedite amplitudu\n";
  cin>>u.z.amplitude;
  print_ob (u.cena,u.vid, u.data);
  printf("|     bits       |       %d        |     %x      |      %d         |\n",sizeof(u.z.bits),&u.z.bits,u.z.bits);
  printf("|frequency_range |       %d        |     %x      |      %d         |\n",sizeof(u.z.frequency_range),&u.z.frequency_range,u.z.frequency_range);
  printf("|   amplitude    |       %d        |     %x      |      %d         |\n",sizeof(u.z.amplitude),&u.z.amplitude,u.z.amplitude);
  printf("+----------------+----------------+---------------+----------------+\n");
  }

  if(u.ek==net) {
  cout<<endl<<endl<<"DANNIE NETWORK CARTI"<<endl<<endl;
  cout<<"vvedite cenu tovara\n";
  cin>>u.cena;
  cout<<"\nvvedite datu izgotovleniya\n";
  cin>>u.data;
  cout<<"\nvvedite vid tovara\n";
  cin>>u.vid;
  cout<<"\nvvedite skorost' obmena\n";
  cin>>u.y.speed_of_exchange;
  cout<<"\nvvedite vid interfeisa\n";
  cin>>u.y.interface;
  print_ob (u.cena,u.vid, u.data);
  printf("|speed of exchange|      %d        |     %x      |      %d         |\n",sizeof(u.y.speed_of_exchange),&u.y.speed_of_exchange,u.y.speed_of_exchange);
  printf("|   interface    |       %d      |     %x      |      %s         |\n",sizeof(u.y.interface),&u.y.interface,u.y.interface);
  printf("+----------------+----------------+---------------+----------------+\n");
  }
   getch();
}
код рабочий, но я не пойму куда лепить столько переменных, указателей и указателей на указатели !!

Подскажите, если у Вас появилась хоть какая-то идея !!
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 09.11.2009, 17:21   #3
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

хоть что-то подскажите
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 09.11.2009, 18:54   #4
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

и зачем нужен сайт, если помощи нет??
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 09.11.2009, 19:00   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Можно сделать массив указателей на структуру "комплектующие", или изменить ее немного, добавив туда указатель на такую же структуру, и сделать стек/очередь (в данном случае нет разницы что именно из этих двух).

Тогда вам понадобится только один указатель - на вершину очереди/списка.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 09.11.2009, 23:54   #6
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

нельзя списки использовать и стеки тоже, цель работы в другом...
и там переменные и начальные значения:

u-видеоплата
v-звуковая плата
w-сетевая плата

переменные: x, y, z, a

указатели: b, c, d

указатели на указатели: e, f

куда их впихнуть??
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 10.11.2009, 13:20   #7
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Понял, что там хотят.

Цитата:
8. задать начальные значения переменных с использованием:
1) имени переменной,
2) указателя на нее,
3) указателя на указатель;
1 вы просто делаете переменную такого типа, ну например
Код:
eguipment a;
Часть 1
Вам ее надо заполнить напрямую:
Код:
a.y.speed_of_exchange= 1024;// и так со всеми другими данными.
Часть 2

Код:
eguipment *b;
b=&a;
b->y.speed_of_exchange= 1024;//делаем тоже самое, что и  в предыдущем примере.
Часть 3
Код:
eguipment *c;
eguipment **e;
c=%b;
e=&c;
e->c->y.speed_of_exchange= 1024;//Я никогда не работал с указателем на указатель, тут может затаиться ошибка.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 14.11.2009, 21:45   #8
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

спасибо, ROD,

но я не могу понять зачем столько много переменных необходимо,
зачем нужно 4 переменных, 3 указателя и 2 указателя на указатель??
пугающе страшно то, что кол-во указателей уменьшается !! почему и как?? кто-то может понять?? может для комплектующих и не надо использовать указатели, а нужно их использовать для чисел, которых в двоично-десятичной структуре??

помогите разобраться !! я окончательно запуталась !!
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 14.11.2009, 22:24   #9
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

подскажите
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 14.11.2009, 23:31   #10
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

есть хоть какая-то идея ??
keep it simple
aka_Kiss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структуры и объединения megavolt91 Помощь студентам 3 25.05.2009 22:23
Умножение двоично-десятичных чисел с фикс точкой. anGeee Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 24.05.2009 19:47
насчет объединения таблиц student90 БД в Delphi 2 06.10.2008 17:40
Алгоритм объединения Flangini Microsoft Office Excel 2 12.03.2008 08:14
Объединения двух сетей BAHUXA Свободное общение 2 26.11.2007 00:09