Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Структуры. Перевод из С в С++, определить метсто юного участника 
:(
    Опции темы
Dmitriysokol
Дата 13.4.2010, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.4.2010

Репутация: нет
Всего: нет



Задание: Поля структуры: фамилия, имя, возраст, структура результат: мин. сек. Определить место самого юного участника 

Код
#include <stdio.h>
#include <conio.h>

typedef struct RESULT
 {int min;
 int sec;
 };

typedef struct SPORT
 {char surname[20];
  char name[20];
  int old;
  RESULT res;
 };

void strct_in(SPORT *sp, int i);
int strct_obr(SPORT *sp, const int i);

void main()
{
 int i, n;
 SPORT sp[30];

 clrscr();
 printf ("vvedite kol-vo sportsmenov: ");
 scanf ("%d", &i);
 strct_in(sp, i);
 n=strct_obr(sp, i);
 printf ("\n n=%d",n);
 getch();
}

void strct_in(SPORT *sp, int i)
{

 printf (" surname name old rezmin rezsec:\n ");
 for (int k=0; k<i; k++)
     {
     scanf ("%s",&sp[k].surname);
     scanf ("%s",&sp[k].name);
     scanf ("%d",&sp[k].old);
     scanf ("%d",&sp[k].res.min);
     scanf ("%d",&sp[k].res.sec);
    }
}

int strct_obr(SPORT *sp,  const int i)
{
 int young, n, k=0, b=0;
 young=sp[0].old;

for (n=1; n<i; n++)
if (sp[n].old < young) young=sp[n].old, k=n;

 int rr = sp[k].res.min*60 + sp[k].res.sec;

 for (n=0; n<i; n++)
    if (sp[n].res.min*60+sp[n].res.sec < rr) b++;

 return b+1;
}

необходимо перевести в С++


Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 13.4.2010, 16:27
PM MAIL   Вверх
ИванМ
Дата 13.4.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



замени char[] на string, scanf на cin, printf на cout, перегрузи istream operator>>, ostream operator<< для своих классов, добавь алгоритмы из STL взамен своих операций и желательно убери getch() - лучше всего замени его на system("pause")
PM MAIL   Вверх
bsa
Дата 13.4.2010, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
Dmitriysokol
Дата 13.4.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.4.2010

Репутация: нет
Всего: нет



Я как бы теорию по С++ более менее знаю, но к  сожалению на практике могу применить только в довольно простых задачах...как раз в этой не получается. Можете дать  примерный код?
PM MAIL   Вверх
ИванМ
Дата 13.4.2010, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



типа такого, проверяйте:
Код

#include <string>
#include <iostream>
#include <vector>

struct RESULT
{
    int min;
    int sec;
};

struct SPORT
{
    std::string surname;
    std::string name;
    int old;
    RESULT res;
};

std::istream& operator>>(std::istream& stream, RESULT& res)
{
    stream>>res.min>>res.sec;
    return stream;
}

std::istream& operator>>(std::istream& stream, SPORT& sport)
{
    stream>>sport.surname>>sport.name>>sport.old>>sport.res;
    return stream;
}

void strct_in(std::vector<SPORT> & s)
{
    std::cout<<" surname name old rezmin rezsec:\n ";
    for(size_t i=0;i<s.size();i++)
    {
        std::cout<<"element #"<<i+1<<std::endl;
        std::cin>>s[i];
    }
}

int strct_obr(std::vector<SPORT>& sp);

void main()
{
 int i, n; 
 std::cout<<"vvedite kol-vo sportsmenov: ";
 std::cin>>i;
 std::vector<SPORT> sp(i); 
 strct_in(sp);
 n=strct_obr(sp);
 std::cout<<"\n n="<<n<<std::endl;
 system("pause");
}

int strct_obr(std::vector<SPORT> &sp)
{
    int young, k=0, b=0;
    size_t n;
    young=sp[0].old;
    for (n=0; n<sp.size(); n++)
        if (sp[n].old < young) young=sp[n].old, k=n;

    int rr = sp[k].res.min*60 + sp[k].res.sec;

    for (n=0; n<sp.size(); n++)
        if (sp[n].res.min*60+sp[n].res.sec < rr) b++;

    return b+1;
}



Это сообщение отредактировал(а) ИванМ - 13.4.2010, 17:02
PM MAIL   Вверх
mes
Дата 13.4.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



Цитата(ИванМ @  13.4.2010,  16:01 Найти цитируемый пост)
типа такого

ИванМ, Вы забыли написать что это так называемый "машинный " перевод с С на С++
так что Dmitriysokol Вам все равно надо напрячься, если хотите получить нормальный результат..
smile

Добавлено через 45 секунд
P.S. ой тема уже перенесена, тут может и повезет smile


--------------------
PM MAIL WWW   Вверх
SaNioK
Дата 14.4.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 28.12.2007
Где: Ukraine

Репутация: нет
Всего: нет



Код

#include <iostream>
using namespace std;
class RESULT {
public:
    int min;
    int sec;
};

class SPORT {
public:
    string name;
    string surname;
    int old;
    RESULT res;
    SPORT() {
        surname = "";
        name = "";
        old = 0;
        res.min = 0;
        res.sec = 0;
    }
};

void strct_in(SPORT *sp, int i);
int strct_obr(SPORT *sp, const int i);
int main()
{
    int i, n;
    cout << "vvedite kol-vo sportsmenov: ";
    cin >> i;
    SPORT* sp = new SPORT[i];
    if (sp == 0) { cout << "Ошибка выделения памяти" << endl; return 1;}
    strct_in(sp, i);
    n=strct_obr(sp, i);
    cout << "\n n = " << n;
    return 0;
}
void strct_in(SPORT *sp, int i)
{
    cout << " surname name old rezmin rezsec:\n ";
    for (int k=0; k<i; k++) {
        cin >> sp[k].surname;
        cin >> sp[k].name;
        cin >> sp[k].old;
        cin >> sp[k].res.min;
        cin >> sp[k].res.sec;
    }
}
int strct_obr(SPORT *sp,  const int i)
{
    int young, n, k=0, b=0;
    young=sp[0].old;
    for (n=1; n<i; n++)
        if (sp[n].old < young) young=sp[n].old, k=n;
            int rr = sp[k].res.min*60 + sp[k].res.sec;

    for (n=0; n<i; n++)
        if (sp[n].res.min*60+sp[n].res.sec < rr) b++;
            return b+1;
}


Оно?

Это сообщение отредактировал(а) SaNioK - 14.4.2010, 10:02
PM MAIL   Вверх
ИванМ
Дата 14.4.2010, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



SaNioK, и что вы хотели сказать этим кодом?
PM MAIL   Вверх
SaNioK
Дата 14.4.2010, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 28.12.2007
Где: Ukraine

Репутация: нет
Всего: нет



ИванМ
А что вам собственно не нравится?
Я не знаю как у автора, но у нас преподы при переводе требовали перевод структур в классы, если вы про это.
PM MAIL   Вверх
ИванМ
Дата 14.4.2010, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



SaNioK, я имел ввиду, что вы ничего нового не привнесли, а только убрали некоторые возможности из моего варианта.
На счет перевода из структур в классы - думаю, ваши преподы не совсем компетентны. Структура в C++ это такой же класс, за исключением того, что доступ по умолчанию public. В таком простом случае это и нужно. Все равно вы сами везде написали public. Только лишняя строчка кода.
PM MAIL   Вверх
SaNioK
Дата 15.4.2010, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 28.12.2007
Где: Ukraine

Репутация: нет
Всего: нет



ИванМ
Простите но я не смотрел ваш код, я увидел комментарий mes и решил что стоит написать.
А насчет их компетенции, скорее лишь очередная проверка знаний.
PM MAIL   Вверх
ИванМ
Дата 15.4.2010, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



SaNioK, комментарий mes'а был по поводу того, что алгоритм работы программы изначально неправильный, не смотря на то, что я перевел в си++. Функция strct_obr непонятно как работает. Так что если вам не лень, можете ее исправить. Я лично вообще не понял смысл задания, просто тупо перевел.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0814 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.