Hiển thị các bài đăng có nhãn C. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn C. Hiển thị tất cả bài đăng

Thứ Sáu, 6 tháng 3, 2015

Game of life ngôn ngữ lập trình C ( game of life in C)


Game of life ngôn ngữ lập trình C ( game of life in C)

các bạn tải sẵn code và chương trình sẵn về game of life TẠI ĐÂY

Game of life hay còn gọi là Life (Cuộc sống) là bài toán thuộc lĩnh vực cellcular automaton được đưa ra bởi John Horton Conway vào năm 1970.

Đây là một trò chơi mà không có người chơi. Sự tiến hóa của trò chơi được xác định bởi trạng thái ban đầu, và không cần thêm đầu vào nữa.


Là mạng lưới các ô (tế bào) tạo nên một không gian hai chiều không giới hạn. Trạng thái của ô: sống hoặc chết. Mỗi tế bào sẽ tương tác với tám hàng xóm (tế bào liền kề). Trạng thái tiếp theo của ô được quyết định theo quy tắc:



1. Ô đang sống mà có ít hơn hai hàng xóm đang sống sẽ chết
2. Ô đang sống mà có nhiều hơn 3 hàng xóm đang sống sẽ chết
3. Ô đang sống mà có 2 hoặc 3 hàng xóm đang sống sẽ tiếp tục sống
4. Ô chết mà có đúng 3 hàng xóm đang sống sẽ chuyển thành ô sống

Mẫu ban đầu là mầm của hệ thống.


đọc thêm về game of life tại ĐÂY


code:

#include <stdio.h>
#include <stdlib.h>
int xoa(char a[27][82],int x,int y);
int in(char a[27][82],int x,int y);
void menu();
int main(int argc, char *argv[]) {
 char a[27][82],b[27][82],c[27][82],d[2]={32,4};
 int i,j,k,t;
//reload screen 
 for(i=0;i<27;i++) for (j=0;j<82;j++) a[i][j]=d[0] ;
 MENU:
 system("cls");
 menu();  
 scanf("%d",&k); 
 switch(k){
  case 1:
   a[2][1] = a[3][2] = a[1][3] = a[2][3] = a[3][3] = d[1];
   break;
  case 2:
   a[7][43] = a[8][42] = a[8][43] = a[8][44] = a[9][42] = a[9][44] = a[10][43] = d[1];
   break;
  case 3:
   a[10][41] = a[10][43] = a[10][45] = a[11][41] = a[11][45] = a[12][41] = a[12][45] = a[13][41] = a[13][45] = a[14][41] = a[14][43] = a[14][45] = d[1];
   break;
  case 4:
   a[5][4] = a[5][5] = a[5][6] = a[5][7] = a[5][8] = a[5][9] = a[5][10] = a[5][11] = a[5][12] = a[5][13] = d[1];
   break;
  case 5:
   a[11][2] = a[11][3] = a[11][4] = a[11][5] = a[12][1] = a[12][5] = a[13][5] = a[14][1] = a[14][4] = d[1];
   break;
  case 6:
   a[7][39] = a[7][40] = a[7][42] = a[7][43] = a[8][39] = a[8][40] = a[8][42] = a[8][43] = a[9][40] = a[9][42] = a[10][38] = a[10][40] = a[10][42] = a[10][44] = a[11][38] = a[11][40] = a[11][42] = a[11][44] = a[12][38] = a[12][39] = a[12][43] = a[12][44] = d[1];
   break;
  case 7:
   a[6][2]=a[7][2]=a[6][3]=a[7][3]=a[6][12]=a[7][12]=a[8][12]=a[5][13]=a[9][13]=a[4][14]=a[10][14]=a[4][15]=a[10][15]=a[7][16]=a[5][17]=a[9][17]=a[6][18]=a[7][18]=a[8][18]=a[7][19]=a[4][22]=a[5][22]=a[6][22]=a[4][23]=a[5][23]=a[6][23]=a[3][24]=a[7][24]=a[2][26]=a[3][26]=a[7][26]=a[8][26]=a[4][36]=a[5][36]=a[4][37]=a[5][37]= d[1];
   break;
  default:
   goto MENU;
 }
 printf("Chon speed - millisecond: ");
 scanf("%d",&t); 
//in mang a 
 for(i=1;i<=24;i++) {  
  for (j=1;j<=79;j++) printf("%c",a[i][j]);
  printf("\n");  
 }
 RUN:
 while (!kbhit()){ 
//xoa man hinh
  system("cls");
//reload mang b
  for(i=0;i<27;i++) for (j=0;j<82;j++) b[i][j]=d[0]; 
//tim vi tri chet
  for(i=1;i<=25;i++) for (j=1;j<=79;j++) if ((a[i][j] == d[1]) && (xoa(a,i,j)!= 2) && xoa(a,i,j)!= 3) b[i][j] = d[1];
//reload mang c
  for(i=0;i<27;i++) for (j=0;j<82;j++) c[i][j]=d[0];
//tim vi tri song
  for(i=1;i<=25;i++) for (j=1;j<=79;j++) if ((a[i][j] == d[0] ) && (in(a,i,j)== 3))c[i][j] = d[1];
//kill vi tri chet 
  for(i=1;i<=25;i++) for (j=1;j<=79;j++) if (b[i][j]==d[1]) a[i][j] = d[0]; 
//khoi phuc vi tri song
  for(i=1;i<=25;i++) for (j=1;j<=79;j++) if (c[i][j]== d[1]) a[i][j] = d[1]; 
//in mang a 
  for(i=1;i<=24;i++) {  
   for (j=1;j<=79;j++) printf("%c",a[i][j]);
   printf("\n");
  }     
 Sleep(t);
 }    
 printf("M = thoat ra menu,R = reset roi thoat ra menu, K = ket thuc : ");
 k=getch();
 k=getch();
 switch(k){
  case 109:
   goto MENU; 
  case 114:
   for(i=0;i<27;i++) for (j=0;j<82;j++) a[i][j]=d[0] ;
   goto MENU;
  case 107:
   break;
  default:
   goto RUN;  
 } 
 return 0;
}

void menu() {
 printf("   ----------------------GAME OF LIFE CUA PHAM TUAN NGOC----------------------\n\n1. Glider \n2. Small Exploder \n3. Exploder\n4. 10 Cell Row\n5. Lightweight Spaceship\n6. Tumbler \n7. Gosper Glider Gun\n\nChon 1 hinh phia tren theo so: ");
}

//khai bao function xoa
int xoa(char a[27][82],int x,int y){
 int i,j,k,t=-1;
 for (i=x-1;i<=x+1;i++) for (j=y-1;j<=y+1;j++){
//vong lenh swich-case xuyen goc man hinh
  switch(i){
   case 0:
    if (a[x][y] == a[25][j]) t=t+1;
    break;
   case 26:
    if (a[x][y] == a[1][j]) t=t+1;
    break;    
  }
  switch(j){
   case 0:
    if (a[x][y] == a[i][79]) t=t+1;
    break;
   case 80:
    if (a[x][y] == a[i][1]) t=t+1;
    break;
   default:
    if (a[x][y] == a[i][j]) t=t+1;
  }
 }
 return t;
}
//khai bao function in
int in(char a[27][82],int x,int y){
 int i,j,k,t=0;
 for (i=x-1;i<=x+1;i++) for (j=y-1;j<=y+1;j++) {
//vong lenh swich-case xuyen goc man hinh  
  switch (i){
   case 0:
    if (a[x][y] != a[25][j]) t=t+1;
    break;
   case 26:
    if (a[x][y] != a[1][j]) t=t+1;
    break;
  }
  switch (j){
   case 0:
    if (a[x][y] != a[i][79]) t=t+1;
    break;
   case 80:
    if (a[x][y] != a[i][1]) t=t+1; 
    break;
   default:
    if (a[x][y] != a[i][j]) t=t+1;
  }
 }
 return t;
}



chúc các bạn vui vẻ :

Thứ Hai, 9 tháng 2, 2015

Hàm - chương trình con - void in C

Hàm - chương trình con - void in C

code và chương trình sẵn Tại Đây




#include <stdio.h>
#include <stdlib.h>
void s (int *x, int *y);
int main(int argc, char *argv[]) {
 printf (" vao 2 so nguyen : ");
 int x,y;
 scanf("%d%d",&x,&y);
 s(&x,&y);
 printf("2 so sau khi hoan vi la : %d  %d",x,y); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
void s (int *x, int *y){
 int z = *x;
 *x = *y;
 *y = z;
}


hoan-vi
Hoán vị






#include <stdio.h>
#include <stdlib.h>
void r (int a[], int n);
int main(int argc, char *argv[]) {
 printf("nhap vao do dai mang: ");
 int i,n;
 scanf("%d",&n);
 int a[100];
 for (i=0;i<n;i++) {
  printf ("A[%d]= ",i+1);
  scanf ("%d",&a[i]);
 } 
 r (a,n); 
 printf("chuoi sau khi dao nguoc la: ");
 for (i=0;i<n;i++) printf ("%d ",a[i]); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
void r (int a[100], int n){
 int i,j;
 for (i=0;i<n/2;i++){
  j=a[i];
  a[i] = a[n-1-i];
  a[n-1-i]=j;
 }
}
Dao-nguoc
Đảo ngược






#include <stdio.h>
#include <stdlib.h>
int c(char a[], char i);
int main(int argc, char *argv[]) {
 char a[100],b;
 printf("vao chuoi ki tu A: ");
 gets(a);
 printf("vao ki tu B: ");
 gets(&b);
 printf("\n\n\n");
 c(a,b);
 printf("\n\n\n");
 system("pause");
 return 0;
}
int c(char a[100], char b){
 int i,t=0;
 for (i=0;i<100;i++) if (a[i]== b) t=t+1;
 if (t==0) printf("-1"); 
 if (t!=0) printf("%d",t);
}


tim-kiem
tìm kiếm




end

Hàm - chương trình con - function in C (tiếp)


Hàm - chương trình con - function in C (tiếp)



code và chương trình sẵn Tại Đây

1. Write a function which accepts an integer value as input, and returns an integer which is the cube of that input


#include <stdio.h>
#include <stdlib.h>

/* Write a function which accepts an integer value as input, and returns an integer which is the cube of that input */
int l(int);
int main(int argc, char *argv[]) {
 printf("vao X= ");
 int x;
 scanf("%d",&x);
 printf("x^3 = %d",l(x)); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
int l(int x){
 int y = x*x*x;
 return y;
}

lap-phuong
Lập phương


2. Write a function that accepts a char as input and returns true if the char is a digit from 0 to 9 or false if the character is not a digit from 0 to 9



#include <stdio.h>
#include <stdlib.h>
/* Write a function that accepts a char as input and returns true 
if the char is a digit from 0 to 9 or false if the character is not a digit from 0 to 9 */
int tf(char);
int main(int argc, char *argv[]) {
 printf("vao ki tu : ");
 char x;
 scanf("%c",&x);
 if (tf(x)) printf("%c nam giua 0 - 9",x);
  else printf ("%c khong nam giua 0 - 9",x); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
int tf(char x){
 int y;
 if (x >= '0' && x<= '9') y = 1;
 else y = 0;
 return y;
}

tim-kiem
tìm kiếm



#include <stdio.h>
#include <stdlib.h>
/* . Write a function named Smallest that takes three integer inputs 
and returns an integer that is the smallest of the three inputs.  
Write the prototype for the Smallest function.  
Write  a program that gets 3 integers from a user and displays the smallest. */
int m(int,int,int);
int main(int argc, char *argv[]) {
 printf ("vao 3 so : ");
 int x,y,z;
 scanf("%d%d%d",&x,&y,&z);
 printf(" so nho nhat trong 3 so %d %d %d la : %d",x,y,z,m(x,y,z)); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
int m(int x,int y, int z){
 int i =x;
 if (i > y) i = y;
 if (i > z) i = z;
 return i;
}

min
min


4. Write a function that, given a letter of the alphabet, returns true if the letter is a vowel (lower or uppercase) and returns false if the letter is not a vowel.



#include <stdio.h>
#include <stdlib.h>
/* Write a function that, given a letter of the alphabet, 
returns true if the letter is a vowel (lower or uppercase) and returns false if the letter is not a vowel. */
int t(char);
int main(int argc, char *argv[]) {
 printf ("vao 1 chu: ");
 char x;
 gets(&x);
 if (t(x)) printf ("%c la nguyen am",x);
  else printf ("%c khong phai la nguyen am",x);
 printf("\n\n\n");
 system("pause");
 return 0;
}
int t(char x){
 int t;
 if (x=='u'||x=='U'||x=='e'||x=='E'||x=='o'||x=='O'||x=='a'||x=='A'||x=='i'||x=='I') t= 1;
  else t=0;
 return t;
}


tim-nguyen-am
tim nguyên âm


end






















Hàm - chương trình con - function in C

Hàm - chương trình con -  function in C

- chương trình và code sẵn Tại Đây




1. Write a C program that accepts a number and square the number with the help of a function.To do this,


#include <stdio.h>
#include <stdlib.h>
/* Write a C program that accepts a number and square the number with the help of a function.
To do this */
int BP (int);
int main(int argc, char *argv[]) {
 printf ("vao x = ");
 int x;
 scanf("%d",&x);
 printf("binh phuong cua x la y = %d", BP(x)); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
int BP (int x) {
 int y = x*x;
 return (y);
}

binh-phuong
bình phương


2. Write a C program to find the area and perimeter of a circle.


#include <stdio.h>
#include <stdlib.h>
/* 2. Write a C program to find the area and perimeter of a circle. */
float c(float);
float v(float);
int main(int argc, char *argv[]) {
 printf ("ban kinh r = ");
 float r;
 scanf("%f",&r);
 printf(" chu vi la : %f \n the tich la : %f",c(r),v(r)); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
float c(float x){
 float y = 2*x*3.14159265359;
 return y;
}
float v(float x){
 float y = x*x*3.14159265359;
 return y;
}


chu-vi-the-tich-hinh-tron
chu vi thể tính hình tròn





3. Write a C program to calculate the factorial of an integer


#include <stdio.h>
#include <stdlib.h>
/* 3. Write a C program to calculate the factorial of an integer */
int g(int);
int main(int argc, char *argv[]) {
 printf("vao so nguyen X = ");
 int x;
 scanf("%d",&x);
 printf ("%d! = %d",x,g(x)); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
int g(int x){
 int y = 1;
 for (;x>0;x--) y=y*x;
 return y;
}

tim-giai-thua
tìm giai thừa



4. Write a program with a function that takes two int parameters, adds them together, then returns the sum. The program should ask the user for two numbers, then call the function with the numbers as arguments, and tell the user the sum.


#include <stdio.h>
#include <stdlib.h>
/* Write a program with a function that takes two int parameters, 
adds them together, then returns the sum. The program should ask the user for two numbers, 
then call the function with the numbers as arguments, and tell the user the sum */
int s(int,int);
int main(int argc, char *argv[]) {
 int x,y;
 printf ("vao x = ");
 scanf ("%d",&x);
 printf ("vao y = ");
 scanf ("%d",&y);
 printf("%d + %d = %d ",x,y,s(x,y)); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
int s(int x,int y){
 int z = x+y;
 return z;
}

tinh-tong
tính tông



end
















Thứ Tư, 4 tháng 2, 2015

mảng ký tự - char array

mảng ký tự - char array 

đây là bài viết về vòng lặp trong C bao gồm có các bài tập về mảng ký tự các bạn có thể tải sẵn bài tâp và code của mình TẠI ĐÂY để tiện theo dõi bài viết.

đây là bài viết về mảng ký tự 1 chiều nếu các bạn chưa chắc về kiến thức mảng số 1 chiều  thì nên tham khảo lại TẠI ĐÂY . chúc các bạn vui vẻ.



LÝ THUYẾT: lục tung cả google cũng không có lý thuyết... cô giáo cũng ko có kĩ phần này nên cứ quy của mảng số sang mảng chữ cũng được... code được hết :))


và sau đây là bài tâp *tung hoa-tung hoa*.....




Viết một chương trình có khả năng in các chữ cái trong một mảng char theo thứ tự ngược. vì
Ví dụ, nếu mảng có chứa {'c', 's', 'c', '2', '6', '1'} đầu ra (để các thiết bị đầu cuối)
cần được "162csc"


#include <stdio.h>
#include <stdlib.h>

/* Write a program which prints the letters in a char array in reverse order. For 
example, if the array contains {'c', 's', 'c', '2', '6', '1'}the output (to the terminal) 
should be "162csc" */

int main(int argc, char *argv[]) {
 char a[20];
 int i;
 printf("vao chuoi ky tu: "); 
 for(i=19;i>=0;i--) a[i]='0';
 gets(a);
 for(i=19;i>=0;i--) if (a[i]!='0') printf ("%c",a[i]); 
 printf("\n\n\n");
 system("pause");
 return 0;
}


in-nguoc
in ngược



bài 2. Write a  program : declare a char array and the size of the array (of type char). This function counts the number of digit letters in the char array.


2. Viết chương trình: khai báo một mảng char và kích thước của mảng (kiểu char). Chức năng này đếm số chữ số trong mảng char.




#include <stdio.h>
#include <stdlib.h>

/* Write a  program : declare a char array and the size of the array 
(of type char). This function counts the number of digit letters in the char array */

int main(int argc, char *argv[]) {
 char a[30];
 int i,t;
 printf("vao chuoi ki tu: ");
 for(i=29;i>=0;i--) a[i]='0';
 gets(a); t=0;
 printf("%s\n",a);
 for (i=0;i<30;i++) if (a[i] != '0') t=t+1;
 printf("so ki tu trong chuoi la: %d",t-1);   
 printf("\n\n\n");
 system("pause");
 return 0;
}

dem-ky-tu
đếm kí tự


3. Write a program that counts the number of words in a string


3. Viết chương trình đếm số từ trong một chuỗi



code:
#include <stdio.h>
#include <stdlib.h>

/* Write a program that counts the number of words in a string */

int main(int argc, char *argv[]) {
 char a[30];
 int i,t;
 printf("vao chuoi ky tu: "); 
 gets(a);
 t=1;
 for(i=0;i<30;i++) if (a[i]==' ') t=t+1;
 printf("so tu trong chuoi tren la: %d ",t);
 printf("\n\n\n");
 system("pause");
 return 0;
}
dem-chu
đếm chữ



Bài 4. Write a program that accept two string, after checking if string1 equals string2 then print 'string 1 equals string2', else print string1 less than or greater than string 2.


4. Viết chương trình chấp nhận hai chuỗi, sau khi kiểm tra nếu string1 bằng string2 sau đó in 'string 1 bằng string2', khác in string1 nhỏ hơn hoặc lớn hơn chuỗi 2.

#include <stdio.h>
#include <stdlib.h>

/* Write a program that accept two string,
 after checking if string1 equals string2 then print 
 'string 1 equals string2', else print string1 less than
  or greater than string 2 */

int main(int argc, char *argv[]) {
 char a[20],b[20];
 int i,j,k;
 for (i=0;i<20;i++) { 
  a[i]='0'; b[i]='0';
 }
 printf("vao chuoi A: ");
 gets(a);
 printf("vao chuoi B: ");
 gets(b);
 k=0; j=0;
 for (i=0;i<20;i++) if (a[i]!='0') j=j+1;
 for (i=0;i<20;i++) if (b[i]!='0') k=k+1;
 if (j==k) printf ("string 1 equals string 2");
  else if (j>k) printf ("string 1 longer string 2");
   else printf ("string 1 shorter string 2");
 printf("\n\n\n");
 system("pause");
 return 0;
}
 
so-sanh-chuoi
so sánh chuỗi




5. Write a function that scans a character array for the character - and replaces it with _


5. Viết một chức năng quét một mảng ký tự cho các nhân vật - và thay thế nó bằng _


#include <stdio.h>
#include <stdlib.h>

/* Write a function that scans a character array for the character - and replaces it with _ */

int main(int argc, char *argv[]) {
 
 char a[20];
 int i;
 for (i=0;i<20;i++)  a[i]='0';
 printf("vao chuoi A: ");
 gets(a);
 for (i=0;i<20;i++) if (a[i]!='0') if (a[i]=='-') a[i]='_';
 printf("\n\n\n");
 puts(a);  
 printf("\n\n\n");
 system("pause");
 return 0;
}


thay-the-ky-tu
thay thế ký tự


trên đây là toàn bộ bài tập về phần mảng 1 chiều... các bạn có gì thắc mắc cứ pm xuống dưới nazzzzzz



Mảng dữ liệu số trong C - array in C

Mảng dữ liệu số trong C - array in C

đây là bài viết về các mảng aray trong C các bạn có thể tải trước bài tập và code mình làm sẵn TẠI ĐÂY để tiện theo dõi bài viết:

đây là bài viết về mảng 1 chiều nếu các bạn chưa chắc về kiến thức về vòng lặp thì nên tham khảo lại TẠI ĐÂY . chúc các bạn vui vẻ.

lý thuyết Mảng:

đọc xong bài này, các bạn sẽ nắm được các vấn đề sau:
• Khái niệm về kiểu dữ liệu mảng cũng như ứng dụng của nó.
• Cách khai báo biến kiểu mảng và các phép toán trên các phần tử của mảng.

I. GIỚI THIỆU KIỂU DỮ LIỆU “KIỂU MẢNG”TRONG C


            Mảng là một tập hợp các phần tử cố định có cùng một kiểu, gọi là kiểu phần tử.
Kiểu phần tử có thể là có các kiểu bất kỳ: ký tự, số, chuỗi ký tự…; cũng có khi ta sử
dụng kiểu mảng để làm kiểu phần tử cho một mảng (trong trường hợp này ta gọi là
mảng của mảng hay mảng nhiều chiều).

            Ta có thể chia mảng làm 2 loại: mảng 1 chiều và mảng nhiều chiều.

            Mảng là kiểu dữ liệu được sử dụng rất thường xuyên. Chẳng hạn người ta cần
quản lý một danh sách họ và tên của khoảng 100 sinh viên trong một lớp. Nhận thấy
rằng mỗi họ và tên để lưu trữ ta cần 1 biến kiểu chuỗi, như vậy 100 họ và tên thì cần
khai báo 100 biến kiểu chuỗi. Nếu khai báo như thế này thì đoạn khai báo cũng như
các thao tác trên các họ tên sẽ rất dài dòng và rắc rối. Vì thế, kiểu dữ liệu mảng giúp
ích ta trong trường hợp này; chỉ cần khai báo 1 biến, biến này có thể coi như là tương
đương với 100 biến chuỗi ký tự; đó là 1 mảng mà các phần tử của nó là chuỗi ký tự.
Hay như để lưu trữ các từ khóa của ngôn ngữ lập trình C, ta cũng dùng đến một mảng
để lưu trữ chúng.

II. MẢNG 1 CHIỀU

           Nếu xét dưới góc độ toán học, mảng 1 chiều giống như một vector. Mỗi phần tử của mảng
một chiều có giá trị không phải là một mảng khác.

II.1. Khai báo

II.1.1. Khai báo mảng với số phần tử xác định (khai báo tường minh)
Cú pháp:
<Kiểu> <Tên mảng ><[số phần tử]>
Ý nghĩa:
- Tên mảng: đây là một cái tên đặt đúng theo quy tắc đặt tên của danh biểu. Tên này
cũng mang ý nghĩa là tên biến mảng.
- Số phần tử: là một hằng số nguyên, cho biết số lượng phần tử tối đa trong mảng là
bao nhiêu (hay nói khác đi kích thước của mảng là gì).
- Kiểu: mỗi phần tử của mảng có dữ liệu thuộc kiểu gì.
- Ở đây, ta khai báo một biến mảng gồm có số phần tử phần tử, phần tử thứ nhất là
tên mảng [0], phần tử cuối cùng là tên mảng[số phần tử -1]

Ví dụ:
int a[10]; /* Khai báo biến mảng tên a, phần tử thứ nhất là a[0], phần tử cuối cùng là a[9].*/
Ta có thể coi mảng a là một dãy liên tiếp các phần tử trong bộ nhớ như sau:

Vị trí                 0      1   2     3      4     5      6     7     8     9
Tên phần tử   a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]


II.1.2. Khai báo mảng với số phần tử không xác định (khai báo không tường
minh)

Cú pháp: 
<Kiểu> <Tên mảng> <[]>
        Khi khai báo, không cho biết rõ số phần tử của mảng, kiểu khai báo này thường được
áp dụng trong các trường hợp: vừa khai báo vừa gán giá trị, khai báo mảng là tham số hình
thức của hàm.
     a. Vừa khai báo vừa gán giá trị

Cú pháp:
<Kiểu> <Tên mảng> []= {Các giá trị cách nhau bởi dấu phẩy}
          Nếu vừa khai báo vừa gán giá trị thì mặc nhiên C sẽ hiểu số phần tử của mảng là số
giá trị mà chúng ta gán cho mảng trong cặp dấu {}. Chúng ta có thể sử dụng hàm sizeof()
để lấy số phần tử của mảng như sau:

          Số phần tử=sizeof(tên mảng)/ sizeof(kiểu)
           b. Khai báo mảng là tham số hình thức của hàm, trong trường hợp này ta không cần
chỉ định số phần tử của mảng là bao nhiêu.

II.2 Truy xuất từng phần tử của mảng

      Mỗi phần tử của mảng được truy xuất thông qua Tên biến mảng theo sau là chỉ số
nằm trong cặp dấu ngoặc vuông [ ]. Chẳng hạn a[0] là phần tử đầu tiên của mảng a được khai
báo ở trên. Chỉ số của phần tử mảng là một biểu thức mà giá trị là kiểu số nguyên.
Với cách truy xuất theo kiểu này, Tên biến mảng[Chỉ số] có thể coi như là một biến
có kiểu dữ liệu là kiểu được chỉ ra trong khai báo biến mảng.
Ví dụ
int a[10];

Trong khai báo này, việc truy xuất các phần tử được chỉ ra trong hình 1. Chẳng hạn
phần tử thứ 2 (có vị trí 1) là a[1]…


bài tập luyện tập:

Bài 1. Write a program that asks the user to type 10 integers of an array. The program must compute and write how many integers are greater than or equal to 10.


1. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng. Chương trình phải tính toán và viết bao nhiêu số nguyên lớn hơn hoặc bằng 10.

code:


#include <stdio.h>
#include <stdlib.h>

/* Write a program that asks the user to type 10 integers of an array. The program must compute 
and write how many integers are greater than or equal to 10 */

int main(int argc, char *argv[]) {
 int a[10],i,t;
 for (i=0;i<10;i++) {
  printf("A[%d]= ",i+1);
  scanf("%d",&a[i]);
 }
 t=0;
 for (i=0;i<10;i++){
  if (a[i] > 10) t = t +1; 
 }
 printf("tong so lon hon 10 la: %d",t);
 
 printf("\n\n\n");
 system("pause");
 return 0;
}

dem-so-lon-hon-10
đếm số lớn hơn 10


bài 2. Write a program that asks the user to type 10 integers of an array. The program must output the largest element in the array, and the index at which that element was found.

2. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng. Sản lượng chương trình phải là yếu tố lớn nhất trong mảng, và các chỉ số mà tại đó yếu tố đó đã được tìm thấy.

code:

#include <stdio.h>
#include <stdlib.h>

/* Write a program that asks the user to type 10 integers of an array.
 The program must output the largest element in the array, 
 and the index at which that element was found */

int main(int argc, char *argv[]) {
  int a[10],i,m;
 for (i=0;i<10;i++) {
  printf("A[%d]= ",i+1);
  scanf("%d",&a[i]);
 }
 m=a[0];
 for (i=0;i<10;i++) if (m<a[i]) m=a[i];
 printf("\nso lon nhat la: %d\nla nhung so tai vi tri: ",m);
 for (i=0;i<10;i++) if (m==a[i]) printf("%d  ",i+1);  
 printf("\n\n\n");
 system("pause");
 return 0;
}
tim-vi-tri-so-lon-nhat
tìm vị trí số lớn nhất


Bài 3. Input values are accepted from the user into the array. Displays highest of the entered values. Prints average of values entered.

3. Giá trị đầu vào được chấp nhận từ người sử dụng vào mảng. Hiển thị cao nhất của các giá trị nhập vào. In trung bình của các giá trị nhập vào.

code:


#include <stdio.h>
#include <stdlib.h>

/* Input values are accepted from the user into the array. Displays highest of the entered values. Prints average of values entered */

int main(int argc, char *argv[]) {
 int s;
 printf("so gia tri ban muon co trong mang: ");
 scanf("%d",&s);
 int a[s],i,j,m,t;
 for (i=0; i<s; i++){
  printf("A[%d]= ",i+1);
  scanf("%d",&a[i]);
 }
 m=a[0];
 t=0;
 for (i=0;i<s;i++){
  t=t+a[i];   
  if (m<a[i]) m=a[i];
 }
 printf("\nso lon nhat la: %d: ",m);
 printf("\nso trung binh cong la: %d",t/i); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
lon-nhat-trung-binh-cong
số lớn nhất và số TBC

Bài 4: Write a program that accepts the following numbers in an array and reverses the array


5: Viết chương trình chấp nhận những con số sau đây trong một mảng và đảo ngược mảng


code:


#include <stdio.h>
#include <stdlib.h>

/* Write a program that accepts the following numbers in an array and reverses the array */

int main(int argc, char *argv[]) {
 int s;
 printf("nhap so luong cac gia tri trong mang: ");
 scanf("%d",&s);
 int a[s],b[s],i;
 for (i=0;i<s;i++){
  printf("A[%d]= ", i+1);
  scanf("%d",&a[i]);
  b[s-i-1] = a[i];                                                                                                                                           
 }
 printf("\n");
 for (i=0;i<s;i++) printf("A[%d]= %d\t",i+1,a[i]);
 printf("\n");
 for (i=0;i<s;i++) printf("B[%d]= %d\t",i+1,b[i]);
 printf("\n\n\n");
 system("pause");
 return 0;
}

in-nguoc-mang
in ngược mảng



5. Write a program to count the number of vowels in a line of text


5. Viết chương trình đếm số lượng các nguyên âm trong một dòng văn bản

code:


#include <stdio.h>
#include <stdlib.h>

/*  Write a program to count the number of vowels in a line of text */

int main(int argc, char *argv[]) {
 char s[50];
 int i,j;
 printf("vao 1 chuoi: ");
 gets(s);
 j=0;
 for (i=0; s[i]!='\0';i++){
  if (s[i]=='u' || s[i]=='e' || s[i]=='o' || s[i]=='a' || s[i]=='i') j=j+1;
 }
 printf("tong cac chu cai la nguyen am la: %d",j); 
 printf("\n\n\n");
 system("pause");
 return 0;
}

dem-nguyen-am
đếm nguyên âm

6. Write a program that asks the user to type 10 integers of an array and an integer V. The program must search if V is in the array of 10 integers. The program writes "V is in the array" or "V is not in the array"


6. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng và một số nguyên V. Chương trình phải tìm kiếm nếu V là trong mảng 10 số nguyên. Chương trình viết "V là trong mảng" hoặc "V không phải là trong mảng".


code:


#include <stdio.h>
#include <stdlib.h>

/* Write a program that asks the user to type 10 integers of an array and an integer V. 
The program must search if V is in the array of 10 integers. 
The program writes "V is in the array" or "V is not in the array" */

int main(int argc, char *argv[]) {
 int a[10],i,b,v;
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }
 printf("nhap V= ");
 scanf("%d",&v);
 b=0;
 for(i=0;i<10;i++) if(v==a[i]) b=1;
 if (b==1) printf ("V is in the array"); else printf ("V is not in the array"); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
kiem-tra
kiểm tra 

Bài 7. Write a program that asks the user to type 10 integers of an array and an integer value V. The program must search if the value V exists in the array and must remove the first occurrence of V, shifting each following element left and adding a zero at the end of the array. The program must then write the final array


7. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng và một số nguyên V. Chương trình phải tìm kiếm nếu giá trị V tồn tại trong mảng và phải loại bỏ sự xuất hiện đầu tiên của V, chuyển mỗi yếu tố sau đây trái và thêm một số không ở cuối mảng. Sau đó chương trình phải viết các mảng thức

code:


#include <stdio.h>
#include <stdlib.h>

/* Write a program that asks the user to type 10 integers 
of an array and an integer value V. The program must search 
if the value V exists in the array and must remove the first occurrence of V,
 shifting each following element left and adding a zero at the end of the array. 
 The program must then write the final array */

int main(int argc, char *argv[]) {
  int a[10],i,b,v;
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }
 printf("nhap V= ");
 scanf("%d",&v);
 for(i=0;i<10;i++) if(v==a[i]) break;
 for (i;i<10;i++) a[i]=a[i+1];
 a[9]=0; printf("\n\n\n");
 for (i=0;i<10;i++) printf("%d  ",a[i]);
 
 printf("\n\n\n");
 system("pause");
 return 0;
}
them-phan-tu-vao-mang
thêm phần tử vào mảng


Bài 8. Write a program that asks the user to type 10 integers of an array and an integer value V and an index value i between 0 and 9. The program must put the value V at the place i in the array, shifting each element right and dropping off the last element. The program must then write the final array


8. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng và một số nguyên V và một giá trị chỉ số i giữa 0 và 9. Chương trình phải đặt giá trị V tại nơi i trong mảng, mỗi phần tử chuyển quyền và thả ra khỏi phần tử cuối cùng. Sau đó chương trình phải viết các mảng thức

code:


#include <stdio.h>
#include <stdlib.h>

/* Write a program that asks the user to type 10 integers of 
an array and an integer value V and an index value i between 0 and 9. 
The program must put the value V at the place i in the array, shifting 
each element right and dropping off the last element. 
The program must then write the final array */

int main(int argc, char *argv[]) {
 int a[10],i,b,v,j;
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }
 printf("nhap V= ");
 scanf("%d",&v); 
 printf("nhap i= ");
 scanf("%d",&j);
 j=j-1;
 printf("\n\n\n");
 for (i=0;i<10;i++) printf("%d ",a[i]); 
 for(i=9;i>j;i=i-1)  a[i]=a[i-1]; 
 a[j]=v; printf("\n\n\n");
 for (i=0;i<10;i++) printf("%d ",a[i]); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
them-vao-vi-tri
Thêm V vào vị trí i


Bài 9. Write a program that asks the user to type 10 integers of an array. The program will then display either "the array is growing", "the array is decreasing", "the array is constant", or "the array is growing and decreasing."

9. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng. Chương trình sau đó sẽ hiển thị hoặc là "mảng đang phát triển", "mảng đang giảm", "mảng là liên tục", hoặc "mảng đang phát triển và giảm."

code:


#include <stdio.h>
#include <stdlib.h>

/* Write a program that asks the user to type 10 integers of an array. 
The program will then display either "the array is growing", "the array is decreasing", 
"the array is constant", or "the array is growing and decreasing". */

int main(int argc, char *argv[]) { 
 int a[10],i,j,k,l;
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }
 j=k=l=0;
 for (i=0;i<9;i++){
  if (a[i] > a[i+1]) j=j+1;
  if (a[i] < a[i+1]) k=k+1;
  if (a[i]==a[i+1]) l=l+1;
 }
 if (k==9) printf("the array is growing");
 else  if (j==9) printf("the array is decreasing");
    else  if (l==9) printf("the array is constant");
      else printf("the array is growing and decreasing");
 printf("\n\n\n");
 system("pause");
 return 0;
}
xac-dinh-mang
xác định mảng

10. Write a program that asks the user to type 10 integers of an array. The program will then sort the array in descending order and display it.

10. Viết chương trình yêu cầu người dùng nhập 10 số nguyên của một mảng. Chương trình sau đó sẽ sắp xếp mảng theo thứ tự và hiển thị nó.

code:


#include <stdio.h>
#include <stdlib.h>

/* Write a program that asks the user to type 10 integers of an array. 
The program will then sort the array in descending order and display it. */

int main(int argc, char *argv[]) { 
 int a[10],i,j,k;
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }
 for (i=0;i<10;i++) for(j=0;j<10;j++) if (a[i]<a[j]) {
  k=a[i];
  a[i]=a[j];
  a[j]=k;
 }
 for(i=0;i<10;i++)printf ("%d  ",a[i]); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
sap-xep-mang
sắp xếp mảng


11. Write a program which takes 2 arrays of 10 integers each, a and b. c is an array with 20 integers. The program should put into c the appending of b to a, the first 10 integers of c from array a, the latter 10 from b. Then the program should display c.

11. Viết một chương trình trong đó có 2 mảng 10 số nguyên mỗi a và b. c là một mảng với 20 số nguyên. Chương trình này nên đưa vào c các phụ thêm của b cho a, 10 số nguyên đầu tiên của c từ mảng một, sau 10 từ b. Sau đó chương trình sẽ hiển thị c.


code:


#include <stdio.h>
#include <stdlib.h>

/* Write a program which takes 2 arrays of 10 integers each, a and b. 
c is an array with 20 integers. The program should put into c the appending of b to a, 
the first 10 integers of c from array a, the latter 10 from b. Then the program should display c */

int main(int argc, char *argv[]) { 
 int a[20],i; 
 for(i=0;i<10;i++){
  printf("A[%d]=",i+1);
  scanf("%d",&a[i]);
 }  
 for(i=10;i<20;i++){
  printf("B[%d]=",i-9);
  scanf("%d",&a[i]);
 }  
 for(i=0;i<20;i++) printf("C[%d]=%d\t",i+1,a[i]); 
 printf("\n\n\n");
 system("pause");
 return 0;
}
cong-mang
cộng mảng

kết luận: trên đây là kiến thức về mảng số 1 chiều... chúc các bạn thành công trong các bài tập trên :v :v

Thứ Bảy, 31 tháng 1, 2015

Cấu trúc lựa chọn: switch case trong C#

Cấu trúc lựa chọn: switch case


trong phần này chúng ta sẽ đi tìm hiều về cấu trúc swich case... đây cũng là một lệnh rẽ nhánh giống với lênh IF-ELSE nên các bạn cần phải hiểu rõ if-else mới có thể hiểu được phần này.

để tiện theo dõi bài viết các bạn hãy TẢI VỀ code và chương trình bài tập mình đã làm sẵn :)


sau đây là nội dung chính:


Cú pháp của lệnh switch hơi đặc biệt một chút. Mục đích của nó là kiểm tra một vài giá trị hằng cho một biểu thức, tương tự với những gì chúng ta làm ở đầu bài này khi liên kết một vài lệnh if và else if với nhau. Dạng thức của nó như sau:

switch (expression) {
case constant1:
block of instructions 1
break;
case constant2:
block of instructions 2
break;
.
.
.
default:
default block of instructions
}

Nó hoạt động theo cách sau: switch tính biểu thức và kiểm tra xem nó có bằng constant1 hay không, nếu đúng thì nó thực hiện block of instructions 1 cho đến khi tìm thấy từ khoá break, sau đó nhảy đến phần cuối của cấu trúc lựa chọn switch.
Còn nếu không, switch sẽ kiểm tra xem biểu thức có bằng constant2 hay không. Nếu đúng nó sẽ thực hiện block of instructions 2 cho đến khi tìm thấy từ khoá break.
Cuối cùng, nếu giá trị biểu thức không bằng bất kì hằng nào được chỉ định ở trên (bạn có thể chỉ định bao nhiêu câu lệnh case tuỳ thích), chương trình sẽ thực hiện các lệnh trong phần default: nếu nó tồn tại vì phần này không bắt buộc phải có.
Hai đoạn mã sau là tương đương:

ví dụ switch và if-else tương đương

swith
switch (x) {
case 1:
printf ("x is 1");
break;
case 2:
printf("x is 2");
break;
default:
printf("value of x unknown");
}
if-else
if (x == 1) {
printf( "x is 1");
}
else if (x == 2) {
printf( "x is 2");
}
else {
printf("value of x unknown");
}

Mình đã nói ở trên rằng cấu trúc của lệnh switch hơi đặc biệt. Chú ý sự tồn tại của lệnh break ở cuối mỗi khối lệnh. Điều này là cần thiết vì nếu không thì sau khi thực hiện block of instructions 1 chương trình sẽ không nhảy đến cuối của lệnh switch mà sẽ thực hiện các khối lệnh tiếp theo cho đến khi nó tìm thấy lệnh break đầu tiên. Điều này khiến cho việc đặt cặp ngoặc nhọn { } trong mỗi trường hợp là không cần thiết và có thể được dùng khi bạn muốn thực hiện một khối lệnh cho nhiều trường hợp khác nhau, ví dụ:
switch (x) {
case 1:
case 2:
case 3:
printf( "x is 1, 2 or 3");
break;
default:
printf( "x is not 1, 2 nor 3");


 
Chú ý rằng lệnh switch chỉ có thể được dùng để so sánh một biểu thức với các hằng. Vì vậy chúng ta không thể đặt các biến (case (n*2):) hay các khoảng (case (1..3):) vì chúng không phải là các hằng hợp lệ.
Nếu bạn cần kiểm tra các khoảng hay nhiều giá trị không phải là hằng số hãy kết hợp các lệnh if và else if






Bài tập luyện tập


1.  Declare two variables x and y. Assign values to these variables. Number x should be printed only if it 

is less than 2000 or greater than 3000, and number y should be printed only if it is between 100 and 500.

dịch: 1. Khai báo hai biến x và y. Gán giá trị cho các biến này. Số x nên chỉ khi nó được in
là ít hơn so với năm 2000 hoặc lớn hơn 3000, và số y sẽ được in chỉ khi nó là giữa 100 và 500.



Phân Tích Từng bước:
  • - khai báo số nguyên x,y
  • - yêu cầu nhập x,y
  • - nếu 2000 < x <3000
  •     - nếu đúng in ra x là số nằm giữa 2000 và 3000
  •     - nếu sai on ra x không phải số nằm giữa 2000 và 3000
  • - nếu 100< y < 500
  •     - nếu đúng in ra y là số nằm giữa 100 và 500
  •     -  nếu sai in ra y không phải số nằm giữa 100 và 500

Sơ đồ khối
kiem-tra-so-nam-giua
kiểm tra số nằm giữa



code:
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
 
 int x,y;
 printf("vao X, Y :");
 scanf("%d%d",&x,&y);
 
 if (2000<x && x<3000)
 {
  printf("X = %d la so nam giua 2000 va 3000",x);
 }
 else 
 {
  printf("X = %d khong phai la so nam giua 2000 va 3000",x);
 }
 
  if (100<y && y<500)
 {
  printf("\nY = %d la so nam giua 100 va 500",y);
 }
 else 
 {
  printf("\nY = %d khong phai la so nam giua 100 va 500",y);
 }
 
 printf("\n\n\n");
 system("pause");
 return 0;
}


chu-trang-bang-den
màn hình chạy chương trình





Bài 2.  Write a program to show your computer’s capabilities. The user types in a letter of the alphabet and your program should display the corresponding language or package available. Some sample input ans output is given below :



                           Input                                  Output

                           A or a                                Ada
                           B or b                                 Basic
                           C or c                                 COBOL
                           D or d                                dBASE III
                           f or F                                  Fortran
                           p or P                                 Pascal
                           v or V                                Visual C++
Using the ‘switch’ statement to choose and display the appropriate message. Use the
default label to display a message if the input does not match any of the above         
letters.



dịch: Viết chương trình hiển thị khả năng máy tính của bạn. Các loại sử dụng trong một bức thư của bảng chữ cái và các chương trình của bạn sẽ hiển thị các ngôn ngữ tương ứng hoặc gói sẵn. Sản lượng một số mẫu đầu vào ans được đưa ra dưới đây:

                           Input                                  Output
                           A or a                                Ada
                           B or b                                 Basic
                           C or c                                 COBOL
                           D or d                                dBASE III
                           f or F                                  Fortran
                           p or P                                 Pascal
                           v or V                                Visual C++

Sử dụng 'chuyển đổi' tuyên bố lựa chọn và hiển thị thông báo thích hợp. sử dụng nhãn mặc định để hiển thị một thông báo nếu đầu vào không phù hợp với bất kỳ ở trên chữ cái.

Phân tích từng bước:
  • - khai báo x là biến kí tự;
  • - vào x từ bàn phím
  • - witch với x và case là A a B a ....
  • - in ra giá trị tương ứng
  • - với default error.
sơ đồ khối:

in-chuoi-ki-tu
in chuỗi kí tự tương ứng

code:
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
 char x;
 printf("input: ");
 scanf("%c",&x);
 printf("%c",x);
 printf("\n\n\n");
 
 switch (x)
 { 
 case'a':
 case'A': 
 printf("Ada");
 break;
 case'b':
 case'B': 
 printf("Basic");
 break;
 case'c':
 case'C':
 printf("COBOL"); 
 break;
 case'd':
 case'D': 
 printf("dBASE III");
 break;
 case'f':
 case'F': 
 printf("Fortran");
 break;
 case'p':
 case'P': 
 printf("Pascal");
 break;
 case'v':
 case'V': 
 printf("Visual C++");
 break;
 default:
 printf("error");
 }
 
 printf("\n\n\n");
 system("pause");
 return 0;
}
switch-case
switch case


bài 3.  Accept values in three variables and print the highest value.

3. Chấp nhận giá trị trong ba biến và in giá trị cao nhất.


phân tích từng bước:
  • - khai báo i,j,k,l là biến số nguyên
  • - yêu cầu nhập vào 3 số i, j, k
  • - nếu i > j thì gán j = i
  • - nếu j > k thì gán k = j
  • - kết luận k là số cao to nhất 
sơ đồ khối:
tim-so-lon-nhat
tìm số lớn nhất

code:
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
 
 int i,j,k,l;
 printf("Nhap vao 3 so : ");
 scanf("%d%d%d",&i,&j,&k);
 if (i>j)
 {
  j=i;
 }
 if (j>k)
 {
  k=j;
 }
 
 printf("\nso lon nhat la %d",k);

 printf("\n\n\n");
 system("pause");
 return 0;
}


tim-so-lon-nhat
Tìm số lớn nhất



Kết Luận: dù là if-else hay switch - case thì cũng cho ra hướng giải quyết và kết quả như nhau... nên các bạn hãy dùng cấu trúc nào mà theo các bạn dễ dùng nhất... muốn nhanh gọn trong trường hợp so sánh nhiều thì dùng switch case còn không thì cứ if-else thì cũng chẳng làm sao cả