1. Trang chủ
  2. » Luận Văn - Báo Cáo

Viết chương trình đọc các phần từ của một tệp văn bản vào một danh sách kết nối LIFO

19 52 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 185,79 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Việc nghiên cứu và lập trình ra các phần mềm, các ứng dụng mới là điều hướng tới của các sinh viên theo học công nghệ thông tin.Bản báo cáo này trình bày kết quả của việc lập trình các b

Trang 2

TRƯỜNG ĐẠI HỌC VINH

KHOA CÔNG NGHỆ THÔNG TIN

-

BÁO CÁO

ĐỀ TÀI THỰC TẬP CƠ SỞ

Giáo viên HD: TS Trần Xuân Sang

Vinh, 8/2015

Trang 3

Lời nói đầu 4

PHẦN 1: BÀI TOÁN 1 7

I NỘI DUNG ĐỀ 7

II GIẢI QUYẾT VẤN ĐỀ LÝ THUYẾT 7

1 Danh sách liên kết 7

2 LIFO là gì? 7

III THUẬT TOÁN GIẢI QUYẾT CÔNG VIỆC CHO MỖI HÀM 7

1 Lựa chọn ngôn ngữ lập trình 7

2 Xác định bài toán 7

3 Thuật toán và code các hàm 8

3.1 Thuật toán đọc các phần tử của tệp vào danh sách kết nối LIFO 8

3.2 Giải thuật sắp xếp danh sách 8

3.3 Giải thuật thêm một số mà không làm thay đổi tính tăng của danh sách 8 IV CHƯƠNG TRÌNH MINH HỌA 9

V BỘ DỮ LIỆU TEST VÀ KẾT QUẢ TƯƠNG ỨNG 12

PHẦN 2: BÀI TOÁN 2 13

I NỘI DUNG ĐỀ 13

II GIẢI QUYẾT VẤN ĐỀ LÝ THUYẾT 13

1 Trình bày thuật toán sắp xếp chọn 13

Trang 4

1 Lựa chọn ngôn ngữ lập trình 13

2 Xác định bài toán 13

3 Thuật toán SelectionSort 14

IV CHƯƠNG TRÌNH 14

VI BỘ DỮ LIỆU TEST VÀ KẾT QUẢ TƯƠNG ỨNG 15

Trang 5

Lời cảm ơn

Ngày nay, công nghệ thông tin ngày càng phát triển và tỏ rõ tầm quan trọng trong tất cả các lĩnh vực, có thể nói công nghệ thông tin đã trở thành thước đo để đánh giá sự phát triển của xã hội hiện đại – nơi mà con người đang dần thoát khỏi cách làm việc thủ công, thô sơ và dần tiến đến tin học hóa trong tất cả các lĩnh vực để công việc có hiệu quả hơn, tiết kiệm thời gian và nhân lực

Việc nghiên cứu và lập trình ra các phần mềm, các ứng dụng mới là điều hướng tới của các sinh viên theo học công nghệ thông tin.Bản báo cáo này trình bày kết quả của việc lập trình các bài toán liên quan đến tệp và cấu trúc dữ liệu và giải thuật trong đề tài thực tập cơ sở Trong quá trình thực hiện em nhận được sự giúp đỡ nhiệt tình từ các giảng viên trong khoa công nghệ thông tin trường Đại Học Vinh

Nhân dịp này em xin gửi lời cảm ơn đến các thầy cô trong khoa công nghệ thông tin trường Đại Học Vinh đã tạo cơ hội giúp em được tham gia học hỏi, rèn luyện các kỹ năng cần thiết cho đợt thực tập cuối khóa Đặc biệt em xin gửi lời cảm ơn đến giảng

viên TS.Trần Xuân Sang đã quan tâm góp ý cho bài làm thực tập cơ sở và sẵn sàng trả

lời tất cả những thắc mắc khi cần thiết giúp em hoàn thành tốt bài làm của mình

Mặc dù đã có nhiều cố gắng nhưng do kiến thức còn hạn chế cùng với kinh nghiệm chưa có nên không tránh khỏi thiếu sót.Vì vậy em rất mong nhận được những ý kiến đóng góp bổ sung của thầy cô giáo và các bạn để bài làm thực tập cơ sở của em được hoàn thiện hơn

Em xin chân thành cảm ơn!

Trang 6

Đ tài th c t p c s Mã đ 025 ề ự ậ ơ ở ề

Lời nói đầu

Ngày nay, chúng ta đang sống trong thế giới của công nghệ thông tin Tin học đã

đi vào tất cả các “ngõ ngách” của đời sống xã hội, từ những công việc đơn giản như giải một bài toán thuần tuý đến những vấn đề phức tạp như việc áp dụng tin học trong công nghệ viễn thông hay trong nghiên cứu vũ trụ…Việc ứng dụng công nghệ thông tin trong quản lý đã và đang đem lại nhiều lợi ích thiết thực cho doanh nghiệp từ việc lưu trữ dữ liệu đến việc tìm kiếm thông tin, lên các báo cáo…giúp cho công tác quản lý đựơc thực hiện một cách dể dàng hơn

Những năm gần đây trong lĩnh vực công nghệ thông tin, Việt Nam đã có những bước phát triển vượt bậc theo hướng đi thẳng đón đầu vào việc hiện đại hoá, công nghệ hoá, mạnh dạn đầu tư trang thiết bị, máy móc hiện đại

Trong thời gian thực tập tại VDC mặc dù được các Anh (Chị) tận tình hướng dẫn nhưng do thời gian thực tập ngắn, vốn kiến thức và kinh nghiệm thực tế còn hạn chế nên trong đề tài chắc chắn không tránh khỏi những thiếu sót Em rất mong nhận được sự đóng góp ý kiến từ phía cơ quan thực tập, quý Thầy (Cô) và các bạn để bài báo cáo này có thể hoàn thiện hơn

Trang 7

ĐỀ TÀI THỰC TẬP CƠ SỞ - PHẦN LẬP TRÌNH

Mã đề: 025

Câu 1:

Viết chương trình đọc các phần từ của một tệp văn bản vào một danh sách kết nối LIFO.

Sắp xếp danh sách theo thứ tự tăng dần Nhập vào từ bàn phím một số nguyên x Chèn số

x vào danh sách sao cho không làm mất tính sắp xếp tăng của danh sách

Câu 2:

1 Trình bày thuật toán sắp xếp chọn

2 Nêu ví dụ minh họa

3 Cài đặt thuật toán

Trang 8

Đ tài th c t p c s Mã đ 025 ề ự ậ ơ ở ề

Trang 9

PHẦN 1: BÀI TOÁN 1

I N I DUNG Đ Ộ Ề

Viết chương trình đọc các phần từ của một tệp văn bản vào một danh sách kết nối LIFO Sắp xếp danh sách theo thứ tự tăng dần Nhập vào từ bàn phím một số nguyên x Chèn số x vào danh sách sao cho không làm mất tính sắp xếp tăng của danh sách

II GI I QUY T V N Đ LÝ THUY T Ả Ế Ấ Ề Ế

1 Danh sách liên k t ế

Danh sách liên kết là một tập hợp tuyến tính các phần tử cùng kiểu gọi là các nút (node),mỗi nút có các đặc điểm sau:

 Mỗi nút có ít nhất hai trường, một trường gọi là trường dữ liệu (data), một trường là trường liên kết (link) trỏ tới (thường gọi là next)

 Trường liên kết của phần tử thứ i của danh sách sẽ trỏ tới phần tử thứ (i+1) của danh sách

 Phần tử đầu tiên gọi là head và phần tử cuối cùng gọi là tail Head không chứa

dữ liệu và trường next của tail chỉ vào NULL

 Trường data là trường chứa dữ liệu lưu trong danh sách liên kết

2 LIFO là gì?

Lifo là viết tắt của “last-in-first-out”, hiểu đơn giản là phương pháp vào sau ra trước Ví

dụ ta nhập vào 1 mảng gồm dãy a1, a2,…,a(n-1), a(n) Xuất dãy ra sẽ xuất các phần tử từ sau đến trước lần lượt a(n), a(n-1),…., a2 ,a1

III THUẬT TOÁN GIẢI QUYẾT CÔNG VIỆC CHO MỖI HÀM.

1 Lựa chọn ngôn ngữ lập trình

Ngôn ngữ lập trình C

Trang 10

Đ tài th c t p c s Mã đ 025 ề ự ậ ơ ở ề

INPUT:

-Tệp văn bản input.txt tệp đầu vào chứa các số nguyên.

-Mỗi số cách nhau 1 dấu cách trống hoặc ít nhất một dấu xuống dòng

OUTPUT:

-In ra màn hình kết quả có trong tệp input.txt

-Sắp xếp danh sách theo thứ tự tăng dần

-Chèn vào một số x mà không làm mất tính tăng của danh sách

3 Thuật toán và code các hàm

3.1 Thuật toán đọc các phần tử của tệp vào danh sách kết nối LIFO

Bước 1: Khai báo con biến con trỏ tệp và biến con trỏ kiểu node Kiểm tra có tồn tại tệp

input.txt không, nếu tồn tại thì bắt đầu đọc các dữ liệu từ tệp input.txt

Bước 2: Kiểm tra xem quá trình đọc tệp đã kết thúc hay chưa Nếu chưa thì thực hiện

bước 3

Ngược lại chuyển sang bước 4

Bước 3: Khởi tạo node mới, lấy dữ liệu ra và đưa lên đầu danh sách Quay lại bước 2 Bước 4: Đóng tệp và kết thúc.

3.2 Giải thuật sắp xếp danh sách

Bước 1: Ta khai báo hai biến con trỏ p1,p2 kiểu node dùng làm biến chạy, một biến kiểu

int làm biến trung gian, sau đó gán p1=f

Bước 2: Kiểm tra trong khi p1 chưa trỏ đến node cuối <while(p1->next != NULL)> thì gán p2 bằng node mà p1 trỏ tiếp theo< p2=p1->link>

Bước 3: Kiểm tra xem trong khi p2 chưa trỏ đến node cuối <while(p2!=NULL)> thì so

sánh giá trị của phần tử mà p1 đang trỏ tới có lớn hơn giá trị của phần tử mà p2 đang trỏ tới không, nếu đúng thì tiến hành đổi chỗ 2 node, ngược lại thì ta gán p2 bằng phần tử p2 đang trỏ đến:p2=p2->link

Bước 4: Khi p2==NULL thì gán p1 bằng node mà p1 đang trỏ đến Quay lại bước 2.

3.3 Giải thuật thêm một số mà không làm thay đổi tính tăng của danh sách

Bước 1: Ta khai báo một biến con trỏ tạm p1, và biến con trỏ x kiểu node.

Trang 11

Bước 3: Tìm phần tử cuối của danh sách.

Bước 4: Tiến hành so sánh giá trị của node vừa tạo với giá trị của các phần tử của các

node có trong danh sách Nếu giá trị của nó lớn hơn giá trị của node đầu thì tiến hành chèn đầu, nếu lớn hơn giá trị của node cuối thì tiến hành chèn cuối, ngược lại thì chèn giữa

IV CHƯƠNG TRÌNH MINH HỌA

#include<conio.h>

#include<stdio.h>

#include<iostream>

typedef struct node

{

int info;

node *link;

};

// Doc tep vao danh sach ket noi LIFO

node *doctep(node *f)

{

FILE *u;

f==NULL;

node *p;

u=fopen("input.txt","r");

if(u==NULL)

{

printf("\nFILE khong ton tai!");

getch();

}

else{

Trang 12

Đ tài th c t p c s Mã đ 025 ề ự ậ ơ ở ề

{

p=new node();

fscanf(u,"%d",&p->info);

p->link=f;

f=p;

} }

fclose(u);

return f;

}

//Xem danh sach

void xemdanhsach(node *f)

{

node *p;

p=f;

while (p!=NULL)

{

printf(" \t %d ",p->info);

p=p->link;

}

}

//Sap xep tang

void sapxeptang(node *f)

{

node *p1,*p2;

int tg;

p1=f;

while (p1->link!=NULL){

p2=p1->link;

while (p2!=NULL){

if (p1->info>p2->info){

Trang 13

p1->info=p2->info;

p2->info=tg;

}

else

{

p2=p2->link;

}

}

p1=p1->link;

}

}

//Tim phan tu cuoi

node *timptcuoi(node *f){

node *p=f;

while(p->link!=NULL)

{

p=p->link;

}

return p;

}

//Them so x khong lam thay doi tinh tang cua danh sach

node *themx(node *f)

{

node *p,*x;

x=new(node);

printf("\n\t(*)Nhap so can them vao : ");

scanf("%d",&x->info);

node *l=timptcuoi(f);

if (f==NULL) {

Trang 14

Đ tài th c t p c s Mã đ 025 ề ự ậ ơ ở ề

return x;

}

if((f->info)>=(x->info)){

x->link=f;

return x;

}

if((l->info)<(x->info)){

l->link=x;

x->link=NULL;

return f;

}

else

{

while (((p->link)->info)<(x->info))

p=p->link;

x->link=p->link;

p->link=x;

return f;

}

}

//Chuong trinh chinh

main()

{

node *f=NULL;

f=doctep(f);

printf("\n\t(*)Cac phan tu duoc doc tu tep la:");

xemdanhsach(f);

printf("\n\t(*)Day sau khi sap xep tang:");

sapxeptang(f);

xemdanhsach(f);

printf("\n\t(*)Them 1 so vao khong thay doi thu tu sap xep :");

f=themx(f);

Trang 15

getch();

}

V BỘ DỮ LIỆU TEST VÀ KẾT QUẢ TƯƠNG ỨNG.

Tệp đầu vào input.txt:

Output:

Trang 16

Đ tài th c t p c s Mã đ 025 ề ự ậ ơ ở ề

PHẦN 2: BÀI TOÁN 2

I NỘI DUNG ĐỀ

1 Trình bày thuật toán sắp xếp chọn

2 Nêu ví dụ minh họa

3 Cài đặt thuật toán

II GI I QUY T V N Đ LÝ THUY T Ả Ế Ấ Ề Ế

1 Trình bày thu t toán s p x p ch n ậ ắ ế ọ

Ý tưởng:

Chọn phần tử nhỏ nhất trong n phần tử ban đầu, đưa phần tử này về vị trí đúng là đầu tiên của dãy hiện hành Sau đó không quan tâm đến nó nữa, xem dãy hiện hành chỉ còn n-1 phần tử của dãy ban đầu, bắt đầu từ vị trí thứ 2 Lặp lại quá trình trên cho dãy hiện hành đến khi dãy hiện hành chỉ còn 1 phần tử Dãy ban đầu có n phần tử, vậy tóm tắt

ý tưởng thuật toán là thực hiện n-1 lượt việc đưa phần tử nhỏ nhất trong dãy hiện hành về

vị trí đúng ở đầu dãy

Giải thuật:

Bước 1: i=0

Bước 2: Tìm phần tử A[min] nhỏ nhất trong dãy hiện hành từ a[i]-> a[n-1]

Bước 3: Hoán vị a[min] và a[i]

Bước 4: Nếu i<=n-1 thì i=i+1 Lặp lại bước 2

Ngươc lại: Dừng, n phần tử đã nằm đúng vị trí

2 Ví d minh h a ụ ọ

Cho dãy X={X1, X2, Xn}, hãy sắp xếp dãy theo chiều không giảm

X = {7, 2, 5, 4, 1, 3, 8, 6}

Dãy ban đầu 7, 2, 5, 4, 1, 3, 8, 6}

i=0,min=4, swap(X[min],X[i]) ta có 1, 2, 5, 4, 7, 3, 8, 6

i=1, min=1, không đổi chỗ, ta có 1, 2, 5, 4, 7, 3, 8, 6

i=2, min=4, swap(X[min],X[i]) ta có 1, 2, 3, 4, 7, 5, 8, 6

i=3, min=3, không đổi chỗ, ta có 1, 2, 3, 4, 7, 5, 8, 6

i=4, min=5, swap(X[min],X[i]) ta có 1, 2, 3, 4, 5, 7, 8, 6

i=5, min=7, swap(X[min],X[i]) ta có 1, 2, 3, 4, 5, 6, 8, 7

i=6, min=7, swap(X[min],X[i]) ta có 1, 2, 3, 4, 5, 6, 7, 8(dãy đã sắp xếp)

Trang 17

III GI I QUY T BÀI TOÁN VÍ D Ả Ế Ụ

1 L a ch n ngôn ng l p trình ự ọ ữ ậ

Ngôn ngữ lập trình C++

2 Xác đ nh bài toán ị

INPUT: Dãy n số nguyên

OUTPUT: Dãy số đã được sắp xếp không giảm

3 Thu t toán SelectionSort ậ

void SelectionSort(int A[],int n){

int min;

for(int i=0;i<n-1;i++){

min=i;

for(int j=i+1;j<n;j++) if(A[min]>A[j]) min = j;

if(min !=i) Swap(A[i],A[min]);

}

IV CH ƯƠ NG TRÌNH.

#include <iostream>

#include <conio.h>

#define max 100

using namespace std;

//Nhap mang

void NhapMang(int A[],int n) {

for(int i=0; i<n; i++) {

Trang 18

Đ tài th c t p c s Mã đ 025 ề ự ậ ơ ở ề

cin>>A[i];

}

}

//Xuat mang

void XuatMang(int A[],int n){

cout<<endl;

for(int i=0; i<n; i++)

cout<<A[i]<<"\t";

}

//Hoan vi 2 phan tu

void Swap(int &a,int &b){

int temp = a;

a = b;

b = temp;

}

//Thuat toan Selection Sort

void SelectionSort(int A[],int n) {

int min;

for(int i=0; i<n -1; i++) {

for(int j=i+1; j<n; j++)

}

}

//Chuong trinh chinh

int main() {

Trang 19

cout<<"(*)Nhap so phan tu:";

cin>>n;

NhapMang(A,n);

cout<<"\n(*)Mang vua nhap la:";

XuatMang(A,n);

cout<<endl;

SelectionSort (A,n);

cout<<"\n(*)Mang vua sap xep la:";

XuatMang(A,n);

getch();

return 0;

}

VI BỘ DỮ LIỆU TEST VÀ KẾT QUẢ TƯƠNG ỨNG.

Ngày đăng: 29/08/2021, 19:57

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w