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

как обнулить значение массива в цикле?(с++) - C++

Восстановить пароль Регистрация
 
alexmen
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 6
28.09.2012, 10:38     как обнулить значение массива в цикле?(с++) #1
Первый раз считает нормально (правильно) А если нажать y то 2 раз считает уже неправльно я так думаю связно это с тем что значение не обнуляються как обнулить значение массива помогите плз
пробывал и memset( x, 0, size * sizeof(double)); не помогло =(


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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include "stdafx.h"
#include <iostream> 
using namespace std; 
void main() 
{   
 setlocale(LC_ALL, "Russian_Russia.1251"); 
    cout<<"введите размерность матрицы\n"; 
    double sum11=1,sum12=0, sum21=1, sum22=0; 
    bool done;          
    do
    {
    int size, l;        
    cin>>size;          
    int m1=size;
    double *x=new double[size]; 
    double temp,d=0;
    double **a=new double*[m1]; 
    double *b=new double[size];
    
 
    for (int i=0;i<size;i++)
        a[i]=new double[m1];
//------------------------------------------------------------------------------------------------------------
    // заполняем массив значениями
 
    for (int i = 0; i<size; i++)  
    {
    for(int j = 0;j<size; j++)   
 
    {
        cout<<" Введите a["<<i+1<<"]["<<j+1<<"]\n"; // вывод a [позиция]
            cin>>a[i][j]; // ввод а
    }
        cout<<" Введите b["<<i+1<<"]\n"; // вывод b [ позиция]
            cin>>b[i];   // ввод б
    }
        cout<<"\n\n";   // переносы строки 
 
//-------------------------------------------------------------------------------------------------------------
   // выводим, что получилось
    
    for (int i = 0; i<size; i++)
    
        {
    for(int j = 0;j<size; j++)
        cout<<a[i][j]<<"\t"; // "\t" пробелы
        cout<<b[i]<<"\n";
        cout<<"\n";
        }
 
    if (size == 1) // если size = 1
        cout<<"x[1]="<<b[0]/a[0][0]<<endl; // b/a
    else // иначе
 
    {
//------------------------------------------------------------------------------------------------------------
   // находим детерминант
 
    for (int i=0;i<size;i++)
    {
        sum11=1; l=2*size-1-i;sum21=1;
        for (int j=0;j<size;j++)
        {
            sum21*=a[j][l%size];
            l--;
            sum11*=a[j][(j+i)%(size)];
        }
        sum22+=sum21;
        sum12+=sum11;
    }
 
    d=sum12-sum22; // вычисление детерминанта 
    cout<<"детерминант = "<<d<<endl;
   if (d==0) // если детерминант равен 0
   cout<<"\nуравнение не имеет корней"<<endl;
   else
   {
    
//-------------------------------------------------------------------------------------------------------------
    // находим корни уравнения
    for (int p=0; p<size; p++)
        {
            sum11=1,sum12=0, sum21=1, sum22=0;
            for (int i=0;i<size;i++)
            {
        sum11=1; l=2*size-1-i;sum21=1;
        for (int j=0;j<size;j++)
        {
            if ((j+i)%(size)==p)
                sum11*=b[j];
            else
                sum11*=a[j][(i+j)%size];
            if (l%size==p)
                sum21*=b[j];
            else
                sum21*=a[j][l%size];
        
            l--;
            
        }
        sum22+=sum21;
        sum12+=sum11;
            }
    *(x+p)=sum12-sum22;
    //cout<<*(x+p)/d<<endl;
    cout<<"x["<<p+1<<"]="<<*(x+p)/d<<endl;
    }
}
cout<<"\n\n\n";
}
delete[]b; // освобождение памяти b
delete[]x; // освобождение памяти x
 
for( int i =0; i<size;i++)
    delete[]a[i];
 
 
cout <<"Продолжить?(y/n)"<<endl;
    char c;
    cin >> c;
    done = (c != 'y'); 
 
delete[]a; // освобождение памяти а
} while(!done);  
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2012, 10:38     как обнулить значение массива в цикле?(с++)
Посмотрите здесь:

Изменение значение указателя в цикле C++
Обнулить элементы массива, расположенные между его минимальным и максимальным элементами C++
C++ Можно ли в цикле for устанавливать переменное значение инициализатора?
C++ Обнулить все элементы массива, совпадающие с искомым элементом, вводимым с клавиатуры
Обнулить элементы массива, расположенные между его минимальным и максимальным элементам C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
28.09.2012, 10:57     как обнулить значение массива в цикле?(с++) #2
C++
1
2
int array[ N ];
memset( array, 0, sizeof( array ) );
alexmen
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 6
28.09.2012, 11:08  [ТС]     как обнулить значение массива в цикле?(с++) #3
Цитата Сообщение от Герц Посмотреть сообщение
C++
1
2
int array[ N ];
memset( array, 0, sizeof( array ) );
Спасибо за ответ ну а как будет это на моём примере когда массив динамический???
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
28.09.2012, 11:34     как обнулить значение массива в цикле?(с++) #4
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
#include <iostream>
#include <iterator>
#include <algorithm>
#include <memory.h>
 
int main()
{
   int size = 3;
   int m1 = 2;
   double *b = new double[size];
   std::generate(b, b + size, std::rand);
   double **a = new double*[m1];
   for (int i = 0; i < size; ++i)
   {
      a[i] = new double[m1];
      std::generate(&a[i][0], &a[i][m1], std::rand);
   }
   
   std::cout<<"a before initialization:\n";
   for(int i = 0; i < m1; ++i)
   {
      std::copy(&a[i][0], &a[i][m1], std::ostream_iterator<double>(std::cout, " "));
      std::cout<<std::endl;
      //memset(&a[i][0], 0, sizeof(double) * m1); //memset тоже замечательно работает
      std::fill(&a[i][0], &a[i][m1], 0.); //обнуление
   }
   
   std::cout<<"a after initialization:\n";   
   for(int i = 0; i < m1; ++i)
   {
      std::copy(&a[i][0], &a[i][m1], std::ostream_iterator<double>(std::cout, " "));
      std::cout<<std::endl;
   }
   
   std::cout<<"\nb before initialization:\n";
   std::copy(b, b + size, std::ostream_iterator<double>(std::cout, " "));
   //memset(b, 0, sizeof(double) * size); //memset замечательно работает
   std::fill(b, b + size, 0.); //обнуление
   std::cout<<"\nb after initialization:\n";
   std::copy(b, b + size, std::ostream_iterator<double>(std::cout, " "));
   
   for (int i = 0; i < size; ++i)
      delete [] a[i]; 
   delete [] a;
   delete [] b;
}
http://liveworkspace.org/code/df847a...50bf09da783812
alexmen
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 6
28.09.2012, 14:15  [ТС]     как обнулить значение массива в цикле?(с++) #5
Цитата Сообщение от Andsteadur Посмотреть сообщение
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
#include <iostream>
#include <iterator>
#include <algorithm>
#include <memory.h>
 
int main()
{
   int size = 3;
   int m1 = 2;
   double *b = new double[size];
   std::generate(b, b + size, std::rand);
   double **a = new double*[m1];
   for (int i = 0; i < size; ++i)
   {
      a[i] = new double[m1];
      std::generate(&a[i][0], &a[i][m1], std::rand);
   }
   
   std::cout<<"a before initialization:\n";
   for(int i = 0; i < m1; ++i)
   {
      std::copy(&a[i][0], &a[i][m1], std::ostream_iterator<double>(std::cout, " "));
      std::cout<<std::endl;
      //memset(&a[i][0], 0, sizeof(double) * m1); //memset тоже замечательно работает
      std::fill(&a[i][0], &a[i][m1], 0.); //обнуление
   }
   
   std::cout<<"a after initialization:\n";   
   for(int i = 0; i < m1; ++i)
   {
      std::copy(&a[i][0], &a[i][m1], std::ostream_iterator<double>(std::cout, " "));
      std::cout<<std::endl;
   }
   
   std::cout<<"\nb before initialization:\n";
   std::copy(b, b + size, std::ostream_iterator<double>(std::cout, " "));
   //memset(b, 0, sizeof(double) * size); //memset замечательно работает
   std::fill(b, b + size, 0.); //обнуление
   std::cout<<"\nb after initialization:\n";
   std::copy(b, b + size, std::ostream_iterator<double>(std::cout, " "));
   
   for (int i = 0; i < size; ++i)
      delete [] a[i]; 
   delete [] a;
   delete [] b;
}
http://liveworkspace.org/code/df847a...50bf09da783812
спасибо помогло!)
Yandex
Объявления
28.09.2012, 14:15     как обнулить значение массива в цикле?(с++)
Ответ Создать тему
Опции темы

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