C# Ilość elementów tablicy

Odpowiedz Nowy wątek
2014-12-16 17:10
0

Program ma wyliczać ilość elementów tablicy, których odchylenie nie przekracza wartości zadanej przez wprowadzoną uprzednio liczbę, czyli z mat. pkt widzenia ma to wyglądać tak:

b - liczba pobrana z wejścia wywołania funkcji
x - średnia arytmetyczna ze wszystkich elementów tablicy
ai - i-ty element tablicy

odchylenie sprawdzamy dla wszystkich elem. tablicy
|x-ai| <= b

Mój kod, wygląda następująco:

 
        static void Main(string[] args)
        {
            int[] tablicaliczb = stt(Console.ReadLine());
            int iloscele = ilosc(tablicaliczb);
            Console.WriteLine("Wynik: " + iloscele);
            Console.ReadLine();
        }
 
        static int[] stt(string tekst)
        {
            string[] teksttab = tekst.Split(' ');
            int[] liczbatab = new int[teksttab.Length];
            for (int i = 0; i < teksttab.Length; i++)
            {
                liczbatab[i] = Convert.ToInt32(teksttab[i]);
            }
            return liczbatab;
        }
        static int ilosc(int[] tablica)
        {
            int suma = 0;
            int srr = 0;
            int odchylenie = 1;
            Console.WriteLine("Wprowadź liczbę");
            int n;
            n = Convert.ToInt32(Console.ReadLine());
            for (int i = 0; i < tablica.Length; i++)
            {
                suma = suma + tablica[i];
            }
            {
                for (int i = 0; tablica[i] < n; i++)
                {
                    srr = suma / tablica.Length;
                }
                    {
                        odchylenie = srr - tablica.Length;
 
                }
                return odchylenie;
 
            }
        }
    }
} 

czyli doszedłem do momentu wyliczenia średniej i przy wyliczaniu odchylenia nie mam już pomysłu na kod. Może ktoś pomóc?

edytowany 1x, ostatnio: ixiixi, 2014-12-18 14:11

Pozostało 580 znaków

2014-12-16 18:10
0

Deklarujesz jakiś licznik int licznik = 0; i iterujesz po tablicy. Dla każdego elementu sprawdzasz warunek, jeśli się zgadza robisz i++;. W czym problem?

Pozostało 580 znaków

2014-12-16 20:11
0

Na początku to zmień typ zmiennej srr, średnia przecież może mieć wartość 3,5 nawet jeśli cała tablica jest z liczb całkowitych.

Po drugie pomysł liczenia odchylenia, robisz to co sam napisałeś matematycznie, tylko pamiętać musisz o module (jeśli różnica jest ujemna to możesz wymnożyć przez -1)

Kod:

static void Main(string[] args)
        {
            int[] tablicaliczb = stt(Console.ReadLine());
            int iloscele = ilosc(tablicaliczb);
            Console.WriteLine("Wynik: " + iloscele);
            Console.ReadLine();
        }
 
        static int[] stt(string tekst)
        {
            string[] teksttab = tekst.Split(' ');
            int[] liczbatab = new int[teksttab.Length];
            for (int i = 0; i < teksttab.Length; i++)
            {
                liczbatab[i] = Convert.ToInt32(teksttab[i]);
            }
            return liczbatab;
        }
        static int ilosc(int[] tablica)
        {
            double suma = 0;
            double srr = 0;
            //int odchylenie = 1;
            double mod;
            int licznik = 0;
            Console.WriteLine("Wprowadź liczbę");
            double n;
            n = Convert.ToDouble(Console.ReadLine());
 
            for (int i = 0; i < tablica.Length; i++)
            {
                suma = suma + tablica[i];
            }
 
            //Console.WriteLine("Twoja tablica: ");
            for (int i = 0; i < tablica.Length; i++)
            {
                //Console.Write(tablica[i] + " ");
            }
            //Console.WriteLine();
 
            srr = suma / (double)tablica.Length;
 
            //Console.WriteLine("Elementy z tablicy, których odchylenie od wartości będącej średnią arytmetyczną liczb tablicy nie przekracza wartości zadanej ( " + n + " )");
 
            for (int i = 0; i < tablica.Length; i++)
            {
                mod = srr - tablica[i];
                if (mod < 0)
                {
                    mod = mod * (-1);
                }
 
                if (mod <= n)
                {
                    //Console.Write(tablica[i] + " ");
                    licznik++;
                }
 
            }
 
            //Console.WriteLine();
            //Console.WriteLine("Suma elemntow w tablicy: " + suma);
            //Console.WriteLine("Ilosc elementow w tablicy: " + tablica.Length);
            //Console.WriteLine("Średnia: " + suma + " / " + tablica.Length + " = " + srr);
 
            return licznik;
        }

To co jest w komentarzach to tylko na potrzeby tego abyś widział co się dzieje, jakbyś nie wiedział co się liczy to odkomentuj

edytowany 1x, ostatnio: Arbuz22, 2014-12-16 20:12

Pozostało 580 znaków

2014-12-17 12:38
0

Zadanie nadaje się do zastosowania maszyny LINQ, wiec moze tak :

 using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
 
class Script
{
    [STAThread]
    static public void Main(string[] args)
    {
        int[] tablica = new int[]{1,21,13,4,25,16,72,8,29,10};
        double liczba = 7D;
        double AVG = tablica.Average();
        double SUM = tablica.Sum(); 
        int COUNT  = tablica.Count();
        var co  = tablica.Where(x => {
            //Console.WriteLine("x:{0} /x-AVG/={1} - {2} = {3}",x,x,AVG,Math.Abs(x-AVG));    
            return (bool)(Math.Abs(x-AVG)<liczba);
            }).Count();
        Console.WriteLine("     AVG  :{0}",AVG);
        Console.WriteLine("     SUM  :{0}",SUM);
        Console.WriteLine("     COUNT:{0}",COUNT);
        Console.WriteLine("COUNT ODCH:{0}",co);
    }
}

pozdrawiam
AK

Pozostało 580 znaków

2014-12-17 18:41
0

Arbuz22 dzięki, prześledzę kod ale chyba wszystko jest ok

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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