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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2008, 20:07   #1
Алексей Д.
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию Программа с записями

Имеется такая задачка:
База данных больных содержит номер пациента и диагноз. Написать прогу, распечатывающую все диагнозы с указанием частоты заболеваний. Диагнозы распечатывать по уменьшению частоты заболеваний. Базу данных задать самостоятельно (30 записей).

Я вот ее начал, но тут явно что то недоделано..помогите плиз!

Код:
	
uses crt;
type Trec= record
number: integer;
diag: string[15]
end;
var
rec: array[1..30] of Trec;
k: integer;
begin
clrscr;
k:=0;
for k:=1 to 30 do
begin
rec[k].number:=k;
rec[1].diag:='grip';
rec[2].diag:='orz';
rec[3].diag:='vetryanka';
rec[4].diag:='krasnuha';
rec[5].diag:='jeltuha';
end;
for k:=1 to 30 do
begin
writeln(rec[k].diag);
end;
readln;
end
Алексей Д. вне форума Ответить с цитированием
Старый 27.04.2008, 07:34   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Посмотрел я твой код, и вот так переделал.
1. Для определения частоты диагнозов и последующей их сортировки и вывода на экран, надо как-то их собрать в массив. Лучше всего в массив записей с полями название болезни и количество случаев.
2. Название диагнозов и их количество должны быть известны, иначе ничего не выйдет, да по жизни так оно и есть. Статистика ведется по заданному количеству заболеваний.
3.Еще я поменял счетчики в программе, привык к i и j, и постоянно сбиваюсь. Если ты привык к другим, поменяй.
4. Названия болезней я укоротил, для скорости тестирования, тоже исправь.
Код:
uses crt;
type Tpac= record   
           number: integer;
           diag: string[15]
           end;
type Tdiag=record
           name:string[15];
           kol:integer;
    	     end;
var
sp_pac: array[1..30] of Tpac;  //список пациентов
sp_dg:array[1..5]of Tdiag;     //список диагнозов
i,j: integer;          //счетчики    
bf:Tdiag;        //буфер при сортировке обменом
begin
clrscr;
for i:=1 to 30 do
     begin
        sp_pac[i].number:=i;  //вводим диагнозы 30 пациентов из нашего списка
        write('diagnoz pacienta ',i,':');readln(sp_pac[i].diag);
     end;
sp_dg[1].name:='grip';  //список наших(в смысле не наших)диагнозов
sp_dg[2].name:='orz';
sp_dg[3].name:='vetr';
sp_dg[4].name:='kras';
sp_dg[5].name:='jelt';
for i:=1 to 5 do       //в двойном цикле считаем какой диагноз сколько раз
for j:=1 to 30 do       //встречается и присваиваем полю количество
if sp_dg[i].name=sp_pac[j].diag then
	     begin
		    sp_dg[i].kol:=sp_dg[i].kol+1;;
  		 end;
for i:=1 to 4 do    //сортируем список диагнозов по полю количество
for j:=1 to 4 do
if sp_dg[j].kol<sp_dg[j+1].kol then
    begin
      bf:=sp_dg[j];
      sp_dg[j]:=sp_dg[j+1];
      sp_dg[j+1]:=bf;
    end;
writeln('Chastota zabolevanij:');
for i:=1 to 5 do
begin
writeln(sp_dg[i].name,'  ',sp_dg[i].kol,' raz(a)');
end;
readln;
end.
puporev вне форума Ответить с цитированием
Старый 27.04.2008, 10:57   #3
Алексей Д.
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию

Код:
# for i:=1 to 4 do    //сортируем список диагнозов по полю количество  
# for j:=1 to 4 do
А почему у нас тут до 4 вдруг стало?

Код:
# writeln(sp_dg[i].name,'  ',sp_dg[i].kol,' raz(a)');
А что за raz(a)?? Откуда он взялся?
Алексей Д. вне форума Ответить с цитированием
Старый 27.04.2008, 17:04   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Ну ты даешь. Я думал ты хоть сортировку знаешь, да читать умеешь.
При сортировке обменом методом "пузырька" обмен элементов идет в двойном цикле от 1 до n-1. У нас n=5, я так принял. Если возьмешь 10 болезней, тогда сортируешь от 1 до 9. Ну а raz(a)?? это просто слово такое раз(а), оно же во вводимом тексте, а не в программе.
Ты вообще-то прогонял программу, или только теоретически изучаешь?
puporev вне форума Ответить с цитированием
Старый 27.04.2008, 18:58   #5
Алексей Д.
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию

Да, я проверил и выдает только орз и желтуху... остальные почему ты не считает...

И потом все же надо не вводит диагнозы, а выводить..с указанием частоты..или мы сначала эту базу данных задаем(вводим)?


Добавлено: а нее все нормально со счетом, но мой вопрос остается в силе =)

Последний раз редактировалось Алексей Д.; 27.04.2008 в 19:02.
Алексей Д. вне форума Ответить с цитированием
Старый 27.04.2008, 20:25   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Как говорил кот Матроскин, что-бы продать что-нибудь ненужное, надо сначала купить что-нибудь не нужное. Чтобы выводить данные из базы, их надо сначала туда ввести. Поэтому мы 30 раз вводим в базу разные болячки из нашего списка. Потом мы сравниваем все болячки из базы с болячками из списка, и считаем сколько каких болячек. Когда все сосчитаем, отсортируем по количеству и, уже в отсортированном виде, выведем на экран. Сколько каких болезней введешь в базу, столько тебе программа и выдаст. Все очень просто и если ты код переписал без ошибок и все правильно вводишь, должно все нормально работать. Я ведь проверил перед тем как выложить на всеобщее обозрение. И если плохо соображаешь, не надо других подставлять. Чао!
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Help! Проблема с записями... Sлавян Паскаль, Turbo Pascal, PascalABC.NET 2 27.04.2008 16:40
решить задачу с записями в паскале Нана Паскаль, Turbo Pascal, PascalABC.NET 4 18.04.2008 15:14
сравнение и пометка строки с записями kayman БД в Delphi 2 24.10.2007 00:06
Как работатать с записями в Delphi (копирование)? BJF.41 БД в Delphi 0 20.04.2007 21:55