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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2015, 14:57   #1
makar3000
Пользователь
 
Регистрация: 26.09.2010
Сообщений: 96
По умолчанию СИ, выборка из структуры по переменной

Добрый день, имеется структура:

Код:
int count = 3; //значение меняется в зависимости сколько данных в структуре

struct database {
	int id; // идентификатор
	int count; // кол-во товаров в партии
	int flaw; // кол-во брака в партии
	char name[20];
} db[] = {
	{0, 1000, 50, "Телевизоры"},
	{1, 2000, 750, "Телефоны"},
	{2, 5000, 24, "Утюги"}
};
Собственно проблема: вывод информации на экран произвожу при помощи цикла и статичной информации о кол-ве элементов в массиве, для этого есть отдельная глобальная переменная "count". Получается вывести по идентификатору информацию мне не составляет сложности. А вот как вывести по переменной flaw (от большего к меньшему) ?

Слышал об указателях, но увы я не смог разобраться. Скачал в топике "ДЛЯ СТУДЕНТОВ", архив с массивами. Но необходимой выборки не нашел...
makar3000 вне форума Ответить с цитированием
Старый 13.11.2015, 15:26   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Например, если исходный массив менять не хочется, то создайте массив индексов и переставляйте индексы вместо элементов. Потом просто выведите то, что нужно, основываясь на полученных индексах.
p51x вне форума Ответить с цитированием
Старый 13.11.2015, 15:31   #3
makar3000
Пользователь
 
Регистрация: 26.09.2010
Сообщений: 96
По умолчанию

Могу я понаглеть и попросить вас показать пример? Дело в том что я больше по веб-программированию, а там простая база например MySQL...

Получается я создаю массив с ключами, заполняю его в том порядке как мне необходимо при помощи цикла соответственно, а вот как записывать по убыванию, какую сверку необходимо делать условными операторами?

Последний раз редактировалось makar3000; 13.11.2015 в 15:42.
makar3000 вне форума Ответить с цитированием
Старый 13.11.2015, 16:25   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2makar3000
Код:
#include <stdio.h>
#include <stdlib.h>

#define SIZE 3

struct database {
    int id; // идентификатор
    int count; // кол-во товаров в партии
    int flaw; // кол-во брака в партии
    char name[30];
};

static int
cmp_by_flaw(const void *p1, const void *p2)
{
    return ((*(const struct database **) p1))->flaw - ((*(const struct database **) p2))->flaw;
}

static int
cmp_by_count(const void *p1, const void *p2)
{
    return ((*(const struct database **) p1))->count - ((*(const struct database **) p2))->count;
}

int main (void)
{
    int i;
    struct database db[SIZE] = {
        {0, 1000, 50, "Телевизоры"},
        {1, 2000, 750, "Телефоны"},
        {2, 5000, 24, "Утюги"}
    };

    struct database *arr[SIZE] = {
        &db[0],
        &db[1],
        &db[2],
    };

    qsort(&arr[0], SIZE, sizeof(struct database *), cmp_by_flaw);

    puts("sort by flaw");
    for (i = 0; i < SIZE; i++) {
        printf("%s: count = %d, flaw = %d\n",
                arr[i]->name, arr[i]->count, arr[i]->flaw);
    }

    qsort(&arr[0], SIZE, sizeof(struct database *), cmp_by_count);

    puts("sort by count");
    for (i = 0; i < SIZE; i++) {
        printf("%s: count = %d, flaw = %d\n",
                arr[i]->name, arr[i]->count, arr[i]->flaw);
    }
    return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.11.2015, 17:34   #5
makar3000
Пользователь
 
Регистрация: 26.09.2010
Сообщений: 96
По умолчанию

Код:
int descIDsort(int* arr, int size)
{
	int i = 0, min, u = 0, backup, t;
	for( i = 0; i < size; i++ )
	{
		min = i; // присвоим номер ячейки
		for(u = i + 1; u < size; u++) // прибавляем единицу, что бы исчисление начиналось не с нуля => 1
			if( arr[u] < arr[min] ) // сравниваем: если ячейка которая выше по структуре,  меньше чем проверяемая ячейка
			{
				min = u; // указываем новый идентификатор, так как значение под ним меньше прошлого
				// потом заново проверяем по той же схеме, пока не вычислим минимальное значение
			}	
		
		backup = arr[i]; // сохраним данные ячейки
		arr[i] = arr[min]; // запишем в ячейку минимальное значение
		arr[min] = backup; // сделаем замену в ячейке где было минимальное значение, на данные текущей ячейки
		// тем самым мы перезаписываем ячейки по порядку до тех пор, пока данные не будут выведены по возрастающей
		//break;
	}

	for( t=0;t<size;t++ )
	{
		printf("%d\n", arr[t]);
	}
}
А как насчет такого варианта? Какие будут замечания?

Код:

int countDB = 0; //отдельная функция при заполнении укажет нужное кол-во

struct database {
	int id; // идентификатор
	int count; // кол-во товаров в партии
	int flaw; // кол-во брака в партии
	char name[20];
} db[100];

int test(char* order[], char* data[], count) 
{ 
	int* _index = malloc(count*sizeof(*_index)); // Альтернатива new int(count) 
	int i; 
	for( i = 0; i < count; i++ ) 
	{ 
		//_index[i] = data[i]->order; как передать структуру через функцию и указать ей переменную ? 
	} 
}
Код:
test("flaw", db, countDB)
Конечно же это все дело не работает, просто для примера подставил, как нужно что бы работало ...

Последний раз редактировалось Stilet; 13.11.2015 в 20:46.
makar3000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка с использованием переменной viks1 БД в Delphi 3 13.05.2013 09:15
Для public переменной класса присвоить адрес ячеек из внешней переменной _KUL Qt и кроссплатформенное программирование С/С++ 2 28.05.2012 12:04
Проблема с созданием переменной типа описанной структуры NYWalker Помощь студентам 3 09.12.2011 21:08
Выборка выборка с таблицы с отношением многие-ко-многим 8alig8 БД в Delphi 2 24.06.2010 12:21
Программирование алгоритмов циклической структуры для задач табулирования функций одной переменной с пост bbk_serg Помощь студентам 1 10.01.2009 18:16