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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
chip046
0 / 0 / 0
Регистрация: 21.03.2012
Сообщений: 16
#1

Опишите операторы цикла. Приведите примеры. - C++

13.06.2012, 19:34. Просмотров 898. Ответов 9
Метки нет (Все метки)

1. Опишите операторы цикла. Приведите примеры.

2. Напишите программу на языке СИ++ сложения двух матриц (двумерных массивов). Даны матрицы A[5][5] и B[5][5]. Надо их определить и проинициализировать, распечатать, получить матрицу C[5][5], которая состоит из сумм элементов массива A и массива B (C[i][j] = A[i][j] + B[i][j]). Результат распечатать. Подсчитать сумму элементов массива C и распечатать.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2012, 19:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Опишите операторы цикла. Приведите примеры. (C++):

«Языки и технологии программирования» «Операторы цикла. Условные операторы» - C++
Не получается сделать что бы программа выводила все значения в промежутке, она выводит только одно. условия | ((z^3)+sin...

Работа с конструкторами и деструкторами в с++. Приведите пожалуйста какие-то примеры - C++
Помогите пожалуйста ! Нужна программа , которая демонстрирует работу конструкторов и деструкторов в с++. Помогите с кодом простенькой...

Операторы языка С++: операторы цикла (исправьте программу) - C++
#include <iostream> #include <cstdlib> #include <cmath> using namespace std; int main() { int a,n; float y,x; cout<<...

Операторы принятия решения и операторы цикла. - C++
Пожалуйста, помогите. Нужно срочно сделать задания: 1)Ввести с клавиатуры три символа sym1, sym2, sym3. Поменять их значения таким...

Операторы цикла и операторы передачи управления - C++
Вычислить сумму ряда S с погрешностью эпсилон, задаваемой с клавиатуры. Вывести количество итераций, сделанных при вычислении. Если...

насчет перечисления(зачем я объявляю переменную в перечислении? Приведите примеры где удобно использовать перечисление?) - C++
зачем я объявляю переменную в перечислении? Чтобы мог обращаться к элементам перечисления? Правильно ли мое суждение и приведите примеры...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Spaum145
2 / 2 / 0
Регистрация: 23.08.2009
Сообщений: 21
15.06.2012, 13:16 #2
1ый вопрос - искать в кижках по программированию
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
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
// так полагаю, что массивы типа int. Если double или вдруг(!) string,
// то почти ничего не изменится
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM 5 //dimension -размерность массива
 
void Init(int **A)
{
    for (int i=0; i<DIM; i++){
        for (int j=0; j<DIM; j++)
            A[i][j]=rand()%100;
    }
}
 
void PrintMas(int ** mas)
{
    for (int i=0; i<DIM; i++)
    {
        for (int j=0; j<DIM; j++)
        {
            printf("%3d\t",mas[i][j]);
        }
        printf("\n");
    }
}
 
void SumMas(int ** A, int ** B, int ** C)
{
    for (int i=0; i<DIM; i++)
    {
        for (int j=0; j<DIM; j++)
        {
            C[i][j]=A[i][j]+B[i][j];
        }
    }
}
 
int ElemSum (int ** A)
{
    int count=0;
    for (int i=0; i<DIM; i++)
        for (int j=0; j<DIM; j++)
            count+=A[i][j];
    return count;
}
 
void main()
{
    srand ( time(NULL) );
    //определение
    int **A=new int*[DIM], **B=new int*[DIM], **C=new int*[DIM];
    for (int i=0;i<DIM;i++) 
    {
        A[i]=new int[DIM];
        B[i]=new int[DIM];
        C[i]=new int[DIM];
    }
    
    //инициализация
    Init(A);
    Init(B);
    
    //Вывод A, B
    printf("Massiv A:\n");
    PrintMas(A);
    printf("Massiv B:\n");
    PrintMas(B);
 
    //суммирование A и В
    printf("C = summma(A,B):\n");
    SumMas(A,B,C);
    PrintMas(C);
 
    //сумма элементов массива С
    printf("summma elementov C: %d\n", ElemSum(C));
 
    system("pause");
    //очищение памяти
    for(int i=0; i<DIM; i++) delete A, B;
         delete A, B;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Massiv A:
 19      66      88       1      60
 15      30      56      91      80
 42      81      80      92      47
 27       9      61      16      89
 60      46      62      17      55
Massiv B:
 23      58      11      31      23
  3      28       2      58      94
  6      62      83      67      18
  7      52      91      55      16
  5      18      29      17      41
C = summma(A,B):
 42     124      99      32      83
 18      58      58     149     174
 48     143     163     159      65
 34      61     152      71     105
 65      64      91      34      96
summma elementov C: 2188
Добавлено через 10 часов 29 минут
Забыл добавить массив С в блок освобождения динамической памяти
C++
1
2
3
    //очищение памяти
    for(int i=0; i<DIM; i++) delete A, B, C;
         delete A, B, C;
вспомнил уже когда засыпал)
0
sandye51
программист С++
684 / 586 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.06.2012, 14:16 #3
Цитата Сообщение от Spaum145 Посмотреть сообщение
//очищение памяти
* * for(int i=0; i<DIM; i++) delete A, B, C;
* * * * *delete A, B, C;
и что это за ерунда?
0
Spaum145
2 / 2 / 0
Регистрация: 23.08.2009
Сообщений: 21
15.06.2012, 14:27 #4
Да, забыл подписать.
C++
1
2
3
    //очищение памяти
    for(int i=0; i<DIM; i++) delete A[i], B[i], C[i];
         delete A, B, C;
т.е. не просто удалить указатели, а потом еще раз их удалить (повторное освобождение памяти), а сначала удалить массивы указателей (A[i], B[i], C[i]), а потом уже массивы указателей на указатели (A, B, C) . Полагаю вы это имели ввиду?

Но это в принципе не относится к вопросам chip046. Но спасибо, что поправили
0
sandye51
программист С++
684 / 586 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.06.2012, 14:34 #5
все равно ерунда

Добавлено через 5 минут
Spaum145, запустите код, предоставленный ниже. Может поймете ошибку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
class c
{
public:
    ~c()
    {
        std::cout << "1" << std::endl;
    }
};
 
int main(int argc, const char * argv[])
{
    c* a1 = new c[2];
    c* a2 = new c[2];
    c* a3 = new c[2];
    
    delete[]a1, a2, a3;
    
    return 0;
}
0
Spaum145
2 / 2 / 0
Регистрация: 23.08.2009
Сообщений: 21
15.06.2012, 14:47 #6
Судя по выводу деструктор вызывался только два раза... Я все равно не догоняю
0
sandye51
программист С++
684 / 586 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.06.2012, 14:54 #7
Цитата Сообщение от Spaum145 Посмотреть сообщение
delete A[i], B[i], C[i];
такой синтаксис неприемлим

Во-первых, массивы надо удалять используя оператор delete[]array_name;
Во-вторых, даже если тут исправить, то выражение "delete[]A[i], B[i], C[i]" означает следующее:
это составной оператор и тут память, выделенная под массив элементов A[i], будет освобождена
а с массивами B[i], C[i] ничего не произойдет.
Что и было продемонстрированно в моем примере

правильно надо писать delete[]A[i], delete[]B[i], delete[]C[i];
1
Spaum145
2 / 2 / 0
Регистрация: 23.08.2009
Сообщений: 21
15.06.2012, 15:04 #8
Цитата Сообщение от Spaum145 Посмотреть сообщение
деструктор вызывался только два раза
это потому, что было освобожден один объект класса с, состоящий из двух элементов?
0
sandye51
программист С++
684 / 586 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.06.2012, 15:11 #9
Цитата Сообщение от Spaum145 Посмотреть сообщение
это потому, что было освобожден один объект класса с, состоящий из двух элементов?
это потому что составной оператор "delete[]a1, a2, a3;" можно разделить на 3 независимых
1. delete[]a1;
2. a2;
3. a3;

Первый освобождает память, выделенную под массив объектов. И вызывает у каждого объекта деструктор. Поскольку в массиве только 2 элемента, то и было напечатан две единички
А операторы 2 и 3 ничего не делают
0
chip046
0 / 0 / 0
Регистрация: 21.03.2012
Сообщений: 16
15.06.2012, 17:49  [ТС] #10
Цитата Сообщение от sandye51 Посмотреть сообщение
это потому что составной оператор "delete[]a1, a2, a3;" можно разделить на 3 независимых
1. delete[]a1;
2. a2;
3. a3;

Первый освобождает память, выделенную под массив объектов. И вызывает у каждого объекта деструктор. Поскольку в массиве только 2 элемента, то и было напечатан две единички
А операторы 2 и 3 ничего не делают
уважаемые програмисты, спасибо Вам огромное за помощь, я в програмировании ни фига не соображаю, а инст как то заканчивать надо:-) примного благодарен!!!!!!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2012, 17:49
Привет! Вот еще темы с ответами:

Условные операторы.Операторы цикла - C++
1)По номеру y(y&gt;0) некоторого года определить с-номер его столетия(учесть что к примеру началом 20 столетия был 1901 а не 1900 год.)...

Опишите сходство и различие использования операторов цикла for, while - C++
0пишите сходство и различие использования операторов цикла for, while и do ... while. Приведите примеры.

Операторы цикла while и do … while - C++
Здравствуйте,помогите пожалуйста решить задачу простым способом. 1) Вводить последовательность чисел до тех пор, пока их сумма...

Операторы цикла - C++
Вводить с клавиатуры буквы, пока не будет введен символ, не являющийся буквой. Определить, является ли введенная последовательность...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.06.2012, 17:49
Ответ Создать тему
Опции темы

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