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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Александр94_94
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 20
#1

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

18.03.2012, 21:49. Просмотров 453. Ответов 8
Метки нет (Все метки)

Даны натуральное число N (N<=60) и массив A(N). В этом массиве хранятся значения высот некоторого участка местности (вводятся пользователем самостоятельно или массив заполняется случайными числами). Пользователь вводит значение высоты (число должно быть из массива) или он может ввести номер точки (порядковый номер элемента массива) на которой находится. Нужно вывести номера тех точек местности (элементов массива) которые с позиции на которой он находится ему будут не видны.

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

Вывести номера элементов заданного массива, больших 1, а если таковых нету, то вывести номер наибольшего - C++
Написал программу, которая выводит номера элементов, больших 1. Если таковых нету, то программа выводит номер наибольшего элемента. Но я...

Есть ли среди элементов массива простые числа? Если да, то вывести номера этих элементов - C++
Задан целочисленный массив размерности N. Есть ли среди элементов массива простые числа? Если да, то вывести номера этих элементов.

Есть ли среди элементов заданного массива простые числа? Если да, то вывести номера этих элементов - C++
Задан целочисленный массив размерности N. Есть ли среди элементов массива простые числа? Если да, то вывести номера этих элементов.

Вывести номера минимальных элементов массива - C++
№1 Данная последовательность целых чисел. Заменить все элементы, меньшие заданного числа, этим числом. Нужно сделать используя одномерный...

Вывести номера минимального и максимального элементов массива - C++
нужно вывести номера минимального и максимального элементов массива #include &lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; ...

Вывести номера элементов массива, меньших заданного числа - C++
Вывести номера элементов массива m, меньших заданного числа. Данные в массив вводятся с клавиатуры. Вывести массив

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
panicwassano
591 / 559 / 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;
  }
попробуй прикрути это просто в нужное место к своему коду ввода\вывода. Завтра мб посмотрю, если время будет.
Александр94_94
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 20
01.04.2012, 02:36  [ТС] #9
Хорошо, спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2012, 02:36
Привет! Вот еще темы с ответами:

Вывести на экран номера всех минимальных элементов одномерного массива. - C++
Ребят помогите. Дана последовательность из n дейтсвительных чисел. использовать одномерный массив. нужно вывести на экран номера всех...

Вывести номера второго, четвертого и пятого положительных элементов массива - C++
Вывести номера второго, четвертого и пятого положительных элементов. данные ввести с клавиатуры.

Вывести номера всех элементов массива, не попадающих в заданный интервал - C++
используя одномерный массив, вывести на экран номера всех элементов не попадающих в заданный интервал

Вывести на экран номера всех элементов массива, не совпадающих с максимальным элементом - C++
Помогите решить используя одномерный массив) Дана последовательность из n действительных чисел. Вывести на экран номера всех элементов,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.04.2012, 02:36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru