|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.11.2012, 23:41 | #1 |
Регистрация: 26.11.2012
Сообщений: 7
|
Одномерный массив готовый код
№1 В одномерном массиве, состоящем из N элементов, вычислить:
1)сумму элементов массива с нечетными номерами; 2)сумму элементов массива, расположенных между первым и последним отрица¬тельными элементами. Сжать массив, удалив из него все элементы, модуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нулями. Исходные данные считать из файла и результат записать в файл. // massiv4.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include"iostream" #include <fstream> #include<stdlib.h> #include <stdio.h> #include <io.h> #include <time.h> #include <fcntl.h> #include <sys/stat.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { const int n=10; //константа для размера массива int i=0; int A[n]; FILE *f_in; char *name1="D:\olga.txt"; //строковая переменная, в которой хранится имя файла со значениями элемнтов массива printf("\nReading numbers for Array elements:\n"); if ( (f_in=fopen(name1, "r"))==NULL ) // проверяем возможность открытия файла { perror("Source array data file read error!: "); //Печатаем сообщение с описанием ошибки, если файл не открыт return 1; // Выходим из программы с кодом ошибки 1 } else // иначе { while (!feof(f_in) && (i < n)) // в цикле пока (не закончился файл) или (наберём 10 элементов) { fscanf(f_in, "%i", &A[i++]); //считываем очередное число типа флоат из файла в следующий элемент массива } fclose(f_in); // закрываем файл по окончании процесса считывания } for (int i=0; i<n; i++) {cout<<A[i]<<'\t'; } int sumNechet=0; for(i=0; i<n; i++) {if (A[i]%2!=0) sumNechet+=A[i];} cout<<"\n Summa nechetnih:"<<sumNechet<<'\n'; int max, min,s=0; for(i=0;i<n;i++) { if(A[i]<0) { min=i;break; } } for(i=0;i<n;i++) { if(A[i]<0) { max=i; } } for(i=min+1;i<max;i++) { s=A[i]+s; } cout<<"\n Summa elementov mejdu pervim i poslednim otriz.elementom ="<<s<<'\n'; int j = 0; for (i = 0; i < n-j; i++) { if ( abs(A[i]) <1 ) // проверка условия задания { for (int k = i; k < n-j-1; k++) // цикл, в котором смещаем все эл-ты за найденным на 1 элемент влево A[k] = A[k+1]; j++; // увеличиваем счётчик найденных эл-тов для последующего заполнения нулями освободвшихся } } for (i = n-j; i < n; i++) // заполняем нулями освободившиеся эл-ты A[i] = 0; for(i = 0; i <= n; i++) // ну и выводим всё это безобразие на экран cout << A[i] << ' '; cout << endl; fstream ff; ff.open("D:\olga.txt" , ios::app); ff<<"\n Summa nechetnih:"<<sumNechet<<'\n'; ff<<cout<<"\n Sum="<<s<<'\n'; for(i=0; i<n; i++) ff<<A[i]<<'\t'; ff.close(); system("pause"); return 0; } |
27.11.2012, 00:26 | #2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
0) Код оформляется тегом CODE.
1) Так в чём, собственно, вопрос? |
27.11.2012, 00:34 | #3 |
Регистрация: 26.11.2012
Сообщений: 7
|
Спасибо! здесь вопросов нет.
Этот я смогла написать хотела чтоб просто проверили. А вот следующий не могу написать вот задание (я пыталась написать но не работает ничего не получается): Пожалуйста помогите и заранее спасибо Нужно создать в С++ класс Матрица; Члены класса: - размерность матрицы; - элементы матрицы. Методы:- конструктор; - деконструктор; - вывод матрицы; - вычисление определителя матрицы; Операторы перезагрузки: -сложение(+) -вычитание(-) -умножение(*) 2-х матриц -умножение матрицы на число(*=) Исходные данные: const int n=3; int A[n][n]={{5,1,7},{10,-2,1},{0,1,2}}; int B[n][n]={{2,4,1},{2,1,0},{7,2,1}}; Результат: С=2*(А-В)*(А^2+B) Найти |C| |
27.11.2012, 00:42 | #4 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
"Деструктор" и "перегрузить операторы", всё-таки. И небольшое уточнение: нужен класс "матрицы" или "квадратной матрицы"?
Начнём с простого. 1) Создайте пустой класс SquareMatrix. 2) Добавьте в него, как private, поля "размерность" и "массив элементов". 3) Напишите заголовки (описания) конструктора, принимающего "размер"; конструктора копирования (принимающего один аргумент, ссылку на объект класса SquareMatrix); деструктора. 4) Напишите тела (определения) созданных в пункте (3). 5) Аналогично напишите заголовки методов вывода и вычисления определителя. По порядку. И приведите здесь, что у Вас получилось после последнего пункта, который Вы понимаете, как делать. Если понимаете все пять - приведите, что получается после них. |
27.11.2012, 01:18 | #5 |
Регистрация: 26.11.2012
Сообщений: 7
|
Это так наброски... у задании написано просто класс матрица и приведины исходные данные в виде матрици (я их перечислила) операторы перезагрузки и деструктор нужны....я в классах не сильно разбираюсь
#include "stdafx.h" #include <iostream> #include <string> #include <math.h> using namespace std; class matrix //Определяем класс "матрица" { private: const int size; //Размерность матрицы int element; //Элементы матрицы public: void set_size(); void set_element(); int get_size(); int get_element(); void operator = ( const matrix my ); matrix (const matrix& m); matrix operator+(const matrix my); matrix operator-(const matrix my); matrix();// конструктор по умолчанию ~matrix();// деконструктор determ(); // определитель матрицы }; const int n=3; int A[n][n]={{5,1,7},{10,-2,1},{0,1,2}}; int B[n][n]={{2,4,1},{2,1,0},{7,2,1}}; system("pause"); return 0; } |
27.11.2012, 18:52 | #6 |
Регистрация: 26.11.2012
Сообщений: 7
|
операторы
операторы перезагрузки у меня уже работают, как теперь изменить чтоб ввод матрицы был не с клавиатуры, а были эти данные
{const int n=3; const int m=3; int A[n][m]={{5,1,7},{10,-2,1},{0,1,2}}; int B[n][m]={{2,4,1},{2,1,0},{7,2,1}}; #include "stdafx.h" #include <iostream> #include <string> #include <math.h> using namespace std; class matrix { public: matrix (int k, int p, bool pr=true); matrix operator+(matrix M); matrix operator-(matrix M); matrix operator*(matrix M); matrix operator*(float M); ~matrix();void show_matrix(); //Метод вывода матрицы на экран построчно. private: float **a;//Двойной указатель для хранения матрицы. int n;//Число строк в матрице. int m;//Число столбцов в матрице. //Логическая переменная fl принимает значение false, //если матрицу сформировать не удалось. bool fl; }; //Главная функция. int main() { matrix a1(3,3), b1(3,3), c1(3,3,false); c1=a1+b1; c1.show_matrix(); c1=a1-b1; c1.show_matrix(); c1=a1*7; c1.show_matrix(); c1=a1*b1; c1.show_matrix(); } //Конструктор. matrix::matrix(int k, int p,bool pr) { int i,j; n=k; m=p; fl=true; a=new float*[n]; for(i=0;i<n;i++) a[i]=new float[m]; if (pr) { cout<<"Matrix"<<endl; for(i=0;i<n;i++) for(j=0;j<m;j++) cin>>a[i][j]; } else for(i=0;i<n;i++) for(j=0;j<m;j++) a[i][j]=0; } //Перегрузка операции сложения матриц. matrix matrix:perator+(matrix M) { int i,j; //Временная матрица temp для хранения результата //сложения двух матриц. matrix temp(n,m,false); //Если обе матрицы одинакового размера, то if ((n==M.n)&&(m==M.m)) { //формируем матрицу temp, как сумму матриц. for(i=0;i<n;i++) for(j=0;j<m;j++) temp.a[i][j]=a[i][j]+M.a[i][j]; } else //Если размеры матриц не совпадают, то fl=false //(результирующую матрицу сформировать не удалось). temp.fl=false; //Возвращаем матрицу temp, как результат операции. return temp; } //Перегрузка операции вычитания матриц. matrix matrix:perator-(matrix M) { int i,j; //Временная матрица temp для хранения результата //вычитания двух матриц. matrix temp(n,m,false); //Если обе матрицы одинакового размера, то if ((n==M.n)&&(m==M.m)) { //формируем матрицу temp, как разность матриц. for(i=0;i<n;i++) for(j=0;j<m;j++) temp.a[i][j]=a[i][j]-M.a[i][j]; } else //Если размеры матриц не совпадают, то fl=false //(результирующую матрицу сформировать не удалось). temp.fl=false; //Возвращаем матрицу temp, как результат операции. return temp; } //Перегрузка операции умножения матриц matrix matrix:perator*(matrix M) { int i,j,k; //Временная матрица temp для хранения результата //умножения двух матриц. matrix temp(n,M.m,false); //Если количество столбцов в первой матрицы совпадает //с количеством строк во второй матрицы, то if ((m==M.n)) { //выполняем умножение матриц for(i=0;i<n;i++) for(j=0;j<M.m;j++) for(k=0,temp.a[i][j]=0;k<m;k++) temp.a[i][j]+=a[i][k]*M.a[k][j]; } //Если количество столбцов в первой матрицы не //совпадает с количеством строк во второй матрице, //то fl=false (результирующую матрицу //сформировать не удалось). else temp.fl=false; //Возвращаем матрицу temp, как результат операции return temp; } //Перегрузка операции * для выполнения операции //умножения матрицы на вещественное число. matrix matrix:perator*(float M) { int i,j; matrix temp(n,m,false); for(i=0;i<n;i++) for(j=0;j<m;j++) temp.a[i][j]=a[i][j]*M; //Возвращаем матрицу temp, как результат операции. return temp; } matrix::~matrix() { } //Метод вывода матрицы. void matrix::show_matrix() { int i,j; //Если матрица сформирована, то выводим ее на экран. if (fl) { cout<<"Matrix"<<endl; for(i=0;i<n;cout<<endl,i++) for(j=0;j<m;j++) cout<<a[i][j]<<"\t"; } //Если матрицу сформировать не удалось, то выводим //сообщение об этом на экран. else cout<<"No Matrix"<<endl; } |
27.11.2012, 23:41 | #7 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Код оформляется тегом форума CODE. Пожалуйста, сделайте это.
Обратите внимание, что бессмысленно иметь две переменные под число строк и столбцов одновременно с методом вычисления определителя. Если Ваши массивы переделать во float A[n][n]=..., то можно предусмотреть ещё одну форму конструктора, принимающую двойной указатель на float и размер и копирующую данные из переданного указателя. Если в конструкторе делается new[], то в деструкторе необходимы парные вызовы delete[]. Если в деструкторе делается delete[], необходимо явное определение конструктора копирования и оператора присваивания. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
доработать готовый код с++ | pametol | Фриланс | 3 | 02.07.2011 09:50 |
нужно исправить готовый код | Алексей Долгов | Помощь студентам | 2 | 02.06.2010 15:46 |
Одномерный массив(Паскаль). Упростить код | AnL | Помощь студентам | 1 | 17.12.2009 01:37 |
одномерный массив в Си ! Исправьте код! | osichev | Помощь студентам | 3 | 04.06.2009 17:14 |