2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Язык Си. Структуры.
Сообщение11.05.2016, 15:36 


11/05/16
2
Задача: Определить структурный тип Baggage: {Число мест, Общий вес}. Создать массив структур, содержащих информацию
о багаже нескольких пассажиров. Найти багаж, число вещей в котором не меньше, чем в любом другом,
а вес, не больше, чем в любом другом с тем же числом вещей.
Не могу решить. Помогите исправить ошибки, пожалуйста.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <windows.h>
/**Определить структурный тип Baggage: {Число мест, Общий вес}. Создать массив структур, содержащих информацию
   о багаже нескольких пассажиров. Найти багаж, число вещей в котором не меньше, чем в любом другом,
   а вес, не больше, чем в любом другом с тем же числом вещей. */
     struct Baggage{
         int places;
         int weight;
         };
#define   N   10
struct Baggage *SearchMaxMin( struct Baggage *, int);
int main()
{
   int i;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

struct   Baggage   *LugFlight = (Baggage*)malloc(N*sizeof(Baggage));

   if (LugFlight)
   {
      printf("\n\tВведите число мест и общий вес багажа в формате"
           "\n\n\t\t МЕСТ, ВЕС\n\n\t\tВсего десять пар.\n\n");
      for( i = 0; i < N; i++)
            scanf("%d, %d", &LugFlight[i].places, &LugFlight[i].weight);
      struct Baggage *MaxMinLug = SearchMaxMin(LugFlight, N);
      if (MaxMinLug)
      {
         printf("\n\n\tИскомый багаж: %d мест общим весом %d кг.\n\n",
                  MaxMinLug -> places, MaxMinLug -> weight );
         free (MaxMinLug);
      }
      free (LugFlight);
   }
   else
      printf ("Ошибка выделения памяти!\n");
   return 0;
}
/*  Возвращает указатель
    на багаж (элемент массива LugFlight) в котором макс. кол-во мест и
    мин. общий вес среди багажей с таким же кол-вом мест.*/

struct Baggage *SearchMaxMin(Baggage *LugFlight, int max)
{
    int i;
   Baggage *Result = (Baggage*)malloc(sizeof(Baggage));
    Result->places = LugFlight[0].places;
   Result->weight = LugFlight[0].weight;
    for(i=1; i<max; i++)
   {
        if (LugFlight[i].places > Result->places)
      {
            Result->places = LugFlight[i].places;
         Result->weight = LugFlight[i].weight;
      }
      else if (LugFlight[i].places == Result->places)
      {
         if (LugFlight[i].weight <= Result->weight)
            Result->weight = LugFlight[i].weight;
      }
   }
   return Result;
};

 Профиль  
                  
 
 Re: Язык Си. Структуры.
Сообщение11.05.2016, 18:08 
Аватара пользователя


29/01/15
298
ВШЭ, НМУ
Мне кажется, Вы плохо понимаете что такое указатели, зачем они нужны и как с ними работать, а так же как создавать массив структур. Если нет никаких дополнительных условий и требований что следует использовать, то при постановке задачи только лишь как
Цитата:
Определить структурный тип Baggage: {Число мест, Общий вес}. Создать массив структур, содержащих информацию
о багаже нескольких пассажиров. Найти багаж, число вещей в котором не меньше, чем в любом другом,
а вес, не больше, чем в любом другом с тем же числом вещей.

программу можно написать проще, чем это пытались сделать Вы.

Например вот так:
 !  Toucan:
Удалено


P.S. Советую ознакомиться с книгой "Язык программирования C" Кернигана и Ритчи, если Вы вдруг её не читали (хотя бы отрывками по конкретным вопросам). Её легко найти в интернете.

 Профиль  
                  
 
 Re: Язык Си. Структуры.
Сообщение12.05.2016, 00:27 
Админ форума
Аватара пользователя


19/03/10
8952
 !  Hasek, обращаю Ваше внимание, что ТС просил помочь ему исправить ошибки, а не решить задачу за него.
Замечание за размещение полного решения простой учебной задачи. Решение удалено.

 Профиль  
                  
 
 Re: Язык Си. Структуры.
Сообщение12.05.2016, 16:34 
Аватара пользователя


29/01/15
298
ВШЭ, НМУ
Действительно, давайте тогда исправлять ошибки в коде топикстартера.

Вот я копирую Ваш код, запускаю компилятор и получаю:
Код:
bash-4.2$ gcc dxdy.c -o dxdy
dxdy.c: In function ‘main’:
dxdy.c:17:34: error: ‘Baggage’ undeclared (first use in this function)
struct   Baggage   *LugFlight = (Baggage*)malloc(N*sizeof(Baggage));
                                  ^
dxdy.c:17:34: note: each undeclared identifier is reported only once for each function it appears in
dxdy.c:17:42: error: expected expression before ‘)’ token
struct   Baggage   *LugFlight = (Baggage*)malloc(N*sizeof(Baggage));
                                          ^
dxdy.c: At top level:
dxdy.c:42:30: error: unknown type name ‘Baggage’
struct Baggage *SearchMaxMin(Baggage *LugFlight, int max)
                              ^

На название файла (dxdy.c) и номера строк не обращайте внимание, потому что я убрал библиотеку для Windows и выставление кодировки CP1251. Вы, скорее всего, пользовались не GCC, поэтому сообщения об ошибках могут быть немного другими.

Объясните, пожалуйста, что вы хотели реализовать в следующих строчках? Просто напишите словами, что Вы в них вкладывали.
Используется синтаксис C
struct   Baggage   *LugFlight = (Baggage*)malloc(N*sizeof(Baggage));

Используется синтаксис C
struct Baggage *SearchMaxMin(Baggage *LugFlight, int max)


Подсказка: в основном Ваши ошибки состоят в неправильно указанных (точнее не указанных совсем) типах данных.

 Профиль  
                  
 
 Язык Си. Структуры.
Сообщение27.05.2016, 12:38 


11/05/16
2
Здравствуйте! Помогите, пожалуйста, довести программу до ума. Нужно определить структурный тип {Число мест, Общий вес}. Создать массив структур, содержащих информацию о багаже нескольких пассажиров. Найти багаж, число вещей в котором не меньше, чем в любом другом, а вес, не больше, чем в любом другом с тем же числом вещей.
Проблема в том, что не получается написать функцию.
код: [ скачать ] [ спрятать ]
Используется синтаксис C
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
/**Определить структурный тип Baggage: {Число мест, Общий вес}. Создать массив структур, содержащих информацию
   о багаже нескольких пассажиров. Найти багаж, число вещей в котором не меньше, чем в любом другом,
   а вес, не больше, чем в любом другом с тем же числом вещей. */


     struct Baggage{
         int places;
         int weight;
         };

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    /// Объявить и инициализировать массив типа struct Baggage

    struct Baggage{
        int i;
        printf("\n\tВведите число мест и общий вес багажа в формате"
               "\n\n\t\t МЕСТ, ВЕС\n\n\t\tВсего десять пар.\n\n");
        for( i = 0; i < 10; i++){
            scanf("%d, %d", &LugFlight[i].places, &LugFlight[i].weight);}
    }
    struct Baggage *SearchMaxMin( struct Baggage *, int );
    /**
    Возвращает указатель
    на багаж (элемент массива LugFlight) в котором макс. кол-во мест и
    мин. общий вес среди багажей с таким же кол-вом мест.*/


    struct Baggage *MaxMinLug = SearchMaxMin( LugFlight, 10 );

    printf("\n\n\tИскомый багаж: %d мест общим весом %d кг.\n\n",
                  MaxMinLug -> places, MaxMinLug -> weight );
     return 0;
}
struct Baggage *SearchMaxMin(Baggage *LugFlight, int max){
    int i;
    LugFlight[0].plases=max;
    for(i=0;i<10;i++){
        if (LugFlight[i].places>max){
            max=LugFlight[i].places;}
        }


return LugFlight;
};
 

 Профиль  
                  
 
 Re: Язык Си. Структуры.
Сообщение27.05.2016, 12:59 
Заслуженный участник
Аватара пользователя


19/12/10
1546
Как это:
Используется синтаксис C
struct Baggage{
        int i;
        printf("\n\tВведите число мест и общий вес багажа в формате"
               "\n\n\t\t МЕСТ, ВЕС\n\n\t\tВсего десять пар.\n\n");
        for( i = 0; i < 10; i++){
            scanf("%d, %d", &LugFlight[i].places, &LugFlight[i].weight);}
    }
    struct Baggage *SearchMaxMin( struct Baggage *, int );
должно работать? :shock:

 Профиль  
                  
 
 Re: Язык Си. Структуры.
Сообщение27.05.2016, 18:05 
Админ форума
Аватара пользователя


19/03/10
8952
 !  user12, замечание за продолжение обсуждения в новой теме. Темы объединены.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group