1. 2: Sản phẩm và dịch vụ
1.4 Văn hóa doanh nghiệp
Hình 1.9 Quy định tác phong trong công ty
CHƯƠNG 2 QUÁ TRÌNH THỰC TẬP TẠI ĐƠN VỊ 2.1. Lịch trình thực tập
Thời gian đăng kí thực tập từ tháng 10 năm 2021 đến tháng 12 năm 2021 Sinh viên đăng kí thực tập nộp CV online vào trang web :
https://samsungcareers.com.vn.
Sinh viên các trường có trong danh sách liên kết với công ty thì đăng kí theo khoa của mình.
Thời gian tổ chức thực tập cho sinh viên chưa tốt nghiệp và chuẩn bị tốt nghiệp diễn ra trong vòng 3 tháng từ 10/01/2022 đến 19/03/2022
Ứng viên được trải qua kì thi phân loại đầu vào và phỏng vấn trước khi vào thực tập.
Các ứng viên vượt qua bài thi và phỏng vấn sẽ được phân chia theo đợt , và dự tuyển thực tập mà trung tâm sắp xếp.
2.2. Giải pháp thực hiện
▪ 2.2.1 Công cụ phát triển ứng dụng
● 2.2.1.1 Visual Studio
IDE (Integrated Development Environment) là môi trường tích hợp viết code để phát triển ứng dụng. Ngoài ra IDE tích hợp các tool hỗ trợ khác như trình biên dịch (Compiler), trình thông dịch (Interpreter), kiểm tra lỗi (Debugger), cấu trúc code, cài đặt gói, tìm kiếm mã nguồn. Một số IDE phổ biến hiện nay như: Visual Studio 2022, Netbean IDE, Android Studio...
Đối với các ứng dụng xây dựng trên khung ASP.NET nói chung, Visual Studio IDE là môi trường tích hợp phát triển triển khai tốt nhất được phát triển bởi Microsoft với các tool mạnh mẽ, hỗ trợ Al gợi ý code, debugger trong sáng và tích hợp phát triển nhiều công nghệ, ngôn ngữ lập trình.
Visual Studio là Môi trường phát triển tích hợp (IDE) do Microsoft phát triển để phát triển GUI (Giao diện người dùng đồ họa), bảng điều khiển, ứng dụng Web, ứng dụng web, ứng dụng di động, đám mây và dịch vụ web, v.v.
Với sự trợ giúp của IDE này, bạn có thể tạo mã được quản lý cũng như mã gốc. Nó sử dụng các nền tảng khác nhau của phần mềm phát triển phần mềm Microsoft như Windows store, Microsoft Silverlight và Windows API, v.v. Nó không phải là IDE dành riêng cho ngôn ngữ vì bạn có thể sử dụng IDE này để viết mã bằng C #, C ++, VB (Visual Basic), Python, JavaScript và nhiều ngôn ngữ khác. Nó cung cấp hỗ trợ cho 36 ngôn ngữ lập trình khác nhau. Nó có sẵn cho Windows cũng như macOS.
Sự phát triển của Visual Studio: Phiên bản đầu tiên của VS (Visual Studio) được phát hành vào năm 1997, được đặt tên là Visual Studio 97 với số phiên bản 5.0. Phiên bản mới nhất của Visual Studio là 15.0 được phát hành vào ngày 7 tháng 3 năm 2017. Nó còn được gọi là Visual Studio 2017. Phiên bản .Net Framework được hỗ trợ trong Visual Studio mới nhất là 3.5 đến 4.7. Java đã được hỗ trợ trong các phiên bản Visual Studio cũ nhưng trong phiên bản mới nhất không cung cấp bất kỳ hỗ trợ nào cho ngôn ngữ Java.
Có 3 phiên bản Microsoft Visual Studio như sau:
1. Cộng đồng: Đây là phiên bản miễn phí được công bố vào năm 2014. Tất cả các phiên bản khác đều phải trả phí. Điều này chứa các tính năng tương tự như phiên bản Professional. Sử dụng phiên bản này, bất kỳ nhà phát triển cá nhân nào cũng có thể phát triển các ứng dụng miễn phí hoặc trả phí của riêng họ như ứng dụng .Net, ứng dụng Web và nhiều ứng dụng khác. Trong một tổ chức doanh nghiệp, phiên bản này có một số hạn chế. Ví dụ: nếu tổ chức của bạn có hơn 250 PC và có doanh thu hàng năm lớn hơn 1 Triệu đô la Mỹ (Đô la Mỹ) thì bạn không được phép sử dụng phiên bản này. Trong một tổ chức phi doanh nghiệp, tối đa năm người dùng có thể sử dụng ấn bản này. Mục đích chính của nó là cung cấp hỗ trợ Hệ sinh thái (Truy cập vào hàng nghìn tiện ích mở rộng) và Ngôn ngữ (Bạn có thể viết mã bằng C #, VB, F #, C ++, HTML, JavaScript, Python, v.v.).
2. Chuyên nghiệp: Đây là phiên bản thương mại của Visual Studio. Nó có trong Visual Studio 2010 và các phiên bản mới hơn. Nó cung cấp hỗ trợ chỉnh sửa
XML và XSLT và bao gồm công cụ như Server Explorer và tích hợp với Microsoft SQL Server. Microsoft cung cấp bản dùng thử miễn phí phiên bản này và sau thời gian dùng thử, người dùng phải trả phí để tiếp tục sử dụng. Mục đích chính của nó là cung cấp Tính linh hoạt (Công cụ dành cho nhà phát triển chuyên nghiệp để xây dựng bất kỳ loại ứng dụng nào), Năng suất (Các tính năng mạnh mẽ như CodeLens cải thiện năng suất của nhóm của bạn), Cộng tác (các công cụ lập kế hoạch dự án nhanh nhẹn, biểu đồ, v.v.) và lợi ích của Người đăng ký như phần mềm Microsoft, cộng với Azure, Pluralsight,...
3. Doanh nghiệp: Đây là một giải pháp tích hợp, từ đầu đến cuối cho các nhóm thuộc bất kỳ quy mô nào với nhu cầu về quy mô và chất lượng ngày càng khắt khe. Microsoft cung cấp 90 ngày dùng thử miễn phí phiên bản này và sau thời gian dùng thử, người dùng phải trả phí để tiếp tục sử dụng. Lợi ích chính của ấn bản này là nó có khả năng mở rộng cao và cung cấp phần mềm chất lượng cao.
Ở đây, Visual Studio được sử dụng để triển khai mã phía máy chủ.
Hình 2.1 Visual Studio 2022
● 2.2.1.2 GitHub
GitHub là một dịch vụ cung cấp kho lưu trữ mã nguồn Git dựa trên nền web cho các dự án phát triển phần mềm. GitHub cung cấp cả phiên bản trả
tiền lẫn miễn phí cho các tài khoản. Các dự án mã nguồn mở sẽ được cung cấp kho lưu trữ miễn phí.
Hình 2.2 GitHub
2.3. Nội dung thực tập. 2.2.1 Thuật toán
- Cách đọc file txt trong c/c++ sử dụng câu lệnh freopen(“input.txt”,”r”,stdin);
2.2.2 Mảng(Array) trong C/C++
Ngôn ngữ lập trình C/C++ cung cấp cấu trúc dữ liệu gọi là mảng, được lưu trữ trong một tập hợp các dữ liệu cùng kiểu với độ dài cố định. Một mảng được sử dụng để lưu trữ tập hợp dữ liệu, nhưng nó rất hữu dụng nếu bạn nghĩ về một mảng các biến với cùng một kiểu.
Thay vì khai báo biến một cách rời rạc, như biến so0, so1,… và so99, bạn có thể khai báo một mảng các giá trị như so[0], so[1] và … so[99] để biểu diễn các giá trị riêng biệt. Một thành viên cụ thể của mảng có thể được truy cập qua index (chỉ số).
Tất cả mảng đều bao gồm các vị trí nhớ liền kề nhau. Địa chỉ thấp nhất tương ứng với thành viên đầu tiền và địa chỉ cao nhất tương ứng với thành viên cuối cùng của mảng.
• +Khai báo mảng trong C/C++
Để khai báo một mảng trong ngôn ngữ C/C++, bạn xác định kiểu của biến và số lượng các phần tử được yêu cầu bởi biến đó như sau:
KieuTen_mang[Kich_co_mang];
Đây là mảng một chiều. Kich_co_mang phải là một số nguyên lớn hơn 0 và Kieu phải hợp lệ trong ngôn ngữ C/C++. Ví dụ, khai báo một mảng 10 phần tử gọi là balance với kiểu double, sử dụng câu lệnh sau đây:
char sinhvien[10];
+Khởi tạo mảng trong C/C++
Bạn có thể khởi tạo mảng trong C/C++ hoặc từng phần tử một hoặc sử dụng một câu lệnh như dưới đây:
int hanghoa[5]={45,34,29,67,49};
Số lượng các giá trị trong dấu ngoặc kép {} không được lớn hơn số lượng phần tử khai báo trong dấu ngoặc vuông [].
Nếu bạn bỏ sót kích cỡ mảng thì mảng đó đủ lớn để giữ các giá trị được khởi tạo: Bạn sẽ tạo chính xác một chuỗi có giá trị giống hệt chuỗi bên trên bằng cách gán từng phần tử một. Dưới đây là một ví dụ khi gán giá trị cho một phần tử của mảng:
int hanghoa[]={45,34,29,67,49};
hanghoa[4]=50;
Câu lệnh bên trên gán giá trị thứ 5 của mảng giá trị 50.0. Tất cả các mảng đều có chỉ số (index) đầu tiên bằng 0, đây được gọi là chỉ số cơ bản và phần tử cuối cùng của mảng có chỉ số bằng độ lớn của mảng trừ đi 1. Dưới đây là cách biểu diễn hình họa cho chuỗi khai báo bên trên thông qua chỉ số:
• Truy cập các phần tử mảng trong C/C++
Một mảng được truy cập bởi cách đánh chỉ số trong tên của mảng. Dưới đây là một cách truy cập một giá trị của mảng:
int hocphi = hocphik60[55];
Câu lệnh trên lấy phần tử thứ 56 của mảng và gán giá trị này cho biến hocphi. Dưới đây là một ví dụ về việc sử dụng với tất cả mô tả bên trên:
#include<iostream> usingnamespace std; #include<iomanip> using std::setw; int main () {
// khoi tao gia tri cac phan tu cua mang n la 0 for(int i =0; i <10; i++)
{
n[ i ]= i +100;// thiet lap phan tu tai vi tri i la i + 100 }
cout <<"Phan tu thu:"<< setw(13)<<"Gia tri la:"<< endl;
// hien thi gia tri cua moi phan tu for(int j =0; j <10; j++)
{
cout << setw(7)<< j << setw(13)<< n[ j ]<< endl; }
return0; }
Chương trình này sử dụng hàm setw(so_nguyen) trong C/C++ để định dạng output. Tại đây, tham số so_nguyen là một số chỉ độ rộng của kết quả mà bạn muốn hiển thị. Chẳng hạn, với so_nguyen là 3 tức là bạn dành 3 vị trí để in kết quả, nếu kết quả cần hiển thị là thừa thì nó sẽ bị cắt bớt, nếu thiếu thì chèn thêm khoảng trống vào. Hàm setw() được dùng cho cả cout và cin.
● Kết quả
Chạy chương trình C/C++ trên sẽ cho kết quả như hình sau:
2.1.3 Chuỗi (String) trong C/C++
C++ cung cấp hai kiểu biểu diễn chuỗi như sau: • Chuỗi theo phong cách của ngôn ngữ C (C-style), • Lớp Chuỗi (String) được giới thiệu trong C/C++ chuẩn.
• Chuỗi theo phong cách C
Dạng chuỗi này bắt nguồn từ ngôn ngữ C và tiếp tục được hỗ trợ trong C/C++. Chuỗi trong ngôn ngữ lập trình C thực chất là mảng một chiều của các ký tự mà kết thúc bởi một ký tự null '\0'.
Phần khai báo và khởi tạo dưới đây tạo ra một chuỗi bao gồm một từ "Hello". Để giữ các giá trị null tại cuối của mảng, cỡ của mảng các ký tự bao gồm một chuỗi phải nhiều hơn số lượng các ký tự trong từ khóa "Hello".
char loiChao[6]={'H','e','l','l','o','\0'};
Nếu bạn theo quy tắc khởi tạo các chuỗi, bạn có thể viết lệnh như sau:
char loiChao[]="Hello";
Thực tế, bạn không đặt ký tự null tại vị trí cuối cùng của biến hằng số. Bộ biên dịch C tự động thêm '\0' tại ví trí cuối cùng của chuỗi khi nó khởi tạo chuỗi. Cùng thử ví dụ in ra chuỗi sau đây:
#include<iostream>
usingnamespace std;
int main () {
char loiChao[6]={'H','e','l','l','o','\0'};
cout <<"Khi gap nhau, chung ta noi: "; cout << loiChao << endl;
return0; }
Khi gap nhau, chung ta noi:Hello
Ngôn ngữ C/C++ hỗ trợ nhiều hàm đa dạng để thao tác các chuỗi kết thúc là null:
STT Hàm & Mục đích
1 strcpy(s1, s2);
Sao chép chuỗi s2 cho chuỗi s1.
2 strcat(s1, s2);
Nối chuỗi s2 vào cuối chuỗi s1.
3 strlen(s1);
Trả về độ dài của chuỗi s1.
4 strcmp(s1, s2);
Trả về 0 nếu s1 và s2 là như nhau; nhỏ hơn 0 nếu s1<s2; lớn hơn 0 nếu s1>s2.
5 strchr(s1, ch);
Trả về con trỏ tới vị trí đầu tiên của ch trong s1.
6 strstr(s1, s2);
Dưới đây là ví dụ cho việc sử dụng một vài hàm bên trên: #include<iostream> #include<cstring> usingnamespace std; int main () {
char chuoi1[10]="Hello"; char chuoi2[10]="Christmas"; char chuoi3[10];
int len ;
// sao chep chuoi1 vao trong chuoi3 strcpy( chuoi3, chuoi1);
cout <<"strcpy( chuoi3, chuoi1) : "<< chuoi3 << endl; // noi hai chuoi: chuoi1 va chuoi2
strcat( chuoi1, chuoi2);
cout <<"strcat( chuoi1, chuoi2): "<< chuoi1 << endl; // tong do dai cua chuoi1 mot sau khi thuc hien noi chuoi len = strlen(chuoi1);
cout <<"Dung ham strlen(chuoi1) de tinh do dai chuoi1: "<< len << endl;
return0; }
● Kết quả
Chạy chương trình C/C++ trên sẽ cho kết quả như hình sau:
• Lớp String trong C/C++
Thư viện chuẩn C/C++ cung cấp một kiểu lớp String mà hỗ trợ tất cả hoạt động liên quan tới chuỗi đã đề cập ở trên, và bổ sung thêm nhiều tính năng nữa. Chúng ta sẽ học lớp này trong Thư viện chuẩn C/C++ (C++ Standard Library), nhưng lúc này, chúng ta xem xét ví dụ sau:
Lúc này, có thể bạn không hiểu ví dụ này, bởi vì chúng ta chưa bàn luận về Lớp và Đối tượngtrong C/C++. Vì thế, bạn quan sát và ghi nhớ chúng tới khi bạn đã hiểu các khái niệm về Hướng đối tượng được trình bày ở chương sau đó. #include<iostream> #include<string> usingnamespace std; int main () {
string chuoi1 ="Hello"; string chuoi2 ="Christmas"; string chuoi3;
// sao chep chuoi1 vao trong chuoi3 chuoi3 = chuoi1;
cout <<"Bay gio chuoi3 la: "<< chuoi3 << endl;
// noi hai chuoi: chuoi1 va chuoi2 chuoi3 = chuoi1 + chuoi2;
cout <<"chuoi1 + chuoi2 co ket qua la: "<< chuoi3 << endl;
// tong do dai cua chuoi3 mot sau khi thuc hien noi chuoi len = chuoi3.size();
cout <<"Tinh do dai voi ham chuoi3.size() : "<< len << endl;
return0; }
Chạy chương trình C/C++ trên sẽ cho kết quả như hình sau:
2.1.3 Ngăn xếp (Stack) trong C
Một ngăn xếp là một cấu trúc dữ liệu trừu tượng (Abstract Data Type – viết tắt là ADT), hầu như được sử dụng trong hầu hết mọi ngôn ngữ lập trình. Đặt
tên là ngăn xếp bởi vì nó hoạt động như một ngăn xếp trong đời sống thực, ví dụ như một cỗ bài hay một chồng đĩa, …
• Chương trình minh họa Ngăn xếp (Stack) trong C #include<stdio.h> int MAXSIZE =8; int stack[8]; int top =-1; int isempty(){ if(top ==-1) return1; else return0; } int isfull(){ if(top == MAXSIZE) return1; else return0; } int peek(){ return stack[top]; } int pop(){ int data; if(!isempty()){ data = stack[top];
top = top -1; return data; }else{
printf("Khong the thu thap du lieu, ngan xep (Stack) la trong.\n"); }
}
int push(int data){ if(!isfull()){
top = top +1; stack[top]= data; }else{
printf("Khong the chen du lieu, ngan xep (Stack) da day.\n"); }
}
int main(){
// chen cac phan tu vao ngan xep push(3); push(5); push(9); push(1); push(12); push(15);
printf("Phan tu tai vi tri tren cung cua ngan xep: %d\n",peek()); printf("Cac phan tu: \n");
// in cac phan tu trong ngan xep while(!isempty()){
printf("%d\n",data); }
printf("Ngan xep da day: %s\n", isfull()?"true":"false"); printf("Ngan xep la trong: %s\n", isempty()?"true":"false"); return0;
}
● Kết quả
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
2.1.4 Cấu trúc dữ liệu hàng đợi (Queue)
• Cấu trúc dữ liệu hàng đợi (Queue) là gì ?
Hàng đợi (Queue) là một cấu trúc dữ liệu trừu tượng, là một cái gì đó tương tự như hàng đợi trong đời sống hàng ngày (xếp hàng).
Hình 2.3. Mô tả Hàng đợi trong thuật toán .
Khác với ngăn xếp, hàng đợi là mở ở cả hai đầu. Một đầu luôn luôn được sử dụng để chèn dữ liệu vào (hay còn gọi là sắp vào hàng) và đầu kia được sử dụng để xóa dữ liệu (rời hàng). Cấu trúc dữ liệu hàng đợi tuân theo phương pháp First-In-First-Out, tức là dữ liệu được nhập vào đầu tiên sẽ được truy cập đầu tiên.
Trong đời sống thực chúng ta có rất nhiều ví dụ về hàng đợi, chẳng hạn như hàng xe ô tô trên đường một chiều (đặc biệt là khi tắc xe), trong đó xe nào vào đầu tiên sẽ thoát ra đầu tiên. Một vài ví dụ khác là xếp hàng học sinh, xếp hàng mua vé, …
• Biểu diễn cấu trúc dữ liệu hàng đợi (Queue)
Giờ thì có lẽ bạn đã tưởng tượng ra hàng đợi là gì rồi. Chúng ta có thể truy cập cả hai đầu của hàng đợi. Dưới đây là biểu diễn hàng đợi dưới dạng cấu trúc dữ liệu:
Tương tự như cấu trúc dữ liệu ngăn xếp, thì cấu trúc dữ liệu hàng đợi cũng có thể được triển khai bởi sử dụng Mảng (Array), Danh sách liên kết (Linked List), Con trỏ (Pointer) và Cấu trúc (Struct). Để đơn giản, phần tiếp theo chúng