PDA

View Full Version : Моля помогнете



milena1992
05-25-2011, 09:27
Здравейте на всички,
в момента уча стуктури по информатика за c++.
За домашно имам следната задача, ще приложа и решението ми, което мисля че има няколко съшествени грешки. А пък който може да помага.

Условие:
Да се напише програма, която създава структура Hospital с полета name, diagnose и days, указващи името на пациент в болница, диагнозата му и брой дни, прекарани там. Да се въведе число n и след него n на брой данни от тип Hospital. Да се изведат имената на тези пациенти, чиято диагноза е предварително зададена от клавиатурата. Да се изведат данните на пациента с най-дълъг престой в болницата.

Примерен вход:
3
Georgi Petrov hepatit 8
Ivailo Liliev morbili 15
Martin Atanasov morbili 13
morbili

Примерен изход:
Ivailo Liliev
Martin Atanasov
Ivailo Liliev morbili 15



Ето и моят опит:

#include<iostream.h>
struct Hospital
{ char name[20];
char s_name[20];
char diagnose[20];
double days; };
int main()
{
int n,k=0;
cin>>n;
char your_diagnose[20];
cin>>your_diagnose;
Hospital a[35];
for(int i=0;i<n;i++)
{
cin>>a[i].name;
cin>>a[i].s_name;
cin>>a[i].diagnose;
cin>>a[i].days;
}

for(i=0;i<n;i++)
{
if(your_diagnose==a[i].diagnose) k=1;
else k=0;
}
if(k==1) cout<<a[i].name;
return 0;
}


Благодаря!

Foreverbg
05-25-2011, 11:06
#include<iostream>

using namespace std;

struct Hospital {

char name[64];
char s_name[64];
char diagnose[64];
int days;

};

int n;
char your_diagnose[64];
Hospital a[128];

bool cmp(char c1[],char c2[]) { //не можем да сравняваме 2 масива, затова трябва да си напишем функция, която прави това

int n1=strlen(c1),n2=strlen(c2); //намираме дължината на 2те думи

if(n1!=n2) return 0; //ако са с различна дължина значи нe еднакви

for(int i=0;i<n1;i++) { //ако са с еднаква дължина обхождаме и двете думи и ако срещнем различна буква значи не са еднакви
if(c1[i]!=c2[i]) return 0;
}

return 1; //ако дължините са равни и всички букви са еднакви значи 2те думи са еднакви

}

int main() {

Hospital ans;
int i,maxd=-1;

cin>>n;

for(int i=0;i<n;i++) {
cin>>a[i].name>>a[i].s_name>>a[i].diagnose>>a[i].days;
}

cin>>your_diagnose;

for(int i=0;i<n;i++) {
if(cmp(your_diagnose,a[i].diagnose)) cout<<a[i].name<<" "<<a[i].s_name<<endl; //подаваме на горната функция 2те думи и ако върне 1 значи са еднакви
if(a[i].days>maxd) { //проверяваме дали текущите максимални дни прекарани в болницата не са по-малки от дните прекарани от i-тия човек
maxd=a[i].days; //ако е така на максималните дни присвояваме дните прекарани от i-тия човек
ans=a[i]; //за да можем да изкараме накрая човека с максимални дни в болницата ни трябва ans, където ще запишем неговите данни
}
}

cout<<ans.name<<" "<<ans.s_name<<" "<<ans.diagnose<<" "<<ans.days<<endl;

return 0;

}


Ако не разбираш нещо кажи.