Bài tập thực hành xử lý mảng trong php


bài tập thực hành php cơ bản 22/09/2015 Cùng chuyên mục

Nhập - xuất dữ liệu - truy xuất mảng một chiều - nhiều chiều - các bài toán sắp xếp, tìm kiếm ... mảng số nguyên

Nhập - Xuất Dữ Liệu

Mỗi phần tử của mảng được xem như một biến, do đó nhập dữ liệu cho mảng nghĩa là nhập dữ liệu cho từng phần tử của mảng - xuất dữ liệu cho mảng nghĩa là xuất ra từng phần tử của mảng hoặc tại một phần tử cần truy cập ( hay còn gọi là được trỏ tới - được truy cập tới - được gọi ). Việc nhập xuất tương tự như với biến chỉ khác là sử dụng vòng lặp để duyệt mảng. 

Ví dụ 1: Nhập dữ liệu cho mảng số nguyên $int_arr

<?php
	//xuat ra dong thong bao nhap lieu
	print "Nhap vao so luong phan tu cua mang so nguyen ( nho hon 10): ";
	//khoi tao mang rong
	$int_arr = array();
	//dat gia tri mac dinh cho bien $n: so luong phan tu cua mang
	$n = 0;
	//doc du lieu nhap tu ban phim
	fscanf(STDIN,"%d\n",$n);
	//kiem tra tinh hop le cua du lieu nhap vao
	if(!is_int($n) OR ($n > 10) OR ($n < 1))
	{
		print("So luong phan tu phai la so nguyen duong!");
		exit;
	}
	//duyet mang de nhap du lieu cho tung phan tu
	for($i = 0; $i < $n; $i++)
	{
		printf("Nhap vao phan tu thu %d : ",($i+1));
		fscanf(STDIN,"%d\n",$int_arr[]);
	} 
	//duyet mang de xuat ra du lieu cho tung phan tu
	for($i = 0; $i < $n; $i++)
	{
		printf("Phan tu thu %d cua mang la: %d\n",($i+1),$int_arr[$i]);
	}
?>

Ví dụ 2: Nhập dữ liệu cho mảng nhiều chiều $multi_arr - bao gồm mảng user_name: tên người dùng, age: tuổi 

//xuat ra dong thong bao nhap lieu
	print "Nhap vao so luong phan tu cho mang nhieu chieu ( nho hon 10):  ";
	//khoi tao mang rong
	$multi_arr = array();
	//dat gia tri mac dinh cho bien $n: so luong phan tu cua mang
	$n = 0;
	//doc du lieu nhap tu ban phim
	fscanf(STDIN,"%d\n",$n);
	//kiem tra tinh hop le cua du lieu nhap vao
	if(!is_int($n) OR ($n > 10) OR ($n < 1))
	{
		print("So luong phan tu phai la so nguyen duong!");
		exit;
	}
	$user_name = '';
	$age = 0;
	//duyet mang de nhap du lieu cho tung phan tu
	for($i = 0; $i < $n; $i++)
	{
		print("Nhap vao user name: ");
		/*ham fgets: doc du lieu theo dong ( vi co nhieu ky tu va khoang trang)
		ham trim dung de loai bo khoang trang o 2 dau cua chuoi*/
		$user_name = trim(fgets(STDIN));
		print("Nhap vao age (tuoi): ");
		fscanf(STDIN,"%d\n",$age);
		$multi_arr[] = array('user_name' => $user_name, 'age' => $age);
	} 
	//xuat ra tieu de
	print("User_Name         Age\n");
	//duyet mang de xuat ra du lieu
	for($i = 0; $i < $n; $i++)
	{		
		printf("%s %d\n", $multi_arr[$i]['user_name'], $multi_arr[$i]['age']);
	}

Bài tập 1: Không sử dụng hàm max() - tìm số lớn nhất của mảng số nguyên n phần tử ( n < 10):

Đáp Án
	//xuat ra dong thong bao nhap lieu
	print "Nhap vao so luong phan tu cua mang so nguyen ( nho hon 10): ";
	//khoi tao mang rong
	$int_arr = array();
	//dat gia tri mac dinh cho bien $n: so luong phan tu cua mang
	$n = 0;
	//doc du lieu nhap tu ban phim
	fscanf(STDIN,"%d\n",$n);
	//kiem tra tinh hop le cua du lieu nhap vao
	if(!is_int($n) OR ($n > 10) OR ($n < 1))
	{
		print("So luong phan tu phai la so nguyen duong!");
		exit;
	}
	//duyet mang de nhap du lieu cho tung phan tu
	for($i = 0; $i < $n; $i++)
	{
		printf("Nhap vao phan tu thu %d : ",($i+1));
		fscanf(STDIN,"%d\n",$int_arr[]);
	}
	if(empty($int_arr))
	{
		print("Chua nhap du lieu cho mang (!)");
		exit;
	}
	//gan max cho phan tu dau tien
	$max = $int_arr[0];
	//k la vi tri cua phan tu dat gia tri max - vi tri doc theo thu tu 1, 2, 3...
	$k = 1;
	for($i = 0; $i < $n; $i++)
	{
		//neu phan tu i lon hon max thi gan max la phan tu i, gan k cho i
		if($int_arr[$i] > $max)
		{
			$max = $int_arr[$i];
			$k = $i;
		}
	}
	printf("Phan tu lon nhat: %d - vi tri %d\n", $max, ($k+1));

Bài tập 2: Sắp xếp mảng số nguyên n phần tử ( n < 10) - theo thứ tự tăng dần:

Đáp Án
	//xuat ra dong thong bao nhap lieu
	print "Nhap vao so luong phan tu cua mang so nguyen ( nho hon 10): ";
	//khoi tao mang rong
	$int_arr = array();
	//dat gia tri mac dinh cho bien $n: so luong phan tu cua mang
	$n = 0;
	//doc du lieu nhap tu ban phim
	fscanf(STDIN,"%d\n",$n);
	//kiem tra tinh hop le cua du lieu nhap vao
	if(!is_int($n) OR ($n > 10) OR ($n < 1))
	{
		print("So luong phan tu phai la so nguyen duong!");
		exit;
	}
	//duyet mang de nhap du lieu cho tung phan tu
	for($i = 0; $i < $n; $i++)
	{
		printf("Nhap vao phan tu thu %d : ",($i+1));
		fscanf(STDIN,"%d\n",$int_arr[]);
	}
	if(empty($int_arr))
	{
		print("Chua nhap du lieu cho mang (!)");
		exit;
	}	
	for($i = 0; $i < $n; $i++)
	{		
		for($j = 0; $j < $n; $j++)
			{
				//neu phan tu co vi tri nho hon > phan tu co vi tri lon hon thi hoan doi gia tri
				if (($int_arr[$j] > $int_arr[$i]) AND ($j < $i))
				{
					//luu tam
					$temp = $int_arr[$j];					
					//hoan doi gia tri
					$int_arr[$j] = $int_arr[$i];
					$int_arr[$i] = $temp;
				}
			}
	}
	print("Day so nguyen sau khi da sap xep: \n");
	for($i = 0; $i < $n; $i++)
	{
		printf("%d\n",$int_arr[$i]);
	}

Bài tập 3: Tính tổng các phần tử ở vị trí chẵn - lẻ - tính tổng của mảng số nguyên n phần tử  (n<10)

Đáp Án
	//xuat ra dong thong bao nhap lieu
	print "Nhap vao so luong phan tu cua mang so nguyen ( nho hon 10): ";
	//khoi tao mang rong
	$int_arr = array();
	//dat gia tri mac dinh cho bien $n: so luong phan tu cua mang
	$n = 0;
	//doc du lieu nhap tu ban phim
	fscanf(STDIN,"%d\n",$n);
	//kiem tra tinh hop le cua du lieu nhap vao
	if(!is_int($n) OR ($n > 10) OR ($n < 1))
	{
		print("So luong phan tu phai la so nguyen duong!");
		exit;
	}
	//duyet mang de nhap du lieu cho tung phan tu
	for($i = 0; $i < $n; $i++)
	{
		printf("Nhap vao phan tu thu %d : ",($i+1));
		fscanf(STDIN,"%d\n",$int_arr[]);
	}
	if(empty($int_arr))
	{
		print("Chua nhap du lieu cho mang (!)");
		exit;
	}	
	$sum = 0; //tong cac phan tu
	$tong_chan = 0; //tong cac phan tu vi tri chan
	$tong_le = 0; //tong cac phan tu vi tri le
	for($i = 0; $i < $n; $i++)
	{			
		//neu i chia he cho 2
		if (($i % 2) == 0)
		{
			$tong_chan += $int_arr[$i];
		}
		else
		{
			$tong_le += $int_arr[$i];
		}
		$sum += $int_arr[$i]; 
		// trong truong hop tong quat - ban co the su dung ket qua cuoi cung ngoai vong lap: sum = tong_chan+tong_le
	}
	printf("Tong chan cua day: %d, tong le cua day: %d, tong cac phan tu: %d\n", $tong_chan, $tong_le, $sum);

Bài tập 4: Tìm kiếm giá trị k trong mảng số nguyên n phần tử (n<10) - sử dạng cách duyệt mảng và sử dụng hàm array_search():

Đáp Án
	//xuat ra dong thong bao nhap lieu
	print "Nhap vao so luong phan tu cua mang so nguyen ( nho hon 10): ";
	//khoi tao mang rong
	$int_arr = array();
	//dat gia tri mac dinh cho bien $n: so luong phan tu cua mang
	$n = 0;
	//doc du lieu nhap tu ban phim
	fscanf(STDIN,"%d\n",$n);
	print "Nhap vao gia tri tim kiem (so nguyen): ";
	$k;
	fscanf(STDIN,"%d\n",$k);
	if(empty($k))
	{
		print("Chua nhap vao gia tri tim kiem(!)");
		exit;
	}
	//kiem tra tinh hop le cua du lieu nhap vao
	if(!is_int($n) OR ($n > 10) OR ($n < 1))
	{
		print("So luong phan tu phai la so nguyen duong!");
		exit;
	}
	//duyet mang de nhap du lieu cho tung phan tu
	for($i = 0; $i < $n; $i++)
	{
		printf("Nhap vao phan tu thu %d : ",($i+1));
		fscanf(STDIN,"%d\n",$int_arr[]);
	}
	//neu mang rong
	if(empty($int_arr))
	{
		print("Chua nhap du lieu cho mang (!)");
		exit;
	}	
	$found = FALSE; //mac dinh la khong tim thay
	//duyet mang de so sanh gia tri
	for($i = 0; $i < $n; $i++)
	{			
		if($int_arr[$i] == $k)
		{
			printf("Tim thay - o vi tri %d\n",$i);
			$found = TRUE;
			break;
		}
	}
	if (!$found)
	{
		print("Khong tim thay\n");
	}
	//su dung ham arra_search
	$key = array_search($k,$int_arr); //key: khoa cua mang 
	//neu khong tim thay se tra ra FALSE, su dung === thay cho == vi phan tu 0 co the tim thay
	if(($key !== FALSE)) 
	{
		printf("(su dung ham arra_search) Tim thay, vi tri %d\n",$key);
	}
	else
	{
		print("(su dung ham arra_search) Khong tim thay\n");
	}

 TỔNG KẾT

Bài thực hành - các bạn nắm các kỹ năng:

  • Nhập - Xuất dữ liệu cho mảng một chiều - nhiều chiều
  • Duyệt mảng một chiều - nhiều chiều
  • Ứng dụng duyệt mảng - phép toán - thuật toán tìm giá trị lớn nhất, sắp xếp chọn, tìm kiếm tuần tự để tìm kiếm giá trị lớn nhất, sắp xếp mảng theo thứ tự tăng dần, tìm kiếm một giá trị trong mảng ( thủ công và dùng hàm ).

Trong bài sau - các bạn sẽ thực hành xử lý chuỗi - do chuỗi là một mảng các ký tự cho nên các bạn cần thành thục bài thực hành này để có thể học các duyệt chuỗi - xử lý từng ký tự của chuỗi, giúp cho các bạn hiểu sâu về chuỗi trong PHP - sau đó mới sử dụng đến các hàm xử lý (đáp ứng tính nhanh gọn, thuận tiện).




Bình luận:


bài tập php