Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Как правильно задать тип данных в массиве (http://forum.oszone.net/showthread.php?t=137952)

ShadowMas 17-04-2009 11:45 1096576

Как правильно задать тип данных в массиве
 
Вот сталкнулся с такой вот непоняткой и чёт не как не пойму в чём дело вообщем есть вот такая задача:

Дана матрица 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 1096620

ShadowMas ерунда вывода?
Если тип задаётся как double или float в printf выводить его нужно используя %f вместо %i

ShadowMas 17-04-2009 13:48 1096663

Спасибо "Admiral" и правда всё работает :)

Drongo 17-04-2009 15:02 1096747

ShadowMas, Да просто вместо функции printf() Сишного стиля можно ещё использовать такую конструкцию:
Код:

...
cout<<setw(4)<<arr[i][j]<<setw(4);
...

И нужно будет добавить заголовочный файл:
Код:

...
#include <iomanip>
using std::setw;
...


ShadowMas 18-04-2009 22:26 1097794

Спасибо попробую и так :)


Время: 00:05.

Время: 00:05.
© OSzone.net 2001-