Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Alexandr1966
28 / 28 / 2
Регистрация: 17.12.2012
Сообщений: 487
#1

Как проверить первый элемент двумерного массива на 0?

19.12.2015, 06:20. Просмотров 219. Ответов 6
Метки нет (Все метки)

Всем привет. Дана функция ввода элементов двумерного массива. Необходимо вставить условие: если первый элемент массива равен 0, то программа должна вывести сообщение об ошибке и предложить ввести заново этот первый элемент.
Заранее спасибо. Вот код:
C++
1
2
3
4
5
6
7
8
void init_matrix(float* A, size_t n, size_t m)
{    for (size_t i = 0; i < n; ++i)      
  for (size_t j = 0; j < m + 1; j++)    
  {          
 
 printf("Element [%u][%u]: ", i+1, j+1);       
   scanf("%f", &A[i * (m+1) + j]);              }   
 printf("\n");}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2015, 06:20
Ответы с готовыми решениями:

Как определить первый с конца четный элемент двумерного массива?
двумерный массив. Как определить первый с конца четный элемент двумерного...

Проверить, упорядочены ли элементы, заменить первый нулевой элемент и удалить указанный элемент из массива
Найти произведение отрицательных элементов массива, следующих после первого...

Поменять местами первый максимальный четный элемент массива и первый минимальный нечетный элемент
Помогите начало знаю как сделать а дальше нет #include&lt;iostream&gt; #include...

Как заполнить первую строку и первый столбец динамического двумерного массива единицами?
как заполнить первую строку и первый столбец динамического двумерного массива...

Как сравнить элемент двумерного массива?
if (map != map) массив char

6
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
19.12.2015, 07:05 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void init_matrix(float** A, size_t n, size_t m)//двумерные массивы передаются как **A
{
    for (size_t i = 0; i < n; i++)
        for (size_t j = 0; j < m + 1; j++)
        {   
            do{
                printf("Element [%u][%u]: ", i + 1, j + 1);
                scanf("%f", &A[i][j]);
                if (A[0][0] == 0)
                    printf("Error !\n");
            } while (A[0][0] != 0);
        }
}
Добавлено через 6 минут
C++
1
while (A[0][0] == 0);
0
Alexandr1966
28 / 28 / 2
Регистрация: 17.12.2012
Сообщений: 487
19.12.2015, 07:15  [ТС] #3
Apostol584, не работает что-то, кидаю код целиком, глянь плиз

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
#include <omp.h>  
#include <stdio.h>  
#include <stdlib.h> 
 
void print_matrix(float* A, size_t n, size_t m)
{
    for(size_t i = 0; i < n; ++i)
    {
        for(size_t j = 0; j < m + 1; ++j)
            printf((j == m) ? " |%10.2f" : "%10.2f", A[i * (m+1) + j]);
        printf("\n");
    }
}
 
void init_matrix(float* A, size_t n, size_t m)
{
    for (size_t i = 0; i < n; ++i)
        for (size_t j = 0; j < m + 1; j++)
        {
do{
            printf("Element [%u][%u]: ", i+1, j+1);
            scanf("%f", &A[i][j]);
        if(A[0][0] == 0
        printf("Error! \n");
}while A[0][0] == 0;
            
      
    printf("\n");
}
 
int main(int argc, char* argv[])
{
    size_t N, M;
    printf("Enter the size of matrix\n");
    scanf("%u", &N);
    M = N;
 
    float* matrix = (float*)malloc(N * (M + 1) * sizeof(float));
 
    init_matrix(matrix, N, M);
 
    printf("Matrix\n");
    print_matrix(matrix, N, M);
 
    
    int nthreads, tid, pivot;
    for(int pivot = 0 ; pivot < N; ++pivot)
    {
        #pragma omp parallel private(nthreads, tid) 
        {
            nthreads = omp_get_num_threads();  
            tid = omp_get_thread_num();  
          
            if(tid == pivot % nthreads)  
            {
                for(int i = M; i != pivot; --i)
                matrix[pivot * (M+1) + i] /= matrix[pivot * (M+1) + pivot];
                matrix[pivot * (M+1) + pivot] = 1;
            }
            
            #pragma omp barrier 
            for(size_t i = tid; i < N; i += nthreads)
                if(i > pivot)
                {
                    for(int j = M; j != pivot; --j)
                    matrix[i * (M+1) + j] -= matrix[pivot * (M+1) + j] * matrix[i * (M+1) + pivot];
                    matrix[i * (M+1) + pivot] = 0;
                }
        }
    }
 
    printf("Matrix of canonnical view\n");
    print_matrix(matrix, N, M);
 
    for(int pivot = N - 1; pivot >= 0; --pivot)
    {
        #pragma omp parallel private(nthreads, tid)
        {
            nthreads = omp_get_num_threads();
            tid = omp_get_thread_num();
           
            for(size_t i = tid; i < N; i += nthreads)
                if(i < pivot)
                {
                    for(int j = M; j != pivot; --j)
                    matrix[i * (M+1) + j] -= matrix[pivot * (M+1) + j] * matrix[i * (M+1) + pivot];
                    matrix[i * (M+1) + pivot] = 0;
                }
        }
    }
    printf("Final matrix\n");
    print_matrix(matrix, N, M);
    printf("Result vector\n");
    printf("X = (");
    for(size_t i = 0; i < N; ++i)
        printf((i == N-1)?"%f)\n":"%f,", matrix[i * (M+1) + M]);
    free(matrix);
    return 0;
}
0
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
19.12.2015, 07:22 #4
Вам нужен одномерный или двумерный массив?
0
Alexandr1966
28 / 28 / 2
Регистрация: 17.12.2012
Сообщений: 487
19.12.2015, 07:28  [ТС] #5
Apostol584, в общем я сам запутался, вот код я готовый рабочий скинул, в нем нужно поставить это условие)

Добавлено через 3 минуты
Apostol584, вот этот кусок кода был в ГОТОВОМ БОЛЬШОМ КОДЕ при инициализации, который самый первый в теме\
C++
1
2
3
4
5
6
7
8
void init_matrix(float* A, size_t n, size_t m)
{    for (size_t i = 0; i < n; ++i)      
  for (size_t j = 0; j < m + 1; j++)    
  {          
 
 printf("Element [%u][%u]: ", i+1, j+1);       
   scanf("%f", &A[i * (m+1) + j]);              }   
 printf("\n");}
0
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
19.12.2015, 07:30 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void init_matrix(float* A, size_t n, size_t m)
{
    for (size_t i = 0; i < n; ++i)
        for (size_t j = 0; j < m + 1; j++)
        {
            do{
                printf("Element [%u][%u]: ", i + 1, j + 1);
                scanf("%f", &A[i * (m + 1) + j]);
                if (A[0] == 0)
                    printf("Error! \n");
            } while (A[0] == 0);
 
 
            printf("\n");
        }
}
1
Alexandr1966
28 / 28 / 2
Регистрация: 17.12.2012
Сообщений: 487
19.12.2015, 07:35  [ТС] #7
Apostol584, Благодарю , все работает
0
19.12.2015, 07:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2015, 07:35

Как удалить из одномерного массива первый отрицательный элемент
Как удалить из одномерного массива первый отрицательный элемент for (i=0;...

как освободить только первый элемент массива, не трогая остальные?
Есть код: int *ptr; ptr = (int*)calloc(10, sizeof(int)); собственно...

Получить первый символ слова из двумерного массива слов
Задание: обработать массив выделив слова содержащие повтор и слова...


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

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

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