Сортировка одномерного массива - доработка кода - C (СИ)

  1. C1 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 #include <stdio.h> #include <conio.h> #include <stdlib.h>   void Shell(int *mas,int n) {      int i,j; //"ГЎГҐГЈГіГ*ГЄГЁ"        int temp; //âñïîìîãГ*òåëüГ*Г*Гї ïåðåìåГ*Г*Г*          int h = n/2;      while(h>0)// ïðîâåðÿåì, åñëè h>0 ГІГ® âõîäèì Гў òåëî öèêëГ*      {         for ( int i = 0; i < n; i++ )                {                     if(mas[j] > mas[j+h])                     {                          temp = mas[j];                          mas[j] = mas[j+h];                          mas[j+h] = temp;  //ïåðåñòГ*Г*îâêГ* ýëåìåГ*òîâ                          j=j-h;                     }                     else                          j=-1;// ïåðåñòГ*Г*îâêè Г*ГҐ áûëî -  "ГЎГҐГЈГіГ*îê" óìåГ*ГјГёГЁГ¬ Г*Г* 1                  }           }           h=h/2;      }       int main(void) { int n, i, mas[i];  int temp; //âñïîìîãГ*òåëüГ*Г*Гї ïåðåìåГ*Г*Г*   printf("\nVvedite Kol-vo el-ov massiva : "); scanf("%d", &n); printf("\n\nMassiv : \n\n");   for(i=0;i<n;i++) {                printf("%3d ", mas[i]=rand()%100-rand()%100); //ïîñëå "-" äèГ*ïîçîГ* îòðèöГ*òåëüГ*ûõ Г§Г*-ГЁГ©. (ГІГіГІ 100) } Shell(mas,i);   for(i=0;i<n;i++) {                printf("%3d ", mas[i]); }  getch();  return 0; }


textual

Код:

#include <iostream>
 
using namespace std;
 
int main()
{
    int n,a[100000],i,j;
    cin>>n;
    for (i=1; i<=n; i++)
    {
        cin>>a[i];
    }
    for (i=1; i<=n; i++)
    {
        for (j=i+1; j<=n; j++)
        {
            if (a[i]>a[j])
            {
                swap(a[i],a[j]);
            }
        }
    }
    for (i=1; i<=n; i++)
    {
        cout<<a[i]<<" ";
    }
    system ("pause");
    return 0;
}


Похожие ответы
  1. Добрый вечер! Дан массив M*N. Необходимо отсортировать ее по строкам так, чтобы вначале шли все положительные элементы, отсортированные по убыванию, а затем все остальные, отсортированные по возрастанию (если в строке имеются нули - переставить их в конец строки). Вывести получившуюся матрицу. У меня проблема с перестановкой нулей. C1 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 #include     int main()     {   int N, M,t, i,j,k, mas[10][10]={0}, q;         printf("VVEDITE N,M \n");     scanf("%d%d", &N,&M);     printf("VVEDITE MASSIV \n");       for (i=0; i < N; i++)        for (j=0; j < M; j++)            scanf ("%d", &mas[i][j]);       for(k = 0; k < N; k++){     for(i = 0 ; i < M; i++){         for(j = i + 1; j < M; j++){               if((mas[k][i] < mas[k][j]) && (mas[k][i]!=0)){                       t = mas[k][i];                     mas[k][i] = mas[k][j];                     mas[k][j] = t;               }         }     } }   if (mas[i][j]<0) {     } {   for(k = 0; k < N; k++){         for(i = 0 ; i < M; i++){             for(j = i + 1; j < M; j++){                   if(mas[k][i] < mas[k][j]) {                       t = mas[k][i];                     mas[k][i] = mas[k][j];                     mas[k][j] = t;               }         }     } } } for(i = 0 ; i < M; i++)     {         for(j = 0; j < M; j++)             if (mas[i][j]==0)         {                 for ( q = j; q < N-1 ; q++)                 {                     mas[i][q] = mas[i][q + 1];                 }                 mas[N-1][M-1] = 0;           }     }   for (i=0; i < N; i++)        {for (j=0; j < M; j++)               printf ("%d\t", mas[i][j]);        printf (" \n");}   getch();}

  1. Есть быстрая сортировка:C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void quick_sort(int* sarr, int j) {     int size = j;     int k = 0;     int c = sarr[(int)(j / 2)];     int tmp = 0;     do {         while (sarr[k] < c) k++;         while (sarr[j] > c) j--;           if (k <= j) {             tmp = sarr[k];             sarr[k] = sarr[j];             sarr[j] = tmp;             k++;             j--;         }     } while (k <= j);     if (j > 0) quick_sort(sarr, j);     if (j > 0) quick_sort(sarr + k, size - k); }Как сделать что бы сортировались только четные числа?

  1. Нужна программа, в которую вводишь текст и она расставляет буквы по алфавиту (обязательно с помощью пузырьковой сортировки) и выводит на экран с пробелами между группой букв. Пример: Ввод: Annulo cingitul tenui, plano, nusquam cohaerente, ad eclipticam inclinato. Вывод: aaaaaaa cccc d eeeee g h iiiiiii lllll mm nnnnnnnnn oooo pp q r s ttttt uuuuu

  1. Не могу нормально отсортировать элементы структуры с помощью быстрой сортировки. Программа просто, не прекращается, как будто цикл бесконечный. Не могу понять где ошибка. HELP!C1 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 #include #include #include #include #include #include struct Product {     char name[15]; }; int N; struct Product A[100]; struct Product X[1]; int Check_Input() {     char buf[BUFSIZ];     char junk;     int Input;     bool ok = false;     while (!ok)     {         _textcolor(7);         fputs("Введите количество товара: ", stdout);         fflush(stdout);         if (fgets(buf, BUFSIZ, stdin) == NULL)         {             if (!ferror(stdin))             {                 fputs("Вход не доступен!\n", stderr);                 exit(EXIT_FAILURE);             }             else             {                 perror("stdin");                 clearerr(stdin);                 continue;             }         }         if (sscanf(buf, "%d %c\n", &Input, &junk) != 1)         {             _textcolor(4);             fputs("Неправильный ввод!\n", stderr);             continue;         }         if (Input <= 0 || Input > 99)         {             _textcolor(4);             fputs("Неправильный ввод!\n", stderr);             continue;         }         ok = true;     }     return Input; } void speed2_inc_dec1_flat1(int l, int r) {     int k=(r + l) / 2;  //находят  центральный элемент     printf("%d\n",k);     A[N+1]=A[k];     printf("%s\n",X[1].name);     int i = l;     int j = r;     while (i <= j)     {         while //(A[i].name[0] > X[1].name[0])             (strcmp(A[i].name,A[N+1].name)<0)             i++;         while //(A[i].name[0] < X[1].name[0])             (strcmp(A[i].name,A[N+1].name)>0)             j++;         if (i <= j)         {             A[N] = A[j];             A[j] = A[i];    //<----Обмен переменными             A[i] = A[N];             i++;             j--;         }     }     if (i < r)         speed2_inc_dec1_flat1(i, r);     if (l < j)         speed2_inc_dec1_flat1(l, j); } void Output(struct Product *array, int size) {     for(int i = 0; i < size; i++)     {         printf("%s\n", array[i].name);     } } void Input(struct Product *array, int size) {     for(int i = 0; i < size; i++)     {         printf("Введите элемент №%d: ", i+1);         scanf("%s", &array[i].name);     } } int main(int argc, char *argv[]) {     setlocale(LC_ALL, "ru");     system("cls");     N=Check_Input();     Input(A,N);     Output(A,N);     speed2_inc_dec1_flat1(0,N-1);     Output(A,N); }

  1. Пожалуйста, помогите написать такую программу Заполнить массив из 10 элементов случайными числами в интервале [0..100] и отсортировать его по последней цифре. Пример: Исходный массив: 14 25 13 30 76 58 32 11 41 97 Результат: 30 11 41 32 13 14 25 76 97 58

  1. Подскажите как действовать. Ошибка появляется при записи во 2ой массив отрицательные эл-ты из 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 #include // подключение библиотек #include #include #include #include   #define BORDER_HIGH 100  // константы для рандома чисел #define BORDER_LOW -100     bool arrUnic(float *arr, int countValue, float value) // функция на проверку уникальности элементов {       for (int i = 0; i < countValue; i++)     {           if (arr[i] == value)             return false;     }     return true;   }   void main() {     setlocale(LC_ALL, "RUS");     float* arr; // первый массив     float* arr2 ; // второй массив, в который нужно записать отрицательные числа     int length; // кол-во эл-тов массива     int countValue = 0, otrel = 0;     short a;       printf("Введите кол-во эл-тов массива: ");     scanf_s("%d", &length);     arr = (float *)malloc(length * sizeof(float));         printf("Как заполнить массив? \n 1) с клавиатуры \n 2) рандомно \n 3)выйти \n ");     scanf_s("%hd", &a);       switch (a)     {     case 1:     {         printf("Заполните массив: \n");         for (int i = 0; i < length; i++)         {             float value;             scanf_s("%f", &value);             while (!arrUnic(arr, countValue, value))             {                 printf("Введите значение еще раз: ");                 scanf_s("%f", &value);             }             arr[i] = value;             countValue++;         }       }   break;       case 2: {         printf("Массив заполняется рандомно! \n");         srand((unsigned)(time(NULL)));           for (int i = 0; i < length; i++)         {             float value;             value = BORDER_LOW + (BORDER_HIGH - BORDER_LOW)*((float)rand() / RAND_MAX);             while (!arrUnic(arr, countValue, value))             {                 printf("Рандомим еще раз: ");                 value = BORDER_LOW + (BORDER_HIGH - BORDER_LOW)*((float)rand() / RAND_MAX);             }             arr[i] = value;             countValue++;           }       }; break;     case 3: exit(3); break;     default: break;     }       printf("Заполненный массив: \n");     for (int i = 0; i < length; i++)  // выводим массив первый, и одновременно подсчитываем кол-во отрицательных эл-тов, чтобы узнать, сколько памяти нужно выделить для 2го массива     {         if (arr[i] < 0)         {             otrel++;         }         printf("a[%d]=%.2f \n", i, arr[i]);     }       printf("\n\n \n");       arr2 = (float *)malloc(otrel * sizeof(float)); // выделение памяти для 2го массива           for (int i = 0; i < length; i++){ // ищем отрицательные эл-ты и записываем во 2ой массив ( тут как раз и непонятности  появляются )     if (arr[i] < 0)     arr2[i] = arr[i];   }                 printf("Кол-во отрицательных элеметов: %d \n", otrel);     printf("Массив В, в котором хранятся отрицательные элементы \n");       for (int y= 0; y< otrel;y++) // выводим 2ой массив из отрицательных чисел     {         printf("b[%d]=%.2f \n", y, arr2[y]);     }           delete arr;     delete arr2;       system("pause"); } На скриншоте видно, что записывается 1 эл-т, а остальные нет ( вместо них- мусор )

  1. В общем, я запутался. Вот задание. Необходимо разработать программу согласно варианту задания. При реализации использовать указатели на функции и (или) массивы указателей на функции. -------------------------------------------------- Дан список записей типа ТОВАР (размер списка и его элементы вводятся пользователем). Упорядочить список по любому из полей в любом направлении. Поле и направление выбирает пользователь. В функцию сортировки должен передаваться указатель на функцию сравнения двух элементов. (20 баллов). ТОВАР: - наименование товара (строка 15 символов); - единицы измерения (строка 5 символов); - цена (вещественное число с двумя знаками после запятой); - количество (целое положительное число). То, что накаляканоC1 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 #include #include #include #include #include typedef struct {     char  name[16];     char  mesr[6];     double price;     int count; }Good; typedef Good *Ptr; typedef int (*Pfun)( void *, void * ); int cmpNM ( void *, void * ); int cmpCNT( void *, void * ); void sortbychoice( Ptr , int, size_t, void (*), Pfun ); void swap ( Ptr , Ptr ); int main( int argc, char *argv[ ] ) {     //printf( "%d",  offsetof( Good, count) );     int d = 0, count;     printf( "Enter count of lists: ");     while( !d || count <= 0)     {         d = scanf( "%d", &count );         if( !d || count <= 0 ) { while( getchar( ) != '\n' ); printf( "Repeat: "); }     }     fflush( stdin );     int i;     Ptr list = (Good*)calloc( count, sizeof(Good));     for( i = 0; i < count; i++ ) { printf( "Name|Measure|Price|Count: " ); scanf( "%s%s%lf%d", list[i].name, list[i].mesr, &list[i].price, &list[i].count ); while( getchar( ) != '\n' );}       //       //sortbychoice( list, count, sizeof(char)*15, list[i].name, cmpNM );     sortbychoice( list, count, offsetof( Good, count ), &list[i].count, cmpCNT);     for( i = 0; i < count; i ++ ) printf( "Name: %s | Measure: %s | Price: %3.2lf | Count: %03d\n", list[i].name, list[i].mesr, list[i].price, list[i].count );     system( "pause" );     getch( );     return 0; }   void swap ( Ptr arg1, Ptr arg2 ) {    Good temp = *arg1;    *arg1 = *arg2;    *arg2 = temp;    return; } int cmpNM( void * arg1, void * arg2 ) {     if( strcmp( (char*)arg1, (char*)arg2 ) == 1 ) return 1;     else return 0; } int cmpCNT( void * arg1, void *arg2 ) {     if(*((int*)arg1) > *((int*)arg2)) return 1;     else return 0; } void sortbychoice ( Ptr good, int count, size_t size, void *arr, Pfun fun  ) {      Ptr mass = good;      int i, j, im;      char * ar = ( char* )arr;      for( i = 0; i < count - 1; i++ ){         im = i;         for( j = i + 1; j < count; j++ ) if( fun( (void*)( ar + im*size),  (void*)( ar + j * size )) ) im = j;         swap( &mass[i], &mass[im] );      }      return; }Добавлено через 3 минуты дело в том, что я не могу понять, как мне обращаться к началу памяти одного и того же поля в массиве структур. Делал такое с обычными массивами, вроде всё работало. Вот как делал:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void SortArray( void *array, unsigned num, size_t size, int (*fun)(void *arg1, void *arg2), void (*fun1)( void *arg1, void *arg2)) {     int i, j;     int imin, imax;     char *ptr = (char* )array; // указатель на начало памяти массива     for( i = 0; i < num - 1; i += 2 )     {         imin = i;         for( j = i + 2; j < num; j += 2 )         if( fun( (void*)(ptr + imin*size), (void*)(ptr + j*size)) > 0 ) imin = j;                 fun1( ptr + i*size, ptr + imin*size);// смещение указателя на size бацтов массив     }  for( i = 1; i < num - 1; i += 2 )     {         imax = i;         for( j = i + 2; j < num; j += 2 )         if( fun( (void*)(ptr + imax*size), (void*)(ptr + j*size)) < 0 ) imax = j;                 fun1( ptr + i*size, ptr + imax*size );// смещение указателя на size бацтов массив     } }Добавлено через 32 минуты Сообщение от Michail97 //sortbychoice( list, count, sizeof(char)*15, list[i].name, cmpNM ); * * sortbychoice( list, count, offsetof( Good, count ), &list[i].count, cmpCNT); На эти строки на намекать. ИсправилДобавлено через 3 минуты В общем, для сортровки по кол - ву работает вроде.C1 2 3 4 5 6 7 8 9 10 11 12 void sortbychoice ( Ptr good, int count, void *arr, Pfun fun  ) {      Ptr mass = good;      int i, j, im;      char * ar = ( char * )arr; // указатель на начало памяти выбранного поля аргумента arg      for( i = 0; i < count - 1; i++ ){         im = i;         for( j = i + 1; j < count; j++ ) if( fun( (void*)( ar + im*sizeof( Good)),  (void*)( ar + j * sizeof(Good) )) ) im = j;         swap( &mass[i], &mass[im] );      }      return; }Сейчас попробую со строками также провернутьДобавлено через 9 минут В общем, пока работает. Если найдёте грабли ещё, укажите, пожалуйста. C1 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 #include #include #include #include #include typedef struct {     char  name[16];     char  mesr[6];     double price;     int count; }Good; typedef Good *Ptr; typedef int (*Pfun)( void *, void * ); int cmpNM ( void *, void * ); int cmpCNT( void *, void * ); void sortbychoice( Ptr , int, void (*), Pfun ); // для 1 - ого аргумента необходимо передать 2 - ой указатель void swap ( Ptr , Ptr ); int main( int argc, char *argv[ ] ) {     //printf( "%d",  offsetof( Good, count) );     int d = 0, count;     printf( "Enter count of lists: ");     while( !d || count <= 0)     {         d = scanf( "%d", &count );         if( !d || count <= 0 ) { while( getchar( ) != '\n' ); printf( "Repeat: "); }     }     fflush( stdin );     int i;     Ptr list = (Good*)calloc( count, sizeof(Good));     for( i = 0; i < count; i++ ) { printf( "Name|Measure|Price|Count: " ); scanf( "%s%s%lf%d", list[i].name, list[i].mesr, &list[i].price, &list[i].count ); while( getchar( ) != '\n' );}       //       sortbychoice( list, count,list[0].name, cmpNM );     //sortbychoice( list, count, &list[0].count, cmpCNT);     for( i = 0; i < count; i ++ ) printf( "Name: %s | Measure: %s | Price: %3.2lf | Count: %03d\n", list[i].name, list[i].mesr, list[i].price, list[i].count );     system( "pause" );     getch( );     return 0; }   void swap ( Ptr arg1, Ptr arg2 ) {    Good temp = *arg1;    *arg1 = *arg2;    *arg2 = temp;    return; } int cmpNM( void * arg1, void * arg2 ) {     if( strcmp( (char*)arg1, (char*)arg2 ) == 1 ) return 1;     else return 0; } int cmpCNT( void * arg1, void *arg2 ) {     if(*((int*)arg1) > *((int*)arg2)) return 1;     else return 0; } void sortbychoice ( Ptr good, int count, void *arr, Pfun fun  ) {      Ptr mass = good;      int i, j, im;      char * ar = ( char * )arr;      for( i = 0; i < count - 1; i++ ){         im = i;         for( j = i + 1; j < count; j++ ) if( fun( (void*)( ar + im*sizeof( Good)),  (void*)( ar + j * sizeof(Good) )) ) im = j;         swap( &mass[i], &mass[im] );      }      return; }

  1. Написать программу вывода элементов одномерного массива при наличии чисел заглушек и с правильным порядком индексации C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include     int main(){     int a[10] = {-1, 7, 1, 3, 1, -1, 4, -1, 6, 5 };   int  i = 0;               for(i = 0; i < sizeof(a)/ sizeof(*a); ++i)            if (a[i] != -1 )    printf ("a[%d]= %d\n", i, a[i]);    return 0; }Помогите вывести правильную индексацию массива

  1. Не получается выполнить сортировку двусвязного списка методом пузырька. У меня получилось сделать только один заход, а их надо несколько.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 struct LIST {     int info;     LIST* next;     LIST* prev; };   void sort(LIST *i, LIST *start, LIST *last) {     int tmp=0;     i=start;     if((i->info)>(i->next->info))     {         tmp=i->info;         i->info=i->next->info;         i->next->info=tmp;     } }

  1. Добрый день уважаемы форумчане проблема вот в чём, не работает сортировка (компилю в Pellec C, может проблема в нём) и ещё не совсем понимаю как сделать фильтрацию, помогите кто чем может. Код прилагаю.C1 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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 #include #include #include #include   struct node {     int elem;     char* name;     struct node* next, *prev; };   typedef struct node Node;   struct list {     Node* head;     Node* tail; };   typedef struct list List;   void initializeList(List* lst) {     lst->head = 0;     lst->tail = 0; }   void push_back(List* lst, int numb ,  char nam []) {     Node* t = (Node*) malloc(sizeof(Node));     t->elem = numb;      size_t length = strlen(nam);    t->name = (char*) malloc(length + 1);    strcpy(t->name, nam);;     t->next = 0;     if(lst->head == 0)     {        lst->head = t;        lst->tail = t;        return;     }     lst->tail->next = t;     lst->tail = t; }   void print_list(const List* const lst) {     for(Node* tmp = lst->head; tmp; tmp = tmp->next)         printf("%d  %s\n", tmp->elem,tmp->name);   }   void free_list(List* lst) {     lst->tail = lst->head;     while(lst->head)     {        lst->head = lst->head->next;        free(lst->tail);        lst->tail = lst->head;     } }        void SaveToFile(List* lst) {       FILE *f;     f = fopen("main.txt","wb"); // Открываем файл на запись данных     if (f == NULL) { // Не удалось открыть - выводим сообщение об ошибке         fprintf(stderr, "Не могу открыть файл на запись.\n");         }     int count = 0;      for(Node* tmp = lst->head; tmp; tmp = tmp->next)         { // Записываем в файл элементы по 1 за цикл, перемещаясь по списку пока не достигнем конца         fprintf(f, "%d\r\n",tmp->elem);         fprintf(f, "%s\r\n",tmp->name);        count++;     }     // Закрываем файл     fclose(f);     // Выводим сообщение     printf("\n --> Записано %d записей в файла main.txt\n",count);   }    void LoadInFile(List* lst) {       FILE *f;     f = fopen("main.txt","ab+"); // Открываем файл на запись данных     if (f == NULL) { // Не удалось открыть - выводим сообщение об ошибке         fprintf(stderr, "Не могу открыть файл на запись.\n");         exit(0);     }     int count = 0;           char* w = (char*)malloc(30 * sizeof(char));         int q;         while(fscanf (f, "%d%s",  &(q),w) != EOF)         {        // printf("%d %s\n", q, w);         push_back(lst,q,w);         count++;            }     // Закрываем файл     fclose(f);     // Выводим сообщение     printf("\n --> Загрузил %d записей в файла main.txt\n",count);   }   void search_elem(List* lst, int numb) {    Node* tmp = lst->head;      printf("Список искомых");      printf("==============================\n");      while(tmp!=NULL)      {          if(tmp->elem==numb)          {              printf(" %d",tmp->elem);              printf(" %s\n",tmp->name);            }          tmp=tmp->next;      } }     void Del_elem (List* lst,int n) {     int i;      Node *s = lst->head;     Node *p;     for (i = 1; i < n - 1; i ++)         s = s->next;     p = s->next;     s->next = s->next->next;     free(p); }   void Red_elem (List* lst,int n) {     int i;      Node *s = lst->head;     for (i = 1; i <= n - 1; i ++)         s = s->next;         printf("Редактируеммая запись");         printf(" %d",s->elem);         printf(" %s\n",s->name);         printf("Введите новые значения");         scanf("%d",&s->elem);         scanf("%s",s->name); }     void ind_list(List* lst) { List ls; initializeList(&ls); int elem; char name[30]; for(Node* tmp = lst->head; tmp; tmp = tmp->next)     {         printf(" %d",tmp->elem);         printf(" %s\n",tmp->name);         elem=tmp->elem;         strcpy(name,tmp->name);         printf(" %d",elem);         printf(" %s\n",name);         push_back(&ls,elem,name);     }   }   void SortIns(List *lst) {   Node *tmp, *cur;         //Локальные переменные   //Проверка: если в списке менее двух элементов, то   //сортировать бессмысленно   if((!lst->head)||(!lst->head->next)) return;   //Устанавливаеся указатель на текущий элемент на второй   lst->tail = lst->head->next;       //элемент в списке   //В цикле: пока не упорядочены все элементы   while(lst->tail){     //Указатель tmp - на текущий элемент в списке     tmp = lst->tail;     //Указатель cur - на предыдущий элемент в списке     cur = lst->tail->prev;     //Указатель на текущий элемент устанавливается на     //следующий элемент в списке     lst->tail = lst->tail->next;     //Выделение элемента, на который установлен указатель     cur->next = tmp->next;               //tmp, из списка     if(tmp->next) tmp->next->prev = cur;     //В цикле производится поиск места вставки    //while(cur&&(cmp(&cur->elem,&tmp->elem) > 0))       cur = cur->prev;     //Если выделенный элемент нужно вставить в «середину»     if(cur){       tmp->next = cur->next;       tmp->prev = cur;       cur->next = tmp;       if(tmp->next) tmp->next->prev = tmp;     }else{  //Иначе: в начало списка       tmp->next = lst->head;       tmp->prev = NULL;       lst->head->prev = tmp;       lst->head = tmp;     }   }   //Установка указателя на текущий элемент на   lst->tail = lst->head;    //начало списка }       int main(void) { setlocale(LC_ALL, "RU");     List lst;     initializeList(&lst);     LoadInFile(&lst);     //SortIns(&lst);     int input;     do{     printf("Выберите действие: ");     printf("\n1 - Вывод списка на экран: ");     printf("\n2 - Добавление записи: ");     printf("\n3 - Редактирование записи: ");     printf("\n4 - Удаление записи: ");     printf("\n5 - Поиск записи:");     printf("\n6 - Выход:\n");     scanf( "%d", &input );     system("cls");     switch ( input ) {         case 1:                       print_list(&lst);             break;         case 2:             push_back(&lst, 10,"azz");             break;         case 3:             Red_elem(&lst,2);             break;         case 4:             Del_elem(&lst,4);             ind_list(&lst);             break;         case 5:             search_elem(&lst,10);             break;         case 6:             SaveToFile(&lst);             free_list(&lst);             exit(0);             break;           default:             printf( "Неправильный ввод.\n" );     }     }while(input!= 6);     //int k;     //char l[30];     //scanf("%d",&k);     //scanf("%s",l);       /*printf("\n 1Список\n");     print_list(&lst);    // push_back(&lst, 10,"azz");     //push_back(&lst, 15,"azz");    // push_back(&lst, 25,"azz");    // push_back(&lst, 1,"azz");     //push_back(&lst, k,l);     printf("\n 2Список\n");     print_list(&lst);     Red_elem(&lst,2);     printf("\n 4Список\n");     print_list(&lst);     Del_elem(&lst,4);     ind_list(&lst);     printf("\n 3Список\n");     print_list(&lst);       search_elem(&lst,10);*/     SaveToFile(&lst);     free_list(&lst); }Компилятор ругается на эту строчку C1 //while(cur&&(cmp(&cur->elem,&tmp->elem) > 0)) проблема во мне или в компиляторе?