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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2012, 11:42   #1
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию Сортировка одномерного массива. С

Прошу помощи, но не судите строго...Почему происходит сортировка только двух первых элементов массива?...(массив должен быть отсортирован в порядке возрастания)
Код:
# include <stdio.h>
# include <conio.h>

double sortirovka(double a[], double b, int n)
  {   
      int i,j;
    for (i=0; i<n-1; i++)
          for (j=i+1; j<n; j++)
            if (a[i]>a[j])
              {
                 b=a[i];
                 a[i]=a[j];
                 a[j]=b;
               }
           } 


int input( double a[])
{ int n,j;
while(1)
      {
              printf("\n Количество элементов массива n=");
              scanf("%i",&n);
              if ( n>1 & n<=100 ) break;
              printf("\n Недопустимое значение 1<n<=100)");
       } 
       printf("\n Значения элементов массива: \n");
       for (j=0; j<n; j++)
        {
        printf("a[%d]=", j+1);
        scanf("%lf", &a[j]);
      }
 } 
 
double output (double a[], int j, int n)
 {
         printf("\n Упорядоченный массив: \n");
          for (j=0; j<n; j++)
            printf("a[%d]=%g\n", j+1, a[j]);
 }

 int main()
{ 
      int n,i,j;
      double a[100],b;
     
   input(a);             
   sortirovka(a,b,n);                 
   output(a,j,n);        

         getch();
         return 0;
         
}
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 01.05.2012, 12:05   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
for (j=i+1; j<n; j++)
По-моему тут наоборот нужно: for (j=0; j<i; j++)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.05.2012, 12:12   #3
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

Stilet, тоже самое, сортирует только 2 первых, а остальные даже не выводит
Когда программа без разбиения на подпрограммы, то она работает, а вот я попытался разбить и вот нарвался на это...
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 01.05.2012, 13:27   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ладно. Лови ликбез:
1)
Цитата:
input(a);
sortirovka(a,b,n);
output(a,j,n);
Функции описаны как возвращающие значния, а ты из вызываешь без выражения. Некошерно. Не всем компиляторам это понравится.

2)
Цитата:
if ( n>1 & n<=100 ) break;
Это не логический оператор а битовый. Нужно &&. Читай книги по основам.

3)
Цитата:
double output (double a[], int j, int n)
j? Зачем??? Эта переменка должна быть локальной. Возможно именно из-за того что она у тебя не константный параметр (значение ее сохраняется для остальных функций) твоя сортировка проходит только кончик массива.

И так далее - недочетов море.

Вот подправил на скорую руку.
Код:
// uu.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <conio.h>
#include<stdlib.h>

void sortirovka(double a[],  int n)
  {   
      int i,j,b;
    for (i=0; i<n-1; i++)
          for (j=i+1; j<n; j++)
            if (a[i]>a[j])
              {
                 b=a[i];
                 a[i]=a[j];
                 a[j]=b;
               }
           } 


void input( double a[],int n)
{ 
       for (int j=0; j<n; j++)        {
        a[j]=rand()%100;
        printf("%g\t",a[j]);
	   }
} 
 
void output (double a[], int n)
 {
          for (int j=0; j<n; j++)
            printf("a[%d]=%g\n", j+1, a[j]);
 }
int _tmain(int argc, _TCHAR* argv[])
{
     int n=10,i,j;
      double a[10],b;
     
   input(a,n);             
   sortirovka(a,n);                 
   output(a,n);        

         getch();
         return 0;
}
Особо не оптимизировал и не вникал. Оставляю изучение основ тебе. Будь внимателен, смотри что пишешь и где.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.05.2012, 13:38   #5
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

Stilet, большое спасибо, попробую вникнуть
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки и сортировка одномерного массива Alebastr Паскаль, Turbo Pascal, PascalABC.NET 1 27.12.2011 21:48
VBA сортировка одномерного массива MIKE11IPME Помощь студентам 1 17.04.2011 20:58
сортировка одномерного массива imperceptible4462 Помощь студентам 10 07.09.2010 09:35
Сортировка одномерного массива Гамбит Помощь студентам 2 02.11.2009 00:28
Сортировка одномерного массива laponka Помощь студентам 7 14.09.2009 09:00