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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2009, 23:41   #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 вывести на экран в виде таблицы. Для структур вывести адреса и значения каждого поля. Для указателей выводить адрес и значение указателя, а также содержимое области памяти, на которую указывает указатель.

переменные и начальные значения:
u-видеоплата
v-звуковая плата
w-сетевая плата

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

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

указатели на указатели: e, f
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 14.11.2009, 23:43   #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();
}
но я не пойму куда лепить столько переменных, указателей и указателей на указатели !!

Добавлено через 1 минуту
только что там можно хранить в двоично-десятичном формате?? тем более перемножать?? хм..
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 15.11.2009, 00:02   #3
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;
    char vid[80];
    char data[80];
    union {
	struct video u;
	struct audio v;
	struct net w;
    };
  };

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

  void main() {

    eguipment a, *b, *c, **e;

  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;

  cout<<endl<<endl;

  scanf ("%d", &a.ek);

  if (a.ek==video) {
  cout<<endl<<endl<<"DANNIE VIDEOCARTI"<<endl<<endl;
  a.cena=86;
 // a.vid="ASUS Radeon HD 4670";
 // a.data="12.11.2009";
  a.u.allowing_ability=1600;
  a.u.frequency=750;
  a.u.volume=1024;
  print_ob (a.cena,a. vid,a. data);
  printf("|allowing_ability|       %d        |     %x      |      %d         |\n",sizeof(a.u.allowing_ability),&a.u.allowing_ability,a.u.allowing_ability);
  printf("|   frequency    |       %d        |     %x      |      %d         |\n",sizeof(a.u.frequency),&a.u.frequency,a.u.frequency);
  printf("|    volume      |       %d        |     %x      |      %d         |\n",sizeof(a.u.volume),&a.u.volume,a.u.volume);
  printf("+----------------+----------------+---------------+----------------+\n");
  }

  if(a.ek==audio) {
  b=&a;
  cout<<endl<<endl<<"DANNIE AUDIO CARTI"<<endl<<endl;
 // b->vid=9;
  b->cena=9;
 // b->data=9;
  b->v.bits=9;
  b->v.frequency_range=9;
  b->v.amplitude=9;
  print_ob (a.cena,a.vid, a.data);
  printf("|     bits       |       %d        |     %x      |      %d         |\n",sizeof(b->v.bits),&b->v.bits,b->v.bits);
  printf("|frequency_range |       %d        |     %x      |      %d         |\n",sizeof(b->v.frequency_range),&b->v.frequency_range,b->v.frequency_range);
  printf("|   amplitude    |       %d        |     %x      |      %d         |\n",sizeof(b->v.amplitude),&b->v.amplitude,b->v.amplitude);
  printf("+----------------+----------------+---------------+----------------+\n");
  }

  if(a.ek==net) {
  c=&b;
  b=&c;
  cout<<endl<<endl<<"DANNIE NETWORK CARTI"<<endl<<endl;
  a.cena=9;
 // a.data=9;
 // a.vid=9;
  e->c->w.speed_of_exchange=9;
  e->c->w.interface;
  print_ob (e->c->cena,e->c->vid, e->c->data);
  printf("|speed of exchange|      %d        |     %x      |      %d         |\n",sizeof(e->c->w.speed_of_exchange),&e->c->w.speed_of_exchange,e->c->w.speed_of_exchange);
  printf("|   interface    |       %d      |     %x      |      %s         |\n",sizeof(e->c->w.interface),&e->c->w.interface,e->c->w.interface);
  printf("+----------------+----------------+---------------+----------------+\n");
  }
  
  getch();
}
и переменных использовала меньше
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 15.11.2009, 02:58   #4
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

жду помощи - а ее нет !!
помогают только однотипным неинтересным задачам,
где справедливость и креативность??
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 15.11.2009, 09:30   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от aka_Kiss Посмотреть сообщение
жду помощи - а ее нет !!
Я так и не понял в чём загвоздка и что не так
Цитата:
Сообщение от aka_Kiss Посмотреть сообщение
помогают только однотипным неинтересным задачам,
где справедливость и креативность??
Однотипную и неинтересную задачу лично я могу проверить и исправить прямо здесь за пару минут. В вашей задаче без поллитры не разберешься, её надо компилировать, смотреть, разбираться,.... Для меня опять же какого-либо интереса она не представляет. А креативность моя вся на создание аватарки ушла.
По пунктам распишите, что вот здесь у меня компилятор ругается на это, там на то,... что именно не получается, почему не получается,... Ну не всем охота по полчаса разбираться в чужой задаче. Это всё же в первую очередь Вам надо, а не нам.
pu4koff вне форума Ответить с цитированием
Старый 15.11.2009, 15:45   #6
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

Цитата:
1. объявить тип данных для хранения информации о...
а точно надо использовать именно структуры? по описанию задачи она прямо таки создана для классов с наследованием
m0nax вне форума Ответить с цитированием
Старый 15.11.2009, 20:34   #7
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

как пользоваться указателями на указатель??

если описать в главной программе
Код:
 void main() {

 //  eguipment a;
   BCD x, y, z,
      *b, *c, *d,
      **e, **f;
и позже на часть
Код:
 b=&x;
 e=&b;
 e->b->low=0;
 e->hi=0;
 c=&y;
 f=&c;
 f->low=1;
 f->hi=1;
ругается вот так
Цитата:
Pointer to structure required on left side of -> or ->*
как правильно??
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 15.11.2009, 21:24   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Как-то так, если я ничего не напутал:
Код:
 b=&x;
 e=&b;
 (*e)->low=0;
 (*e)->hi=0;
 c=&y;
 f=&c;
 (*f)->low=1;
 (*f)->hi=1;
pu4koff вне форума Ответить с цитированием
Старый 16.11.2009, 01:42   #9
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

спасибо огромное !!
часть программы с указателями заработала !!

ВОТ ЕЩЕ ВОПРОСИК
я описала структуры и ф-цию печати:
Код:
struct video {
    int allowing_ability;
    int frequency;
    int volume;
  };

  struct audio {
    int bits;
    int max_frequency;
  };

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

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

  struct eguipment {
    kind ek;
    float cena;
    char vid[80];
    char data[80];
    union {
	struct video u;
	struct audio v;
	struct net w;
    };
  };

void print_ob (char vid[], char data[], float cena) {
  printf("+----------------+----------------+---------------+----------------+\n");
  printf("|   peremenaya   |     razmer     |     adres     |    znachenie   |\n");
  printf("|----------------|----------------|---------------|----------------|\n");
  printf("|       vid      |       %d        |     %x      |      %s         |\n",sizeof(vid),&vid,vid);
  printf("|      data      |       %d        |     %x      |      %s         |\n",sizeof(data),&data,data);
  printf("|      cena      |       %d        |     %x      |      %.2f      |\n",sizeof(cena),&cena,cena);
}
в главной программе объявила:
Код:
eguipment a;
начала работать:
Код:
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;

  cout<<endl<<endl;

  scanf ("%d", &a.ek);

  if (a.ek==video) {
  cout<<endl<<endl<<"DANNIE VIDEOCARTI"<<endl<<endl;
 // a.vid="ASUS Radeon HD 4670";
 // a.data="12.11.2009";
  a.cena=86;
  a.u.allowing_ability=1600;
  a.u.frequency=750;
  a.u.volume=1024;
  print_ob (a.vid, a.data, a.cena);
  printf("|allowing_ability|       %d        |     %x      |      %d         |\n",sizeof(a.u.allowing_ability),&a.u.allowing_ability,a.u.allowing_ability);
  printf("|   frequency    |       %d        |     %x      |      %d         |\n",sizeof(a.u.frequency),&a.u.frequency,a.u.frequency);
  printf("|    volume      |       %d        |     %x      |      %d         |\n",sizeof(a.u.volume),&a.u.volume,a.u.volume);
  printf("+----------------+----------------+---------------+----------------+\n");
  }

  if(a.ek==audio) {
  cout<<endl<<endl<<"DANNIE AUDIO CARTI"<<endl<<endl;
 // a.vid="ASUS Xonar D2/PM";
 // a.data="15.06.2009";
  a.cena=176;
  a.v.bits=24;
  a.v.max_frequency=192;
  print_ob (a.vid,a.data, a.cena);
  printf("|     bits       |       %d        |     %x      |      %d         |\n",sizeof(a.v.bits),&a.v.bits,a.v.bits);
  printf("|  max_frequency |       %d        |     %x      |      %d         |\n",sizeof(a.v.max_frequency),&a.v.max_frequency,a.v.max_frequency);
  printf("+----------------+----------------+---------------+----------------+\n");
  }

  if(a.ek==net) {
  cout<<endl<<endl<<"DANNIE NETWORK CARTI"<<endl<<endl;
 // a.vid="3Com Secure NIC";
 // a.data=05.08.2009;
  a.cena=109;
  a.w.speed_of_exchange=100;
 //a.w.interface="PCI";
  print_ob (a.vid,a.data, a.cena);
  printf("|speed of exchange|      %d        |     %x      |      %d         |\n",sizeof(a.w.speed_of_exchange),&a.w.speed_of_exchange,a.w.speed_of_exchange);
  printf("|   interface    |       %d      |     %x      |      %s         |\n",sizeof(a.w.interface),&a.w.interface,a.w.interface);
  printf("+----------------+----------------+---------------+----------------+\n");
  }
но там где инициализирую строку компилятор жутко кричит и я уже не знаю, что делать !! как в этом случае влипить текстовое значение??
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 16.11.2009, 03:12   #10
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

хоть что-то напишите, умоляю
keep it simple
aka_Kiss вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структуры Wertex Помощь студентам 3 30.10.2009 13:52
Структуры Shadovv13 Общие вопросы C/C++ 18 15.10.2009 23:03
Структуры в Си osichev Помощь студентам 2 12.09.2009 15:51
С++ структуры KOLYTFR Помощь студентам 2 24.05.2009 19:02
Структуры BaSk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 16.05.2009 15:33