napisz progprogram który odczytuje kwadratowa macierz o nieznanym rozmiarze. dla elementów leżących na parzystym iloczynie indeksów np mac[1][2], mac[2][2] znajduje srednia tych elemetów oraz mediane i je wyswietla
dane zostaja zapisane w strukturze która przechowuje:
rozmiar macierzy RxR
wskaźnik do danych
wartość średniej oraz mediany tych elementów
program ma posiadać
a funkcje do odczytu pliku; rozmiar macierzy nalezy wyciagnąć z ilości liczb zapisanych w pliku
b zabezpieczenie przed nieprawidłową nazwą pliku
c funkcję liczącą średnią oraz mediane
Niestety nie mogę uruchomić programu:(
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
double open_file(FILE*, double**);
float average(int, double**);
float median(int, double**);
struct data{
double s_matrix;
float average;
float median;
double **matrix;
};
int main()
{
int n;
double **matrix;
FILE *pFile;
data dat;
dat.s_matrix=open_file(pFile, matrix);
cout << dat.s_matrix << endl;
dat.average=average(n, matrix);
cout << dat.average << endl;
dat.median=median(n, matrix);
cout << dat.median << endl;
dat.matrix=matrix;
cout << dat.matrix;
fclose(pFile);
system("PAUSE");
return 0;
}
double open_file(FILE* pFile, double** matrix)
{
int temp,n , i, j;
fpos_t pos;
pFile=fopen("kolos.txt", "r");
fgetpos(pFile, &pos);
while(!feof(pFile))
{
fscanf(pFile, "%i", &temp);
n++;
}
fsetpos(pFile, &pos);
n=sqrt(n);
matrix= (double**)malloc(sizeof(double*)*n);
for(i=0; i<n; i++)
matrix[i]=(double*)malloc(sizeof(double)*n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
fscanf(pFile, "%i", &matrix[i][j]);
}
return n;
}
float average(int n, double** matrix)
{
int i, j, Up=0, Down=0;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
Up+=matrix[i][j];
}
}
Down=i*j;
return Up/Down;
}
float median(int n, double** matrix)
{
int i, j, k=0, temp;
float median;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(!((i*j)%2))
{
if(!n%2)
{
k++;
if((k+1)==n/2)
temp=matrix[i][j];
else if(k==n/2)
{
median=(*matrix[i]+temp);
median=median/2;
}
}
else if(n%2)
{
k++;
if(k==(n/2)+1)
median=matrix[i][j];
}
}
}
}
return median;
}