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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа со структурами, Как можно оперировать с указателями? 
V
    Опции темы
Deliverance
Дата 9.10.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Собствено,вопрос вот в чём.

Имеется структура
Код

struct Storage{char titl[30];char autor[30];};


Нужно осуществить поиск и сортировку,но...

Так же имеется Список указателей и n-е кол-во этих структур

Код

void main()
{
    char in;
    SetConsoleOutputCP(1251);
    int n=0,v=0,x=0,&N=n, &index=x;
    
    cout<<"\n Введите n= ";
    cin >> n;

    Storage **S=new Storage*[n];

    for(int i=0;i<n;i++)
    {
        S[i]=new Storage;
    }
    for(int i=0;i<n;i++)
    {
            *S[i]=Put();
    }


Каким образом осуществляется доступ к самим структурам и как менять указатели при сортировке ?
PM MAIL WWW ICQ Skype   Вверх
zim22
Дата 9.10.2009, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(Deliverance @  9.10.2009,  17:34 Найти цитируемый пост)
и как менять указатели при сортировке ?

swap?
Цитата(Deliverance @  9.10.2009,  17:34 Найти цитируемый пост)
Каким образом осуществляется доступ к самим структурам

по указателю



--------------------
PM MAIL   Вверх
Deliverance
Дата 9.10.2009, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Цитата(zim22 @ 9.10.2009,  17:36)
Цитата(Deliverance @  9.10.2009,  17:34 Найти цитируемый пост)
и как менять указатели при сортировке ?

swap?
Цитата(Deliverance @  9.10.2009,  17:34 Найти цитируемый пост)
Каким образом осуществляется доступ к самим структурам

по указателю

А конкретнее можно? Я ж не волшебник,я только учусь))

Swap? Это ,что? И как получить доступ,например к titl 5-ой структурной записи?

Это сообщение отредактировал(а) Deliverance - 9.10.2009, 17:41
PM MAIL WWW ICQ Skype   Вверх
bsa
Дата 9.10.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Доступ через разыменование. Если нужно получить доступ к полям структуры, то используй -> вместо точки.
Указатели менять с помощью присваивания.
Рекомендуется к прочтению: Часто задаваемые вопросы

Добавлено через 4 минуты и 15 секунд
Цитата(Deliverance @ 9.10.2009,  17:40)
Swap? Это ,что?

swap - обмен:
Код
void swap(Type &x, Type &y)
{
   Type t = x;
   x = y;
   y = t;
}
Цитата(Deliverance @ 9.10.2009,  17:40)
И как получить доступ,например к titl 5-ой структурной записи?
Код
S[5]->titl

PM   Вверх
Deliverance
Дата 9.10.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Вот! Это уже кое-что! Спасибо,будем думать.
Я всё понимаю,когда много лет пишешь программы,то такие вопросы вызывают скуку и негодование,но если на это взглянуть со стороны того,кто только учится,то не такие они уж "скучные". smile 
PM MAIL WWW ICQ Skype   Вверх
bsa
Дата 9.10.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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




M
bsa
Deliverance, для таких есть "Часто задаваемые вопросы", с которых и надо начинать. Затем нужно поискать в поиске... И только если там ответа нет, обращаться к форумчанам.


Это сообщение отредактировал(а) bsa - 9.10.2009, 17:56
PM   Вверх
Deliverance
Дата 9.10.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Искал,смотрел,но не нашёл,поэтому и спросил.Ну не понятно мне как с этими указателями в динамических массивах многомерных работать и объяснить не кому((( smile 
PM MAIL WWW ICQ Skype   Вверх
mes
Дата 9.10.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Deliverance @  9.10.2009,  17:05 Найти цитируемый пост)
Искал,смотрел,но не нашёл,поэтому и спросил.Ну не понятно мне как с этими указателями в динамических массивах многомерных работать и объяснить не кому((( smile  

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


--------------------
PM MAIL WWW   Вверх
Deliverance
Дата 9.10.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Вот я и подошёл к этому(
Код

Storage **SortBook(Storage**S,int &N)
{
    Storage temp;
    Storage tmp,tmp1;
    for(int i=0;i<=N-1;i++)
    {
      for(int j=N-1;j>i;j--)
        {
         tmp=S[i][j];
         tmp1=S[i][j-1];
         int r= strcmp(tmp.titl,tmp1.titl);
         if(r>0)                      //  Изменил ,не туда посмотрел в описании strcmp
           {
            temp=S[i][j];
             S[i][j]=S[i][j-1];
             S[i][j-1]=temp;
           }
        }
     } 

    
    return S;
}


Вот Так работает,но не корректно,подскажите ,что не так написал?

Ввыводит мусор после перестановки ,не понятно почему?

Это сообщение отредактировал(а) Deliverance - 9.10.2009, 20:23
PM MAIL WWW ICQ Skype   Вверх
Anikmar
Дата 9.10.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Deliverance @  9.10.2009,  19:43 Найти цитируемый пост)
        int r= strcmp(tmp.titl,tmp1.titl);
         if(r==0)
           {
            temp=*S[j];
             S[j]=S[j-1];
             *S[j-1]=temp;
           }

На сколько я помню, strcmp вернет 0, если строки равны. Если они равны, зачем вы пытаетесь менять их местами?
PM MAIL ICQ   Вверх
Deliverance
Дата 9.10.2009, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Цитата(Anikmar @  9.10.2009,  20:06 Найти цитируемый пост)
На сколько я помню, strcmp вернет 0, если строки равны. Если они равны, зачем вы пытаетесь менять их местами? 



Изменил ,не туда посмотрел в описании strcmp
PM MAIL WWW ICQ Skype   Вверх
bsa
Дата 9.10.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Deliverance, ты пишешь на С++, зачем пользуешься Сишными средствами? Чем тебя std::string не устроил?
PM   Вверх
Deliverance
Дата 9.10.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Цитата(bsa @  9.10.2009,  21:08 Найти цитируемый пост)
Deliverance, ты пишешь на С++, зачем пользуешься Сишными средствами? Чем тебя std::string не устроил? 


Да не умею я ими пользоваться,вот для меня проблема в этой программе ,поменять местами указатели,ну не понимаю.как это сделать,а так же не понимаю.как сравнить элементы структуры,точнее.как получить эти элементы и сравнить,потом переставить если нужно,у меня просто записывает меньший в предыдущий и получается две одинаковые строки(
PM MAIL WWW ICQ Skype   Вверх
Deliverance
Дата 9.10.2009, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Уря !!! smile  Заработало!!!

Код

Storage **SortBook(Storage**S,int &N)
{
    
    Storage tmp,tmp1;
    for(int i=0;i<=N-1;i++)
    {
      for(int j=N-1;j>i;j--)
        {
         tmp=*S[j];
         tmp1=*S[j-1];
         int r= strncmp(tmp.titl,tmp1.titl,1); 
        if(r<0)
          {
             Storage *p=S[j];
             S[j]=S[j-1];
             S[j-1]=p;
             r=0;
          }
        }
     } 

    
    return S;
}


Спасибо всем!  smile 
PM MAIL WWW ICQ Skype   Вверх
bsa
Дата 9.10.2009, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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




M
bsa
Deliverance, если ответ на вопрос получен, то пометь тему решенной

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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