Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace DaneZPlikuConsole
- {
- class Program
- {
- static string TablicaDoString<T>(T[][] tab)
- {
- string wynik = "";
- for (int i = 0; i < tab.Length; i++)
- {
- for (int j = 0; j < tab[i].Length; j++)
- {
- wynik += tab[i][j].ToString() + " ";
- }
- wynik = wynik.Trim() + Environment.NewLine;
- }
- return wynik;
- }
- static double StringToDouble(string liczba)
- {
- double wynik; liczba = liczba.Trim();
- if (!double.TryParse(liczba.Replace(',', '.'), out wynik) && !double.TryParse(liczba.Replace('.', ','), out wynik))
- throw new Exception("Nie udało się skonwertować liczby do double");
- return wynik;
- }
- static int StringToInt(string liczba)
- {
- int wynik;
- if (!int.TryParse(liczba.Trim(), out wynik))
- throw new Exception("Nie udało się skonwertować liczby do int");
- return wynik;
- }
- static string[][] StringToTablica(string sciezkaDoPliku)
- {
- string trescPliku = System.IO.File.ReadAllText(sciezkaDoPliku); // wczytujemy treść pliku do zmiennej
- string[] wiersze = trescPliku.Trim().Split(new char[] { '\n' }); // treść pliku dzielimy wg znaku końca linii, dzięki czemu otrzymamy każdy wiersz w oddzielnej komórce tablicy
- string[][] wczytaneDane = new string[wiersze.Length][]; // Tworzymy zmienną, która będzie przechowywała wczytane dane. Tablica będzie miała tyle wierszy ile wierszy było z wczytanego poliku
- for (int i = 0; i < wiersze.Length; i++)
- {
- string wiersz = wiersze[i].Trim(); // przypisuję i-ty element tablicy do zmiennej wiersz
- string[] cyfry = wiersz.Split(new char[] { ' ' }); // dzielimy wiersz po znaku spacji, dzięki czemu otrzymamy tablicę cyfry, w której każda oddzielna komórka to czyfra z wiersza
- wczytaneDane[i] = new string[cyfry.Length]; // Do tablicy w której będą dane finalne dokładamy wiersz w postaci tablicy integerów tak długą jak długa jest tablica cyfry, czyli tyle ile było cyfr w jednym wierszu
- for (int j = 0; j < cyfry.Length; j++)
- {
- string cyfra = cyfry[j].Trim(); // przypisuję j-tą cyfrę do zmiennej cyfra
- wczytaneDane[i][j] = cyfra;
- }
- }
- return wczytaneDane;
- }
- static void Main(string[] args)
- {
- #region // wczytanie pliku
- string nazwaPlikuZDanymi = @"australian.txt";
- string nazwaPlikuZTypamiAtrybutow = @"australian-type.txt";
- string[][] wczytaneDane = StringToTablica(nazwaPlikuZDanymi);
- string[][] atrType = StringToTablica(nazwaPlikuZTypamiAtrybutow);
- Console.WriteLine("Dane systemu");
- string wynik = TablicaDoString(wczytaneDane);
- Console.Write(wynik);
- Console.WriteLine("");
- Console.WriteLine("Dane pliku z typami");
- string wynikAtrType = TablicaDoString(atrType);
- Console.Write(wynikAtrType);
- #endregion
- /****************** Miejsce na rozwiązanie *********************************/
- string[] ostatniaKolumna = Kolumna(wczytaneDane, wczytaneDane[0].Length -1);
- string [] unikalna = Unikalna(ostatniaKolumna);
- string PokazKlasyDecyzyjne = string.Join("\n", unikalna);
- Console.Write("Oto istniejące klasy decyzyjne: ");
- Console.WriteLine("\n" + PokazKlasyDecyzyjne + "\n");
- int suma0 = zlicz0(ostatniaKolumna);
- int suma1 = zlicz1(ostatniaKolumna);
- Console.WriteLine("Suma 0 =" + suma0);
- Console.WriteLine("Suma 1 =" + suma1);
- // Klasy Decyzyjne
- int[] indeksy = atrybutyNumeryczne(atrType);
- for (int i = 0; i < indeksy.Length; i++)
- {
- string[] kolejna = Kolumna(wczytaneDane, indeksy[i]);
- double max = Max(kolejna);
- double min = Min(kolejna);
- Console.WriteLine("\n" + "wartosc dla a" + (indeksy[i] + 1) + " max:" + max + " min:" + min + "\n");
- }
- // Max/min dla atrybutow
- for (int i = 0; i < wczytaneDane[0].Length - 1; i++)
- {
- string[] kolumna = Kolumna(wczytaneDane, i);
- string[] unikWart = Unikalna(kolumna);
- int dlugosc = unikWart.Length;
- Console.WriteLine("Atrybut nr: " + (i+1));
- Console.WriteLine("Liczba roznych wartosci dla atrybutu: " + dlugosc+ "\nA to te atrybuty: ");
- for (int j = 0; j < unikWart.Length; j++)
- {
- Console.Write(unikWart[j] + " ");
- }
- Console.WriteLine("\n");
- }
- // Liczba i lista roznych wart
- for (int i = 0; i < indeksy.Length; i++)
- {
- string[] kolumnaWar = Kolumna(wczytaneDane, indeksy[i]);
- string[] wynik2 = Unikalna(kolumnaWar);
- double wariancja = Math.Sqrt(Wariancja(kolumnaWar));
- Console.WriteLine("a" + (indeksy[i] + 1) + ":" + wariancja);
- for (int j = 0; j < unikalna.Length; j++)
- {
- string[] kolumna2 = KolumnaJezeli(wczytaneDane, indeksy[i], wczytaneDane[0].Length - 1, unikalna[j]);
- double wariancja2 = Math.Sqrt(Wariancja(kolumna2));
- Console.WriteLine(" " + wariancja2);
- }
- Console.WriteLine("\n");
- }
- // Wariancja
- /****************** Koniec miejsca na rozwiązanie ********************************/
- Console.ReadKey();
- }
- static string[] Kolumna(string[][] tab, int Nrkolumny)
- {
- List<string> numerkol = new List<string>();
- for (int i = 0; i < tab.Length; i++)
- {
- numerkol.Add(tab[i][Nrkolumny]);
- }
- return numerkol.ToArray();
- } // Kolumna
- static string[] Unikalna (string[] tab)
- {
- List<string> unikalny = new List<string>();
- for (int i = 0; i < tab.Length; i++)
- {
- if (!unikalny.Contains(tab[i]))
- unikalny.Add(tab[i]);
- }
- return unikalny.ToArray();
- } // Wartosc Unikalna
- static int zlicz0 (string[] tab)
- {
- int suma0 = 0;
- for (int i = 0; i < tab.Length; i++)
- {
- if (tab[i] == "0")
- { suma0 += 1; }
- }
- return suma0;
- }
- // Suma 0
- static int zlicz1(string[] tab)
- {
- int suma1 = 0;
- for (int i = 0; i < tab.Length; i++)
- {
- if (tab[i] == "1")
- { suma1 += 1; }
- }
- return suma1;
- } // Suma 1
- static int [] atrybutyNumeryczne(string[][] tab)
- {
- List<int> liczmnie = new List<int>();
- for (int i = 0; i < tab.Length; i++)
- {
- if (tab[i][1] == "n")
- liczmnie.Add(i);
- }
- return liczmnie.ToArray();
- } // sprawdza atrybut "n"
- static double Max (string[]tab)
- {
- double najwieksza = 0;
- for (int i = 0; i < tab.Length; i++)
- {
- if(StringToDouble(tab[i]) > najwieksza)
- najwieksza = (StringToDouble(tab[i])) ;
- }
- return najwieksza;
- } // Maks
- static double Min(string [] tab)
- {
- double najmniejsza = 99999999;
- for (int i = 0; i < tab.Length; i++)
- {
- if (StringToDouble(tab[i]) < najmniejsza)
- najmniejsza = StringToDouble(tab[i]);
- }
- return najmniejsza;
- } // Min
- static string [] KolumnaJezeli (string[][]tab, int kolumna, int kdecyzji, string decyzja)
- {
- List<string> lista = new List<string>();
- for (int i = 0; i < tab.Length; i++)
- {
- string[] wiersz = tab[i];
- if (wiersz[kdecyzji] == decyzja)
- lista.Add(wiersz[kolumna]);
- }
- return lista.ToArray();
- }
- static Dictionary<int,int> Czestosc (int[] tab)
- {
- Dictionary<int, int> slownik = new Dictionary<int, int>();
- slownik.Add(tab[0], 1);
- for (int i = 0; i < tab.Length; i++)
- {
- if (slownik.ContainsKey(tab[i]))
- slownik[tab[i]]+=1;
- else
- slownik.Add(tab[i], 1);
- }
- return slownik;
- } // Wariancja
- static double Wariancja (string[] tab)
- {
- double licznik = 0;
- double srednia = 0;
- for (int i = 0; i < tab.Length; i++)
- {
- srednia += StringToDouble(tab[i]);
- }
- srednia = srednia / tab.Length;
- for (int i = 0; i < tab.Length; i++)
- {
- licznik += (srednia - StringToDouble(tab[i])) * (srednia - StringToDouble(tab[i]));
- }
- return licznik / tab.Length;
- } // Wariancja
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement