Войти

Показать полную графическую версию : Как правильно задать тип данных в массиве


ShadowMas
17-04-2009, 11:45
Вот сталкнулся с такой вот непоняткой и чёт не как не пойму в чём дело вообщем есть вот такая задача:

Дана матрица 10:10. Элементы чётных столбцов разделить на максимальный элемент матрици,а не чётных умножить на минимальный.


Сам алгоритм выполняется верно, только вот не пойму почему то работает только с "int — выражение целого типа",
а если задаю к примеру "double- знач. с плавающей точкой" или "float" то получается просто ерунда кака ето :)

Все значения сгенерируемой матрици заменяются "0"

Где ошибка не пойму может нужно в проверке так же задавать тип не int а double или float ?

#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>

int main()
{
int arr[10][10];
int i,j;
randomize;
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
{

arr[i][j]=1+random(10);

}

printf("Massiv: n \n\n");
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
printf("%3i ",arr[i][j]);

if(j % 10 == 0)
cout<<endl;
printf("\n");
}


//максимальный элемент

int ZnachenieElementaMAX = arr[0][0];
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
{
if(ZnachenieElementaMAX <= arr[i][j])
{
ZnachenieElementaMAX = arr[i][j];
}
}
//Проверка
cout<<"ZnachenieElementaMAX = "<<ZnachenieElementaMAX<<endl;

//минимальный элемент

int ZnachenieElementaMIN = arr[0][0];
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
{
if(ZnachenieElementaMIN >= arr[i][j])
{
ZnachenieElementaMIN = arr[i][j];
}
}
//Проверка
cout<<"ZnachenieElementaMIN = "<<ZnachenieElementaMIN<<endl;
for(j = 0; j < 10; j++)
{
//операция с четными столбцами
if(j%2 == 0){
for(i = 0; i < 10; i++)
arr[i][j] *= ZnachenieElementaMAX;
}

}

for(j = 0; j < 10; j++){
//операция с не четными столбцами
if(j % 2 != 0){
for(i = 0; i < 10; i++)
arr[i][j] /= ZnachenieElementaMIN;
}
}
printf("Massiv: n \n\n");
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
printf("%3i ",arr[i][j]);

if(j % 10 == 0)
cout<<endl;
printf("\n");
}

getch();

}

Admiral
17-04-2009, 12:50
ShadowMas ерунда вывода?
Если тип задаётся как double или float в printf выводить его нужно используя %f вместо %i

ShadowMas
17-04-2009, 13:48
Спасибо "Admiral" и правда всё работает :)

Drongo
17-04-2009, 15:02
ShadowMas, Да просто вместо функции printf() Сишного стиля можно ещё использовать такую конструкцию:
...
cout<<setw(4)<<arr[i][j]<<setw(4);
...И нужно будет добавить заголовочный файл:
...
#include <iomanip>
using std::setw;
...

ShadowMas
18-04-2009, 22:26
Спасибо попробую и так :)




© OSzone.net 2001-2012