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

Матрица!!! Курсовое задание!!! - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Цикл не работает так как надо http://www.cyberforum.ru/cpp-beginners/thread122898.html
Всем привет! Народ, у меня цикл в программе работает не так как надо. 1 круг цикла происходит в норме, а когда начинается 2ой он пропускает 1 переменную которую надо ввести, и после ввода 2ой он просто заканчивается без ввода данных ( #include <iostream.h> #include <conio.h> const int MAX=8; struct Sladko { char Name;
C++ Разбиение строк Доброго времени суток! Собственно нужна помощь в поиске ошибки. вот код: #include "stdafx.h" typedef struct { char str; http://www.cyberforum.ru/cpp-beginners/thread122872.html
Наследование, иерархия, коллекция, декомпозиция C++
Суть предельно проста: декомпозиция объектов; объект класса base содежит имя(char name) и указатель на двунаправленный список указателей на объект базового типа base ; наследники: классы кафедра, специальность, группа, студент.Т.е.каждый объект класса является коллекцией следующего, только студент содержит не список, а данные. Ошибок нет.НО...! при работе динамические объекты не создаются...
Массив C++
Даны действительные числа а1,..а26.Требуеться домножить все члены последовательности на квадрат ее найменьшего члена если а1>=0,и на квадрат ее найменьшего члена если а1<0. плз:)
C++ min(a1*а16,а2*а17,..,а15*аn) http://www.cyberforum.ru/cpp-beginners/thread122854.html
ТЕМА:Динамический массив 1)Даны действительные числа a1,..an. Получим:min(a1*а16,а2*а17,..,а15*аn) ТЕМА:Массив 2)Даны действительные числа а1,..а26.Требуеться домножить все члены последовательности а1,а26 на квадрат ее найменьшего члена если а1>=0,и на квадрат ее найбольшего члена если а1<0 Помогите пожалуйста=))))
C++ Builder Построение графиков функций sin, cos (BCB6) Ребята! Срочна нужна помощь девушке) Ниже приведена прога в Borland C++ Builder 6, в которой рисуется график 2*sin(x)*exp(x/5). Нужно передлать ее в прогу, которая будет рисовать график cos(x*x) на промежутке . пи я бы задавала как: pi=4.0*atan(1.0); если это потребуется \= Если есть возможно помогите пожалуйста побыстрее!!(до пятницы). Буду очень благодарна!! ... подробнее

Показать сообщение отдельно
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
29.04.2010, 10: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
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
#include <iostream>
#include <time.h>
const int N=20; //константный размер матрицы (можно менять)
using namespace std;
int main()
{
        srand (time(NULL)); //для использования датчика случайных чисел
    int matr[N][N]; //объявление матрицы
    int i, j, n, k, p, z, t, y,r; //объявление переменных
        cout<<"Vvedite n: ";
    cin>>n; //принимаем в переменную n введенное с клавиатуры число
//формируем матрицу случайных чисел
        cout<<"Matrica: "<<endl;
    for(i = 0; i < n; ++i) //обход по строкам (от 0 до n-1)
                for(j = 0; j < n; ++j) //обход по столбцам (от 0 до n-1)
                        matr[i][j]=1+rand()%15; //элементу матрицы присваивеется значение, полученное рандомом (от 1 до 15)
//печать матрицы
        for(i = 0; i < n; ++i)  //обход по строкам (от 0 до n-1)
        {
                for(j = 0; j < n; ++j) //обход по столбцам (от 0 до n-1)
                        cout<<matr[i][j]<<"\t"; //печать элемента матрицы через табулятор
                cout<<endl; //переход на следующую строку
        }
        //минимальый элемент 
        int min=matr[0][0];//минимальному элементу присваивается 1-й элемент матрицы
        z=n/2; //до какой строки идет двиг !исправь
        t=n/2-1;//до какой строки идет двиг
/*в твоем задании, если n нечетное, то мы начинаем обход со столбца n/2+1,
 напр. 5/2+1=2+1=3 и со столбца n/2-1, т.е не берем средний столбец (см. свой рисунок) */
        if (n%2!=0) //если n нечетное
                r=n/2+1; //первая позиция цикла
/*если n четное, то со солбца n/2+1 и столбца n/2, т.е 6/3=3 
(из рисунка это все видно)*/
        else //иначе
                r=n/2; //первая позиция цикла
/* строки мы берем соответственно 0 и n-1 (последнюю). т.к. мы на центральных столбцах, начинаем выбирать
 элементы до строк z=n/2+1 и t=n/2+1 (тоже центральные строки) но по ходу цикла они меняются, в зависимости от того,
 больше надо элементов считать или меньше. Напр, мы на столбце j=n/2-1 (для 6х6 это 2-й столбец (столбцы и строки 
считаются с 0)), ма просматриваем все элменты от 0-й строки до строки z=n/2 (не включительно), т.е до строки 2 
включительно, это 3 элемента. внутренний цикл прошел три элемента, внешний увеличил z на 1 и передвинул j на 1 влево 
(уменьшил на 1), => внетренний цикл теперь пройдет по столбцу 1 уже 4 элемента, снова внешний цикл уменьшил j на 1 и
 z увеличил на 1, => мо нулевому столбцу цикл пройдет 5 элементов. Анлогично для второго куска */
        for (j=n/2-1, k=r; j>=0, k<n; j--, k++,  z++, t--) //обход матрицы по столбцам
                for (int i=0, p=n-1; i<z, p>t; i++, p--) //обход матрицы по строкам
                        {
                                //здесь, думаю, все понятно
                                cout<<" "<<matr[i][j]<<" "<<matr[p][k]<<" "; //печать элементов из обоих кусков
                                if (matr[i][j]<min) //эсли элемент из первого куска больше мин
                                        min=matr[i][j]; //мин = этот элемент
                                if (matr[p][k]<min) //если элемент из второго куска больше мин
                                        min=matr[p][k]; //мин = этот элемент
                        }
        cout<<"\nMin= "<<min<<endl; //печать минимума
 
//максимальный элемент найден через один общий цикл
        int max=matr[0][n-1];
        if (n%2!=0) //если n нечетное
{
                z=n/2+1;
                y=n/2;
                t=n/2;
                max=matr[t][t];//мах присваиваем серединный элемент, т.к. в цикле мы его проходить не будем
                cout<<max; //печатаем этот элемент
        }
        else //иначе
        {
                z=n/2;
                t=n/2-1;
                y=n/2-1;
        }
/*цикл почти такой же. напр, для четной (6х6) столбцу j присваиваем n/2=3, строке 0. считываем элементы до z (не включительно),
 а изначально z=n/2=3, т.е считываем 3 элемента. внешний цикл уменьшает z на 1, увеличивает столбец j на 1, 
т.е в столбце 4 мы прсматриваем 2 элемента, в столбце 5 1элемент, аналогично для второго куска. 
просто проследи сам по циклу, что делает программа для четной и нечетной матрицы*/
        for (j=n/2, k=y; (j<n)&&(k>=0); j++, k--, z--, t--)
                for (i=0, p=n-1; (i<z)&&(p>t); i++, p--)
                {
                        cout<<" "<<matr[i][j]<<" "<<matr[p][k]<<" ";
                        if (matr[i][j]>max)
                                max=matr[i][j];
                        if (matr[p][k]>max)
                                max=matr[p][k];
                }
        cout<<"\nMax= "<<max<<endl;
 
    return 0;
}
 
Текущее время: 08:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru