Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.12 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace DaneZPlikuConsole
  8. {
  9. class Program
  10. {
  11. static string TablicaDoString<T>(T[][] tab)
  12. {
  13. string wynik = "";
  14. for (int i = 0; i < tab.Length; i++)
  15. {
  16. for (int j = 0; j < tab[i].Length; j++)
  17. {
  18. wynik += tab[i][j].ToString() + " ";
  19. }
  20. wynik = wynik.Trim() + Environment.NewLine;
  21. }
  22.  
  23. return wynik;
  24. }
  25.  
  26. static double StringToDouble(string liczba)
  27. {
  28. double wynik; liczba = liczba.Trim();
  29. if (!double.TryParse(liczba.Replace(',', '.'), out wynik) && !double.TryParse(liczba.Replace('.', ','), out wynik))
  30. throw new Exception("Nie udało się skonwertować liczby do double");
  31.  
  32. return wynik;
  33. }
  34.  
  35.  
  36. static int StringToInt(string liczba)
  37. {
  38. int wynik;
  39. if (!int.TryParse(liczba.Trim(), out wynik))
  40. throw new Exception("Nie udało się skonwertować liczby do int");
  41.  
  42. return wynik;
  43. }
  44.  
  45. static string[][] StringToTablica(string sciezkaDoPliku)
  46. {
  47. string trescPliku = System.IO.File.ReadAllText(sciezkaDoPliku); // wczytujemy treść pliku do zmiennej
  48. 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
  49. 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
  50.  
  51. for (int i = 0; i < wiersze.Length; i++)
  52. {
  53. string wiersz = wiersze[i].Trim(); // przypisuję i-ty element tablicy do zmiennej wiersz
  54. 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
  55. 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
  56. for (int j = 0; j < cyfry.Length; j++)
  57. {
  58. string cyfra = cyfry[j].Trim(); // przypisuję j-tą cyfrę do zmiennej cyfra
  59. wczytaneDane[i][j] = cyfra;
  60. }
  61. }
  62. return wczytaneDane;
  63. }
  64.  
  65. static void Main(string[] args)
  66. {
  67. #region // wczytanie pliku
  68. string nazwaPlikuZDanymi = @"australian.txt";
  69. string nazwaPlikuZTypamiAtrybutow = @"australian-type.txt";
  70.  
  71. string[][] wczytaneDane = StringToTablica(nazwaPlikuZDanymi);
  72. string[][] atrType = StringToTablica(nazwaPlikuZTypamiAtrybutow);
  73.  
  74. Console.WriteLine("Dane systemu");
  75. string wynik = TablicaDoString(wczytaneDane);
  76. Console.Write(wynik);
  77.  
  78. Console.WriteLine("");
  79. Console.WriteLine("Dane pliku z typami");
  80.  
  81. string wynikAtrType = TablicaDoString(atrType);
  82. Console.Write(wynikAtrType);
  83. #endregion
  84. /****************** Miejsce na rozwiązanie *********************************/
  85. string[] ostatniaKolumna = Kolumna(wczytaneDane, wczytaneDane[0].Length -1);
  86. string [] unikalna = Unikalna(ostatniaKolumna);
  87. string PokazKlasyDecyzyjne = string.Join("\n", unikalna);
  88. Console.Write("Oto istniejące klasy decyzyjne: ");
  89. Console.WriteLine("\n" + PokazKlasyDecyzyjne + "\n");
  90. int suma0 = zlicz0(ostatniaKolumna);
  91. int suma1 = zlicz1(ostatniaKolumna);
  92. Console.WriteLine("Suma 0 =" + suma0);
  93. Console.WriteLine("Suma 1 =" + suma1);
  94.  
  95. // Klasy Decyzyjne
  96.  
  97. int[] indeksy = atrybutyNumeryczne(atrType);
  98. for (int i = 0; i < indeksy.Length; i++)
  99. {
  100. string[] kolejna = Kolumna(wczytaneDane, indeksy[i]);
  101. double max = Max(kolejna);
  102. double min = Min(kolejna);
  103. Console.WriteLine("\n" + "wartosc dla a" + (indeksy[i] + 1) + " max:" + max + " min:" + min + "\n");
  104. }
  105.  
  106. // Max/min dla atrybutow
  107.  
  108. for (int i = 0; i < wczytaneDane[0].Length - 1; i++)
  109. {
  110. string[] kolumna = Kolumna(wczytaneDane, i);
  111. string[] unikWart = Unikalna(kolumna);
  112. int dlugosc = unikWart.Length;
  113. Console.WriteLine("Atrybut nr: " + (i+1));
  114. Console.WriteLine("Liczba roznych wartosci dla atrybutu: " + dlugosc+ "\nA to te atrybuty: ");
  115.  
  116. for (int j = 0; j < unikWart.Length; j++)
  117. {
  118. Console.Write(unikWart[j] + " ");
  119. }
  120. Console.WriteLine("\n");
  121. }
  122.  
  123. // Liczba i lista roznych wart
  124.  
  125. for (int i = 0; i < indeksy.Length; i++)
  126. {
  127. string[] kolumnaWar = Kolumna(wczytaneDane, indeksy[i]);
  128. string[] wynik2 = Unikalna(kolumnaWar);
  129. double wariancja = Math.Sqrt(Wariancja(kolumnaWar));
  130. Console.WriteLine("a" + (indeksy[i] + 1) + ":" + wariancja);
  131.  
  132. for (int j = 0; j < unikalna.Length; j++)
  133. {
  134. string[] kolumna2 = KolumnaJezeli(wczytaneDane, indeksy[i], wczytaneDane[0].Length - 1, unikalna[j]);
  135. double wariancja2 = Math.Sqrt(Wariancja(kolumna2));
  136. Console.WriteLine(" " + wariancja2);
  137. }
  138. Console.WriteLine("\n");
  139.  
  140. }
  141.  
  142.  
  143.  
  144. // Wariancja
  145.  
  146.  
  147.  
  148.  
  149. /****************** Koniec miejsca na rozwiązanie ********************************/
  150. Console.ReadKey();
  151.  
  152. }
  153. static string[] Kolumna(string[][] tab, int Nrkolumny)
  154. {
  155. List<string> numerkol = new List<string>();
  156. for (int i = 0; i < tab.Length; i++)
  157. {
  158. numerkol.Add(tab[i][Nrkolumny]);
  159. }
  160. return numerkol.ToArray();
  161. } // Kolumna
  162. static string[] Unikalna (string[] tab)
  163. {
  164. List<string> unikalny = new List<string>();
  165. for (int i = 0; i < tab.Length; i++)
  166. {
  167. if (!unikalny.Contains(tab[i]))
  168. unikalny.Add(tab[i]);
  169. }
  170. return unikalny.ToArray();
  171. } // Wartosc Unikalna
  172. static int zlicz0 (string[] tab)
  173. {
  174. int suma0 = 0;
  175. for (int i = 0; i < tab.Length; i++)
  176. {
  177. if (tab[i] == "0")
  178. { suma0 += 1; }
  179. }
  180. return suma0;
  181. }
  182. // Suma 0
  183. static int zlicz1(string[] tab)
  184. {
  185. int suma1 = 0;
  186. for (int i = 0; i < tab.Length; i++)
  187. {
  188. if (tab[i] == "1")
  189. { suma1 += 1; }
  190. }
  191. return suma1;
  192. } // Suma 1
  193. static int [] atrybutyNumeryczne(string[][] tab)
  194. {
  195. List<int> liczmnie = new List<int>();
  196. for (int i = 0; i < tab.Length; i++)
  197. {
  198. if (tab[i][1] == "n")
  199. liczmnie.Add(i);
  200. }
  201. return liczmnie.ToArray();
  202. } // sprawdza atrybut "n"
  203. static double Max (string[]tab)
  204. {
  205. double najwieksza = 0;
  206. for (int i = 0; i < tab.Length; i++)
  207. {
  208. if(StringToDouble(tab[i]) > najwieksza)
  209. najwieksza = (StringToDouble(tab[i])) ;
  210. }
  211. return najwieksza;
  212. } // Maks
  213. static double Min(string [] tab)
  214. {
  215. double najmniejsza = 99999999;
  216. for (int i = 0; i < tab.Length; i++)
  217. {
  218. if (StringToDouble(tab[i]) < najmniejsza)
  219. najmniejsza = StringToDouble(tab[i]);
  220. }
  221. return najmniejsza;
  222. } // Min
  223. static string [] KolumnaJezeli (string[][]tab, int kolumna, int kdecyzji, string decyzja)
  224. {
  225. List<string> lista = new List<string>();
  226. for (int i = 0; i < tab.Length; i++)
  227. {
  228. string[] wiersz = tab[i];
  229. if (wiersz[kdecyzji] == decyzja)
  230. lista.Add(wiersz[kolumna]);
  231. }
  232. return lista.ToArray();
  233. }
  234. static Dictionary<int,int> Czestosc (int[] tab)
  235. {
  236. Dictionary<int, int> slownik = new Dictionary<int, int>();
  237. slownik.Add(tab[0], 1);
  238. for (int i = 0; i < tab.Length; i++)
  239. {
  240. if (slownik.ContainsKey(tab[i]))
  241. slownik[tab[i]]+=1;
  242. else
  243. slownik.Add(tab[i], 1);
  244.  
  245. }
  246. return slownik;
  247. } // Wariancja
  248. static double Wariancja (string[] tab)
  249. {
  250. double licznik = 0;
  251. double srednia = 0;
  252. for (int i = 0; i < tab.Length; i++)
  253. {
  254. srednia += StringToDouble(tab[i]);
  255. }
  256. srednia = srednia / tab.Length;
  257. for (int i = 0; i < tab.Length; i++)
  258. {
  259.  
  260. licznik += (srednia - StringToDouble(tab[i])) * (srednia - StringToDouble(tab[i]));
  261. }
  262. return licznik / tab.Length;
  263. } // Wariancja
  264. }
  265. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement