2014 dxdy logo

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

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




 
 Язык Си. Структуры.
Сообщение11.05.2016, 15:36 
Задача: Определить структурный тип 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 
Аватара пользователя
Мне кажется, Вы плохо понимаете что такое указатели, зачем они нужны и как с ними работать, а так же как создавать массив структур. Если нет никаких дополнительных условий и требований что следует использовать, то при постановке задачи только лишь как
Цитата:
Определить структурный тип Baggage: {Число мест, Общий вес}. Создать массив структур, содержащих информацию
о багаже нескольких пассажиров. Найти багаж, число вещей в котором не меньше, чем в любом другом,
а вес, не больше, чем в любом другом с тем же числом вещей.

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

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


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

 
 
 
 Re: Язык Си. Структуры.
Сообщение12.05.2016, 00:27 
Аватара пользователя
 !  Hasek, обращаю Ваше внимание, что ТС просил помочь ему исправить ошибки, а не решить задачу за него.
Замечание за размещение полного решения простой учебной задачи. Решение удалено.

 
 
 
 Re: Язык Си. Структуры.
Сообщение12.05.2016, 16:34 
Аватара пользователя
Действительно, давайте тогда исправлять ошибки в коде топикстартера.

Вот я копирую Ваш код, запускаю компилятор и получаю:
Код:
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 
Здравствуйте! Помогите, пожалуйста, довести программу до ума. Нужно определить структурный тип {Число мест, Общий вес}. Создать массив структур, содержащих информацию о багаже нескольких пассажиров. Найти багаж, число вещей в котором не меньше, чем в любом другом, а вес, не больше, чем в любом другом с тем же числом вещей.
Проблема в том, что не получается написать функцию.
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Аватара пользователя
Как это:
Используется синтаксис 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 
Аватара пользователя
 !  user12, замечание за продолжение обсуждения в новой теме. Темы объединены.

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group