Pomiar czasu Sredniej

0

Zadanie:
Napisz program w języku c#, który:

Umożliwia wpisanie liczby elementów tablicy - LN

Tworzy tablicę Tablica o liczbie elementów równej LN,
zawierającej losowe wartości typu double,

Oblicza średnią arytmetyczną tej tablicy
Podaje czas obliczania średniej arytmetycznej w
nanosekundach.
Następnie dokonaj pomiarów trwania czasu obliczeń
średniej arytmetycznej dla LN = 3·106 4·106 5·10 6 6 ·106 7·106 8 ·10 6 9·10 6 10 ·10 6
Dla każdej wartości LN
powtórzyć pomiar 5 razy.

teraz chyba juz jest dobrze czy ktos sie nie zgadza proszę o sprawdzenie

dla 3000000 wychodzi mi

1)średnia 0,49980562395308 Czas 20000100
2)średnia 0,49995585184275 Czas 20000000
3)średnia 0,500118617154502 Czas 20000000
4) średnia0,49974443158961 Czas 20000000
5) średnia 0,500142625290898 Czas20000000

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string Zmienna;
            double Suma = 0, Srednia;
            Random Generator;
            int Ileliczb;
            double[] Tablica;
            int i;
            DateTime Start ;
            DateTime Stop;
            TimeSpan Interwał;
            long CzasObliczeń;



            Generator = new Random();


            Console.WriteLine("Podaj liczbę elementów tablicy:");
            Zmienna = Console.ReadLine();
            Ileliczb = Int32.Parse(Zmienna);

            Tablica = new double[Ileliczb];
            for (i = 0; i < Tablica.Length; i++)
            { 
                Tablica[i] = Generator.NextDouble();
            }
            for (i = 0; i < Tablica.Length; i++)
            { 
                Console.WriteLine("Tablica[" + i + "]=" + Tablica[i]);
            }
            CzasObliczeń = 0;
            Start = DateTime.Now;
            for (i = 0; i < Tablica.Length; i++)
            {
                Suma = Suma + Tablica[i];
            }
            Srednia = Suma / Tablica.Length;
            Stop = DateTime.Now;
            Interwał = Stop - Start;
            CzasObliczeń = Interwał.Ticks * 100;
            Console.WriteLine("Średnia arytmetyczna elementów tablicy wynosi:" + Srednia);


            Console.WriteLine("Czas obliczeń:" + CzasObliczeń);
            Console.ReadLine();

        }

    }
}
0
marcixe12 napisał(a):

1)średnia 0,49980562395308 Czas 20000100
2)średnia 0,49995585184275 Czas 20000000
3)średnia 0,500118617154502 Czas 20000000
4) średnia0,49974443158961 Czas 20000000
5) średnia 0,500142625290898 Czas20000000

co to za jednostka czasu? godziny? femtosekundy?
nie zdziwiło Cię, że wychodzi okrągły czas, do tego za każdym razem jednakowy?

0

właśnie trochę mnie to dziwi ale nie widze błędu

0
  1. Po co drugi wątek o tym samym?
  2. Czemu nazywasz zmienne wielką literą? To nie jest Basic.
  3. Dlaczego deklarujesz zmienne na początku metody? To nie jest C.
  4. Mierz czas wykonania za pomocą Stopwatch, a nie DateTime.
0
  1. Po co drugi wątek o tym samym?
  2. Czemu nazywasz zmienne wielką literą? To nie jest Basic.
  3. Dlaczego deklarujesz zmienne na początku metody? To nie jest C.
  4. Mierz czas wykonania za pomocą Stopwatch, a nie DateTime.
  1. a jest różnica małą a duża ?
  2. chyba nie ma róznicy czy na początku czy w srodku kodu ?
  3. w poleceniu i na zajęciach kazał w DateTime

czyli wraz nic sie nie dowiedziałem a musze dzisiaj to wysłac

1

Połowa kodu zadziała dobrze dla małej ilości danych, połowa dobrze dla dużej ilości danych. Już tłumaczę:

  • jeśli dasz sto elementów, to wypiszą się szybko, ale nie będziesz w stanie zmierzyć czasu liczenia średniej, to ze względu na nienadającą się dla takich zastosowań rozdzielczość ("interwał") DateTime;
  • jeśli dasz kilkaset milionów elementów, to czas zmierzy się być może w miarę dobrze, ale nawet jeśli nie zabraknie Ci pamięci na alokację tak dużej tablicy to jej zawartość będzie wypisywać się wieki. Bardzo dosłownie wieki.

Jednak jeśli chodzi o sam algorytm to jest ok.

0

aha DateTime; było w poleceniu wiec tak dałem chodziło mi o to czy kod jest dobry a keśli chodzi o te liczby zmierzyc to tak długo to nie trwa

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