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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2010, 10:31   #1
vistaman1
Новичок
Джуниор
 
Регистрация: 28.05.2010
Сообщений: 2
По умолчанию Двоичный поиск в массиве структур

Есть такая задача:
Дан список, содержащий 10 записей, каждая из которых имеет структуру:

Шифр товара: тип строка(5 символов)
Наименование товара: тип строка(20 символов)
Цена (грн.): вещественное
Признак наличия или отсутствия: логическое



Список упорядочен по убыванию цены товара.Разработать алгоритмы и программы линейного и двоичного поиска всех товаров, цена которых не превышает 1500 грн., с выводом найденных записей на экран.

В написаной программе не корректно работает двоичный поиск, линейный поиск и сортировка перед двоичным поиском работает, предположительно ошибка где-то в коде двоичного поиска.
Вот код программы:

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>

struct shop
{
char code[6];
char name[20];
float price;
bool is;
};


int _tmain(int argc, _TCHAR* argv[])
{
shop a[]={
{"12345","Printer",400,true},
{"54321","holodilnik",5000,true} ,
{"52316","noytbyk",7500,true},
{"15632","tv",8700,true},
{"86423","pilesos",450,true},
{"79563","MFY",1650,true},
{"33256","hlebopesh",1200,true},
{"99854","monitor",1400,true},
{"98648","telefon",500,true},
{"36978","radio",150,true}
};
for(int i=0; i<10; i++) printf("%s %s %f %i\n ", a[i].code, a[i].name, a[i].price, a[i].is);
printf("Seache method #1...\n");
for(int i=0; i<10;i++)
{
if(a[i].price<1500)
{
printf("%s %s %f %i\n ", a[i].code, a[i].name, a[i].price, a[i].is);
}
}
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 9-i; j++)
{
if(a[j].price>a[j+1].price)
{
float tmp = a[j].price;
a[j].price = a[j+1].price;
a[j+1].price = tmp;
}
}
}
printf("Sort...\n");
for(int i=0; i<10; i++) printf("%s %s %f %i\n ", a[i].code, a[i].name, a[i].price, a[i].is);
printf("Seache method #2...\n");
int k=0,max=0,min=10,b;
do
{
k=(max+min)/2;
if(a[k].price<1500)
min=k;
else
max=k;
} while(!(abs(max-min)<=1));
if(a[max].price<1500) b=max;
if(a[min].price<1500) b=min;
for(int i=b; i<10; i++) printf("%s %s %f %i\n ", a[i].code, a[i].name, a[i].price, a[i].is);
while(!_kbhit());
return 0;
}

Последний раз редактировалось vistaman1; 28.05.2010 в 10:38.
vistaman1 вне форума Ответить с цитированием
Старый 28.05.2010, 10:55   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Насколько я понимаю, тут сортировка идёт по возрастанию.
Тогда здесь надо
Код:
do
{
k=(max+min)/2;
if(a[k].price<=1500)
min=k;
else
max=k - 1;
} while(!(abs(max-min)<=1));
и здесь
Код:
for(int i=0; i<b; i++) printf("%s %s %f %i\n ", a[i].code, a[i].name, a[i].price, a[i].is);
И тегом [CODE] не забывай выделять код
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer

Последний раз редактировалось Ozerich; 28.05.2010 в 10:57.
Ozerich вне форума Ответить с цитированием
Старый 28.05.2010, 17:30   #3
vistaman1
Новичок
Джуниор
 
Регистрация: 28.05.2010
Сообщений: 2
По умолчанию

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

Последний раз редактировалось vistaman1; 28.05.2010 в 17:36.
vistaman1 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в массиве maksim_serg Microsoft Office Excel 13 13.05.2010 17:36
Поиск в массиве Aleksandr Помощь студентам 3 30.01.2010 19:51
Поиск в массиве ADSoft PHP 1 07.08.2009 11:17
Двоичный поиск в Turbo C++ 3.0 Xeon332 Помощь студентам 3 29.01.2009 04:19
Двоичный поиск элемента в массиве (Си под DOS) Zid@ne Общие вопросы C/C++ 7 24.12.2008 18:07