Saturday, May 3, 2014

C# .NET da Excel ga jadval tuzib unga mos Bar Chart chizish dasturi

using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection; 

Biz pastda Microsoft.Office.Interop.Excel ning o`rniga Excel deb yozib ketamiz(yozuvni qisqartirish maqsadida).

1-qadamda excel jadvaliga ma`lumot yozilgan
private void button1_Click(object sender, System.EventArgs e)
{
 Excel.Application oXL;
 Excel._Workbook oWB;
 Excel._Worksheet oSheet;
 Excel.Range oRng;

 try
 {
  //Start Excel and get Application object.
  oXL = new Excel.Application();
  oXL.Visible = true;

  //Get a new workbook.
  oWB = (Excel._Workbook)(oXL.Workbooks.Add( Missing.Value ));
  oSheet = (Excel._Worksheet)oWB.ActiveSheet;

  //Add table headers going cell by cell.
  oSheet.Cells[1, 1] = "First Name";
  oSheet.Cells[1, 2] = "Last Name";
  oSheet.Cells[1, 3] = "Full Name";
  oSheet.Cells[1, 4] = "Salary";

  //Format A1:D1 as bold, vertical alignment = center.
  oSheet.get_Range("A1", "D1").Font.Bold = true;
  oSheet.get_Range("A1", "D1").VerticalAlignment = 
   Excel.XlVAlign.xlVAlignCenter;
  
  // Create an array to multiple values at once.
  string[,] saNames = new string[5,2];
  
  saNames[ 0, 0] = "John";
  saNames[ 0, 1] = "Smith";
  saNames[ 1, 0] = "Tom";
  saNames[ 1, 1] = "Brown";
  saNames[ 2, 0] = "Sue";
  saNames[ 2, 1] = "Thomas";
  saNames[ 3, 0] = "Jane";
  saNames[ 3, 1] = "Jones";
  saNames[ 4, 0] = "Adam";
  saNames[ 4, 1] = "Johnson";

         //Fill A2:B6 with an array of values (First and Last Names).
         oSheet.get_Range("A2", "B6").Value2 = saNames;

  //Fill C2:C6 with a relative formula (=A2 & " " & B2).
  oRng = oSheet.get_Range("C2", "C6");
  oRng.Formula = "=A2 & \" \" & B2";

  //Fill D2:D6 with a formula(=RAND()*100000) and apply format.
  oRng = oSheet.get_Range("D2", "D6");
  oRng.Formula = "=RAND()*100000";
  oRng.NumberFormat = "$0.00";

  //AutoFit columns A:D.
  oRng = oSheet.get_Range("A1", "D1");
  oRng.EntireColumn.AutoFit();

  //Manipulate a variable number of columns for Quarterly Sales Data.
  DisplayQuarterlySales(oSheet);

  //Make sure Excel is visible and give the user control
  //of Microsoft Excel's lifetime.
  oXL.Visible = true;
  oXL.UserControl = true;
 }
 catch( Exception theException ) 
 {
  String errorMessage;
  errorMessage = "Error: ";
  errorMessage = String.Concat( errorMessage, theException.Message );
  errorMessage = String.Concat( errorMessage, " Line: " );
  errorMessage = String.Concat( errorMessage, theException.Source );

  MessageBox.Show( errorMessage, "Error" );
 }
}

2-qadamda esa chart chizilgan

private void DisplayQuarterlySales(Excel._Worksheet oWS)
{
 Excel._Workbook oWB;
 Excel.Series oSeries;
 Excel.Range oResizeRange;
 Excel._Chart oChart;
 String sMsg;
 int iNumQtrs;

 //Determine how many quarters to display data for.
 for( iNumQtrs = 4; iNumQtrs >= 2; iNumQtrs--)
 {
  sMsg = "Enter sales data for ";
  sMsg = String.Concat( sMsg, iNumQtrs );
  sMsg = String.Concat( sMsg, " quarter(s)?");

  DialogResult iRet = MessageBox.Show( sMsg, "Quarterly Sales?", 
   MessageBoxButtons.YesNo );
  if (iRet == DialogResult.Yes)
   break;
 }

 sMsg = "Displaying data for ";
 sMsg = String.Concat( sMsg, iNumQtrs );
 sMsg = String.Concat( sMsg, " quarter(s)." );

 MessageBox.Show( sMsg, "Quarterly Sales" );

 //Starting at E1, fill headers for the number of columns selected.
 oResizeRange = oWS.get_Range("E1", "E1").get_Resize( Missing.Value, iNumQtrs);
 oResizeRange.Formula = "=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\"";

 //Change the Orientation and WrapText properties for the headers.
 oResizeRange.Orientation = 38;
 oResizeRange.WrapText = true;

 //Fill the interior color of the headers.
 oResizeRange.Interior.ColorIndex = 36;

 //Fill the columns with a formula and apply a number format.
 oResizeRange = oWS.get_Range("E2", "E6").get_Resize( Missing.Value, iNumQtrs);
 oResizeRange.Formula = "=RAND()*100";
 oResizeRange.NumberFormat = "$0.00";

 //Apply borders to the Sales data and headers.
 oResizeRange = oWS.get_Range("E1", "E6").get_Resize( Missing.Value, iNumQtrs);
 oResizeRange.Borders.Weight = Excel.XlBorderWeight.xlThin;

 //Add a Totals formula for the sales data and apply a border.
 oResizeRange = oWS.get_Range("E8", "E8").get_Resize( Missing.Value, iNumQtrs);
 oResizeRange.Formula = "=SUM(E2:E6)";
 oResizeRange.Borders.get_Item( Excel.XlBordersIndex.xlEdgeBottom ).LineStyle 
  = Excel.XlLineStyle.xlDouble;
 oResizeRange.Borders.get_Item( Excel.XlBordersIndex.xlEdgeBottom ).Weight 
  = Excel.XlBorderWeight.xlThick;

 //Add a Chart for the selected data.
 oWB = (Excel._Workbook)oWS.Parent;
 oChart = (Excel._Chart)oWB.Charts.Add( Missing.Value, Missing.Value, 
  Missing.Value, Missing.Value );

 //Use the ChartWizard to create a new chart from the selected data.
 oResizeRange = oWS.get_Range("E2:E6", Missing.Value ).get_Resize( 
  Missing.Value, iNumQtrs);
 oChart.ChartWizard( oResizeRange, Excel.XlChartType.xl3DColumn, Missing.Value,
  Excel.XlRowCol.xlColumns, Missing.Value, Missing.Value, Missing.Value, 
  Missing.Value, Missing.Value, Missing.Value, Missing.Value );
 oSeries = (Excel.Series)oChart.SeriesCollection(1);
 oSeries.XValues = oWS.get_Range("A2", "A6");
 for( int iRet = 1; iRet <= iNumQtrs; iRet++)
 {
  oSeries = (Excel.Series)oChart.SeriesCollection(iRet);
  String seriesName;
  seriesName = "=\"Q";
  seriesName = String.Concat( seriesName, iRet );
  seriesName = String.Concat( seriesName, "\"" );
  oSeries.Name = seriesName;
 }                
 
 oChart.Location( Excel.XlChartLocation.xlLocationAsObject, oWS.Name );

 //Move the chart so as not to cover your data.
 oResizeRange = (Excel.Range)oWS.Rows.get_Item(10, Missing.Value );
 oWS.Shapes.Item("Chart 1").Top = (float)(double)oResizeRange.Top;
 oResizeRange = (Excel.Range)oWS.Columns.get_Item(2, Missing.Value );
 oWS.Shapes.Item("Chart 1").Left = (float)(double)oResizeRange.Left;
}


Monday, March 3, 2014

Ikki va undan ortiq, ko`p o`lchovli massivlar haqida

Ikki va undan ortiq, ko`p o`lchovli massivlar haqida

Bir o`lchovli massivlar vector(vektor) deyiladi.
Ikki o`lchovli massiv esa matrix(matritsa) deyiladi.
Vektorlar - int[] a={2,3,4,54,5}; (C#, Java)
Matritsa - int[,] a={{3,5,3},{3,5,6},{544,3,64},{654,0,-5}}; (C#,Java)
Massivning ixtiyoriy elementini o`zgartirishda uning indexi(pozitsiyasi) orqali o`zgartiriladi.
a[4]=2; (5- element o`zgartirildi)

b[3]="3423"; (4- element o` zgartirildi)

Main funksiyasi

Main funksiyasi(asosiy funksiya) - Barcha dasturlarda mazkur funksiya bor. Bu funksiya dasturning kirish eshigi, dastur ishga tushirilganda avtomatik shu funksiyaga murojaat bo`lib, shu funksiyada qaysi funksiya ko`rsatilsa shu yerga yo`naltiriladi. agar hech bir funksiyaga murojaat qilinmagan bo`lsa boshqa class yoki funksiyalarga murojaat qilmasdan dastur ish faoliyatini tugatadi.

Funksiyalar bilan ishlash

Funksiyalar bilan ishlash

Funksiyalar biz uchun nega kerak? - Class biz uchun tip, funksiyalarni e`lon qilish maydoni, biror obyektni qayta ishlash uchun kerakligini bildik. Endi funksiya haqida, nima uchun foydalanishimiz kerakligi haqida bilib olamiz. Sizchi nima deb o`ylaysiz?

Demak, class ning vazifalari ichida mantiqiy yoki arifmetik amallar yo`q. Biz biror missiyani bajarishni xohlasak uning algoritmini qanday kiritamiz? Albatta funksiyaga. Funksiyalar ko`p bo`lishi mumkin ular bir classda yoki bir nechta class da bo`lishi ham mumkin. Eslab o`tamiz tashqaridan ko`rishimiz uchun bu funksiya albatta public bo`lishi lozim. Demak funksiyada dasturning mantig`i yoziladi, bu mantiq funksiyalarga, classlarga ma`nosi bo`yicha ajratib, tartiblab yoziladi. Kerak bo`lgan yerda shu qismni e`lon qilinadi, kerak bo`lgan yerda murojaat qilinaveradi. Bir nechta kichik dastur tuzmoqchi bo`lsangiz yoki bir nechta masalani ishlamoqchi bo`lsangiz har biriga alohida proyekt yaratib o`tirishni keragi yo`q, har bir masalani bittadan funksiyada bajarib, shu funksiyalarni asosiy funksiyadan chaqirib qo`yish kifoya. Son-sanoqsiz funksiyalar, classlar bo`lishi mumkin, ammo ular siz qachon murojaat qilsangizgina faoliyatni boshlaydilar. Bundan anglashiladiki, yozayotgan kodimi kattalashib ketmasligi uchun classlarga, funksiyalarga bo`lib tashlasak xotirani tejaymiz, murojaat qilsakgina ishlar ekanlar. Funksiyaga murojaat ham faqat funksiya ichidan bo`ladi, e`lon qilish esa faqat class ichida. Demak class da e`lon qilyapmiz, funksiyadan boshqa funksiyani chaqirayapmiz. Funksiyaga murojaat qilganda funksiya nomidan so`ng "(" belgisini qo`yamiz(qavsni yopmay turamiz) va bizga kiritishimiz shart bo`lgan kerakli parametrlar ko`rinadi. Demak ko`rindiki funksiyalardan foydalanish, e`lon qilish uchun maxsus bilim shart emas, tiplarni bilsak bo`ldi ekan. Tiplarni esa OOP ni o`rganishdan oldin misol yechish jarayonida yodlab, tushunib olamiz. Xulosa shuki biz uchun o`ylagan algoritmimizni funksiyani e`lon qilib uning ichida(tanasida) yozamiz.

Classlarga murojaat

Classlarga murojaat


Classlarga murojaat qilganda ma`lumot dinamik xotiraga tushadi. Chunki classni chaqirish C# va Java da deyarli bir xil. 


Bu yerda Tom -class, tom - obyekt. demak Tom tipidagi tom.(Mushuklar turiga kiruvchi bir hayvon yoki obyekt, ya`ni bir mushuk. E`tibor bering: Tom(Mushuk) bilan tom(mushuk) farq qilmoqda).

Static elementlar

Static elementlar

   Class, funksiya, obyekt yoki propertyni static(static) element sifatida e`lon qilish mumkin. Bundan ko`zlangan maqsad statik elementni xotiraning yuqori pog`onasiga chiqarib qo`yish va uni xotirada doim saqlash, kerak bo`lganda unga murojaat qilish. Statik bo`lmagan elementlar esa classga murojaat vaqtida ular ham yangidan xotiraga olinadi, classni ishlatishni to`xtatib block yopilganda esa u elementlar xotiradan tozalab tashlanadi. Undan tashqari class ni bir necha marta qayta-qayta murojaat etib chaqirib foydalanilganda shu class tipida bir nechta obyekt hosil bo`ladi, statik bo`lmagan elementlari har bir klassda alohida element qabul qiladi, statik bo`lsa shu obyektlarda hammasida ayni shu statik elementi bir xil qiymatga moslashib qoladi(bittasidagi statik element o`zgartirilsa hamma obyektlarda xuddi shu statik element bir xil yangi qiymatga o`zgarib qoladi).
Funksiyalar ham statik bo`lishlari mumkin. Bu qachon bo`ladi? Qachonki bir funksiyaning vazifasi o`zi joylashgan classdagi boshqa funksiyaga bog`liq bo`lmasa va uni asosan boshqa classlardan chaqirilsa shunda ishlatiladi.
Static elementlar class nomidan so`ng nuqta(.) qo`yib chaqiriladi
Masalan: Console.WriteLine("..."); System.out.println("...");

 bu yerda Console va System -class, WriteLine va println esa statik funksiyalar.

Funksiyaga murojaat

Funksiyaga murojaat - Funksiyani chaqirish, funksiyani ishlatish, funksiya ijro etish...

Funksiyaga murojaat etishda quyidagilarga e`tibor qaratish lozim:
1. Funksiya qiymat qaytaradimi? - agar qaytarsa demak undan biror natija olib boshqa o`zgaruvchiga berish mumkin.
2. Funksiyaning tipi qanaqa, ya`ni bizga qaytadigan qiymat qaysi tipda bo`ladi? - Agar yangi o`zgaruvchi e`lon qilib unga funksiyaning qiymatini berishni istasak, demak yangi o`zgaruvchining tipi funksiyaning tipini o`z ichiga olishi yoki u bilan bir xil bo`lishi shart.
3. Funksiya parametr oladimi? - agar parametr olsa, unga parametr kiritish kerak bo`ladi.
4. Parametrlari nechta va tiplari qanaqa? - parametrlarning o`rniga biror qiymat yoki boshqa bir o`zgaruvchi kiritish mumkin. Ketma-ketlik esa parametrlarning ketma-ketligi bilan bir xil va har bir kiritilayotgan parametrning tipi e`lon qilingan parametr o`zgaruvchisining tipi bilan bir xil bo`lishi kerak.
bular 4 ta bo`lgani bilan qiyin emas.
Ushbu shartlar qanoatlantirilsa funksiya ishlaydi va biror natija olish yoki shunchaki ishlatib yuborish mumkin.

Ko`rib turganimizdek funksiyalarning ichki qismida yana biz bilgan tizimli dasturlashning arifmetik amallaridan foydalaniladi. Shu sababli yosh dasturchilarga masala ishlatib, ularni ko`niktirib boriladi va Class tushunchasini qabul qilish ularga og`irlik qilmaydi. Sababi funksiyani e`lon qilish va chaqirishdan boshqa deyarli barcha narsalar arifmetik ifodalar bo`lmoqda...