Массив: 130 случайных чисел из диапазона [-1000, 1000]. Найти номера двух ближайших по значению чисел из этого массива. Отсортируйте по убыванию все числа, расположенные между этой парой.
#include<stdio.h>
#include<time.h>
#include <stdlib.h>
void main()
{
int j,k,x,y,min=4000000;
int a[130];
srand((unsigned)time(NULL));
for(j=0;j<=130;j--)
a[j]=1000-srand() 01);
printf("a[%d]=%d\t",j,a[j++]);
printf("\n");
for(j=0;j<=130;j++)
{
for(k=j+1;k<=130;k++){
if(min>(a[j]-a[k]))
min=(a[j]-a[k])*(a[j]-a[k]),x=j,y=k;
}
printf("номера ближайших по значению элементов: %d и %d\n",x,y);
for(j=x+1;j-y;j++)
for(k=x+2;k-y;k++)
if(a[k]>a[k-1]){
min=a[k],a[k]=a[k-1]=min;
}
for(j=0;j<=130;j++)
printf("a[%d]=%d\t",j,a[j++]);
printf("\n");
free(a);
return;
}
Другие языки программирования и технологии
Помогите откомпилировать программу(язык Си)
// Алексей_Манюк_2012-01-13
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <math.h>
#define N 130
#define LIM 2001
#define NEG (LIM - 1) / 2
int main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");
int indexX, indexY, min, temp;
int a[N];
srand((unsigned) time(NULL));
do
{
indexX = indexY = 0;
min = LIM;
for (int j = 0; j < N; j++)
{
a[j] = NEG - rand() % LIM;
printf("a[%d] = %d\t", j, a[j]);
}
printf("\n");
for (int j = 0; j < N; j++)
{
for (int k = 0; k < N; k++)
{
if (j == k) continue;
if (a[j] < 0 && a[k] < 0 || a[j] >= 0 && a[k] >= 0)
{
if(min > abs((abs(a[j]) - abs(a[k]))))
{
min = abs(abs(a[j]) - abs(a[k]));
indexX = j;
indexY = k;
}
}
else if (a[j] >= 0 && a[k] < 0)
{
if (min > a[j] + abs(a[k]))
{
min = a[j] + abs(a[k]);
indexX = j;
indexY = k;
}
}
else if (a[j] < 0 && a[k] >= 0)
{
if (min > a[k] + abs(a[j]))
{
min = a[k] + abs(a[j]);
indexX = j;
indexY = k;
}
}
}
}
printf(" Индексы ближайших по значению элементов: %d и %d\n\n", indexX, indexY);
if (abs(indexX - indexY) < 3)
printf("\n Перестановка не требуется! \a");
else
{
if (indexX > indexY)
{
temp = indexX;
indexX = indexY;
indexY = temp;
}
indexX++;
int m, k = indexX + 1;
for (k; k < indexY; k++)
{
m = k;
while (m > indexX && a[m - 1] < a[m])
{
temp = a[m];
a[m] = a[m - 1];
a[m - 1] = temp;
m--;
}
}
}
for (int j = 0; j < N; j++)
printf("a[%d] = %d\t", j, a[j]);
getch();
system("cls");
}
while (1);
return 0;
}
Я, тут кое что исправил :)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <math.h>
#define N 130
#define LIM 2001
#define NEG (LIM - 1) / 2
int main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");
int indexX, indexY, min, temp;
int a[N];
srand((unsigned) time(NULL));
do
{
indexX = indexY = 0;
min = LIM;
for (int j = 0; j < N; j++)
{
a[j] = NEG - rand() % LIM;
printf("a[%d] = %d\t", j, a[j]);
}
printf("\n");
for (int j = 0; j < N; j++)
{
for (int k = 0; k < N; k++)
{
if (j == k) continue;
if (a[j] < 0 && a[k] < 0 || a[j] >= 0 && a[k] >= 0)
{
if(min > abs((abs(a[j]) - abs(a[k]))))
{
min = abs(abs(a[j]) - abs(a[k]));
indexX = j;
indexY = k;
}
}
else if (a[j] >= 0 && a[k] < 0)
{
if (min > a[j] + abs(a[k]))
{
min = a[j] + abs(a[k]);
indexX = j;
indexY = k;
}
}
else if (a[j] < 0 && a[k] >= 0)
{
if (min > a[k] + abs(a[j]))
{
min = a[k] + abs(a[j]);
indexX = j;
indexY = k;
}
}
}
}
printf(" Индексы ближайших по значению элементов: %d и %d\n\n", indexX, indexY);
if (abs(indexX - indexY) < 3)
printf("\n Перестановка не требуется! \a");
else
{
if (indexX > indexY)
{
temp = indexX;
indexX = indexY;
indexY = temp;
}
indexX++;
int m, k = indexX + 1;
for (k; k < indexY; k++)
{
m = k;
while (m > indexX && a[m - 1] < a[m])
{
temp = a[m];
a[m] = a[m - 1];
a[m - 1] = temp;
m--;
}
}
}
for (int j = 0; j < N; j++)
printf("a[%d] = %d\t", j, a[j]);
getch();
system("cls");
}
while (1);
return 0;
}
Я, тут кое что исправил :)
for(j=0;j<=130;j--)
от нуля до 130 =131 элемент. вылет за пределы массива
Нафига там минусы непонятно
И скобки упущены
(может ещё что - -дальше не копал)
от нуля до 130 =131 элемент. вылет за пределы массива
Нафига там минусы непонятно
И скобки упущены
(может ещё что - -дальше не копал)
Похожие вопросы
- Помогите с программой на си! Программа в описании
- Помогите плиз написать программу(язык Си)
- Помогите написать программу на Си
- Помогите с программой на Си/Си++
- помогите написать программу на Си
- помогите написать программу на си
- Помогите написать программу в СИ. буду очень благодарин
- помогите написать программу в Си
- Помогите с программой на Си. (создание многомерных динамических массивов)
- Помогите написать программу на Си.