0 / 0 / 1
Регистрация: 24.12.2016
Сообщений: 60
1

Перевести из С++ В СИ

26.05.2018, 12:19. Показов 317. Ответов 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
#include <vector>
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <numeric>
 
template <class Iterator>unsigned countOpp(Iterator begin, Iterator end)
{
    unsigned count = 0;
    while(++begin != end)
        if(*begin == -*(begin - 1))
            ++count;
    return count;
}
 
int main()
{
    srand(time(nullptr));
    std::vector<int> v(30);
    std::generate(v.begin(), v.end(), [] { return rand() % 101 - 50; });
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    std::cout << countOpp(v.begin(), v.end()) << std::endl;
    return 0;
}
Приблизительно в таком виде
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <alloc.h>
int main(void) 
{
  int size;      
  int *Ar;       
  int *Cr, *Ir; 
  int av, nn;    
                  
  randomize();   
  size=random(151)+50;
  printf("size=%d\n",size);
  Ar=(int far *)malloc(size*sizeof(int));
            
  printf("Начальный массив:\n");
  for (Cr=Ar; Cr<Ar+size; Cr++) 
      { *Cr=random(101)-50;
        printf("%3d ",*Cr);
      }
  putchar('\n');
              
  for (nn=0, Cr=Ar; Cr<Ar+size; Cr++) 
      { if (*Cr<0)
              
            if (!nn) 
               { 
                Ir=Cr; av=*Cr; nn=1;
               }
            else 
               { av+=*Cr; nn++;
                 
               }
        else     
            if (nn) 
               { 
                 for (av/=nn; Ir<Cr; Ir++)
                     if (*Ir<av) *Ir=av;
                 nn=0;
               } 
      }         
  if (nn) 
      for (av/=nn; Ir<Cr; Ir++)
           if (*Ir<av) *Ir=av;
                
  printf("Массив-результат:\n");
  for (Cr=Ar; Cr<Ar+size; printf("%3d ",*Cr++));
  putchar('\n');
  free(Ar);    
  return 0;
}
Буду очень благодарен за помощь)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2018, 12:19
Ответы с готовыми решениями:

Перевести фиолетовый (105, 62, 151) из RGB в HSB, уменьшить яркость в 2 раза и перевести обратно
Помогите пожалуйста! Перевести фиолетовый (105, 62, 151) из RGB в HSB, уменьшить яркость в 2 раза...

QString перевести в char* || QChar перевести в char*
Подскажите пожалуйста как сделать: Исходники в utf-8, qt4.8 setlocale(LC_ALL, &quot;Russian&quot;); ...

Как презентации SWF флэш сайта перевести в HTML5 с сохранением эфектов ) Как правильно и полноценно Перевести SWF в HTML5
программа Sothink SWF Decompiler конвертирует SWF файл в HTML5 разбивая его на HTML и JS ...но она...

Текстовый файл перевести в двоичный, а потом полученный двоичный файл перевести обратно в текстовый
Всем привет. Есть такая задачка: &quot;текстовый файл перевести в двоичный, а потом полученный двоичный...

1
1658 / 992 / 649
Регистрация: 25.04.2016
Сообщений: 2,803
26.05.2018, 15:20 2
В вашем коде вектор используется как статический массив, да и размер у него всего 30 элементов, так что нет никакого смысла городить динамический. Вот код вашей программы на си:

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// размер массива:
#define N 30
 
int countOpp (int * a, int n)
{
    int i, count = 0;
    for (i=1; i<n; i++)
        if (a[i] == -a[i-1]) count++;
    return count;
}
 
int main (void)
{
    srand(time(NULL));
    int i, v[N];
    for (i=0; i<N; i++)
    {
        v[i] = rand() %101 - 50;
        printf("%-4d", v[i]);
    }
    printf("\n%d\n", countOpp(v, N));
    return 0;
}
Добавлено через 2 минуты
я вас даже еще больше обрадую, тут и массив-то не нужен, достаточно "помнить" два соседних элемента, а для этого достаточно двух переменных:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main (void)
{
    srand(time(NULL));
    int i, a, b, count, n = 30;     // n - размер массива
    for (count=i=0; i<n; i++, b=-a)
    {
        a = rand() %101 - 50;
        printf("%-4d", a);
        if (i && a == b) count++;
    }
    printf("\n%d\n", count);
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2018, 15:20
Помогаю со студенческими работами здесь

Перевести из C++ в C#
помогите пожалуйста перевести код из с++ в с#!!!! using namespace std; #include &lt;iostream&gt;...

Перевести из C в С++
float f (float x) { //Функция, интеграл от которой берется return x*x*atan(x); } float...

Перевести на c++
uses crt; var m,n:integer; mm,mn:set of byte; begin clrscr; repeat writeln('Введите 2...

Перевести из Си в С++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; int check...

Перевести с C++ на C
Ну собственно нужно перевести этот код с C++ на C Написал бы сам,но не знаю как на C работать с...

Перевести из for в while
Вот часть кода, с циклом for: for(x=1; x&lt;=50; x++) y+=1/(x*x); printf(&quot;%f&quot;, y); Нужно...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru