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

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

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

непонятная для меня ошибка прошу объяснить знающих людей - C++

27.03.2009, 03:25. Просмотров 508. Ответов 2
Метки нет (Все метки)

Я обращаюсь с проблемой во вроде бы рабочей программе. Задача была построить программу с сортировкой массивов методами пузырька и шейкера. Программа сортирует даные но зачастую происходит непонятный казус вместо задаваемых чисел она выводит нули или единицы и что самое страное такое случается не всегда например если ввести кол-во масива 4 и сами элементы четыре четвёрки то он так и отпишется а если 3 тройки то 2 из них обычно нули.
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
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
void main()
{
   int array[100],n,i,j,size,x,choize;
   cout<<"Vvedite kol-stvo massiva";   //vivodim soobshenie ""
   cin>>size;                          //i zapisivaem zna4enie v size
      if (size>100 || size<-100)
      {
       cout<<"Bilo vvedeno nevernoe 4islo programa avtomati4eski viklu4aets9 poprobyite snova";
      }
      else
      {
    for (i=0;i<size;i++)
   {
        cout<<"Vvedite "<<i<<" element massiva ne bolee 1000:"; //zadaem kagdii
        cin>>array[i];
               if (array[i]>1000)
           {i--;
            cout<<"Vvedi drygoe zna4enie elementa ";
            }                                         //element massiva
    }
 
 
   cout<<"Vvedite kakim iz sposobov xotite sortirovat': 1-metod pyzir'ka 2-metod Sheikera ";
   cin>> choize;
   switch (choize)
   {
   case 1:
   for (i=0;i<=size;i++)           //na4alo sortirovki prokry4ivaem vse elementi
   {
   for (j=i;j<=size-i;j++)        //prohodim sleva napravo
   {
    if (array[j]>array[j+1])    //esli sleva bol'she
    {
     x=array[j];                  //to men9em mestami
     array [j]=array [j+1];
     array [j+1]=x;                //sprava sobiraem bol'shie 4isla
    }
   }
  for (j=size-i-1;j>i;j--)         //teper' spravo nalevo
  {
   if (array[j]<array[j-1])
  {
   x=array[j];
   array[j]=array[j-1];            //sleva sobiraem men'shie 4isla
   array[j-1]=x;
  }
}
}
   cout<<"Massiv posle sortirovki:";   //vivodim stroky""
    for (i=0; i<size;i++ )
    {
    cout<<array[i]<<" ";              //vivodim poly4ennii massiv posle sortirovki
    }
    cout<<endl;
    cout << "Gmi 4to nit'..." << endl;
break;
case 2:
             for(i=0;i<size;i++)          //na4alo sortirovki prokry4ivaem vse elementi
              {
               for(j=0;j<size-i;j++)
                {
                 if (array[j]>array[j+1])     //esli 1 element bol'she posledyyshego
                  {
                   x=array[j];               // to men9em ix mestami
                   array[j]=array[j+1];
                   array[j+1]=x;
                  }
                }
              }
 
   cout<<"Massiv posle sortirovki:";   //vivodim stroky""
    for (i=0; i<size;i++ )
    {
    cout<<array[i]<<" ";              //vivodim poly4ennii massiv posle sortirovki
    }
    cout<<endl;
    cout << "Gmi 4to nit'..." << endl;
    break;
    default:
            cout<<"Vvedenoe zna4enie ne sootvetstvyet predlogenim pros'ba vnimatel'nee otnosit's9 k predpisani9m sozdatelei programmi";
            }
            }
    getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2009, 03:25     непонятная для меня ошибка прошу объяснить знающих людей
Посмотрите здесь:

Прошу научить меня. C++
C++ Вопрос для знающих
C++ головоломка для знающих...
C++ Прошу объяснить смысл оператора int**
Непонятная для меня ошибка C++
Прошу объяснить ввод символов C++
C++ Нужно сделать данную задачу с матрицей в С++.Для знающих С++
C++ Неизвестная (для меня) ошибка в коде!
Прошу объяснить код С++ C++
C++ Прошу объяснить работу готовой программы
C++ Прошу ответить опытных программистов знающих все реализации языка
C++ Прошу объяснить первую строку

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
27.03.2009, 09:32     непонятная для меня ошибка прошу объяснить знающих людей #2
Я так понимаю, что казус происходит при сортировке методом пузырька?
Ошибки, как мне видится, находятся в строках 32 и 34. У вас во вложенных циклах переменные i и j выходят за границы массива...
Например, если размер массива 4, то циклы у вас пробегают 5 значений:
i = 0
i = 1
i = 2
i = 3
i = 4
что не верно...
Нужно так:
/*32.*/ for (i=0;i<size;i++) //na4alo sortirovki prokry4ivaem vse elementi
/*33.*/ {
/*34.*/ for (j=i;j<size-i;j++) //prohodim sleva napravo
/*35.*/ {
/*36.*/ ...
rrrFer
Заблокирован
27.03.2009, 09:50     непонятная для меня ошибка прошу объяснить знающих людей #3
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
#include <iostream>
using namespace std;
int main(){
    int array[100],n,i,j,size,x,choize;
    cout<<"Vvedite kol-stvo massiva";   //vivodim soobshenie ""
    cin>>size;                          //i zapisivaem zna4enie v size
    if (size>100 || size<-100){
        cout<<"Bilo vvedeno nevernoe 4islo programa avtomati4eski viklu4aets9 poprobyite snova";
        return 0;
    }
    for (i=0;i<size;i++){
        cout<<"Vvedite "<<i<<" element massiva ne bolee 1000: "; //zadaem kagdii
        cin>>array[i];
        if (array[i]>1000){
            i--;
            cout<<"Vvedi drygoe zna4enie elementa ";
        }                                         //element massiva
    }
    cout<<"Vvedite kakim iz sposobov xotite sortirovat':"<<endl;
    cout<<"\t1-metod pyzir'ka"<<endl;
    cout<<"\t2-metod Sheikera "<<endl<<": ";
    cin>> choize;
    switch (choize){
        case 1:
            for (i=0;i<size;i++){           //na4alo sortirovki prokry4ivaem vse elementi
                for (j=i;j<size-1;j++){       //prohodim sleva napravo
                    if (array[j]>array[j+1]){    //esli sleva bol'she
                        x=array[j];                  //to men9em mestami
                        array [j]=array [j+1];
                        array [j+1]=x;                //sprava sobiraem bol'shie 4isla
                    }
                }
                for (j=size-i-1;j>i;j--){         //teper' spravo nalevo
                    if (array[j]<array[j-1]){
                        x=array[j];
                        array[j]=array[j-1];            //sleva sobiraem men'shie 4isla
                        array[j-1]=x;
                    }
                }
            }
            cout<<"Massiv posle sortirovki:";   //vivodim stroky""
            for (i=0; i<size;i++ )
                cout<<array[i]<<" ";              //vivodim poly4ennii massiv posle sortirovki
            cout<<endl;
        break;
        case 2:
            for(i=0;i<size;i++)  {        //na4alo sortirovki prokry4ivaem vse elementi
                for(j=0;j<size-1;j++){
                    if (array[j]>array[j+1]){     //esli 1 element bol'she posledyyshego
                        x=array[j];               // to men9em ix mestami
                        array[j]=array[j+1];
                        array[j+1]=x;
                    }
                }
            }
            cout<<"Massiv posle sortirovki:";   //vivodim stroky""
            for (i=0; i<size;i++ )
                cout<<array[i]<<" ";              //vivodim poly4ennii massiv posle sortirovki
            cout<<endl;
        break;
        default:
            cout<<"Vvedenoe zna4enie ne sootvetstvyet predlogenim pros'ba vnimatel'nee otnosit's9 k predpisani9m sozdatelei programmi";
    }
    system("pause");
    return 1;
}
ошибка была в условиях выхода из циклов
Yandex
Объявления
27.03.2009, 09:50     непонятная для меня ошибка прошу объяснить знающих людей
Ответ Создать тему
Опции темы

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