Tài liệu học ôn

Tài liệu ôn tập, ôn thi. Tài liệu luyện thi

Showing posts with label Tin học. Show all posts

Ma Trận Kề [Lý thuyết đồ thị]

No comments

Ma Trận Kề

Khái niệm
  • Xét đồ thị G=(X, U) (có hướng hay vô hướng)
  • Giả sử tập X gồm n đỉnh và được sắp thứ tự X={x_{{\text{1}}},x_{{\text{2}}},...,x_{{\text{n}}}}, tập U gồm n cạnh và được sắp thứ tự U={u_{{\text{1}}},u_{{\text{2}}},...,u_{{\text{n}}}}

Quy tắc

Ma trận kề của đồ thị G, ký hiệu B(G), là một ma trận nhị phân cấp n x n được định nghĩa như sau: B=(B_{{\text{ij}}}) với:
  • B=(B_{{\text{ij}}} = 1 nếu có cạnh nối x_{{\text{i}}} tới x_{{\text{j}}}
  • B=(B_{{\text{ij}}} = 0 nếu không có cạnh nối x_{{\text{i}}} tới x_{{\text{j}}}
Nếu G là đồ thị vô hướng, ma trận liên thuộc của đồ thị G, ký hiệu A(G), là ma trận nhị phân cấp nxm được định nghĩa như sau: A=(A_{{\text{ij}}})
  • A=(A_{{\text{ij}}}) = 1 nếu có cạnh nối x_{{\text{i}}} tới x_{{\text{j}}}
  • A=(A_{{\text{ij}}}) = 0 nếu không có cạnh nối x_{{\text{i}}} tới x_{{\text{j}}}

Code Ma trận kề


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

namespace Bai_1
{
    class Program
    {
        //Input
        int[,] a; //ma tran ke
        int n,m; //so dinh,dinh can tim

        public void nhap()
        {
            NumbersFile f = new NumbersFile("MaTranKe.INP");
            f.ReadNumber(out n);
            f.ReadNumber(out m);
            a=new int[n,n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    f.ReadNumber(out a[i, j]);

                }
            }
        }
        public void xuat()
        {
            Console.WriteLine(n +" "+ m);
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                    Console.Write(a[i, j]+" ");    
                Console.WriteLine();
            }
        }
        static void Main(string[] args)
        {
            Program g = new Program();
            g.nhap();
            g.xuat();
        }

    }

}


Note: khi sử dụng using GraphUtility; bạn phải tạo class GraphUtility.cs

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

using System.IO;
using System.Text.RegularExpressions;

namespace GraphUtility
{
    class NumbersFile
    {
        StreamReader sr;

        public NumbersFile(string fileName)
        {
            sr = new StreamReader(fileName);
        }


        // Đọc 1 dòng trong file
        public string ReadLine()
        {
            string s;
            s = sr.ReadLine();
            return s;
        }

        // Tách thành các từ
        public string[] ReadWords()
        {
            Regex r = new Regex(@"\s+");
            string[] words;
            string s;

            s = sr.ReadLine();
            words = r.Split(s);

            return words;
        }

        // Đọc 1 số nguyên
        string[] words;
        int index;
        public bool ReadNumber(out int num)
        {
            if (words == null || index == words.Length)
            {
                words = ReadWords();
                index = 0;
            }

            num=0;
            if (int.TryParse(words[index], out num) == false)
                return false;
            index++;

            return true;
        }
    }
}

Cho đồ thị G vô hướng (7 đỉnh):

Đồ thị G
  • Gọi A là ma trận kề biểu diễn đồ thị G.
  • Từ đồ thị G, ta thấy:
    • 1 và 2 có cạnh nối => A_{{\text{12}}}=A_{{\text{21}}}=1
    • 1 và 4 có cạnh nối => A_{{\text{14}}}=A_{{\text{41}}}=1
    • 1 và 6 có cạnh nối => A_{{\text{16}}}=A_{{\text{61}}}=1
    • 2 và 3 có cạnh nối => A_{{\text{23}}}=A_{{\text{32}}}=1
    • 2 và 6 có cạnh nối => A_{{\text{26}}}=A_{{\text{62}}}=1
    • 3 và 4 có cạnh nối => A_{{\text{34}}}=A_{{\text{43}}}=1
    • 3 và 5 có cạnh nối => A_{{\text{35}}}=A_{{\text{53}}}=1
    • 3 và 7 có cạnh nối => A_{{\text{37}}}=A_{{\text{73}}}=1
    • 4 và 6 có cạnh nối => A_{{\text{46}}}=A_{{\text{64}}}=1
    • 4 và 5 có cạnh nối => A_{{\text{45}}}=A_{{\text{54}}}=1
    • 5 và 6 có cạnh nối => A_{{\text{56}}}=A_{{\text{65}}}=1
    • Còn lại các cặp đỉnh không có cạnh nối với nhau => A_{{\text{ij}}} = A_{{\text{ji}}} = 0
  • Kết quả sau khi biểu diễn đồ thị G sang ma trận kề:

Đồ thị G

ĐỀ THI VÀ GIẢI ĐỀ MÔN - CHUYÊN ĐỀ ORACLE

No comments
Nội dung đề thi
1.     Hãy nêu ra các đặc trưng của hệ quản trị Oracle XEM TÀI LIỆU
2.     Hãy cho biết một PS/SQL Package gồm mấy phần , đó là các phần nào? Hãy mô tả chi tiết mỗi phần đó XEM TÀI LIỆU
3.     Hãy sử dụng hàm(Stored Function) với tham số truyền vào là ngày công làm việc (Ngày Công) với mô tả sau:
Create or Replace Function F_Xeploai
(
          NgayCong Number
)Return Char
Is
Begin
          ???
End F_XepLoai;
Yêu cầu: Viết hoàn chỉnh hàm (Stored Function) trên với các công việc sau:
                   Xếp loại cho nhân viên dựa vào các tiêu chuẩn sau:
                   “Loại A” nếu Ngày Công  >  = 27
“Loại B” nếu Ngày Công  >  = 25
“Loại C” nếu Ngày Công  >  = 23
“Loại D” còn lại
CREATE OR REPLACE FUNCTION F_XEPLOAI
(
                             NGAYCONG NUMBER
)RETURN CHAR
IS
BEGIN
          CASE
          WHEN NGAYCONG >=27 THEN RETURN ‘LOẠI A’;
          WHEN NGAYCONG >=25 THEN RETURN ‘LOẠI B’;
WHEN NGAYCONG >=23 THEN RETURN ‘LOẠI C’;
ELSE RETURN ‘LOẠI D’;
          END CASE;
END F_XEPLOAI;
Sau đó cho biết cách gọi thực thi hàm(Store Function ) vừa viết ở trên
SET SERVER OUTPUT ON
BEGIN
          DBMS_OUPUT.PUT_LINE(F_XEPLOAI(30));
END;
4.     Tạo một Store Procedure quản lý mảng một chiều  trong đó có các tham số trả ra là Mảng chứa các số nguyên tố (MangNT), giá trị nhỏ(Min) và lớn (Max) nhất có trong mảng với mô tả như sau:
Create Or Replace Type Mang Is VARRAY (100) Of  Number –tạo mảng
Create Or Replace Procedure P_Out
(
     MangNT Out Mang,
     Max Out Number,
     Min Out Number
)Is
Begin
     ???
End P_Out;
Yêu cầu:  Viết hoàn chỉnh thủ tục (Stored Procedure ) trên để thực hiện các công việc sau
a.Phát sinh mảng một chiều với các số ngẫu nhiên nằm [1-100]
b.Xuất các giá trị trong mảng
c.Tìm giá trị lớn nhất và giá trị nhỏ nhất trong mảng
d.Trả ra mảng chứa các số nguyên tố
          CREATE OR REPLACE PROCEDURE P_OUT
         (
                   MANGNT OUT MANG,
                   MIN OUT NUMBER,
                   MAX OUT NUMBER
         )IS TYPE MANG IS VARRAY(100) OF NUMBER;
BEGIN
a.Phát sinh mảng một chiều với các số ngẫu nhiên nằm [1-100]
              FOR I IN 1..100
              LOOP
                   MANG(I):= ROUND(DBMS_RANDOM.VALUE(1,100),0);
              END LOOP;
b.Xuất các giá trị trong mảng
              FOR I IN MANG.FIRST..MANG.LAST
              LOOP
                   DBMS_OUTPUT.PUT_LINE(MANG(I));
              EBD LOOP;
c.Tìm giá trị lớn nhất và giá trị nhỏ nhất trong mảng
             
    MIN := MANG(0);
    FOR I IN MANG.FIRST..MANG.LAST
                       LOOP
        IF MANG(I) > MIN THEN
            MIN := A(I);
        END IF;
    END LOOP;
    MAX := MANG(0);
    FOR I IN MANG.FIRST..MANG.LAST
    LOOP
        IF MANG(I) < MAX THEN
            MAX := MANG(I);
        END IF;
    END LOOP;
d.Trả ra mảng chứa các số nguyên tố
    FOR I IN MANG.FIRST..MANG.LAST
    LOOP
        IF MOD(MANG(I),1):=0  ||MOD(MANG(I),MANG(I)):=0 THEN
            DBMS_OUTPUT.PUT_LINE(MANG(I));
        END IF;
    END LOOP;
END P_OUT;
Sau đó cho biết cách thực thi hàm (Stored Procedure) vừa viết ở trên
EXEC P_OUT;
5.  Giả sử ta có 3 bảng
SINHVIEN(MSSV,HOTEN,NGAYSINH,PHAI,MSLOP)
Mô tả: Mỗi sinh viên có một mã số(MSSV), họ tên , ngày sinh , phái và lớp của mình học
SINHVIEN_DETAI(MSSV,MSDT)
Mô tả:Mỗi sinh viên có mã số(MSSV) và mã số đề tài mình làm (MSDT)
DETAI(MSDT,TENDT,SOSV)
Mô tả:Mỗi đề tài có một mã số đề tài(MSDT) , tên đề tài(TENDT), và số sinh viên thực hiện đề tài
Ta có phần mô tả Stored Procedure như sau:
 Create Or Replace Procedure P_Cursor
Is
Begin
     ???
End P_Cursor
Yêu cầu:Viết hoàn chỉnh thủ tục (Stored Procedure) trên để thực hiện các công việc sau:
Dùng cơ chế Cursor tính cho việc SOSV cùng thực hiện đề tài trong table DETAI dựa vào table SINHVIEN_DETAI
CREATE  OR  REPLACE  PROCEDURE P_CURSOR
IS
CURSOR  CS  IS SELECT * FROM SINHVIEN_DETAI;
DEM  INT;
BEGIN
FOR  I  IN CS
LOOP
SELECT COUNT(MSSV) INTO DEM
FROM  SINHVIEN
WHERE  MSSV =I.MSSV;
UPDATE  DETAI 
SET  SOSV = DEM
WHERE MSDT = I.MSDT;
END LOOP;
END  P_CURSOR;
Sau đó cho biết cách thực thi thủ tục Stored Procedure viết ở trên     
EXEC P_CURSOR;

SELECT * FROM  DETAI; 

Thuật toán lát gạch C#

No comments


Tạo file LatGach.INP trong thư mục Debug với nội dung: 2


Thuật toán lát gạch trong C#

Giáo án điện tử TIN HỌC CƠ BẢN

No comments
Giáo án điện tử TIN HỌC CƠ BẢN.
IF, AND, OR, LEFT, RIGHT, MID
link download:
http://www.mediafire.com/view/?0kj0ytdkyv6bxa8
pass: giaoan

Ôn cấu trúc dữ liệu & giải thuật

No comments


Tìm kiếm tuyến tính:
int linearnsearch(int a[], int N, int x)
{
int i=o;
while((i<N)&&(a[i]==x))
i++;
if(i==N) return -1;//không tìm thấy x: không hiểu sao lại return -1
else return i;//tìm thấy x:không hiểu

}

Trang DBClass.cs

No comments

    
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;

Bài thi oracle cơ bản

No comments


1.     Hãy sử dụng hàm(Stored Function) với tham số truyền vào là ngày công làm việc (Ngày Công) với mô tả sau:
Create or Replace Function F_Xeploai
(
          NgayCong Number
)Return Char
Is
Begin
          ???
End F_XepLoai;