Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252

Регулярные циклы в С/С++

23.03.2010, 17:41. Показов 3000. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, помогите решить задачку на С/С++, очень нужно

Располижить в массиве Pol сначала положительные, а потом отрицательные элементы выходящего массива. Дан массив А(9)

Добавлено через 31 секунду
Буду очень благодарен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2010, 17:41
Ответы с готовыми решениями:

Регулярные циклы
Дано натуральное N. Вычислить 1+1/2+1*2/4+1*2*3/8+1*2*3*4/16+… .

Регулярные циклы в Delphi
Дано натуральное N. Получить aN, если известно a0=1, ak=k*ak-1+1/k, k=1,2,…

Циклы с условием, циклы с переменной, вложенные циклы
С условием 1. Ввести натуральное число N и вычислить сумму всех чисел фибоначчи меньших N. Предусмотреть защиту от ввода...

25
Псевдо программист
 Аватар для R0mm
192 / 113 / 37
Регистрация: 19.09.2009
Сообщений: 303
23.03.2010, 19:06
Как-то так
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
#include <iostream>
 
using namespace std;
 
#define NUM 9
 
int main() {
     int A[NUM];
     int Pol[NUM];
 
     cout << "Заполнение массива А.\n";
     for (int i=0; i<NUM; i++) {
          cout << "Введите элемент " << i+1;
          cin >> A[i];
     }
 
     for (int i=0, j=NUM-1; i<NUM; ) {
          if (A[i] > 0) {
               Pol[i] = A[i];
               i++;
          }
          else {
               Pol[j] = A[j];
               j--;
          }
     }
     return 1;
}
1
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
23.03.2010, 20:03  [ТС]
Я переделал немного эту программу и она не выводит то что мне нужно.... Вот ее код:
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
#include <iostream.h>
#include <conio.h>
 
int main() {
     int A[9];
     int Pol[9],i,j;
     clrscr();
     cout<<"Заполнение массива А.\n";
     for (i=0; i<9; i++) {
      cout<<"Введите элемент "<<i+1<<" ";
      cin>>A[i];
     }
 
     for (i=0, j=8; i<9; ) {
      if (A[i]>0) {
           Pol[i]=A[i];
           i++;
           cout<<endl<<Pol[i]," ";
      }
      else {
           Pol[j]=A[j];
           j--;
           cout<<endl<<Pol[j]," ";
      }
     }
     getch();
     return 0;
}
При ее запуске получается бсконечный вывод левых чисел... Кто знает в чем ошибка???
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
23.03.2010, 21:18
i<NUM; //вот причина.
i может даже и не стать >=NUM потому что не все элементы массива могут быть положительны.

посмотри на условие:
C
1
2
3
4
if (A[i] > 0) {
               Pol[i] = A[i];
               i++;
          }
В цикл требуется простой счётчик:
C
1
2
3
4
5
6
7
8
9
10
11
  for (int i=0,k=0, j=NUM-1; k<NUM; ) {
          if (A[i] > 0) {
               Pol[i] = A[i];
               i++;
          }
          else {
               Pol[j] = A[j];
               j--;
          }
k++;  //поэтому цикл прекратиться.
}
Добавлено через 54 минуты
Алгоритм не рабочий, только проверил.
1
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
23.03.2010, 21:21  [ТС]
Всем спс за помощь, но так как вы тут описывали мне не очень помогло. Тк мой компилятор сильно ругался. Вот написал сам код судите:
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
#include <iostream.h>
#include <conio.h>
 
void main()
{
 int a[9],pol[9];
 int i,k,j;
 clrscr();
 for (k=0; k<9; k++)
 {
  cout<<"Vvedite "<<k+1<<" element: ";
  cin>>a[k];
 }
 cout<<endl; j=-1;
 for (k=0; k<9; k++)
  if (a[k]>0) {
           j++; pol[j]=a[k];
          }
 j++;
 if (j>0) {
       for (k=0; k<j; k++) cout<<pol[k]<<" ";
          }
 cout<<endl; getch(); i=-1;
 for (k=0; k<9; k++)
  if (a[k]<0) {
           i++; pol[i]=a[k];
          }
 i++;
 if (i!=0) {
        for (k=0; k<i; k++) cout<<pol[k]<<" ";
           }
 getch();
}
Вроде все работает норм
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
23.03.2010, 21:23
Не берите в голову что я сказал алгоритм не работает уже проверено.
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
23.03.2010, 21:28  [ТС]
Я это тоже заметил когда его вставлял. Я в С\С++ пока не очень силен, т.к. недавно начали учить. Вот сам написал, вроде все норм)
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
23.03.2010, 21:40
Я не любитель потеть над алгоритмами, поэтому, такой изощренный и сложный тебе
для понимания вариант решения.
Просто вечером не очень хорошо думается.
Завтра что - нибудь по проще будет.
Этот пример тебе пригодится для дальнейшего изучения C++
Решение с помощью стека.
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
#include <iostream.h>
//Описание узла стека:
struct Node {
int n_str;
Node *pnext;
};
 
//----------------------------------------------------------------------
int push(Node **top, int index); //положить на вершину стека
int pop(Node **top);             //выборка  из стека
int print(Node *top);            //показать значения стека
int Update(Node **top);          //полное освобождение памяти из под стека.
//----------------------------------------------------------------------
 
int main() {
const int SIZE = 10;
int A[SIZE] = {1 , 2, -5 , 3 , 5 , -7 , 7 ,3 ,1 };
Node *top_Ot = NULL;  
Node *top_Pol = NULL; 
 
             int Pol[SIZE] = {0};
 
              int iter = 0;
              while(iter<SIZE){
 
              if(A[iter]>=0)push(&top_Pol,A[iter]);
              if(A[iter]<0)push(&top_Ot,A[iter]);
              iter++;
              }
 
for(int i = 0;top_Pol;i++)Pol[i] = pop(&top_Pol);
for(;top_Ot;i++)          Pol[i] = pop(&top_Ot);
 
for( int p = 0 ; p <SIZE ; p++ ) cout<<Pol[p]<<' ';
cout<<"\n";
 
 
 
     return 0;
}
 
int push(Node **top, int index){
//Если формируем первый элемент.
if((*top)==NULL){
Node * pv = new Node ;
pv->n_str = index;
pv->pnext = NULL;
(*top)=pv;
return 0;
}
 
//Иначе добавляем на вершину.
else {            
Node * pv = new Node ;
pv->n_str = index;
pv->pnext = (*top);
(*top)= pv;
return 0;
}
 
return 0;
 
 
}
 
 
//выборка  из стека
int pop(Node **top){
Node *tmp = (*top);
if(tmp){
int str = tmp->n_str;
(*top)=(*top)->pnext;
delete tmp;
return str;
}
 
return 0;
}
 
//показать значения стека
int print(Node *top){   
while(top){
cout<<"Number_str "<<top->n_str<<'\n';
top = top->pnext;
}
cout<<'\n';
return 0;
}
int Update(Node **top){ 
    while((*top)){
    pop(top);
}
    
    return 0; 
}
Ещё раз извиняюсь за сложность.

Добавлено через 4 минуты
Поменяй :
C++
1
2
for(int i = 0;top_Pol;i++)Pol[i] = pop(&top_Pol);
for(;top_Ot;i++)          Pol[i] = pop(&top_Ot);
на это:
C++
1
2
3
int i;
for( i = 0;top_Pol;i++)Pol[i] = pop(&top_Pol);
for(;top_Ot;i++)          Pol[i] = pop(&top_Ot);
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
23.03.2010, 21:41  [ТС]
Genius Ignat, ничего страшного. Я постараюсь и в этом разобраться. Все равно это понабится. Спс за код
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
23.03.2010, 21:42
Если тебе не срочно завтра тебе решу.
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
23.03.2010, 21:52  [ТС]
Нет, я не спешу. Еще раз спс.

Добавлено через 7 минут
Вот у меня вопрос ASCII(псевдо) коды можно использовать в VS 2006 когда создаеш консольное приложение? Если да, то как они вводтся тоже с помощью Alt+цифры?
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
23.03.2010, 21:54
Да бы не отнимать времени у тебя, сразу признаюсь что не понял вопрос.
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
23.03.2010, 22:26  [ТС]
Ну например такое:
Dec_____Hex___Char___Name
50_____32_____2______DIGIT TWO
65_____41_____A______LATIN CAPITAL LETTER A
204____CC____╠_______BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
23.03.2010, 22:31  [ТС]
Вот такое
Вложения
Тип файла: rar Таблица символов ASCII.rar (15.1 Кб, 9 просмотров)
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
23.03.2010, 22:42
они вводтся тоже с помощью Alt+цифры
Что понимается под этим:
Таблица ASCII мне известна.
А что вы хотите сделать не понятно.
C++
1
2
3
4
5
6
7
8
#include <iostream.h>
int main(){
char ch = 65 ;  //код символа
cout<<ch;       //вывод буквы.
//Если ты введёшь число от -127...128 это число по таблице ASCII будет означать некий символ.
//Можешь вводить либо символы: либо числа от -127 до 128 если тебе интересно, всё равно результат символ.
return 0;
}
Может это надо было.
0
19 / 16 / 1
Регистрация: 10.01.2010
Сообщений: 252
23.03.2010, 22:46  [ТС]
Чтоб таблицу рисать такими символами ╠ и т.д.
У меня еще один вопросик
как на С++ будет выглядеть такое:
C++
1
printf("a=%8.2f",a);
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
23.03.2010, 23:00
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream.h>
#include <stdio.h>
 
int main(){
float a = 2.345;
 
printf("a=%8.2f",a);  // это даёт два знака после запятой: это C функция
printf("\n");         // на следующую сроку.
cout<<a;            // выводит столько знаков после запятой сколько их есть: это C++: это лучше.          
cout<<"\n";        // на следующую сроку.
return 0;
}
Совет не смешивай в программе оба способа вывода выбери либо C либо C++.
При смешивании они могут работать не согласованно.
1
Псевдо программист
 Аватар для R0mm
192 / 113 / 37
Регистрация: 19.09.2009
Сообщений: 303
24.03.2010, 12:19
Замените основной цикл этим. Все работает
C++
1
2
3
4
5
6
7
8
9
10
for (int i=0, j=NUM-1, int k=0; k<NUM; k++) {
     if (A[i] > 0) {
          Pol[i] = A[i];
          i++;
     }
     else {
          Pol[j] = A[j];
          j--;
     }
}
1
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
24.03.2010, 12:29
Я и такой алгоритм проверял он тоже не сработал,
После того как ты найдешь первый отрицательный ты на нём и застрянешь.
Мы же сравниваем с индексом mas[i] а i при нахождении <=0 не изменяется, следовательно.
мы опять останемся на том же месте.
потому что i будет не низменно,
положи небольшую программу с которой он работает, мне интересно.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
24.03.2010, 12:43
Цитата Сообщение от PodOnoK Посмотреть сообщение
Располижить в массиве Pol сначала положительные, а потом отрицательные элементы выходящего массива. Дан массив А(9)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <algorithm>
 
int main()
{
  const int size    = 9;
        int a[size] = {1, -2, 3, -4, 5, -6, 7, -8, 9};
        int b[size];
 
  std::copy            (a, a + size, b);
  std::stable_partition(b, b + size, std::bind1st(std::greater<int>(), 0));
 
  std::copy (b, b + size, std::ostream_iterator<int>(std::cout, " "));
 
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.03.2010, 12:43
Помогаю со студенческими работами здесь

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

Циклы. Напечатать числа в виде таблицы, используя только циклы
Напечатать числа в виде таблицы, используя только циклы (массивы и строки не применять): 1 2 2 ...

Циклы. Напечатать числа в виде таблицы, используя только циклы
4. Напечатать числа в виде таблицы, используя только циклы (массивы и строки не применять): 1 2 2 ...

Переведите исходные циклы в циклы других форматотв:
Переведите исходные циклы в циклы других форматотв: For i:73 to 122 do в Цикл while: в Цикл repeat: For i:256 downto 100 do в...

Циклы в Паскале (циклы с пост- и предусловием)
Требуется напиcать программу, которая запрашивает числа с клавиатуры до тех пор, пока сумма чисел не превысит 25 или введенное число не...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru