Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2012, 23:41   #1
Olga@->-->--
 
Регистрация: 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;
}
Olga@->-->-- вне форума Ответить с цитированием
Старый 27.11.2012, 00:26   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

0) Код оформляется тегом CODE.
1) Так в чём, собственно, вопрос?
Abstraction вне форума Ответить с цитированием
Старый 27.11.2012, 00:34   #3
Olga@->-->--
 
Регистрация: 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|
Olga@->-->-- вне форума Ответить с цитированием
Старый 27.11.2012, 00:42   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

"Деструктор" и "перегрузить операторы", всё-таки. И небольшое уточнение: нужен класс "матрицы" или "квадратной матрицы"?

Начнём с простого.
1) Создайте пустой класс SquareMatrix.
2) Добавьте в него, как private, поля "размерность" и "массив элементов".
3) Напишите заголовки (описания) конструктора, принимающего "размер"; конструктора копирования (принимающего один аргумент, ссылку на объект класса SquareMatrix); деструктора.
4) Напишите тела (определения) созданных в пункте (3).
5) Аналогично напишите заголовки методов вывода и вычисления определителя.

По порядку. И приведите здесь, что у Вас получилось после последнего пункта, который Вы понимаете, как делать. Если понимаете все пять - приведите, что получается после них.
Abstraction вне форума Ответить с цитированием
Старый 27.11.2012, 01:18   #5
Olga@->-->--
 
Регистрация: 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;
}
Olga@->-->-- вне форума Ответить с цитированием
Старый 27.11.2012, 18:52   #6
Olga@->-->--
 
Регистрация: 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;

}
Olga@->-->-- вне форума Ответить с цитированием
Старый 27.11.2012, 23:41   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код оформляется тегом форума CODE. Пожалуйста, сделайте это.

Обратите внимание, что бессмысленно иметь две переменные под число строк и столбцов одновременно с методом вычисления определителя. Если Ваши массивы переделать во float A[n][n]=..., то можно предусмотреть ещё одну форму конструктора, принимающую двойной указатель на float и размер и копирующую данные из переданного указателя.

Если в конструкторе делается new[], то в деструкторе необходимы парные вызовы delete[]. Если в деструкторе делается delete[], необходимо явное определение конструктора копирования и оператора присваивания.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
доработать готовый код с++ 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