CỔNG ĐHQGHN  XEM ĐIỂM  Trang ChínhTrang Chính  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
Bài gửi sau cùng
Bài gửiNgười gửiThời gian
Happy new year 2013 dodacxuat_nuh Sat Dec 29, 2012 3:45 pm
Lâu rùi anh không thấy chú nào vào diễn đàn nữa hunghanam Mon May 07, 2012 9:26 am
Happy new year 2012. chien2311 Mon Jan 30, 2012 5:05 am
[color=red]Tin "Cực Hot" cho tất cả các bạn và người thân[/color] TranTai Wed Oct 05, 2011 4:44 am
Cách đổi lịch âm dương TranTai Mon Oct 03, 2011 2:24 am
lâu lâu rùi không lên diễn đàn lớp mình chém gió hunghanam Fri Sep 30, 2011 9:44 am
TRIỂN LÃM DU HỌC NHẬT BẢN 2010 Vừa học vừa làm thu nhập 1700USD/1 tháng samaccodon Wed Sep 28, 2011 8:00 am
Vừa đi làm, vừa làm cộng tác viên kiếm tiền... *pepe* Sun Aug 07, 2011 11:37 am
:(((((((((((((((((((((((((((((((((((((((((((((((((((((((( chien2311 Sat Aug 06, 2011 5:05 am
Khánh thành website học tiếng anh của Chiến samaccodon Fri Aug 05, 2011 10:30 am
Funy : Counter strike =)) Che..vankhe Mon Jul 25, 2011 10:43 am
Lịch học hè chien2311 Fri Jul 08, 2011 4:11 pm
Tổng hợp ảnh 24/06/2011 - Lễ tốt nghiệp samaccodon Wed Jul 06, 2011 9:17 am
Câu lạc bộ tiếng anh của Chiến - cơ hội giao lưu người bản xứ Che..vankhe Tue Jun 28, 2011 9:41 pm
[K52A3] CÔNG BỐ TÀI CHÍNH QUỸ LỚP (10/03/2011) samaccodon Thu Jun 23, 2011 5:35 pm
[VPK] DANH SÁCH TỐT NGHIỆP CHÍNH THỨC samaccodon Thu Jun 23, 2011 5:31 pm
[VPK] LỄ TRAO BẰNG TỐT NGHIỆP chien2311 Wed Jun 22, 2011 11:59 am
Pic 21/06 (new and hot) vuthaihoc Wed Jun 22, 2011 10:28 am
Gameloft Hà Nội tuyển dụng Che..vankhe Mon Jun 20, 2011 8:18 pm
[ CTCTSV ] 21 THÁNG 6 ĐI LẤY HỒ SƠ TỐT NGHIỆP chien2311 Sat Jun 18, 2011 9:38 am

Share | 
 

 Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
chien2311
Enterprise Admin
Enterprise Admin
avatar

Tổng số bài gửi : 1224
Sinh nhật : 23/11/1988

Bài gửiTiêu đề: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   Sat May 14, 2011 2:13 pm



Đây là bài giải theo phương pháp tư duy của người học ngôn ngữ C
Mình chia sẻ bài giải với các bạn

Tải về : Tại đây


bạn nào có phương án hay hơn thì chia sẻ nhé !
Về Đầu Trang Go down
Xem lý lịch thành viên
Che..vankhe
Đại Tổng Quản
Đại Tổng Quản
avatar

Tổng số bài gửi : 129
Sinh nhật : 09/07/1989

Bài gửiTiêu đề: Re: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   Sat May 14, 2011 6:02 pm

Xin thêm mấy chữ : Post code lên đây cho dễ xem, dành cho ai lười ko muốn download :D
Chương trình C :
(Chương trình ko cần chạy - ko cần quá chi tiết, cần hơn là thể hiện được ý tưởng của thuật giải, code sáng - gọn , dễ nhìn) ... :D
<pre>
#include <stdio.h>
#include <conio.h>
#include <alloc.h>

int *readfile(int N)
{
int i;
int *p;
FILE *f=fopen("DOTHI.IN","r");

if (f)
{
fscanf(f,"%d",&N);
p=(int*)calloc(100,sizeof(int));

if(p){
for (i=1;i<=N*N;i++)
fscanf(f,"%d",p+i);
return p;
}
}
fclose(f);
}

void writefile(int count,int i, int j, int k, int g,FILE *f)
{
if (count==0) fprintf(f,"%d",-1);
else { fprintf(f,"%d : %d %d %d %d\n",count,i,j,k,g);}
}

void clique4(int N,int *A)
{
int i,j,k,g;
int count=0;
FILE *f=fopen("CLIQUE4.OUT","w");
if (f)
{
for (i=1;i<=N-3;i++)
for (j=i+1;j<=N-2;j++)
if (*(A+i*N+j))
for (k=j+1;k<=N-1;k++)
if (*(A+i*N+k)&&*(A+j*N+k))
for (g=k+1;g<=N;g++)
if(*(A+i*N+g) && *(A+j*N+g) && *(A+k*N+g))
{
count++;
writefile(count,i,j,k,g,f);
}
if (!count) writefile(0,0,0,0,0,f);
}
fclose(f);
}

int main()
{
int *A;
int N=100;
A=readfile(N);
clique4(N,A);

puts("It's ok !");
getch();
return 0;
}

</pre>
HẾT - Chúc mọi người làm bài tốt nhé


p/s : làm thế nào cho cái thẻ code này nó dài ra nhở ;s
Về Đầu Trang Go down
Xem lý lịch thành viên
chien2311
Enterprise Admin
Enterprise Admin
avatar

Tổng số bài gửi : 1224
Sinh nhật : 23/11/1988

Bài gửiTiêu đề: Re: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   Sun May 15, 2011 4:20 am

Chú ý đoạn p=(int*)calloc(100,sizeof(int)); là để test, khi làm thay bằng cấp phát động :

p=(int*)calloc(N*N,sizeof(int)); sẽ chuẩn hơn, con trỏ và cấp phát động mà :D
Về Đầu Trang Go down
Xem lý lịch thành viên
dat_tn_89nd
Quan Chi Phủ
Quan Chi Phủ
avatar

Tổng số bài gửi : 44
Sinh nhật : 17/12/1989

Bài gửiTiêu đề: Re: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   Sun May 15, 2011 9:40 am

Me thag Chien lam sai roi p=(int*)malloc((n*n)*sizeof(int));
Về Đầu Trang Go down
Xem lý lịch thành viên
BurNova
Trạng Nguyên
Trạng Nguyên
avatar

Tổng số bài gửi : 8
Sinh nhật : 18/11/1988

Bài gửiTiêu đề: Re: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   Sun May 15, 2011 10:57 pm

Dung vong lap ma cap phat dong. VD nhu ma tran mxn thi cap phat m hang truoc, roi voi moi hang thi cap phat n cot. malloc dung cho dsmn con calloc dung cho mang, tach ra nhu the de nho hon nhieu.
Về Đầu Trang Go down
Xem lý lịch thành viên
hunghanam
Quan Nhất Phẩm
Quan Nhất Phẩm
avatar

Tổng số bài gửi : 129
Sinh nhật : 05/11/1989

Bài gửiTiêu đề: Re: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   Tue May 17, 2011 2:36 pm

EM CHIA SẺ MỘT TÍ CÁC BÁC NÀO MÀ KÉM MỘT TÍ THÌ COI BÀI C NÈ TUI LÀM CHO DỄ HIỂU CHƯA DÙNG CẤP PHÁT ĐỘNG VÀ CON TRỎ GÌ CẢ CỨ VẬY ĐỌC THUI. sAU ĐÓ ĐỌC BÀI VIẾT DƯỚI CÁC BÁC CHUYỂN SANG CẤP PHÁT ĐỘNG VÀ CON TRỎ NHÉ. MÌNH LÀM BÀI NÀY CHỈ THEO MẢNG KHÔNG ĐỂ CÁC BẠN HỌC C KHÔNG ĐƯỢC TỐT LẮM CÓ THỂ DỄ THEO DÕI KA KA :d
1. cấp phát động:
Ngôn ngữ c dùng có bốn hàm liên quan đến cấp phát động, cụ thể là:

- malloc
- calloc
- realloc
- free

chỉ cần dùng thằng malloc và thằng calloc thui mà cũng chỉ cần dùng thằng calloc là đủ rùi
cú pháp void* calloc(size_t nitem, size_t size);
ví dụ: xin cấp phát cho mảng 10 phần tử ta làm như sau
int *x,n;
x=(int *)calloc(n,sizeof(int))
n=10=> là số phần tử cần cấp phát, sizeof(int) là kích thước của mỗi phần tử
đây là bài cụ thể cấp phát động tui làm:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

int *x,n,m;
void nhap_mt()
{
int *p;
printf("nhap vao so phan tu cua ma tran:\n");
x=(int *)calloc(n*m,sizeof(int));
if(!x)
{
printf("khong cap phat duoc bo nho \n");
getch();
}
for(p=x;p<x+n*m;p++)
{
scanf("%d",p);
}
}
void in_mt()
{
printf("mang vua nhap vao co dang:\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
printf("%5d",*(x+i*m+j));
}
printf("\n");
}
}
void tong_hang(int c)
{
int tong;
tong =0;
printf("chuong trinh tinh tong hang thu c cua ma tran nhap vao tu ban phim:\n");
for(int j=0;j<m;j++)
{
tong =tong+*(x+c*m+j);
}
printf("tong cua hang thu %d la %d",c,tong);
printf("\n");
}
void tong_cot(int d)
{
int tong;
tong =0;
printf("chuong trinh tinh tong cot thu d cua ma tran nhap vao tu ban phim:\n");
for(int i=0;i<n;i++)
{
tong =tong+*(x+i*m+d);
}
printf("tong cua hang cot %d la %d",d,tong);
printf("\n");
}
int main()
{
int t,hang,cot;
printf("chuong trinh cap phat dong cho mang hai chieu:\n");
printf("********************************************\n");
printf("nhap vao n=");scanf("%d",&n);
printf("\n");
printf("nhap vao m=");scanf("%d",&m);
printf("\n");
nhap_mt();
in_mt();
printf("nhap vao hang thu h=");scanf("%d",&hang);
tong_hang(hang);
printf("nhap vao cot thu c=");scanf("%d",&cot);
tong_cot(cot);
getch();
return 0;
}
2. đọc file phần nì quan trọng ka ka :))
chỉ cần quan tâm tên file là gì và cấu trúc file ra sao với mở ra để đọc hay ghi thui ka ka:))
FILE *f;
f=fopen("tên file","r"); ở đây "r": là đọc file văn bản
f=fopen("tên file","w"); ở đây "r": là ghi file văn bản
sau đây là đoạn chương trình đọc file và ghi file tham khảo nhé:
void doc_file()
{
int tg;
f=fopen("dothi.txt","r");
if(!f){printf("co loi khong doc duoc file:\n");getch();}
fscanf(f,"%d",&n);
for(int i=1;i<=n;i++)
{
for(int j =1;j<=n;j++)
{
fscanf(f,"%d",&tg);
a[i][j]=tg;
}
}
printf("\n doc file thanh cong:\n");
}

Cuối cùng là chương trình lập trình bài của K51 làm theo kiểu Amater không thuật toán dùng 4 vòng for nhưng đúng theo yêu cầu của đề bài

// de thi K51
#include<conio.h>
#include<stdio.h>
#include<math.h>
FILE *f;
int n,a[10][10];
void doc_file()
{
int tg;
f=fopen("dothi.txt","r");
if(!f){printf("co loi khong doc duoc file:\n");getch();}
fscanf(f,"%d",&n);
for(int i=1;i<=n;i++)
{
for(int j =1;j<=n;j++)
{
fscanf(f,"%d",&tg);
a[i][j]=tg;
}
}
printf("\n doc file thanh cong:\n");
}
void baitoan()
{
for(int i=1;i<=n;i++)
{
printf("do thi 4 bat dau bang dinh %d\n");
for(int j=1;j<=n;j++)
{
if(j!=i&&(a[i][j]==1||a[j][i]==1))
{
for(int k=1;k<=n;k++)
{
if(k!=i&&k!=j&&(a[k][j]==1||a[j][k]==1))
{
for(int g=1;g<=n;g++)
{if(g!=i&&g!=j&&g!=k&&(a[k][g]==1||a[g][k]==1))

{printf("%2d%2d%2d%2d",i,j,k,g);printf("\n");}

} printf("\n");
}
}

}
}
}
}
int main()
{
doc_file();
printf("\ cac do thi co 4 dinh la:\n");
baitoan();
getch();
return 0;
}
các bác chụi khó chuyển nó dùng cấp phát động và con trỏ với mảng 2 chiều nhé
thank`s vì đã đọc !
mọi ý kiến đóng góp xin gửi về địa chỉ :levanhung.hus@gmail.com hoặc levanhung_357
Về Đầu Trang Go down
Xem lý lịch thành viên
dat_tn_89nd
Quan Chi Phủ
Quan Chi Phủ
avatar

Tổng số bài gửi : 44
Sinh nhật : 17/12/1989

Bài gửiTiêu đề: Re: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   Tue May 17, 2011 8:27 pm

Xin gop vui bai Clique :D

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

void docdl(int *a,int &n)
{
int i,j;
FILE *f=fopen("DOTHI.IN","r");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
fscanf(f,"%d",a+i*n+j);
}
fclose(f);
}
void indl(int *a,int n)
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%3d",*(a+i*n+j));
}
printf("\n");
}
}
int test(int *a, int i, int j, int k, int l, int n)
{
if(*(a+i*n+j) && *(a+j*n+k) && *(a+k*n+l) && *(a+l*n+i))
return 1;
return 0;
}
void dothi(int *a,int n)
{
int i,j,k,l;
int d=0;
for(i=1;i<=n-3;i++)
for(j=i+1;j<=n-2;j++)
for(k=j+1;k<=n-1;k++)
for(l=k+1;l<=n;l++)
{
if(test(a,i,j,k,l,n)==1)
{
d++;
printf("Clique:%d\n",d);
printf("%3d-%3d-%3d-%3d\n",i,j,k,l);
}
}
if(d==0) printf("-1");
}
int main()
{
int *a;
int n;
a=(int *)malloc((n*n)*sizeof(int));
docdl(a,n);
indl(a,n);
dothi(a,n);
getch();
}

Về Đầu Trang Go down
Xem lý lịch thành viên
Che..vankhe
Đại Tổng Quản
Đại Tổng Quản
avatar

Tổng số bài gửi : 129
Sinh nhật : 09/07/1989

Bài gửiTiêu đề: Re: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   Sat May 21, 2011 10:15 pm

Tớ mới code bài tìm điểm yên ngựa trong ma trận, thuật toán thì ko có j
Mọi người xem cách trình bày xem, có j góp ý cái ;)
Thanks ! :-*
/*
Bai toan tim diem yen ngua cua ma tran
Input : File DIEMYENNGUA.IN
co m+1 dong: dong 1 ghi m,n la kich thuoc ma tran
m dong tiep theo ghi ma tran m.n
Output: File DIEMYENNGUA.OUT
ghi 2 so i,j la toa do cua diem yen ngua
Nếu không có ghi -1
*/

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

int * readFile(int *n,int *m)
{
        int i,j,t;// khai bao len dau ham
      FILE *f = fopen ("DIEMYENNGUA.IN","r");
      if(!f)
      {
            printf("\n Khong mo duoc FILE");
            getch();
            exit(0);
      }
      fscanf(f,"%d%d",m,n);// doc vao kich thuoc ma tran

      int *A = (int*)calloc(*m * *n+1,sizeof(int));
      for(i=0;i< *m;i++)
          for(j=0;j< *n;j++)
          {
            fscanf(f,"%d",&t);
            *(A+i*(*n)+j) = t;
          }
      fclose(f);
      return A;
}
// Ham in(A,m,n) nay chi de test, khi lam bai cac ban ko can viet
void in(int *A,int m,int n)
{
      int i,j;
      for(i=0;i<m;i++)
      for(j=0;j<n;j++)
      {
            if(j==0) puts("");
            printf("%4d",*(A+i*n+j));
      }
}

void Output(int nHang,int nCot)
{
      FILE *f = fopen("DIEMYENNGUA.OUT","w");
      if(!f)
      {
            printf("Khong the tao file");
            getch();
            exit(0);
      }
      if(nHang >=0)
            fprintf(f,"%d %d",nHang+1,nCot+1);
      else
            fprintf(f,"%d",-1);
      fclose(f);
      printf("\n\n All done..");
}
void YenNgua(int *A,int m,int n)
{
      int i,j,k,jmin,min=0;
      for(i=0;i<m;i++)
      {
            // Tim min cua hang
            min = *(A+i*n+0);// ban dau gan min hang = phan tu dau tien trong hang
            jmin = 0; // danh dau gia tri min nam o vi tri jmin
            for(j=0;j<n;j++)
            if(*(A+i*n+j)< min)
            {
                  min = *(A +i*n+j) ;
                  jmin = j ;
            }
      //kiem tra gia tri min co phai la max cot hay ko ?
            for(j=0;j<m;j++)
            if(*(A+j*n+jmin) > min)
                break;
            if(j==m)// ko co phan tu nao tren cot jmin lon hon min hang i
            {
            // tim thay diem yen ngua
                  Output(i,jmin);
                  break;
            }
      }
      if(i==m)
          Output(-1,-1);
}
int main()
{
      int m,n;
      int *A;
      A = readFile(&n,&m);
      //in(A,m,n);
      YenNgua(A,m,n);
      //getch();
}
Về Đầu Trang Go down
Xem lý lịch thành viên
vuthaihoc
Quan Nhất Phẩm
Quan Nhất Phẩm
avatar

Tổng số bài gửi : 275
Sinh nhật : 08/01/1989

Bài gửiTiêu đề: Re: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   Mon May 23, 2011 10:15 am

hunghanam đã viết:

1. cấp phát động:
Ngôn ngữ c dùng có bốn hàm liên quan đến cấp phát động, cụ thể là:

- malloc
- calloc
- realloc
- free
Lôi thêm cái này để điên đầu à
Về Đầu Trang Go down
Xem lý lịch thành viên
vuthaihoc
Quan Nhất Phẩm
Quan Nhất Phẩm
avatar

Tổng số bài gửi : 275
Sinh nhật : 08/01/1989

Bài gửiTiêu đề: Re: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   Mon May 23, 2011 10:16 am

Nghĩa thêm file minh họa để tét nhé
Về Đầu Trang Go down
Xem lý lịch thành viên
VoTienKhoangHau
Trạng Nguyên
Trạng Nguyên
avatar

Tổng số bài gửi : 4
Sinh nhật : 10/10/1989

Bài gửiTiêu đề: Re: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   Thu May 26, 2011 8:47 pm

Trong buổi ôn tập môn ng2 lập trình, thầy Vĩnh có nhắc về ôn phần bt hậu tố, mọi người xem bài này tham khảo xem :)
/*
Cho bieu thuc hau to tu File, moi toan hang / toan tu cach nhau boi 1 dau cach
VD:INPUT : 2 3 + 6 * 8 3 - *
OUTPUT : 150
(gia tri cua bieu thuc)
*/


#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void push(int x,float s[],int *n)
{
      *n +=1;
      s[*n] = x;
}
float pop(float s[],int *n)
{
      float t= s[*n];
      *n -=1;
      return t;
}
float readFile()
{
      int n = 0 ;
      float s[100],a=0,b=0;
      char x[100];
      FILE *f =fopen("HauTo.INP","r");
      if(!f)
      {
            printf("\n Can't open File");
            getch();
            exit(0);
      }
      int i =0 ;
      while(!feof(f))
      {
            i ++;
            fscanf(f,"%s ",x);
            printf("\n Doc s = %s",x);
            if(strlen(x)==1 && x[0]=='+')
            {
                  a = pop(s,&n);
                  b = pop(s,&n);
                  printf("\n %f + %f ",a,b);
                  push(a+b,s,&n);
            }

            else if(strlen(x)==1 && x[0]=='*')
            {
                  a = pop(s,&n);
                  b = pop(s,&n);
                  printf("\n %f * %f ",a,b);
                  push(a*b,s,&n);
            }
            else if(strlen(x)==1 && x[0]=='-')
              {
              a = pop(s,&n);
              b = pop(s,&n);
              printf("\n %f * %f ",a,b);
              push(b-a,s,&n); //
            }
            else if(strlen(x)==1 && x[0]=='/')
            {
            a = pop(s,&n);
            b = pop(s,&n);
            printf("\n %f * %f ",a,b);
            push(b/a,s,&n);
            }
            else
            {
            a = atof(x);
            push(a,s,&n);
            }
      }
      printf("%f",s[n]);
      fclose(f);
      return s[n];
}
void output(float a)
{
      FILE *f =fopen("HauTo.OUT","w");
      if(!f)
      {
            printf("\n Can't open File");
            getch();
            exit(0);
      }
      fprintf(f,"%f",a);
      fclose(f);
}
int main()
{
      float result = readFile();
      output(result);
      getch();
}
Về Đầu Trang Go down
Xem lý lịch thành viên
Sponsored content




Bài gửiTiêu đề: Re: Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C   

Về Đầu Trang Go down
 
Chia sẻ phương án làm bài đề thi ngôn ngữ lập trình C
Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» Chia sẻ nick facebook cho nhau =))
» Games Cộng Trừ Nhân Chia
» [26/5/15][News] PD của Running Man chia sẻ về buổi ghi hình cùng BIGBANG
» Các bài toán chạy tàu
» Độ ngập nước chân vịt

Permissions in this forum:Bạn không có quyền trả lời bài viết
DIỄN ĐÀN TOÁN TIN :: CÁC VẤN ĐỀ CHUNG :: THÔNG BÁO-
Chuyển đến 
Free forum | © phpBB | Free forum support | Liên hệ | Report an abuse | Create your own blog