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

Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора - C++

Восстановить пароль Регистрация
 
maximuss
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 148
17.01.2013, 23:20     Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора #1
Дано вектор В, состоящий из N действительных чисел. Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора.
Напечатать заданный и образован вектор.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2013, 23:20     Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора
Посмотрите здесь:

Все отрицательные элементы массива уменьшить в двое, а все нулевые элементы заменить на... C++
В матрице A(m,n) все не нулевые элементы заменить обратными по величине и противоположными по знаку C++
Одномерный массив. Найти наименьший элемент, все нулевые элементы заменить значением этого элемента C++
C++ Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора
В одномерном массиве B (n) заменить нулевые элементы на значение индексов этих элементов, где 0 <= n <= 80. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
17.01.2013, 23:56     Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора #2
Ну вот, но это нехороший код(требует доработки) сразу говорю. Если программа ненайдет 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
#include<iostream> 
using namespace std; 
 
int main()
{
    setlocale(LC_ALL,"rus");
    int index1=-1;
    int index2=-1;
    int B[]={ 7,0,2,5,0,9,3,10,26,0,17,54 };
    for(int count=0; count<(sizeof(B)/sizeof(int));count++)
        cout << B[count] << " ";
    cout << endl;
    for(int count=0;count<(sizeof(B)/sizeof(int));count++)
        if(B[count]==0)
            if(index1==-1)
                index1=count;
            else {
            index2=count;
            break;
        }
    for(int count=0;count<(sizeof(B)/sizeof(int));count++)
        if(B[count]!=0)
            if(B[index1]==0) {
                B[index1]=B[count];
            } else if(count!=index1){
                B[index2]=B[count];
                break;
            }
    for(int count=0; count<(sizeof(B)/sizeof(int));count++)
        cout << B[count] << " ";
    cin.get();
}
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
18.01.2013, 00:10     Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора #3
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
#include <stdio.h>
#include <stdlib.h>
int main() {
 
    int n = 0, i = 0;
    int *B, T[2][2];
    int count0 = 0, count1 = 0;
    printf("n? ");
    do {
        scanf("%d", &n);
    } while (n <= 0);
    B = calloc(n, sizeof(n));
    while (i < n) {
        B[i] = rand() %7 -3;
        printf("%4d", B[i]); // !!
        i++;
    }
    printf("\n");
    i = 0;
    while (i < n) {
        if (count0 == 2 && count1 == 2)
            break;
        if (B[i] == 0 && count0 < 2) {
            T[count0][0] = i;
            count0++;
        }
        if (B[i] != 0 && count1 < 2) {
            T[count1][1] = i;
            count1++;
        }
        i++;
    }
    printf("\n");
    int j=0; i=0;
    for(i=0; i<2;i++){
        for(j=0; j<2;j++)
            printf("%3d", T[i][j]);
        printf("\n");
 
    }
    printf("\n");
 
    i = 0;
    while (i < n) {
        if (count0<2 || count1<2) break;
        if (i == T[0][0])
            B[i] =B[ T[0][1]];
        if (i == T[1][0])
            B[i] = B[T[1][1]];
 
        printf("%4d", B[i]);
        i++;
    }
    free(B);
    return 0;
}
maximuss
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 148
18.01.2013, 00:14  [ТС]     Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора #4
спасибо.
А не могли бы Вы, пожалуйста посмотреть в соседние мои темы?
Если конечно не трудно(
Yandex
Объявления
18.01.2013, 00:14     Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора
Ответ Создать тему
Опции темы

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