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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2012, 18:10   #1
Xronikov
Пользователь
 
Аватар для Xronikov
 
Регистрация: 10.06.2012
Сообщений: 17
Сообщение Структурный тип

Уважаемые эксперты помогите пожалуйста дописать программу. Надо чтобы выдавал 1) Название пунктов назначения, номера рейсов, которые совпали с номером, введенным с клавиатуры. Я там попытался сделать, но он выдает все пункты назначения, которые были введены.
2) Количество рейсов, соответствующих типу самолета введенного с клавиатуры.
Код:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#pragma hdrstop

#pragma argsused
struct tAeroflot
{
   char punkt_naznachenia[10];
   int nomer_reisa;
   char tip_samoleta[10];
};
void main()
{
    tAeroflot *P;
    int size;
    cout << " Input size ";
    cin >> size;
    P = new tAeroflot [size];
  for (int i = 0; i < size; i++)
  {
    cout << " Input data for " << i << " element: " << endl;
    cout << " punkt_naznachenia " <<endl;
    cin >> P[i].punkt_naznachenia;
    cout << " nomer_reisa " <<endl;
    cin >> P[i].nomer_reisa;
    cout << " tip_samoleta " <<endl;
    cin >> P[i].tip_samoleta;
  };
  char reis [10];
  cout << " nomer_reisa " <<endl;
  cin >> reis;
  for (int i = 0; i < size; i++)
  {
  if (!strcmp (P[i].punkt_naznachenia, reis));
  cout << " punkt_naznachenia " << P[i].punkt_naznachenia << endl;
  };
  delete [] P;
getch();
};

Последний раз редактировалось Stilet; 22.09.2012 в 19:58.
Xronikov вне форума Ответить с цитированием
Старый 22.09.2012, 21:48   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
(!strcmp (P[i].punkt_naznachenia, reis));
Так Вы сравниваете введенный номер рейса с пунктом назначения i-той записи. Это раз.
Точка с запятой в конце определяет конец операции. В итоге у Вас сравнение при значении true вызовет пустой оператор, а следующая строчка будет выполняться на каждом шаге цикла - вот ответ на первый вопрос. Это два.

По второму вопросу: создаете переменную int count=0; и запускаете в таком же цикле на каждом шаге сравнение:

Если Тип_самолета[i]=введенный_тип то count++;

После окончания цикла в переменной count и будет содержаться требуемое количество.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 22.09.2012, 21:56   #3
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Сюда же добавь то, что тебе посоветовали выше.

Код:
int count = 0;
for (int i = 0; i < size; i++){
if ( strcmp (P[i].punkt_naznachenia, reis) = 0 );
{ 
count++;
cout<<P[i].punkt_naznachenia<<P[i].nomer_reisa<<P[i].tip_samoleta<<endl;
}
}
strcmp возвращает 0 если совпало, 1 если частично, -1 ... ( ну думаю и так ясно )

Да, а почему там !strcmp ?
Люблю на ты.Я человек простой

Последний раз редактировалось Leshii; 22.09.2012 в 21:58.
Leshii вне форума Ответить с цитированием
Старый 26.09.2012, 18:11   #4
Xronikov
Пользователь
 
Аватар для Xronikov
 
Регистрация: 10.06.2012
Сообщений: 17
Сообщение

Если я правильно понял то программа должна выглядеть так,
PHP код:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#pragma hdrstop

#pragma argsused
struct tAeroflot
{
   
char punkt_naznachenia[10];
   
int nomer_reisa;
   
char tip_samoleta[10];
};
void main()
{
    
tAeroflot *P;
    
int size;
    
cout << " Input size ";
    
cin >> size;
    
= new tAeroflot [size];
  for (
int i 0sizei++)
  {
    
cout << " Input data for " << << " element: " << endl;
    
cout << " punkt_naznachenia " <<endl;
    
cin >> P[i].punkt_naznachenia;
    
cout << " nomer_reisa " <<endl;
    
cin >> P[i].nomer_reisa;
    
cout << " tip_samoleta " <<endl;
    
cin >> P[i].tip_samoleta;
  };
  
char reis [10];
  
cout << " nomer_reisa " <<endl;
  
cin >> reis;
  for (
int i 0sizei++)
  {
  if (!
strcmp (P[i].punkt_naznacheniareis))
  
cout << " punkt_naznachenia " << P[i].punkt_naznachenia << endl;
  };
   
char c [10] = "";
   
cout << "tip_samoleta "<< endl;
   
cin >> c;
   
int count 0;
   for (
int i 0sizei++)
   {
   if (!
strcmp(P[i].tip_samoleta,c))
   
count++;
   
cout << " col_reisov " << << endl;
};
  
delete [] P;
getch();
}; 
но она почему-то не правильно работает (
Xronikov вне форума Ответить с цитированием
Старый 26.09.2012, 18:13   #5
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Попробуй прочитать пост выше
И кто тебя надоумил количество в цикле выводить, когда это надо делать за циклом.
Код:
 for (int i = 0; i < size; i++)
{ 
if ( strcmp (P[i].punkt_naznachenia, reis) = 0 )
{ 
cout<<"\t"<<P[i].punkt_naznachenia<<"\t"P[i].nomer_reisa<<endl;
}
}
2) Ну опять же, а подумать?)
Код:
int count = 0;
   for (int i = 0; i < size; i++)
   {
   if ( strcmp(P[i].tip_samoleta,c) = 0 )
   count++;
}
cout << " col_reisov " << c << endl;
Люблю на ты.Я человек простой

Последний раз редактировалось Leshii; 26.09.2012 в 18:38.
Leshii вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять структурный на индексный Ange1 Паскаль, Turbo Pascal, PascalABC.NET 1 11.12.2011 09:59
две задачи на тип INTEGER и тип CHAR inspiron13 Помощь студентам 5 04.01.2011 00:17
Сформировать массив содержащий сведения об ассортименте товара супермаркета .Структурный тип содержит пол gomer88 Общие вопросы C/C++ 5 17.06.2010 12:37
Структурный анализ ориентированных графов. Zo0M Помощь студентам 12 06.11.2009 08:13
СТРУКТУРНЫЙ ТИП ДАННЫХ "МАССИВ" Urz-3 Помощь студентам 11 07.06.2009 14:40