Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Вложенная структура 
:(
    Опции темы
a1b2
Дата 18.4.2007, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.4.2007

Репутация: нет
Всего: нет



Здравствуйте.Мне очень-очень нужна ваша помощь.
Я задачу решила, но оказ-ся не совсем так, как надо, а исправить не могу.
В общем и целом, вся проблема в том, что надо описать стр-ру вида
Код

Struct NOTEBOOK{
   struct disp_res{       // разрешающая способность дисплея 
   int x;           // по горизонтали 
   int у;           // по вертикали
   };
int f;              // частота регенерации
float d;            // размер диагонали дисплея
int price;          // цена
char model[21];     // наименование 
}



а я описала вот как
Код

Struct NOTEBOOK{
int x;           // по горизонтали 
int у;           // по вертикали
int f;              // частота регенерации
float d;            // размер диагонали дисплея
int price;          // цена
char model[21];     // наименование 
}


то есть без вложенной стр-ры, что неверно.
Мне завтра сдавать, а я вот все никак не разберусь..
Вот отрезок кода(считывание из файла в структуру и вывод на экран), где как-раз нужно привутствие влож.стр-ры
Код

#include<iostream.h>
#include<fstream.h>
#include<conio.h>
#include<stdio.h>
const int n=9;

struct NOTEBOOK
{ char model [20];//модель
  int price;      //цена 
  float massa;    //масса
  int x;          //разрешение по горизонтали
  int y;          //разрешение по вертикали
  int f;          //частота регенрации
  int mg;         //тактовая частота процессора
  float d;        //диагональ
};
fstream cht,zap;


NOTEBOOK IsFaila(NOTEBOOK not[],int i) //функция считывает данные из файла в структуру
{
   char c;
   for (int j=0;j<20;j++)
   {cht.get(c);
   not[i].model[j]=c;
   };
   not[i].model[19]='\0';
   cht>>not[i].price;
   cht>>not[i].massa;
   cht>>not[i].x;
   cht>>not[i].y;
   cht>>not[i].f;
   cht>>not[i].mg;
   cht>>not[i].d;
   return not[i];
}

void Vivod(NOTEBOOK not[],int i) //вывод содержимого массива структур на экран
{
cout<<not[i].model<<"\t";
cout<<not[i].price<<"\t";
cout<<not[i].massa<<"\t";
cout<<not[i].x<<"\t";
cout<<not[i].y<<"\t";
cout<<not[i].f<<"\t";
cout<<not[i].mg<<"\t";
cout<<not[i].d<<"\t";
}


void main (void)
{  clrscr();

   cht.open("note.txt",ios::in);
   cht.seekg(0,ios::beg);

   NOTEBOOK not[n];
   for(int i=0;i<n && !cht.eof();i++)
     IsFaila(not,i);
   cht.close();

cout<<"   MODEL\t"<<"\t"<<"PRICE"<<"\t"<<"MASSA"<<"\t"<<"GOR."<<"\t"<<"VERT."<<"\t"<<"REG."<<"\t"<<"TAKT"<<"\t"<<"DIAG"<<"\n";
cout<<"\n";
  for (i=0;i<n;i++)
   Vivod(not,i);
 
getchar();
}



в файле note наход.инф о ноутбуках, с 1-20 позиции-наименование модели,дальше-все ост. данные через пробел.

ЗАРАНЕЕ БЛАГОДАРНАЯ!!!


П.С:если будет нужно-я вам оставлю полный код задачи, с примером файла note

Это сообщение отредактировал(а) a1b2 - 18.4.2007, 11:57
PM MAIL   Вверх
Sartorius
Дата 18.4.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



Цитата

В общем и целом, вся проблема в том, что надо описать стр-ру вида


 А что тебе конкретно не поянтно?  Просто для обращения к x и y добавь disp_resVar ...
стругтуру только надо так записать, а то ты вложенный объект не создаешь...
Код

struct NOTEBOOK{
   struct disp_res{       // разрешающая способность дисплея 
   int x;           // по горизонтали 
   int у;           // по вертикали
   } disp_resVar;
int f;              // частота регенерации
float d;            // размер диагонали дисплея
int price;          // цена
char model[21];     // наименование 
}


Это сообщение отредактировал(а) Sartorius - 18.4.2007, 12:28
PM MAIL ICQ   Вверх
a1b2
Дата 18.4.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.4.2007

Репутация: нет
Всего: нет



так там наверно надо массив стр-р disp_res добавлять...я пробовала, даж не компилируется

Добавлено через 11 минут и 24 секунды
Не получается.. smile 
PM MAIL   Вверх
Anikmar
Дата 18.4.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Я же недавно эту задачу делал. В центре помощи есть код.
Только исправить стркуткру и все.
PM MAIL ICQ   Вверх
dizzy1984
Дата 18.4.2007, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Цитата(a1b2 @  18.4.2007,  11:54 Найти цитируемый пост)
а я описала вот как

Опиши правильно.

Код

NOTEBOOK not[n];

после этой строки вставь строку
Код

NOTEBOOK::disp_res dr[n];

Измени сигнатуры процедур Vivod и IsFaila на 
Код

void Vivod(NOTEBOOK not[], NOTEBOOK::disp_res dr[], int i)
void IsFaila(NOTEBOOK not[], NOTEBOOK::disp_res dr[], int i)

Код

cht>>not[i].x;
cht>>not[i].y;

и
Код

cout<<not[i].x<<"\t";
cout<<not[i].y<<"\t";

измени на
Код

cht>>dr[i].x;
cht>>dr[i].y;

и
Код

cout<<dr[i].x<<"\t";
cout<<dr[i].y<<"\t";

Код

Struct NOTEBOOK{
struct disp_res{ // разрешающая способность дисплея 
int x; // по горизонтали 
int у; // по вертикали
};
int f; // частота регенерации
float d; // размер диагонали дисплея
int price; // цена
char model[21]; // наименование 
}

Объявляет 2 структуры.
Одна из них будет находиться в области видимости NOTEBOOK.
Если тебе нужно именно это, тебе придется завести отдельный массив под каждую структуру.


PM MAIL   Вверх
HappyLife
Дата 18.4.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: нет
Всего: 8



Цитата(a1b2 @ 18.4.2007,  11:54)

в файле note наход.инф о ноутбуках, с 1-20 позиции-наименование модели,дальше-все ост. данные через пробел.

ЗАРАНЕЕ БЛАГОДАРНАЯ!!!


П.С:если будет нужно-я вам оставлю полный код задачи, с примером файла note

Извините, но не мог сдержаться))) Звучит как

"Ребенок в кроватке, у меня не получается его разбудить. Если нужно будет, памперсы в шкафу. А Мне его сдавать в детский сад." а я убежала) smile 



Это сообщение отредактировал(а) HappyLife - 18.4.2007, 14:31
PM MAIL   Вверх
a1b2
Дата 18.4.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.4.2007

Репутация: нет
Всего: нет



dizzy1984, категорическое тебе СПАСИБО!!!Просто нереально помог!!!
только можно уточнить...
Код

NOTEBOOK::disp_res dr[n]; //что это значит???


а так все правильно работает...ЕЩЕ РАЗ СПАСИБОЩЕ ОГРОМНОЕ!!!!!!! smile 
PM MAIL   Вверх
betal
Дата 18.4.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 26.12.2006

Репутация: 1
Всего: 1



Цитата(HappyLife @  18.4.2007,  14:28 Найти цитируемый пост)
Извините, но не мог сдержаться))) Звучит как

"Ребенок в кроватке, у меня не получается его разбудить. Если нужно будет, памперсы в шкафу. А Мне его сдавать в детский сад." а я убежала) smile 
 smile 

--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
dizzy1984
Дата 18.4.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Очень положительно я отношусь к девушкам-программистам, ну очень.

Цитата(a1b2 @  18.4.2007,  15:49 Найти цитируемый пост)
что это значит???

Давай вернемся сюда

Код

struct NOTEBOOK{    
   struct disp_res{       // разрешающая способность дисплея    
   int x;           // по горизонтали    
   int у;           // по вертикали    
   };    
int f;              // частота регенерации    
float d;            // размер диагонали дисплея    
int price;          // цена    
char model[21];     // наименование    
};

NOTEBOOK not[n];
NOTEBOOK::disp_res dr[n];


Если я перепишу это в таком виде у тебя ведь не возникнет вопросов?
Код

struct NOTEBOOK{    
int f;              // частота регенерации    
float d;            // размер диагонали дисплея    
int price;          // цена    
char model[21];     // наименование    
}not[n];

struct disp_res{       // разрешающая способность дисплея    
   int x;           // по горизонтали    
   int у;           // по вертикали    
   }dr[n];    


Так вот вся разница между этими вариантами сводится к тому что если ты объявляешь
одну структуру внутри другой, то вторая служит как область видимости для первой (кажется это не случай namespace). Если тип объявлен в некоторой области видимости то для доступа к нему не из нее требуется указать ИМЯ_ОБЛАСТИ_ВИДИМОСТИ::
NOTEBOOK::disp_res dr[n] говорит об использовании структуры diso_res принадлежащей к области видимости NOTEBOOK. 

Да, вот еще что, спасибо в репутацию не положишь
PM MAIL   Вверх
a1b2
Дата 18.4.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.4.2007

Репутация: нет
Всего: нет



dizzy1984, спасибо тебе и за более чем подробное обьяснение, и за положительное отношения к девушкам-программистам!!!А насчет "спасибо в репутацию не положишь"-прости, я не могу тебе + поставить, такая жаль вообще!!
Могу только так +, хотя не думаю что тебе от этого легче станет)
PM MAIL   Вверх
JackYF
Дата 18.4.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



a1b2, за тебя + уже поставили smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Earnest
Дата 19.4.2007, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 2
Всего: 183



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1159 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.