![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| None |
|
||||
|
Unregistered |
люди !!Помогите добить задачу!
#include<iostream.h> #include<string.h> #include<conio.h> #include<fstream.h> clrckr(); const int len_File=15; // максимальная длина имени файла const int lenString=70; // объявляю структуру, содержащую информацию о студенте struct student { char * familiya; //фамилия }; void printstudent (student&my)// объявляю функцию печати в последующем по алфавиту // базы данных { static int nomer=0; cout<<++nomer<<my.familiya<<endl; } struct record { student sourse ; record *before;// завожу указатель на предыдущий элемент record *next;// указатель на следующий элемент }; void main() { char nam[len_File]; cout<<" vvedite name file: "<<endl; cin>>nam; ifstream inFile;// входной файловый поток inFile.open(nam);// функция по открытию файла "sourse" и связать его с потоком "InFile" if (!inFile) // проверка правильности введённого файла {cerr<< "Error open File"<<nam; exit(1); // выход } char string[lenString]; char next; cout<<"\n text _File:\n\n"; cin.get(); while(1) { inFile>>string;// ввод слова из файла до пробела next=inFile.peek();// проверка следующего слова if (next==EOF) break; } student sourse[]={string}; // ВОТ ТУТ И ПРИКОЛ не могу поместить это в цикл //разрыв char str[20]; record *begin=NULL, *last=NULL, *list; int n=sizeof(sourse)/sizeof(sourse[0]); for (int i=0;i<n;i++) { last=new(record);// создать новую запись last->sourse.familiya=sourse[i].familiya; if (begin==NULL)//списка ещё нет { last->before=NULL; begin=last; last->next=NULL; } else { // список уже существует list=begin; while(list) { if (strcmp(last->sourse.familiya,list->sourse.familiya)< 0 ) { // вставить новую запись пред list if (begin==list) { last->before=NULL; begin=last; } else { // вставка между записями list->before->next=last; last->next=list->before; } list->before=last; last->next=list; break; } if (list->next==NULL) { // включить запись в конец списка last->next=NULL; last->before=list; list->next=last; break; // выйти из цикла } list=list->next; } } } cout<<"vvedite poisk studenta"<<endl; gets(str); list=begin; while(list)// цикл поиска заданного элемента списка { if (strcmp(list->sourse.familiya,str)==0) { cout<<"naiden"<<endl; printstudent (list->sourse); } list=list->next; } list=begin; cout<<endl; cout<<"baza po alfavit"<<endl; while(list) // цикл печати по алфавиту { printstudent (list->sourse); list= list->next; } getch(); }
|
||||
|
|||||
| comcon1 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Во первых, нужно указать void:
Во-вторых: сначала создай массив:
а потом уже в цикле пиши внутри цикла.. (и проверь, что у тебя не больше 400 записей в файле)
И вообще организуй список отдельно и сделай функции добавления в конец. И сразу читай из файла, и пристыковывай к списку. А еще в iostream-е файлы надо открывать с указанием "на чтение" или "на запись"...
А еще хорошо бы приучиться new-отведенную память освобождать. Добавлено @ 15:41 А во вторых - мы за тебя все не подрядились делать. Выясни, что КОНКРЕТНО не работает. И спрашивай КОНКРЕТНО. Глюков у тебя там навалом еще. Так что "добить" это не называется. Выкидывай куски и смотри, какие не работают, какие работают. Те, которые не работают, если совсем не понимаешь почему - отправляй сюда. Поможем. Но сначала - сам думай. А еще отредактируй сообщение и оформи код по человечески, а то я в Vi копировал, чтоб прочитать Это сообщение отредактировал(а) comcon1 - 30.6.2005, 16:01 |
||||||||
|
|||||||||
| Earnest |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Ну, в общем, не обязательно - поток объявлен как ifstream - это и так поток ввода.
Это, конечно, не в какие ворота не лезет, хоть внутрь цикла, хоть снаружи пиши. Сначала нужно выделить память под массив, как сказал common1. Кроме того, student - это структура, а ты пытаешься приравнять ей строку. Не бывает. И еще один прикол:
Ну, допустим, напишешь ты
Угадай, что будет при чтении следующей строки? Короче, нужно сначала привести эту помойку в порядок, а потом уж ошибки вылавливать. -------------------- ... |
||||||||
|
|||||||||
| Guest |
|
|||
|
Unregistered |
А.....Нда... Я когда из файла считываю информацию, там должен ведь быть какой-нибудь буфер обмена данными? Вот. А потом, наверное, с этим буфером работаь-сортировать в нём инфо. Предположем всё снесу и останется
и как мне все слова в массив загнать??? |
|||
|
||||
| Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Ну, например, для начала объявим структуру student немного по-другому:
Для чтения из файла достаточно одного элемента student:
И не нужно данные предварительно закачивать в массив. Хотя, лучше данные не в список помещать, а в массив (выделить побольше или динамический массив использовать) - там хоть бинарный поиск использовать можно. Или закачать все не глядя, а потом отсортировать. Кроме того, нельзя забывать про проверку длины строк, а также про освобождение выделенной памяти. Это сообщение отредактировал(а) Earnest - 30.6.2005, 19:29 -------------------- ... |
||||
|
|||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Люди, оформляйте код, как code=cpp, а не просто code. Так он еще и расскрасится...
|
|||
|
||||
| None |
|
|||
|
Unregistered |
Люди, я дурак, согласен, но мне позарез нужна прога,мне некогда с ней сеёчас возиться,
Всё-таки. наверное, через массив будет лучше, а что если использовать ASCI коды, поместить их в массив, а потом сортировать, я просто не очень понимаю, как мне с этими буквами вмассиве возиться . |
|||
|
||||
| comcon1 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Конкретно!
Пишешь в массив. (коряво, конечно, но сойдет)
Теперь массив перехреначиваешь в список. Тебе нужно по алфавиту?? Тогда будем сразу по алфавиту...
Теперь напишем две функции: insert и insert_alph вот таким образом. Если твой элемент списка:
Фух. Ну осталось только перегрузить оператор ...
..., который будет на вопрос s1 > s2 выдавать true, если они в алфавитном порядке и false в обратном случае. Но это ты уж сделай сам. |
||||||||
|
|||||||||
| Step |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
вот работает
файл данных
может слегка не под твою задачу но работает и не только сортирует а еще и фильтрует по среднему балу -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |