Zadanie ze wskaźników. Czy zrobiłem je dobrze?

0

Witam. Jestem początkującym i mam do zrobienia takie oto zadanie jak w załączniku ze wskaźników. Jakoś je zrobiłem, ale chciałbym się dowiedzieć czy dobrze użyłem wskaźnika i zrobiłem je zgodnie z treścią? Możecie dla mnie go sprawdzić i doradzić?

#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

int adres_tab(int roz)
{
int *tab = new int[roz];
  srand (time(NULL));
   if(roz<1)
        return NULL;
    else

for(int i=0;i<roz;i++)
    {
       tab[i] = rand();
        cout<<tab[i]<<endl;
    }

    int sr=0;
    int suma=0;
    for(int i=0;i<roz;i++)
        {
            suma+=tab[i];
        }
        sr=suma/roz;
        cout<<"srednia to: "<<sr<<endl;
        cout<<"adres tablicy to: "<<tab;
        delete[]tab;
}


int main()
{
int roz;
cout<<"podaj ilosc elementow"<<endl;
cin>>roz;
    adres_tab(roz);
    return 0;
}
3

Wynikiem funkcji jest adres utworzonej tablicy […]

Masz napisać funkcję, która tworzy tablicę, wypełnia ją randomowymi liczbami i zwraca jej adres. Jeśli ta funkcja zwróci adres inny niż null to w dalszej części programu, masz obliczyć średnią arytmetyczną liczb w niej znajdujących się.

Ty natomiast napisałeś funkcję, która robi wszystko na kupę, a jej rezultat nie jest w ogóle używany.


Dla zwiększenia czytelności, możesz cały ten kod podzielić na więcej funkcji – jedna do pobierania rozmiaru od użytkownika, druga do tworzenia tablicy i zwracania jej adresu, trzecia do jej zwalniania z pamięci i czwarta do liczenia średniej.

ProTip: formatuj swój kod, bo w obecnej postaci jest nieczytelny.

0

Dzięki, ale jak w takim razie użyć tutaj właściwie rezultat tej funkcji? Mógłbyś naprowadzić trochę bardziej szczegółowo?

2

Tak na szybko:

#include<iostream>
#include<ctime>
using namespace std;

int* initialize(size_t length)
{
	if (length < 1) return nullptr;
	int* array = new int[length];
	for (size_t i = 0; i < length; ++i)
	{
		array[i] = rand() % 10 + 1;
	}
	return array;
}

void destroy(const int* array)
{
	if (array)
	{
		delete[] array;
	}
}

void print(const int* array, size_t length)
{
	cout << "Numbers:\n";
	for (size_t i = 0; i < length; ++i)
	{
		cout << array[i] << "\n";
	}
}

double avg(const int* array, size_t length)
{
	int sum = 0;
	for (size_t i = 0; i < length; ++i)
	{
		sum += array[i];
	}
	return sum / (double)length;
}

int main()
{
	srand((unsigned int)time(NULL));
	size_t length = 5;
	int* array = initialize(length);
	if (array)
	{
		print(array, length);
		cout << "\nAvg: " << avg(array, length) << "\n";
		destroy(array);
	}
	return 0;
}

Rand po staremu, bo po nowemu mi się nie chce. Jakoś w C++11 strasznie to udziwnili.

0
grzesiek51114 napisał(a):

Tak na szybko:

Rand po staremu, bo po nowemu mi się nie chce. Jakoś w C++11 strasznie to udziwnili.

tzn? O to chodzi? http://en.cppreference.com/w/cpp/numeric/random

0

Nom. Popatrz jak to się prosto robi w językach high level. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1