![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 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. |
![]() |
![]() |
![]() |
#2 |
Студент 1 курса
Форумчанин Подтвердите свой е-майл
Регистрация: 27.06.2008
Сообщений: 959
|
![]()
Насколько я понимаю, тут сортировка идёт по возрастанию.
Тогда здесь надо Код:
Код:
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Последний раз редактировалось Ozerich; 28.05.2010 в 10:57. |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 28.05.2010
Сообщений: 2
|
![]()
Спасибо, но оказывается сортировка по возростанию проходит не правильно : выводиться не правильное соответствие товара и цены, когда подправил по совету Ozerich двоичный поиск, то его результатом есть вывод лишь одной единица товара, и той тоже не соответствует правильная цена .
Последний раз редактировалось vistaman1; 28.05.2010 в 17:36. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск в массиве | 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 |