Đồ án CDIO – Xây dựng mô hình nhà!

ĐỒ ÁN NHẬP MÔN CÔNG NGHỆ THÔNG TIN 1

I. Yêu cầu
Xây dựng một mô hình căn nhà có khả năng chống dột dựa trên các nguyên liệu từ giấy báo và que tăm.

II. Qui định
1. Chất lượng sản phẩm
Sau khi ngôi nhà được hoàn thành, người thử nghiệm sẽ dùng lượng nước trong chai pet 330 ml đổ lên nóc của ngôi nhà với khoảng cách từ miệng chai pet đến nóc nhà không quá 1 que tăm. Sau khi đổ hết lượng nước, nếu ngôi nhà vẫn đứng vững và ko bị dột thì xem như ngôi nhà đã hoàn thành. Sv có thể đàm phán với gv về tiêu chí này.

2. Thời gian thực hiện
Thời gian chính thức là 10 tiết của tuần thứ 1 và tuần thứ 2 (kiểm tra sản phẩm vào cuối tuần thứ 2), 5 tiết của tuần sau cùng dùng để chấm điểm trình bày của sinh viên. Continue reading

Cảm nhận tất tần tật về môn học “Nhập môn Công nghệ Thông tin 1”

Nhập môn Công nghệ Thông tin 1 (NMCNTT1) là môn học được bắt đầu từ năm học này, thay vì như năm ngoái là  Tin học cơ sở. Với một người bỡ ngỡ khi bước vào môn học mới mẻ như tôi thì cảm giác và cái nhìn về nó thật lạ. Cái tên môn học nghe thật “oách”: “NHẬP MÔN” CNTT1, nghe cứ như trong môn phái ấy nhỉ ^^! Điều đó phần nào cũng gây kích thích và sự tò mò của tôi trong suốt thời gian học vừa qua.

NMCNTT1 mang sắc thái khá mới so với Tin học Cơ sở của năm vừa rồi. Tham khảo giáo trình của Tin học Cơ sở và giáo trình NMCNTT1 của các thầy biên soạn, tôi nhận thấy giáo trình NMCNTT1 được xây dựng rất hay, bố trí các chương hợp lý và đặc biệt truyền tải đến với sinh viên nhiều kiến thức thật bổ ích trong ngành Công nghệ Thông tin này. Ở môn học này, chúng tôi được nhìn nhận một cách tổng quát về lĩnh vực Công nghệ Thông tin theo xu hướng mới, với một số bài tiêu biểu như Hệ điều hành, Kiến thức cơ sở, Thuyết trình, Đạo đức nghề nghiệp, Các nghề nghiệp về CNTT trong cuộc sống, … Continue reading

Tổng hợp các bài báo cáo môn Nhập Môn CNTT1 của nhóm 3 – WAY TO FUTURE

Bài 1. Một số thiết bị, linh kiện, chuẩn giao tiếp và thuật ngữ liên quan đến HỆ THỐNG LƯU TRỮ.

Bài 2. Bộ mã và các vấn đề liên quan.

Bài 3. Hướng phát triển của Hệ Điều Hành.

Bài 4. Tội phạm công nghệ cao: PDF || PPT || Prezi

Bài 5. Tính Privacy trong các dịch vụ Web.

Các bài báo cáo của các nhóm khác: http://www.mediafire.com/?4amb4dabqj13i

BÀI 1 – Đồ Án NMCNTT1

ĐỀ BÀI

Cho số tự nhiên A. Hãy tìm số tự nhiên N nhỏ nhất sao cho N lũy thừa N (nhân N cho chính nó N lần) chia hết cho A. Hãy viết chương trình tìm số N đó và xuất ra màn hình. Trong đó A có giá trị: 1\le A\le {{10}^{9}}

Ví dụ:

Số nhập vào là A

Số xuất ra là N

8

4

13

13

BÀI GIẢI + SUY LUẬN

Trước tiên, ta có 1 nhận xét nho nhỏ: bài toán này không thể nào cho một biến i chạy từ 1 đến A rồi kiểm tra lần lượt xem {{i}^{i}} có chia hết cho A hay không được. Vì vậy ta cần một hướng đi khác để giải quyết.

Ta để ý rằng, nếu A có dạng: A=x_{1}^{{{y}_{1}}}x_{2}^{{{y}_{2}}}x_{3}^{{{y}_{3}}}...x_{k}^{{{y}_{k}}} thì giá trị N cần tìm phải có dạng: N=x_{1}^{{{z}_{1}}}x_{2}^{{{z}_{2}}}x_{3}^{{{z}_{3}}}...x_{k}^{{{z}_{k}}}. Tới đây ta chia làm 2 trường hợp như sau (nếu chính xác phải là 3 trường hợp nhưng vì trình độ còn hạn chế nên chỉ chia làm 2 trường hợp):

– Trường hợp 1: A chỉ có 1 ước nguyên tố duy nhất, tức A có dạng: A={{x}^{y}} với x là số nguyên tố. Khi đó để tìm N, ta tìm 1 số m sao cho m là số nguyên bé nhất \ge \frac{y}{x}. Từ đây giá trị N sẽ là: N={{x}^{m}} (tuy nhiên, khi y càng lớn thì có thể thuật toán cho trường hợp 1 sẽ sai)

– Trường hợp 2: A có từ 2 ước nguyên tố trở lên, tức A có dạng như ban đầu thì số N nhỏ nhất cần tìm sẽ là: N={{x}_{1}}{{x}_{2}}{{x}_{3}}...{{x}_{k}} (nếu nói chính xác thì chỉ đúng đối với số A có từ 3 ước nguyên tố trở lên, còn khi số ước nguyên tố bằng 2 thì phải dùng 1 thuật toán phụ để giải quyết)

MÃ NGUỒN

#include <stdio.h>
#include <math.h>

void main()
{
/* công dụng của các biến:
d: đếm số ước của i
d2: đếm số ước nguyên tố của a
d3: lũy thừa của số p trong phân tích a = p^d3 trong trường hợp a chỉ có 1 ước nguyên tố duy nhất
m1: kết quả cần tìm trong trường hợp số ước nguyên tố từ 2 trở đi
m2: số nguyên bé nhất >= x */
int d=0, d2=0, d3=0, m1=1, x, m2;
long a, b;
printf(“Nhap a: “);
scanf(“%d”, &a);
b = a;
for (int i=1; i<=a; i++)
{
if (a%i==0)
{
for (int j=1; j<=i; j++)
if (i%j == 0) d++;
}
if (d==2)
{
x=i;
while (b!=1)
{
b=b/i;
d3++;
}
m1 = m1*i;
d2++;
}
d=0;
}
if (d2 >= 2) printf(“Gia tri n: %d\n”, m1);
if (d2 == 1)
{
if (d3%x == 0)
m2 = d3/x;
else
m2 = int(d3/x)+1;
printf(“Gia tri n: %.0lf\n”, pow(double(x), double(m2)));
}
}

BÀI 2 – Đồ Án NMCNTT1

ĐỀ BÀI

Xem công thức tính sau đây (đề thi tuyển sinh cao học ngành KHMT, năm 2011):

Aver=\sum\limits_{i=0}^{n-1}{{{\left( {{a}_{i}}-Max \right)}^{2}}+\sum\limits_{i=0}^{n-1}{{{\left( {{a}_{i}}-Min \right)}^{2}}+\frac{n}{2}{{\left( Max-Min \right)}^{2}}}}

Trong đó Max, Min lần lượt là giá trị lớn nhất, nhỏ nhất của n số thực (được nhập vào từ thiết bị nhập chuẩn) {{a}_{0}}, {{a}_{1}}, …, {{a}_{n-1}}.

Chỉ dùng duy nhất 1 vòng lặp (for hoặc while), đề xuất cách thức để nhập n số thực như trên và tính giá trị của biểu thức Aver, xuất kết quả tính ra thiết bị xuất chuẩn. Viết chương trình để minh họa đề xuất đó.

Lưu ý: Phần này sinh viên chưa học về mảng, như vậy vấn đề chính của bài toán này là không thể dùng mảng để lưu giá trị của n số thực nói trên. Như vậy phải đề xuất một giải pháp “thông minh” để nhập và tính toán mà không đưa trước các số thực này vào mảng.

BÀI GIẢI + SUY LUẬN

Theo đề bài, vấn đề chính của bài toán này là không thể dùng mảng để lưu giá trị của n số thực, vì vậy ta cần 1 giải pháp khôn khéo để nhập và tính toán mà không đưa trước các số thực này vào mảng.

Thật vậy, đối với công thức Aver nói trên, ta chỉ dùng một vòng lặp (for hoặc while) để giải quyết bài toán. Vì thế ta cần biến đổi và rút gọn Aver lại để trở thành 1 biểu thức khác dễ sử dụng vòng lặp hơn. Và ta biến đổi như sau:

Aver=\sum\limits_{i=0}^{n-1}{{{\left( {{a}_{i}}-Max \right)}^{2}}+\sum\limits_{i=0}^{n-1}{{{\left( {{a}_{i}}-Min \right)}^{2}}+\frac{n}{2}{{\left( Max-Min \right)}^{2}}}}
=\left( \sum\limits_{i=0}^{n-1}{a_{i}^{2}-2Max\sum\limits_{i=0}^{n-1}{{{a}_{i}}+nMa{{x}^{2}}}} \right)+\left( \sum\limits_{i=0}^{n-1}{a_{i}^{2}-2Min\sum\limits_{i=0}^{n-1}{{{a}_{i}}+nMi{{n}^{2}}}} \right)+\frac{n}{2}{{\left( Max-Min \right)}^{2}}
=2\sum\limits_{i=0}^{n-1}{a_{i}^{2}-2\left( Max+Min \right)}\sum\limits_{i=0}^{n-1}{{{a}_{i}}}+n\left( Ma{{x}^{2}}+Mi{{n}^{2}} \right)+\frac{n}{2}{{\left( Max-Min \right)}^{2}}
=2P-2\left( Max+Min \right)Q+\frac{3n}{2}\left( Ma{{x}^{2}}+Mi{{n}^{2}} \right)-n.Max.Min
với P=\sum\limits_{i=0}^{n-1}{a_{i}^{2}} và Q=\sum\limits_{i=0}^{n-1}{{{a}_{i}}}

Ban đầu, ta gán max = min = giá trị a đầu tiên nhập vào, kế đến sử dụng 1 vòng lặp for để tính lần lượt giá trị P và Q theo các a tiếp theo, đồng thời trong quá trình này, ta cũng tìm min và max mới để so sánh lần lượt với giá trị cũ để tìm ra kết quả min và max cuối cùng.

Sau đó tính S = Aver. Tóm lại bằng duy nhất 1 vòng lặp for, nhưng hạn chế ở chỗ trùng mã printf và scanf, ta tính được giá trị Aver.

MÃ NGUỒN

#include <stdio.h>
void main()
{
float a, P=0, Q=0, S=0, max, min;
int n, i;
printf(“Nhap may so: “);
scanf(“%d”, &n);
printf(“Nhap a: “);
scanf(“%f”, &a);
P=P+a*a;
Q=Q+a;
max = min = a;
for (i=1; i<=(n-1); i++)
{
printf(“Nhap a: “);
scanf(“%f”, &a);
P=P+a*a;
Q=Q+a;
if (max < a)
max = a;
if (min > a)
min = a;
}
S = 2*P – 2*(max+min)*Q + 3*n*0.5*(max*max+min*min) – n*max*min;
printf(“Aver = %f\n”, S);
}