Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
#1

зацыклевается - C++

06.10.2010, 20:55. Просмотров 367. Ответов 5
Метки нет (Все метки)

Добрый вечер!! нужна помощь, написал функцию поиска poisk, в main() сделал цыкл while он и зацыклевается. poisk работает правильно и в цыкле выводятся значения но почему зацыклевается не пойму....
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream>
#include <clocale>
#include <conio.h>
#include <string.h>
using namespace std;
struct AEROFLOT
{
    char name[10];
    int number;
    char type[10];
};
 
AEROFLOT sort_name ( AEROFLOT *aeroflot)
{   char temp_type[10];
    char temp_name[10];
    int temp_number;
    int j,i,g;
     
 
    j=7;
 
    for( g=0;g<j;g++)
    {
        for(i=j-1;i>g;i--)
        {
          if(aeroflot[i-1].name[0]>aeroflot[i].name[0])
          
        
               {                
       strcpy(temp_name,aeroflot[i-1].name);    
        strcpy(temp_type,aeroflot[i-1].type);
         temp_number=aeroflot[i-1].number;
 
       strcpy(aeroflot[i-1].name,aeroflot[i].name);
        strcpy(aeroflot[i-1].type,aeroflot[i].type);
         aeroflot[i-1].number=aeroflot[i].number;
 
       strcpy(aeroflot[i].name,temp_name);
        strcpy(aeroflot[i].type,temp_type);
         aeroflot[i].number=temp_number;
 
                  }
    
          }
    }
    return *aeroflot;   
}
 
int poisk(AEROFLOT *aeroflot,char* n,int i)
{ int k; k=0;
        for (i = i; i < 7; i++)
            if(!strcmp(aeroflot[i].type, n))
        {
            k++;
   return i;
        }
    if (k==0)  return -1;
}
 
 
AEROFLOT aeroflot[7];
int count = 0;
AEROFLOT add(AEROFLOT f)
{
 
        if (aeroflot[count].name[0]=='\0')
 
{ strcpy(aeroflot[count].name,f.name);
aeroflot[count].number=f.number;
strcpy(aeroflot[count].type,f.type);
}
return aeroflot[count];
}
 
int main()    
    
{ 
    setlocale(LC_ALL, "rus");
    AEROFLOT  f;
    int i,j;
    char n[10];
    
    //-----------------ввод-------------------------
        for (i=0;i<7;i++)
        {
        cout << "введите название пункта назначения \n";
        cin  >> f.name;
        cout << "введите номер рейса \n";
        cin  >> f.number;                                                
        cout << "введите тип самолета \n";
        cin  >> f.type;
            add(f);
            count++;
         }
    //----------------------------------------------
  cout << "введите тип нужного Вам самолета\n";
  cin  >> n;
    //---------------------------------------------
sort_name (aeroflot);//сортируем
    //---------------------------------------------
    int m=0;
    i=0;j=0;
    while ((j!=6)||(j!=-1))
    {
        j=poisk(aeroflot,n,i);
     
        cout << "название пункта назначения - " << aeroflot[j].name << endl;
        cout << "номер рейса - " << aeroflot[j].number << endl;
        i=j+1;
    
        m++;
    }
    if (m==0)
        cout << "самолетов такого типа нет(";
    
    getch();
    }
Миниатюры
зацыклевается  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1234 / 772 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
06.10.2010, 21:13     зацыклевается #2
while ((j!=6)||(j!=-1))
//---------------------

Разве из такого цикла можно выйти,
логика не правильная выход возможен
только если j==6 && j==-1
Вообщем непонята какая то.
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
06.10.2010, 21:18  [ТС]     зацыклевается #3
я думаю можно
C++
1
2
3
4
5
6
7
8
9
10
int poisk(AEROFLOT *aeroflot,char* n,int i)
{ int k; k=0;
        for (i = i; i < 7; i++)
            if(!strcmp(aeroflot[i].type, n))
                {
                        k++;
   return i;
                }
        if (k==0)  return -1;// если не найдет нужный элемент вернет -1, условие выхода из цыкла
} и еще одно условие если массив закончидся
asics
Freelance
Эксперт C++
 Аватар для asics
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
06.10.2010, 21:40     зацыклевается #4
//Александр, в четвёртой строке переменной i присваеваетсо значение той же переменной i - ето как ?
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
06.10.2010, 23:07     зацыклевается #5
Александр, а что это собственно за параметр???????
C++
1
sort_name (aeroflot);//сортируем
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
07.10.2010, 04:45  [ТС]     зацыклевается #6
NikolaWhite, вызов функции сортировки

Добавлено через 4 минуты
Asics^, да я согласен сдесь я перемудрил...

Добавлено через 1 минуту
сделал немного по другому, если кому интересно вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <clocale>
#include <conio.h>
#include <string.h>
using namespace std;
struct AEROFLOT
{
    char name[10];
    int number;
    char type[10];
};
 
AEROFLOT sort_name ( AEROFLOT *aeroflot)
{   char temp_type[10];
    char temp_name[10];
    int temp_number;
    int j,i,g;
     
 
    j=7;
 
    for( g=0;g<j;g++)
    {
        for(i=j-1;i>g;i--)
        {
          if(aeroflot[i-1].name[0]>aeroflot[i].name[0])
          
        
               {                
       strcpy(temp_name,aeroflot[i-1].name);    
        strcpy(temp_type,aeroflot[i-1].type);
         temp_number=aeroflot[i-1].number;
 
       strcpy(aeroflot[i-1].name,aeroflot[i].name);
        strcpy(aeroflot[i-1].type,aeroflot[i].type);
         aeroflot[i-1].number=aeroflot[i].number;
 
       strcpy(aeroflot[i].name,temp_name);
        strcpy(aeroflot[i].type,temp_type);
         aeroflot[i].number=temp_number;
 
                  }
    
          }
    }
    return *aeroflot;   
}
 
int poisk(AEROFLOT *aeroflot,char* n,bool *a)
{ int k=0;
  int i;
        for (i = 0; i < 7; i++)
            if(!strcmp(aeroflot[i].type, n))
        {
            a[i]=true;
        }
            return *a;
}
 
 
AEROFLOT aeroflot[7];
int count = 0;
 
AEROFLOT add(AEROFLOT f)
{
 
        if (aeroflot[count].name[0]=='\0')
 
{ strcpy(aeroflot[count].name,f.name);
aeroflot[count].number=f.number;
strcpy(aeroflot[count].type,f.type);
}
return aeroflot[count];
}
 
int main()    
    
{ 
    setlocale(LC_ALL, "rus");
    AEROFLOT  f;
    int i,j;
    char n[10];
    bool a[7];
    for (i=0;i<7;i++)
    {
        a[i]=false;
    }
    //-----------------ввод-------------------------
        for (i=0;i<7;i++)
        {
        cout << "введите название пункта назначения \n";
        cin  >> f.name;
        cout << "введите номер рейса \n";
        cin  >> f.number;                                                
        cout << "введите тип самолета \n";
        cin  >> f.type;
            add(f);
            count++;
         }
    //----------------------------------------------
  cout << "введите тип нужного Вам самолета\n";
  cin  >> n;
    //---------------------------------------------
sort_name (aeroflot);//сортируем
    //---------------------------------------------
   int k=0;
poisk(aeroflot,n,a);
    for(i=0;i<7;i++)
    if(a[i]==true)
        {
        cout << "название пункта назначения - " << aeroflot[i].name << endl;
        cout << "номер рейса - " << aeroflot[i].number << endl;
        k++;
        }
    if (k==0)
        cout << "самолетов такого типа нет(";
    
    getch();
    }
Yandex
Объявления
07.10.2010, 04:45     зацыклевается
Ответ Создать тему
Опции темы

Текущее время: 17:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru