Форум программистов, компьютерный форум CyberForum.ru

Вывести номера точек местности (элементов массива) - C++

Восстановить пароль Регистрация
 
Александр94_94
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 20
18.03.2012, 21:49     Вывести номера точек местности (элементов массива) #1
Даны натуральное число N (N<=60) и массив A(N). В этом массиве хранятся значения высот некоторого участка местности (вводятся пользователем самостоятельно или массив заполняется случайными числами). Пользователь вводит значение высоты (число должно быть из массива) или он может ввести номер точки (порядковый номер элемента массива) на которой находится. Нужно вывести номера тех точек местности (элементов массива) которые с позиции на которой он находится ему будут не видны.

Язык программирования: C.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2012, 21:49     Вывести номера точек местности (элементов массива)
Посмотрите здесь:

C++ Вывести на экран номера всех минимальных элементов одномерного массива.
Есть ли среди элементов массива простые числа? Если да, то вывести номера этих элементов C++
C++ вывести номера минимального и максимального элементов массива
Массив: Найти номера двух ближайших по значению элементов из этого массива и вывести их в порядке увеличения C++
Вывести номера всех седловых точек матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
18.03.2012, 23:16     Вывести номера точек местности (элементов массива) #2
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
#include <iostream>
#include <ctime>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "");
    const int N = 10;
    int heigh[N];
 
    srand((unsigned)time(0));
    for (int i = 0; i < N; i++)
    {
        heigh[i] = rand() % 70 + 10;
    }
 
        cout << "Номера точек и высота: \n";
    for (int i = 0; i < N; i++)
    {
        cout << i << " -> " << heigh[i] << '\n';
    }
 
    int k = 0;
    bool point;
    cout << "Введите высоту или номер точки: \n";
    cin >> k;
    cout << "Введите 0 если это высота или 1 если это точка: \n";
    cin >> point;
 
 
 
    if(!point)
    {
        cout << "Номера точек, которые не видны: \n";
        for (int i = 0; i < N; i++)
        {
            if(heigh[i] > k)
            {
                cout << i << " -> " << heigh[i] << '\n';
            }
        }
 
        cout << '\n';
    }
    else
    {
        cout << "Номера точек, которые не видны: \n";
        for (int i = 0; i < N; i++)
        {
            if(heigh[i] > heigh[k])
            {
                cout << i << " -> " << heigh[i] << '\n';
            }
 
        }
 
        cout << '\n';
    }
    return EXIT_SUCCESS;
}
Александр94_94
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 20
01.04.2012, 01:24  [ТС]     Вывести номера точек местности (элементов массива) #3
Собсвенно нужен код на обыкновенном С. Идея задачи в том, что бы сравнивая тангенсы и высоты определить невидимые для пользователя высоты.

Например: Следующая высота меньше чем та, на которой находится пользователь, мы находим тангенс угла между этими высотами (по формуле противолежащий катет/прилежащий) и далее переходим к следующей высоте, находим тангенс уже другого угла и сравниваем два значения, если второе значение больше, то переменной (где хранился первый тангенс) присваиваем значение вторго и т.д, а если тангенс второго оказался меньше, то выводим номер этой высоты.

Помогите пожалуйсто в реализации этого алгоритма. Бьюсь, бьюсь и не как не выходит.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
01.04.2012, 01:32     Вывести номера точек местности (элементов массива) #4
Цитата Сообщение от Александр94_94 Посмотреть сообщение
Помогите пожалуйсто в реализации этого алгоритма. Бьюсь, бьюсь и не как не выходит.
Кидай, что вышло =)
Александр94_94
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 20
01.04.2012, 01:40  [ТС]     Вывести номера точек местности (элементов массива) #5
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
#include<math.h>
#include <stdio.h>
    /*Функция Ввода*/
    int Enter (int *t,int q)
    {int i,n;
     while(1)
      {printf("Введите N\n");
       scanf("%d",&n);
       if(n>0 && n<q)
        break;
      }
     for(i=0;i<n;i++)
      {printf("A[%d]=\n",i);
       scanf("%d",t+i);
      }
     return n;
    }
    
    /*Функция нахождения не видимых высот*/
    void Fun (int *t,int n)
    {int i,j,shag,poz,q,max;
     double tg1,tg2;
     
     /*Ввод позиции*/
     while(1)
       {printf("Введите позицию на которой находимся\n");
        scanf("%d",&poz);
        if(poz>=0 && poz<n)
         break;
       }
    
    
    /*Ввод шага*/
    while(1)
      {printf("Введите шаг\n");
       scanf("%d",&shag);
       if(shag>0)
        break;
      }
      
      
    max=*(t+poz);
    tg1=fabs(*(t+poz)-*(t+poz-1))/shag;
    
    /*Вычисление не видимых высот влево*/
    for(i=poz-2,q=2;i-1>=0;i--,q++)
     {tg2=fabs(*(t+i)-*(t+poz))/(shag*q);
      if((*(t+i)>=*(t+i+1)) && (*(t+i)>=*(t+i-1)))
        {printf("%d\t",i-1);
         max=*(t+i);
         tg1=(max-*(t+poz))/(q*shag);
        }
       else
        if(*(t+i)>max && max!=*(t+poz))
         {max=*(t+i);
          tg1=(max-*(t+poz))/(q*shag);
         }
        else
         if(*(t+i)<max && max!=*(t+poz))
          {tg2=(*(t+i)-*(t+poz))/(q*shag);
           if(tg2<tg1)
            printf("%d\t",i);
           else
            tg1=tg2;
          }
      }
    }
    void main()
    {int n=30,g;
     int a[n];
     g=Enter(a,n);
     Fun(a,g);
    }
И такой:




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
#include<math.h>
#include <stdio.h>
    /*Функция Ввода*/
    int Enter (int *t,int q)
    {int i,n;
     while(1)
      {printf("Введите N\n");
       scanf("%d",&n);
       if(n>0 && n<q)
        break;
      }
     for(i=0;i<n;i++)
      {printf("A[%d]=\n",i);
       scanf("%d",t+i);
      }
     return n;
    }
    
    /*Функция нахождения не видимых высот*/
    void Fun (int *t,int n)
    {int i,j,shag,poz,q,max,g,f;
     double tg1,tg2,tgL,tgP;
     
     /*Ввод позиции*/
     while(1)
       {printf("Введите позицию на которой находимся\n");
        scanf("%d",&poz);
        if(poz>=0 && poz<n)
         break;
       }
    
    
    /*Ввод шага*/
    while(1)
      {printf("Введите шаг\n");
       scanf("%d",&shag);
       if(shag>0)
        break;
      }
    
    if(*(t+poz)>*(t+poz-1))
     {tg1=shag/fabs(*(t+poz)-*(t+poz-1));
      f=0;
     }
    if(*(t+poz)<*(t+poz-1))
     {tg1=fabs(*(t+poz)-*(t+poz-1))/shag;
      f=1;
     }
    
    
    /*проход в лево*/
    for(i=poz-2,q=2;i<=0;i--,q++)
     {  if(*(t+i)<*(t+i+1) && f==0)
            {tg2=(shag*q)/(*(t+poz)-*(t+i));
             if(tg2>=tg1)
              tg1=tg2;
             else
              printf("%d\t",i);
            }
        else
            if(*(t+i)<*(t+i+1) && f!=0)
            printf("%d\t",i);
            else
            if(*(t+i)>*(t+i+1) && *(t+i)<*(t+poz))
                tg1=(shag*q)/(*(t+poz)-*(t+i));
            else
                if(*(t+i)>=*(t+i+1) && *(t+i)==*(t+poz))
                {tg1=0;
                 tg2=0;
                 while(i-1>=0)
                     {if(*(t+i-1)<*(t+i))
                         printf("%d\t",i);
                      else
                         if(*(t+i-1)>*(t+i))
                             {tg1=fabs(*(t+i-1)-*(t+poz))/(shag*(q+1));
                              i--;
                              break;
                             }
                      i--;
                     }
                }
            
     }
    
    
    }
    
    
    
    
    
    
    
    
    void main()
    {int n=30,g;
     int a[n];
     g=Enter(a,n);
     Fun(a,g);
    }
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
01.04.2012, 02:08     Вывести номера точек местности (элементов массива) #6
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
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <float.h>
using namespace std;
int main()
{
 cout<<"Input N: ";
 int N;
 cin>>N;
 double *a=new double[N];
 srand(time(NULL));
 for (int i=0;i<N;i++)
  {
   a[i]=rand()%100;
   cout<<a[i]<<" ";
  }
 cout<<"\nInput distance between points: ";
 double d;
 cin>>d;
 cout<<"Input point number: ";
 int p;
 cin>>p;
 double tan_min=DBL_MAX;
 for (int i=p-1;i>=0;i--)
  {
   double tan=(a[p]-a[i])/(d*(p-i));
   if (tan>tan_min) cout<<i<<" "; else tan_min=tan;
  }
 tan_min=-DBL_MAX;
 for (int i=p+1;i<N;i++)
  {
   double tan=(a[i]-a[p])/(d*(i-p));
   if (tan<tan_min) cout<<i<<" "; else tan_min=tan;
  }
 system("pause");
 return 0;
}
Александр94_94
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 20
01.04.2012, 02:32  [ТС]     Вывести номера точек местности (элементов массива) #7
А ты не мог бы скинуть этот код на обыкновенном С? (т.е. в таком виде какой я скидывал)
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
01.04.2012, 02:35     Вывести номера точек местности (элементов массива) #8
Цитата Сообщение от Александр94_94 Посмотреть сообщение
А ты не мог бы скинуть этот код на обыкновенном С? (т.е. в таком виде какой я скидывал)
C++
1
2
3
4
5
6
7
8
9
10
11
12
 double tan_min=DBL_MAX;
 for (int i=p-1;i>=0;i--)
  {
   double tan=(a[p]-a[i])/(d*(p-i));
   if (tan>tan_min) cout<<i<<" "; else tan_min=tan;
  }
 tan_min=-DBL_MAX;
 for (int i=p+1;i<N;i++)
  {
   double tan=(a[i]-a[p])/(d*(i-p));
   if (tan<tan_min) cout<<i<<" "; else tan_min=tan;
  }
попробуй прикрути это просто в нужное место к своему коду ввода\вывода. Завтра мб посмотрю, если время будет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2012, 02:36     Вывести номера точек местности (элементов массива)
Еще ссылки по теме:

Вывести на экран номера всех элементов массива, не совпадающих с максимальным элементом C++
Вывести номера элементов массива, меньших заданного числа C++
Есть ли среди элементов заданного массива простые числа? Если да, то вывести номера этих элементов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Александр94_94
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 20
01.04.2012, 02:36  [ТС]     Вывести номера точек местности (элементов массива) #9
Хорошо, спасибо.
Yandex
Объявления
01.04.2012, 02:36     Вывести номера точек местности (элементов массива)
Ответ Создать тему
Опции темы

Текущее время: 19:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru