Премини към съдържанието
22MANELA

програма, която трябва да сортира

Препоръчан отговор


Здравейте всички, става въпрос за програма, която трябва да сортира "n" на брой ученици от един клас и да показва имената им , както и успехът им в графи: ученици със слаб успех;със среден успех и тн. да бъдат подредени по големината на оценката а накрая да покаже общия успех на класа.Сам успях да направя програмата до там, че да ги сортира според оценката (средна, добра...) но сега не мога да направя сортирането на самите стойности на оценките , както и надписът например "Uchenici sas slab uspeh" да се показва само веднъж а не след всеки ученик със слаб успех.

#include<iostream>
using namespace std;
struct School
{
char name[30];
char surname [66];
double marks;
};
int main ()
{
School uchenik[100];
int n,i;
cout<<"Broi uchenici v klasa:",cin>>n;
for(i=0;i<n;i++)
{
cout<<"Ime:";cin>>uchenik[i].name;
cout<<"Prezime:";cin>>uchenik[i].surname;
cout<<"Ocenka:";cin>>uchenik[i].marks;
}
for(i=0;i<n;i++)
if(uchenik[i].marks<2.50)
{
cout<<"Uchenici sas slab uspeh:"<<endl;
cout<<"._._._._._._._._._._._._._."<<endl;
{
cout<<uchenik[i].name<<endl;
cout<<uchenik[i].surname<<endl;
}

}
for(i=0;i<n;i++)
if(uchenik[i].marks>=2.50)
if(uchenik[i].marks<3.50)
{
cout<<"Uchenici sas sreden uspeh:"<<endl;
cout<<"._._._._._._._._._._._._._."<<endl;
{
cout<<uchenik[i].name<<endl;
cout<<uchenik[i].surname<<endl;
}
for(i=0;i<n;i++)
if(uchenik[i].marks>=3.50)
if(uchenik[i].marks<4.50)
{
cout<<"Uchenici s dobyr uspeh:"<<endl;
cout<<"._._._._._._._._._._._._._."<<endl;
{
cout<<uchenik[i].name<<endl;
cout<<uchenik[i].surname<<endl;
}

}
}
for(i=0;i<n;i++)
if(uchenik[i].marks>=4.50)
if(uchenik[i].marks<5.50)
{
cout<<"Uchenici s mnogo dobyr uspeh:"<<endl;
cout<<"._._._._._._._._._._._._._."<<endl;
{
cout<<uchenik[i].name<<endl;
cout<<uchenik[i].surname<<endl;
}

}
for(i=0;i<n;i++)
if(uchenik[i].marks>5.50)
{
cout<<"Uchenici s otlichen uspeh:"<<endl;
cout<<"._._._._._._._._._._._._._."<<endl;
{
cout<<uchenik[i].name<<endl;
cout<<uchenik[i].surname<<endl;
}

}
system("pause");
return 0;
}

Ще съм много благодарен, ако някой ми помогне. icon_smile.gif

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ако имаш нещо, което се печата на конзолата, и то е във for цикъл, то много ясно, че ще се напечата няколко пъти при повече от едно завъртане на цикъла... If-овете можеш да ги обединиш с логическо "и". Структурата не знам защо се казва "Училище" (това не пречи на работата на кода, но е важно нещата да са със смислени имена). Форматирай кода, че така се чете ужасно...

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
публикувано (редактирано)

#include<iostream>
using namespace std;
struct School
{
char name[30];
char surname [66];
double marks;
};

const string uspeh[] = {"as slab", "as sreden", " dobar", " mnogo dobar", " otlichen"};

void sortirane(School arr[], int n)
{
     int    mx;
     School u;
     for (int i=0; i<n-1; i++)
     {
         mx=i;
         for (int j=i+1; j<n; j++)
             if (arr[mx].marks<arr[j].marks) mx=j;
         if (i!=mx)
         {
             memcpy(&u,&arr[i],sizeof(School));
             memcpy(&arr[i],&arr[mx],sizeof(School));
             memcpy(&arr[mx],&u,sizeof(School));
         }
     }
}
           
int main ()
{
School uchenik[100];
int n,i,u=5;
cout<<"Broi uchenici v klasa:";cin>>n;
for(i=0;i<n;i++)
{
    cout<<"\nIme:     ";cin>>uchenik[i].name;
    cout<<"Prezime: ";cin>>uchenik[i].surname;
    cout<<"Ocenka:  ";cin>>uchenik[i].marks;
}

sortirane(uchenik, n);
for(i=0;i<n;i++) 
{
    while (uchenik[i].marks<((double)u+1.50))
    {
         cout<<"\nUchenici s"<<uspeh[--u]<<" uspeh:\n";
         cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
    }
    cout<<uchenik[i].name<<" ";
    cout<<uchenik[i].surname<<" ";
    cout<<uchenik[i].marks<<endl;
}

system("pause");
return 0;
}
Няма да е зле да добавиш и проверка дали броя ученици е >0 и <=100,

както и дали въвежданите оценки са в интервала 2.0..6.0

Редактирано от ined (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
публикувано (редактирано)
#include<iostream>
using namespace std;
struct School
{
char name[30];
char surname [66];
double marks;
};

const string uspeh[] = {"as slab", "as sreden", " dobar", " mnogo dobar", " otlichen"};

void sortirane(School arr[], int n)
{
     int    mx;
     School u;
     for (int i=0; i<n-1; i++)
     {
         mx=i;
         for (int j=i+1; j<n; j++)
             if (arr[mx].marks<arr[j].marks) mx=j;
         if (i!=mx)
         {
             memcpy(&u,&arr[i],sizeof(School));
             memcpy(&arr[i],&arr[mx],sizeof(School));
             memcpy(&arr[mx],&u,sizeof(School));
         }
     }
}
           
int main ()
{
School uchenik[100];
int n,i,u=5;
cout<<"Broi uchenici v klasa:";cin>>n;
for(i=0;i<n;i++)
{
    cout<<"\nIme:     ";cin>>uchenik[i].name;
    cout<<"Prezime: ";cin>>uchenik[i].surname;
    cout<<"Ocenka:  ";cin>>uchenik[i].marks;
}

sortirane(uchenik, n);
for(i=0;i<n;i++) 
{
    while (uchenik[i].marks<((double)u+1.50))
    {
         cout<<"\nUchenici s"<<uspeh[--u]<<" uspeh:\n";
         cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
    }
    cout<<uchenik[i].name<<" ";
    cout<<uchenik[i].surname<<" ";
    cout<<uchenik[i].marks<<endl;
}

system("pause");
return 0;
}
Няма да е зле да добавиш и проверка дали броя ученици е >0 и <=100,

както и дали въвежданите оценки са в интервала 2.0..6.0

 

Благодаря за отговора а също така може ли малко по-подробно описание на самата работа на програмата в смисъл "тук става така, защото... "   :)

Редактирано от 22MANELA (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.