Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Почему может не работать программа

80K
29 февраля 2012 года
mrf
2 / / 29.02.2012
Собственно код:


Код:
#include <stdio.h>
#include <stdlib.h>

void swap_two(int input[], int i, int j){
    int k;
    k = input[ i ];
    input = input[j];
    input[j] = k;
}

void sort(int input[]){
    if (input[1] > input[2]) swap_two(input, 1, 2);
    if (input[1] > input[3]) swap_two(input, 1, 3);
    if (input[2] > input[3]) swap_two(input, 2, 3);
}

int main()
{
    int input_count = 3;
    int result[3];
    int input_numbers[100] = {1, 4, 3, 5, 56};

    //scanf("%i", input_count);
    /*for (int i = 0; i < input_count; i++){
        scanf("%i", &input_numbers[ i ]);
    }*/

    for (int i = 0; i < 3; i++) result = input_numbers[ i ];
    for (int i = 3; i < input_count; i++){
        for(int j = 0; j < 3; j++){
            if (result[j] < input_numbers){
                result[j] = input_numbers;
                sort(result);
            }
        }
    }
    swap_two(result, 1, 2);
    for(int i = 0; i < 3; i++){
        printf("%d ", result);
    }
    return 0;
}




Программа должна выводить в консоль 3 наибольших числа массива. Но я имею только 3 первых введённых числа.
И не понятная ситуация с закомментированными строками. Ввод при помощи scanf не работает.
Так же, не могли бы вы порекомендовать хороший отладчик для новичка.

Спасибо.

Поправка: вот, теперь индексы появились. Почему-то не отображалась комбинация "[_i_]" без подчёркиваний. Наверное, какой-то символ форматирования.
Поправка 2 )) : scanf("%i", &input_numbers[ i ]); тоже не отображался индекс
74K
29 февраля 2012 года
efviop
13 / / 24.11.2011
Отладчик Ollydbg посоветую. Для новичка в самый раз. А вот код совсем не рабочий. начиная вот с этого k = input; не понятно что ты пытаешся присвоить k? если уж так то вот так k = input[index]; и тд. вот еще for (int i = 0; i < 3; i++) result = input_numbers;
ты пытаешся три раза сделать полную чепуху. вообщем на этот код каждый уважающий компилятор будет сильно ругаться.почитай про массивы!
74K
29 февраля 2012 года
efviop
13 / / 24.11.2011
если ты все исправил то всеравно куча косяков. Ты забываешь про индексы массивов! В том же scanf например scanf("%i", &input_numbers[index]); так надо.
74K
29 февраля 2012 года
efviop
13 / / 24.11.2011
немного подправил. у меня все работает
Код:
#include <stdio.h>
#include <stdlib.h>

void swap_two(int* input, int i, int j)
{
     int k;
     k = input[_i_];
     input[_i_] = input[_j_];
     input[_j_] = k;
}

void sort(int input[])
{
     if (input[1] > input[2])
     swap_two(input, 1, 2);
     if (input[0] > input[1])
     swap_two(input, 0, 1);
     if (input[0] > input[2])
     swap_two(input, 0, 2);
}

int main()
{
     int input_count = 3;
     int result[2];
     int input_numbers[100] = {1, 4, 3, 5, 56};

     scanf("%d",&input_count);
     for (int i = 0; i < input_count; i++)
     scanf("%d", &input_numbers[_i_]);
     for (int i = 0; i < 3; i++)
     result[_i_] = input_numbers[_i_];
     for (int i = 3; i < input_count; i++)
     {
         for(int j = 0; j < 3; j++)
         {
             if (result[_j_] < input_numbers[_i_])
             {
                 result[_j_] = input_numbers[_i_];
                 sort(result);
             }
             if(result[_j_] == input_numbers[_i_])
             {
                 sort(result);
                 break;
             }
             
         }
     }
     for(int i = 0; i < 3; i++){
         printf("%d | ", result[_i_]);
     }
     system("pause");
     return 0;
}

80K
29 февраля 2012 года
mrf
2 / / 29.02.2012
Спасибо!, efviop!
74K
29 февраля 2012 года
efviop
13 / / 24.11.2011
поторопился я)) вот еще подправил))извеняюсь
Код:
#include <stdio.h>
 #include <stdlib.h>

 void swap_two(int* input, int i, int j)
 {
      int k;
      k = input[ i ];
      input[ i ] = input[ j ];
      input[ j ] = k;
 }

 void sort(int* input)
 {
      int s = 0;
      while(1)
      {
          if (input[0] > input[1])
          swap_two(input, 0, 1);
          if (input[0] < input[1])
          s++;
          if (input[1] > input[2])
          swap_two(input, 1, 2);
          if (input[1] < input[2])
          s++;
          if(s > 2)
          break;
      }
 }

 int main()
 {
      int input_count = 3;
      int result[2];
      int input_numbers[100] = {1, 4, 3, 5, 56};

      scanf("%d",&input_count);
      for (int i = 0; i < input_count; i++)
      scanf("%d", &input_numbers[ i ]);
      for (int i = 0; i < 3; i++)
      result[ i ] = input_numbers[ i ];
      for (int i = 3; i < input_count; i++)
      {
          for(int j = 0; j < 3; j++)
          {
              if(result[ j ] == input_numbers[ i ])
              continue;
              if (result[ j ] < input_numbers[ i ])
              result[ j ] = input_numbers[ i ];
             
          }
      }
      sort(result);
      for(int i = 0; i < 3; i++)
      printf("%d | ", result[ i ]);
     
      system("pause");
      return 0;
 }

74K
01 марта 2012 года
efviop
13 / / 24.11.2011
и наконец правильный вариант))
Код:
#include <stdio.h>
  #include <stdlib.h>

  void swap_two(int* input, int i, int j)
  {
       int k;
       k = input[ i ];
       input[ i ] = input[ j ];
       input[ j ] = k;
  }

  void sort(int* input)
  {
      if(input[0] > input[1])
      swap_two(input,0,1);
      if(input[1] > input[2])
      swap_two(input,1,2);
      if(input[0] > input[1])
      swap_two(input,0,1);
  }

  int main()
  {
       int input_count = 3;
       int result[2];
       int input_numbers[100] = {1, 4, 3, 5, 56};

       scanf("%d",&input_count);
       for (int i = 0; i < input_count; i++)
       scanf("%d", &input_numbers[ i ]);
       for (int i = 0; i < 3; i++)
       result[ i ] = input_numbers[ i ];
       sort(result);//смещаем большие значения в конец массива
       for (int i = 3; i < input_count; i++)
       {
           //возвращаемся в начало цикла так как в result[1],result[2] только большие значения
           if(result[ 0 ] == input_numbers[ i ])
           continue;
           if (result[ 0 ] < input_numbers[ i ])
           {
               result[ 0 ] = input_numbers[ i ];
               sort(result);
           }
       }
       for(int i = 0; i < 3; i++)
       printf("%d | ", result[ i ]);
       
       system("pause");
       return 0;
  }

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог