Консультация № 69432
03.01.2007, 18:44
0.00 руб.
0 1 1
Приветик Всем!
не поможете с лабораторной работой?
а то я не могу ничего понять(((((



Приложение:
1. Запустить интегрированную среду BORLANDC++2. В главном меню выбрать меню "FILE"|NEW (создание нового файла).3. Набрать следующий текст программы: #include <iostream.h> // для опеpаций ввода/вывода: // cout<<, cin>> (чеpез стандаpтный поток) void change(int *x,int *y) // описание ф-ции с фоpмальными // паpаметpами указателями { int c = *x; *x = *y; *y = c; } void chan(int& x,int& y) // описание ф-ции с фоpмальными // паpаметpами типа ссылка { int c = x; x = y; y = c; } void main() { int a = 1; int b = 0; change(&a,&b); // пеpедача фактических паpаметpов // в виде адpесов cout<< "\na= "<< a << "\t b= "<< b; // a= 0 b= 1 chan(a,b); // пеpедача фактических паpаметpов // в виде пеpеменных cout<< "\na= "<< a << "\t b= "<< b; // a= 1 b= 0 }4. Cохраните текст программы в файле (FILE|SAVE)5. Нажмите комбинацию клавиш Alt+F9 (компиляция программы), если на экране высветится сообщение об ошибках, то исправьте их.6. Нажмите комбинацию клавиш Ctrl+F9 (компоновка программы).7. Для просмотра результатов работы программы нажмите комбинацию клавиш Alt+F5.8. Покажите полученный результат преподавателю и перепешите его в конспект для включения в отчет по лабораторной работе.9. Наберите следующую программу:// Даны вещественные массивы c[3][4], d[3][4].// Для каждого массива определить среднее арифметическое// положительных элементов массива и минимальный элемент.// В программе предусмотреть функции:// - ввода массивов с клавиатуры;// - расчета (среднее арифметическое и минимальный элемент // расчитываются в одной функции);// - вывода исходных массивов и результатов поиска// функция)#include <iostream.h>#define I 3#define J 4// прототипы функцийvoid inputmas(float [I][J], char);void raschet(float [I][J], float *, float *);void printmas(float [I][J], char);void printrez(float [I][J], char, float, float);void main(){ float c[I][J], d[I][J], sredc, sredd, minc, mind; inputmas(c,‘c‘); // вызовы функций inputmas(d,‘d‘); raschet(c,&sredc,&minc); printrez(c,‘c‘,sredc,minc); raschet(d,&sredd,&mind); printrez(d,‘d‘,sredd,mind);}// определение функции ввода массиваvoid inputmas(float m[I][J], char im){ int i,j; cout << "\nВводим массив " << im << "\n"; for (i=0; i<I; i++) for ( j=0; j < J; j++) { cout << im << " [" << i << " ][ " << j << " ] = "; cin >> m[i][j]; }}// определение функции расчета среднего арифметического// положительных элементов массива и поиска минимального// элемента массиваvoid raschet (float x[I][J], float *sred, float *min){ // объявление переменных int i,j, kol; float sum=0.0; // для расчета суммы положительных эл-тов kol = 0; // для расчета количества положит. эл-тов *min = x[0][0]; // первоначально в качестве минимального // принимаем элемент x[0][0], его значение // заносим по адресу, хранящемуся в min for (i=0; i<I; i++) for ( j=0; j < J; j++) { if ( x[i][j] < *min ) *min = x [i][j]; if ( x[i][j] > 0 ) { sum += x[i][j]; kol ++; } } *sred = sum / kol; }// определение функции вывода массива на экранvoid printmas(float x[I][J], char immas){ int i,j; cout.setf( ios::showpoint | ios::fixed); cout << "\nМассив " << immas ; for (i=0; i<I; i++) { cout << "\n"; for(j=0; j<J; j++) { cout.width(8); // минимальное кол-во позиций cout.precision(2); // 2 знака после запятой cout << x[i][j]; } }}// определение функции выводаvoid printrez(float x[I][J], char immas, float sred, float min){ printmas(x,immas); // вызываем функции вывода массива cout << "\n\nСреднее арифм. положительных элементов равно " << sred; cout << "\nМинимальный элемент в массиве = " << min;}10. Сохраните текст программы в файле11. Повторите пункты 5 - 8.12. В предложенном тексте программы вместо указателей можно использовать ссылки. Так как указатели в данной программе использовались только в функции raschet, поэтому для использования ссылок необходимо внести изменения: - в прототив функции raschet, void raschet(float [I][J], float& , float& ); // новый прототип функции - в текст функции raschet,// новый текст функцииvoid raschet (float x[I][J], float& sred, float& min){ int i,j, kol=0; float sum=0.0; min = x[0][0]; for (i=0; i<I; i++) for ( j=0; j < J; j++) { if ( x[i][j] < min ) min = x [i][j]; if ( x[i][j] > 0 ) { sum += x[i][j]; kol ++; } } sred = sum / kol;} - в функции main изменить вызов функции raschet raschet(c,sredc,minc); // новый вызов функции13. Внесите соответствующие изменения в программу14. Сохраните ее в новом файле15. Повторите пункты 5 - 8.16. Определить сумму отрицательных элементов, количество элементов в интервале от -5 до +5.17. Сохранить измененную программу в новом файле.18. Повторите пункты 5 - 8.

Обсуждение

Неизвестный
04.01.2007, 03:56
общий
это ответ
Здравствуйте, Lena_25!

В принципе, никаких сложностей тут нет…

Пункты операций с файлами я пропущу…

Задание №3. Оно демонстрирует передачу параметров в функцию возможную в C++. В первом варианте:

void change(int *x, int *y)

параметры переданы через указатель, т.е. в функцию передается адрес переменной. Сама функция выполняет перестановку значений у двух переменных. Для того чтобы получить доступ к значениям переменных x и y, разыменовываются указатели на них, т.е. *x и *y.

Второй вариант возможен только в C++. Это передача параметров через ссылку.

void chan(int& x, int& y)

В принципе, в функцию передается тот же адрес переменной, но в отличие от указателя модифицировать этот адрес нам не удастся. При передаче параметров с помощью ссылок мы можем модифицировать только значение переменной находящейся по адресу, хранящемуся в ссылке. Для начала понять это может быть сложно, но, изучая теорию C++, все легко понимается.

Задание №9. Здесь демонстрируется работа с двумерными массивами. Всего в программе используются четыре функции.

1. void inputmas(float m[I][J], char im)

Параметры этой функции:
float m[I][J] – двумерный массив куда нужно ввести данные.
char im – имя массива.

В этой функции в цикле выполняется ввод в массив при помощи стандартного потока ввода cin.

2. void raschet (float x[I][J], float *sred, float *min)

Параметры этой функции:
float x[I][J] - двумерный массив для нахождения в нем среднеарифметического всех положительных элементов и минимального элемента.
float *sred – указатель на переменную куда будет передаваться среднеарифметическое положительных элементов двумерного массива.
float *min - указатель на переменную куда будет передаваться минимальный элемент массива.

В этой функции основой является двойной вложенный цикл. В этом цикле с помощью двух условий мы находим оба интересующих нас значения. Для среднеарифметического это:

if ( x[i][j] > 0 ) {
sum += x[i][j];
kol ++;
}

Т.е. если текущий элемент положительный, то прибавляем его к общей сумме положительный элементов и количество их увеличиваем на 1. После прохождения цикла, выполняем операцию деления и записываем результат в переменную sred.

*sred = sum / kol;

Для минимального элемента, в самом начале принимаем за него самый первый элемент массива.

*min = x[0][0];

В цикле сравниваем его с текущим и, если он меньше, принимаем его за минимальный.

if ( x[i][j] < *min )
*min = x [i][j];

Таким образом, в конце функции получается, что значение переменной min это и есть минимальный элемент массива.

3. void printmas(float x[I][J], char immas)

Параметры этой функции:
float x[I][J] – двумерный массив для вывода.
char immas – имя массива.

Здесь в цикле выводятся значения массива x[I][J] при помощи стандартного потока вывода cout. Для cout мы задаем некоторые параметры, например фиксированную ширину и вывод двух точек после запятой.

4. void printrez(float x[I][J], char immas, float sred, float min)

Параметры этой функции:
float x[I][J] – двумерный массив куда нужно ввести данные.
char immas – имя массива.
float sred – среднеарифметическое значение положительных элементов массива
float min – минимальный элемент массива.

В функции main задаются два двумерных массива и с помощью описанных выше функций вводятся данные в них, выполняется расчет нужных значений и выводится конечный результат.

Задание №12. Текст измененной функции приведен. Так что единственная задача - поменять вызов функции в main.

raschet(c, sredc, minc);
raschet(d, sredd, mind);

Задание №16. Необходимо немного поменять функцию raschet. Например вот так:

void raschet (float x[I][J], float &sum, float &kol, float &min) { //меняем список параметров

// объявление переменных
int i,j;
sum=0.0; // для расчета суммы отрицательных эл-тов
kol = 0; // для расчета количества отрицательных эл-тов

min = x[0][0]; // первоначально в качестве минимального
// принимаем элемент x[0][0], его значение
// заносим по адресу, хранящемуся в min

for (i=0; i<I; i++)
for ( j=0; j < J; j++) {

if (x[i][j] < min )
min = x [i][j];

if (x[i][j] < 0)
sum += x[i][j]; //считаем сумму отрицательных элементов

if(x[i][j] >=-5 && x[i][j] <=5)
kol ++; //кол-во элементов в интервале -5; 5
}

}

Вот собственно и все…
Форма ответа