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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2009, 20:35   #1
Lainus
Пользователь
 
Аватар для Lainus
 
Регистрация: 24.03.2009
Сообщений: 10
По умолчанию Задача на построение/обьединение списков. (С++)

Задачка звучит так:
Цитата:
Ввести списки 2х студентских групп, упорядоченных по убыванию среднего бала. Выполнить слияние списков в один список, упорядоченный по томуже ключу.
Ввод списков сделал, теперь нужно написать ф-цию обьединения списков, и в outandsort(...) добавить сортировку.
Только как... незнаю
Необходимо решить задачку до завтра.

Вот то, что я насоображал:
main.cpp
PHP код:
#include <student.h>
using namespace grup;
void main()
{
int n;
cout<<"Vvedite kolichestvo studentov v 1i gryppe=";
char kolTMP[10];   
cin.getline(kolTMP,10); 
n=atoi(kolTMP);         //защита от ошибочного ввода
if(!n) return;
stud *IB=new stud[n];
input(IB,n);
outandsort(IB,n);
cout<<"Vvedite kolichestvo studentov vo 2i gryppe=";
cin.getline(kolTMP,10); 
n=atoi(kolTMP);         //защита от ошибочного ввода
if(!n) return;
input(IB,n);
outandsort(IB,n);

student.h
PHP код:
#include <iostream>
using namespace std;
namespace 
grup
    
{
        
struct stud
        
{
                
char FIO[80];
                
float bal;
        };
         
void input(stud *IB,int n);
        
//Функция для ввода с клавиатуры
         
void outandsort(stud *IB,int n);
        
//Функция для вывода на экран
    
}  
         
void grup::input(stud *IB,int n)
        
//Функция для ввода с клавиатуры
        
{
                for(
int i=0;i<n;i++)
                {
                       
cout<<"Vvedite imja studenta "<<endl;
                       
cin.getline(IB[i].FIO,80);
                       
char strTMP[10];
                       
cout<<"Vvedite bal studenta "<<endl;
                       
cin.getline(strTMP,80);
                       
IB[i].bal=atoi(strTMP);
                }
        };
        
void grup::outandsort(stud *IB,int n)
        
//Функция для сортировки и вывода на экран
        
{
                for(
int i=0;i<n;i++)
                {
                       
cout<<IB[i].FIO<<'\t'<<IB[i].bal<<endl// <-- Нужна сортировка по убыванию среднего бала
                
}
        }; 

Последний раз редактировалось Lainus; 24.03.2009 в 21:10.
Lainus вне форума Ответить с цитированием
Старый 24.03.2009, 21:43   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

напишите функцию сортировки.
отсортируйте, а потом просто выведите массив структур

Код:
void sort(stud *IB,int n)
{
 for(int i=0;i<n-1;i++)
  { 
    for(int j=i+1;j<n;j++)
     {
         if(IB[i].bal>IB[j].bal)
          {
              stud tmp;
               tmp=IB[i];
               IB[i]=IB[j];
               IB[j]=tmp;
           }
       }
   }
}
counter вне форума Ответить с цитированием
Старый 24.03.2009, 21:59   #3
Lainus
Пользователь
 
Аватар для Lainus
 
Регистрация: 24.03.2009
Сообщений: 10
По умолчанию

Я уже отсортировал, но только средний бал, а нужно чтоб выводился средний бал + имя студента.
PHP код:
#include <iostream>
using namespace std;
namespace 
grup
    
{
        
struct stud
        
{
                
char FIO[80];
                
float bal;
        };
         
void input(stud *IB,int n);
        
//Функция для ввода с клавиатуры
         
void outandsort(stud *IB,int n);
        
//Функция для вывода на экран
    
}  
         
void grup::input(stud *IB,int n)
        
//Функция для ввода с клавиатуры
        
{
                for(
int i=0;i<n;i++)
                {
                       
cout<<"Vvedite imja studenta "<<endl;
                       
cin.getline(IB[i].FIO,80);
                       
char strTMP[10];
                       
cout<<"Vvedite bal studenta "<<endl;
                       
cin.getline(strTMP,80);
                       
IB[i].bal=atoi(strTMP);
                }
        };
        
void grup::outandsort(stud *IB,int n)
        
//Функция для сортировки и вывода на экран
        
{
            
char c1;
            for (
int i=0i<ni++)
            for (
int j=0;j<n-1;j++)
                if(
IB[j].bal<IB[j+1].bal)
             {
                
int c=IB[j].bal;
                   
IB[j].bal=IB[j+1].bal;
                
IB[j+1].bal=c;

                
strcpy(c1,IB[j].FIO);
                
strcpy(IB[j].FIO,IB[j+1].FIO); //Как присвоить переменной, содержимое IB[j].FIO?  
                
strcpy(IB[j+1].FIO,c1);        //В IB[j].FIO, находится символьная строка.
            
}


                for(
i=0;i<n;i++)
                {
                       
cout<<IB[i].FIO<<'\t'<<IB[i].bal<<endl
                }
        }; 
Lainus вне форума Ответить с цитированием
Старый 24.03.2009, 22:07   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

а зачем вот это ?

Код:
 strcpy(c1,IB[j].FIO); 
           strcpy(IB[j].FIO,IB[j+1].FIO); 
           strcpy(IB[j+1].FIO,c1);

делайте так как я написал выше.

но если вдруг на тои пошло то правильно будет так объявить переменную

Код:
char c1[80]
counter вне форума Ответить с цитированием
Старый 24.03.2009, 22:19   #5
Lainus
Пользователь
 
Аватар для Lainus
 
Регистрация: 24.03.2009
Сообщений: 10
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
а зачем вот это ?

Код:
 strcpy(c1,IB[j].FIO); 
           strcpy(IB[j].FIO,IB[j+1].FIO); 
           strcpy(IB[j+1].FIO,c1);
Ты написал только сортировку среднего бала. Если оставить только ёё то получится вводим:
Имя студента средний бал
Иван 5
Денис 9
Контантин 3

Отсортированное получается:
Имя студента средний бал
Иван 9
Денис 5
Контантин 3

а нужно
Имя студента средний бал
Денис 9
Иван 5
Контантин 3

Последний раз редактировалось Lainus; 24.03.2009 в 22:22.
Lainus вне форума Ответить с цитированием
Старый 24.03.2009, 22:27   #6
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

в этом куске меняются местами структуры, а не их поля

Код:
stud tmp;
               tmp=IB[i];
               IB[i]=IB[j];
               IB[j]=tmp;
counter вне форума Ответить с цитированием
Старый 24.03.2009, 22:43   #7
Lainus
Пользователь
 
Аватар для Lainus
 
Регистрация: 24.03.2009
Сообщений: 10
По умолчанию

Я с самого начала так пробывал, но символьный массив нехотел таким методом сортироватся, ошибки выдавал...
Объявил: char c1[80], и все нормально заработало.

Осталось объеденить 2 списка в один...
Lainus вне форума Ответить с цитированием
Старый 24.03.2009, 22:49   #8
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

объединение у тебя точно не получится...

ты вы деляеш память только для одного списка, а потом на его место пишеш и второй...
counter вне форума Ответить с цитированием
Старый 24.03.2009, 22:50   #9
Lainus
Пользователь
 
Аватар для Lainus
 
Регистрация: 24.03.2009
Сообщений: 10
По умолчанию

Айайай, реально тупанул )
Код:
stud tmp;
               tmp=IB[i];
               IB[i]=IB[j];
               IB[j]=tmp;
Всё это правильно работает, просто я криворукий
Lainus вне форума Ответить с цитированием
Старый 24.03.2009, 23:11   #10
Lainus
Пользователь
 
Аватар для Lainus
 
Регистрация: 24.03.2009
Сообщений: 10
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
объединение у тебя точно не получится...

ты вы деляеш память только для одного списка, а потом на его место пишеш и второй...
не получится.... блин, а нужно чтоб получилось
только чтот я несоображу, как тогда изменить код, чтоб для списков разные куски памяти выделялись и чтоб все это взаимодействовало с ф-циями.
Lainus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
слияние списков counter Общие вопросы C/C++ 4 02.01.2009 22:47
Обьединение данных Zhohov Microsoft Office Excel 2 11.07.2008 14:34
Сравнение двух списков lelik759 Microsoft Office Excel 7 13.04.2008 22:19
Объединение списков. life_burns Microsoft Office Excel 5 05.04.2008 16:13