Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Сортировка массива. Язык С.

Автор: Bo2nik 19.03.2008 19:50

Недавно стали проходить язык С, написал программу сортировки массива через указатели. Выдает ошибки:
1. g:\на си\sort_bubble\sort_bubble.cpp(13): error C2143: syntax error : missing ';' before '{'
2. g:\на си\sort_bubble\sort_bubble.cpp(12): error C2059: syntax error : '*'

Если убрать "*" то это уже получается не через указатели или как? Помогите пожалуйста.

Код

#include "stdafx.h"
#include "stdio.h"

void bubbleSort(int a[], int col)
{                    
    int b=0;                              
    for (int i=1;  i<col;  i++)
    {            
        for (int j=0;  j<col-i;  j++)
        {    
            if *(a+j)>*(a+j+1)
            {    
                b=*(a+j);          
                *(a+j)=*(a+j+1);    
                *(a+j+1)=b;
            }
        }
    }
}

void main()
{
    int i, j;
    printf ("<SORT ARRAY>\n");
    int a[5];
    i=0;
    while (i<5)
    {
        printf ("Enter %d element array\n",i);
        scanf ("%d",*(a+i));
        i++;    
    }
    
    i=0;
    printf ("ORIGINAL ARRAY ->\n");
    while (i<5)
    {
        printf("%d element = %d\n",i,*(a+i));
        i++;
    }
    
    bubbleSort( a, 5 );
    printf ("ARRAY AFTER SORT ->\n");
    for ( i = 0; i < 5; i ++ )
    {
        printf ("%d element = %d\n",i,*(a+i));
    }
    
}

Автор: volvo 19.03.2008 20:00

Ты просто не взял в скобки все, что нужно:

if ((*(a+j))>(*(a+j+1)))
{
...
}


Добавлено через 1 мин.
P.S. Программа (если это именно C, а не С++) компилироваться не должна - описание переменных должно быть только ДО начала блока операторов, у тебя же локальные переменные описываются в операторе цикла...

Автор: Bo2nik 19.03.2008 20:07

Цитата(volvo @ 19.03.2008 16:00) *

Ты просто не взял в скобки все, что нужно:
if ((*(a+j))>(*(a+j+1)))
{
...
}


Добавлено через 1 мин.
P.S. Программа (если это именно C, а не С++) компилироваться не должна - описание переменных должно быть только ДО начала блока операторов, у тебя же локальные переменные описываются в операторе цикла...

Ээээ... точно чет, я, не посмотрел. Так скобки поставил теперь такая фигня вылезает:

Build log was saved at "file://g:\На Си\sort_bubble\Debug\BuildLog.htm"
sort_bubble - 0 error(s), 1 warning(s)

Когда запускаю программу, всё идет как надо, но после того как я веду первый элемент вылетает ошибка: "Отправлять - Не отправлять" и всё.

PS Когда я убирал "*" с условия if, т.е. обращался не через указатели, то всё нормально работало. Даже незнаю, что делать.

Автор: volvo 19.03.2008 20:34

Цитата
после того как я веду первый элемент вылетает ошибка:
Угу, все правильно...

Цитата
scanf ("%d",*(a+i)); /* Ну, и куда ты записываешь введенное значение? */

надо вот так:
scanf ("%d",(a+i));

потому что должен передаваться адрес переменной, а не значение...

Автор: Bo2nik 19.03.2008 20:40

Ух ты заработало !!! Даже сам не понял, че написал про этот scanf !!! Спасибо.