Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Bài tập C | Ma trận xoắn ốc trong C?

  1. #1
    Ngày gia nhập
    08 2008
    Bài viết
    36

    Mặc định Bài tập C | Ma trận xoắn ốc trong C?

    Em đã đọc nhiều bài viết về Ma Trận Xoắn Ốc trên Diễn Đàn nhưng mà vẫn không có bài nào hiểu cả.
    Em mới học C.
    CHỉ học tới mấy câu lệnh for và while, còn hàm chưa học.

    Đọc mấy anh chị làm toàn là C++, em không hỉu, còn C thì Void nhap... gì gì đó thì em không hỉu.

    Chưa học tới mà thầy bảo là chỉ cần làm như thế:

    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    clrscr();
    int i,j,m,n,a[20][20];


    Chỉ khai báo đơn giản, dùng for printf, scanf, while, if để có thể sắp xếp ma trận Xoắn Ốc.

    Em làm mấy không ra.

    Rất mong anh chị giúp em cái bài tập này với ạ.

    Viết bằng C ạ.
    Em xin cám ơn trước. Rất mong nhận được giúp đỡ mọi người.

    Em xin HẬU cám ơn chứ hổng có TẠ được

  2. #2
    Ngày gia nhập
    08 2008
    Bài viết
    36

    Hic hic, các cao thủ không thể giúp em được với ạ.
    Hoặc có thể đọc bài viết ở diễn đàn rồi giải thích cho em với

  3. #3
    No Avatar
    Mr.Kjng Khách

    Ý bài của bạn chỉ cần dùng vòng lặp là okj.Bài này mình đã làm rùi.Nhưng mà mình viết trên pascal.Bạn có thể tự chuyển đổi sang C nhá.
    Pascal Code:
    1. program vd;
    2.   uses crt;
    3.     var a:array[1..20,1..20] of integer;
    4.     b,c:array[1..400] of integer;
    5.     i,j,n,m,d,tg,l,e:integer;
    6.  begin
    7.     clrscr;
    8.       writeln(' nhap vao m,n '); readln(m,n);
    9.         for i:=1 to n do
    10.           for j:=1 to m do
    11.              begin
    12.               write(' nhap vao a[',i,j,']=');
    13.               readln(a[i,j]);
    14.               end;
    15.     writeln; d:=1;
    16.        for i:=1 to n do
    17.           for j:=1 to m do
    18.              begin
    19.                   b[d]:=a[i,j];
    20.                   d:=d+1;
    21.              end;
    22.          for i:=1 to n do
    23.            begin
    24.              for j:=1 to m do
    25.                 write(a[i,j]:4);
    26.                 writeln;
    27.             end; writeln;
    28.           for i:=1 to d-1 do
    29.               for j:=i+1 to d-1 do
    30.                     if b[i]>b[j] then
    31.                         begin
    32.                             tg:=b[i];
    33.                             b[i]:=b[j];
    34.                             b[j]:=tg;
    35.                         end;
    36.      writeln; i:=1; j:=1; l:=0;
    37.  repeat
    38.      begin
    39.       l:=l+1; e:=1; if l>2 then e:=l-1;
    40.          while e<=m-l do
    41.             begin
    42.               c[j]:=b[i]; j:=j+1; i:=i+1; e:=e+1; if i>m*n then break;
    43.             end; if i>m*n then break; e:=l;
    44.          while e<=n-l do
    45.              begin
    46.                c[j]:=b[i]; j:=j+m; i:=i+1; e:=e+1; if i>m*n then break;
    47.              end; if i>(m*n) then break; e:=l;
    48.           while e<=m-l do
    49.              begin
    50.                c[j]:=b[i]; j:=j-1; i:=i+1; e:=e+1;if i>m*n then break;
    51.              end; if i>(m*n) then break; if n=2 then e:=1 else e:=l+1;
    52.           while e<=n-l do
    53.              begin
    54.                c[j]:=b[i]; j:=j-m; i:=i+1; e:=e+1; if i>m*n then break;
    55.              end;  if i>(m*n) then break;
    56.        end;
    57.   until 1>2;
    58.         writeln;
    59.     d:=1;
    60.   for i:=1 to n do
    61.      for j:=1 to m do
    62.          begin
    63.            a[i,j]:=c[d];
    64.            d:=d+1;
    65.          end;
    66.    writeln;
    67.   for i:=1 to n do
    68.     begin
    69.      for j:=1 to m do
    70.        write(a[i,j]:4);
    71.        writeln;
    72.        end;
    73. readln;
    74. end.

  4. #4
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Share cho bạn cái code H làm khi mới học.
    C Code:
    1. /*Author: QuangHoang
    2.  *File: MatrixXoay.c
    3.  *Date: Unknown - edit 20081116
    4.  */
    5. #include <stdio.h>
    6.  
    7. void hoang(int a[][100],int m, int n,int x,int *t);
    8.  
    9. int main()
    10. {
    11.      int m,n,i,j;
    12.      int a[100][100];
    13.      printf("\n- Nhap so hang: ");scanf("%d",&m);
    14.      printf("\n- Nhap so cot: ");scanf("%d",&n);
    15.      int t=1,x=1,m1=m,n1=n;
    16.      while(m1>m/2)
    17.      {
    18.           hoang(a,m1,n1,x,&t);
    19.           x++;m1--;n1--;
    20.      }
    21.      if (m==n && m%2!=0) a[m/2+1][n/2+1]=t;  //TH: dac biet
    22.      for(i=1;i<=m;i++)
    23.      {
    24.           for(j=1;j<=n;j++)
    25.                printf("%4d",a[i][j]);
    26.           printf("\n");
    27.      }
    28. }
    29.  
    30. void hoang(int a[][100],int m, int n,int x,int *t)
    31. {
    32.      int i=x,j=x;
    33.           while (j<n)
    34.           {
    35.                a[i][j++]=*t;
    36.                (*t)++;
    37.           }
    38.           while (i<m)
    39.           {
    40.                a[i++][j]=*t;
    41.                (*t)++;
    42.           }
    43.           while (j>x)
    44.           {
    45.                a[i][j--]=*t;
    46.                (*t)++;
    47.           }
    48.           while (i>x)
    49.           {
    50.                a[i--][j]=*t;
    51.                (*t)++;
    52.           }
    53. }
    54.  
    55. /*
    56. VD: m=4,n=5
    57.      1  2  3  4  5
    58.     14 15 16 17  6
    59.     13 20 19 18  7
    60.     12 11 10  9  8
    61. */

  5. #5
    Ngày gia nhập
    08 2008
    Bài viết
    36

    Trích dẫn Nguyên bản được gửi bởi Mr.Kjng Xem bài viết
    Ý bài của bạn chỉ cần dùng vòng lặp là okj.Bài này mình đã làm rùi.Nhưng mà mình viết trên pascal.Bạn có thể tự chuyển đổi sang C nhá.
    Pascal Code:
    1. program vd;
    2.   uses crt;
    3.     var a:array[1..20,1..20] of integer;
    4.     b,c:array[1..400] of integer;
    5.     i,j,n,m,d,tg,l,e:integer;
    6.  begin
    7.     clrscr;
    8.       writeln(' nhap vao m,n '); readln(m,n);
    9.         for i:=1 to n do
    10.           for j:=1 to m do
    11.              begin
    12.               write(' nhap vao a[',i,j,']=');
    13.               readln(a[i,j]);
    14.               end;
    15.     writeln; d:=1;
    16.        for i:=1 to n do
    17.           for j:=1 to m do
    18.              begin
    19.                   b[d]:=a[i,j];
    20.                   d:=d+1;
    21.              end;
    22.          for i:=1 to n do
    23.            begin
    24.              for j:=1 to m do
    25.                 write(a[i,j]:4);
    26.                 writeln;
    27.             end; writeln;
    28.           for i:=1 to d-1 do
    29.               for j:=i+1 to d-1 do
    30.                     if b[i]>b[j] then
    31.                         begin
    32.                             tg:=b[i];
    33.                             b[i]:=b[j];
    34.                             b[j]:=tg;
    35.                         end;
    36.      writeln; i:=1; j:=1; l:=0;
    37.  repeat
    38.      begin
    39.       l:=l+1; e:=1; if l>2 then e:=l-1;
    40.          while e<=m-l do
    41.             begin
    42.               c[j]:=b[i]; j:=j+1; i:=i+1; e:=e+1; if i>m*n then break;
    43.             end; if i>m*n then break; e:=l;
    44.          while e<=n-l do
    45.              begin
    46.                c[j]:=b[i]; j:=j+m; i:=i+1; e:=e+1; if i>m*n then break;
    47.              end; if i>(m*n) then break; e:=l;
    48.           while e<=m-l do
    49.              begin
    50.                c[j]:=b[i]; j:=j-1; i:=i+1; e:=e+1;if i>m*n then break;
    51.              end; if i>(m*n) then break; if n=2 then e:=1 else e:=l+1;
    52.           while e<=n-l do
    53.              begin
    54.                c[j]:=b[i]; j:=j-m; i:=i+1; e:=e+1; if i>m*n then break;
    55.              end;  if i>(m*n) then break;
    56.        end;
    57.   until 1>2;
    58.         writeln;
    59.     d:=1;
    60.   for i:=1 to n do
    61.      for j:=1 to m do
    62.          begin
    63.            a[i,j]:=c[d];
    64.            d:=d+1;
    65.          end;
    66.    writeln;
    67.   for i:=1 to n do
    68.     begin
    69.      for j:=1 to m do
    70.        write(a[i,j]:4);
    71.        writeln;
    72.        end;
    73. readln;
    74. end.
    Em chưa được học pascal.
    Cấp 3 chưa được học, mới vào sinh viên không hỉu gì cả.
    Rất mong a có thể chuyển qua C cho em với ạ,

  6. #6
    Ngày gia nhập
    08 2008
    Bài viết
    36

    Mặc định Bài tập C | Ma trận xoắn ốc trong C?

    Trích dẫn Nguyên bản được gửi bởi QuangHoang Xem bài viết
    Share cho bạn cái code H làm khi mới học.
    C Code:
    1. /*Author: QuangHoang
    2.  *File: MatrixXoay.c
    3.  *Date: Unknown - edit 20081116
    4.  */
    5. #include <stdio.h>
    6.  
    7. void hoang(int a[][100],int m, int n,int x,int *t);
    8.  
    9. int main()
    10. {
    11.      int m,n,i,j;
    12.      int a[100][100];
    13.      printf("\n- Nhap so hang: ");scanf("%d",&m);
    14.      printf("\n- Nhap so cot: ");scanf("%d",&n);
    15.      int t=1,x=1,m1=m,n1=n;
    16.      while(m1>m/2)
    17.      {
    18.           hoang(a,m1,n1,x,&t);
    19.           x++;m1--;n1--;
    20.      }
    21.      if (m==n && m%2!=0) a[m/2+1][n/2+1]=t;  //TH: dac biet
    22.      for(i=1;i<=m;i++)
    23.      {
    24.           for(j=1;j<=n;j++)
    25.                printf("%4d",a[i][j]);
    26.           printf("\n");
    27.      }
    28. }
    29.  
    30. void hoang(int a[][100],int m, int n,int x,int *t)
    31. {
    32.      int i=x,j=x;
    33.           while (j<n)
    34.           {
    35.                a[i][j++]=*t;
    36.                (*t)++;
    37.           }
    38.           while (i<m)
    39.           {
    40.                a[i++][j]=*t;
    41.                (*t)++;
    42.           }
    43.           while (j>x)
    44.           {
    45.                a[i][j--]=*t;
    46.                (*t)++;
    47.           }
    48.           while (i>x)
    49.           {
    50.                a[i--][j]=*t;
    51.                (*t)++;
    52.           }
    53. }
    54.  
    55. /*
    56. VD: m=4,n=5
    57.      1  2  3  4  5
    58.     14 15 16 17  6
    59.     13 20 19 18  7
    60.     12 11 10  9  8
    61. */
    Anh có thể giúp em chuyển qua mà không dùng HÀM được không..
    Em kém quá

Các đề tài tương tự

  1. Ma trận xoắn ốc | Ma trận xoắn chôn ốc
    Gửi bởi AlexF trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 21
    Bài viết cuối: 04-05-2013, 12:41 AM
  2. Bài tập C | Ma trận xoắn chôn ốc trong C
    Gửi bởi tampointer trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 22
    Bài viết cuối: 28-04-2013, 09:25 PM
  3. Bài tập C Điền các số của 1 ma trận bất kì theo hình xoắn ốc với lập trình C
    Gửi bởi dzuncoi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 05-08-2011, 11:58 PM
  4. Bài tập C++ Tạo ma trận hình xoắn ốc 8x8
    Gửi bởi xoycontinue trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 09-05-2011, 09:51 PM
  5. Ma Trận xoắn ốc | Sắp xếp ma trận xoắn ốc!!!!!!
    Gửi bởi xongvaoday trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 03-05-2009, 01:08 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn