giúp mình bài tập c này với

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi Drmar, 30/11/08.

  1. Drmar

    Drmar Youtube Master Race

    Tham gia ngày:
    30/11/08
    Bài viết:
    9
    write a program to accept a string and find out if it is a palindrome
     
  2. Drmar

    Drmar Youtube Master Race

    Tham gia ngày:
    30/11/08
    Bài viết:
    9
    đây là code mình viết
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <string.h>

    void main(){
    char s[50];
    int i, d, n, j;
    printf("\nNhap chuoi : ");
    scanf("%c", s);

    d = strlen(s);
    n = d/2;
    for(i = 0, j = d ; i < n; i++ , j--)
    {
    if(s == s[j])
    printf("\npalindrome");
    }
    printf("\nnot palindrome");
    }

    ko biết sai chổ nào xin các pro chỉ ra giúp
     
  3. Masteraga

    Masteraga Donkey Kong

    Tham gia ngày:
    14/7/05
    Bài viết:
    327
    Palindrome nghĩa là gì?

    -Thêm dòng break ra ngoài vòng lặp.
     
  4. nhatanh

    nhatanh Samus Aran the Bounty Hunter Lão Làng GVN

    Tham gia ngày:
    19/5/04
    Bài viết:
    6,456
    Nơi ở:
    Outworld
    chuỗi palindrome là một chuỗi đối xứng, đọc xuôi = ngược
    đầu tiên là bỏ cái
    Mã:
    {
    if(s[i] == s[j])
    printf("\npalindrome");
    }
    đi
    thay bằng
    Mã:
    if (s[i]!=s[j])
    {printf("NO");
     return;
    }
    
    cái ngoài vòng lặp thì ghi là YES
    cái thứ 2 nữa là thay "%c" bằng "%s"

    ko thì xem code của tớ, đọc vào và in ra file(quen rồi, đọc ghi = màn hình thấy hơi khó chịu:D thông cảm nhé)
    Mã:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <io.h>
    FILE *f;
    char s[50];
    
    void open()
    {int i,j;
    f = fopen("sample.inp","rt");
    fscanf(f,"%s",s);
    fclose(f);
    }
    
    
    void process()
    { int i,j;
      f = fopen("sample.out","wt");
      for(i = 0,j = strlen(s)-1;i<=(strlen(s)-1)/2; i++,j--)
      if (s[i]!=s[j])
      {fprintf(f,"NO");
       fclose(f);
       return;
      }  
      fprintf(f,"YES");
      fclose(f);
    }
    
    void main()
    { open();
     process();
    
    }
    
     
  5. Drmar

    Drmar Youtube Master Race

    Tham gia ngày:
    30/11/08
    Bài viết:
    9
    thank mấy bác giờ mình đã hiểu thuốc fugaca zit trừ g\iun như thế nào gồi
    .
    ___________Auto Merge________________

    .
    ah cái code của nhatanh minh ko hỉu cai :
    FILE *f;
    f = fopen("sample.inp","rt");
    fscanf(f,"%s",s);
    fclose(f);
    mấy cái này co tác dung gì
    xin chỉ giáo
     
  6. nhatanh

    nhatanh Samus Aran the Bounty Hunter Lão Làng GVN

    Tham gia ngày:
    19/5/04
    Bài viết:
    6,456
    Nơi ở:
    Outworld
    cái đấy là đọc dữ liệu vào từ file, có gì lạ đâu:))
     
  7. toi5

    toi5 Try Hard Moderator Lão Làng GVN

    Tham gia ngày:
    27/5/03
    Bài viết:
    6,866
    người ta chưa học nên thấy lạ;))..............
     
  8. Magic_fantasy

    Magic_fantasy Mr & Ms Pac-Man

    Tham gia ngày:
    22/6/06
    Bài viết:
    213

    Bài này bạn còn sai nhiều lỗi lắm:
    1.scanf("%c", s): Nếu dùng %c thì chỉ đọc được 1 kí tự thôi,với lại dùng scanf phải có &.Nhưng nếu dùng scanf("%s", &s) thì nếu chuỗi có khoảng trắng bạn sẽ không đọc được khoảng trắng.Tốt nhất nên dùng gets(s).
    2.d = strlen(s);Nếu d= độ dài chuỗi thì s[d] sẽ bằng NULL.
    for(i = 0, j = d ; i < n; i++ , j--) nên sửa lại là for(i = 0, j = d -1; i < n; i++ , j--)
    3.Giả sử nếu bạn đã sửa 2 lỗi trên thi chương trình trên vẫn sai và kết quả là bạn sẽ xuất ra
    "palindrome" rất nhiều lần và cuối cùng là "not palindrome".
    Đoạn sau tốt nhất nên sửa như vầy:
    i = 0, j = d -1;
    while(i<j&&s==s[j])
    {
    i++;
    j--;
    }
    if(i>=j)
    printf("\npalindrome");
    else
    printf("\nnot palindrome");

    P/s:Có sai sót gì xin chỉ dạy
     
  9. Drmar

    Drmar Youtube Master Race

    Tham gia ngày:
    30/11/08
    Bài viết:
    9
    Write a C program to reverse a character aray using pointer
    Đây là code mình viết
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <string.h>

    void main(){
    char *p;
    char temp, n;
    int i, j;

    printf("\nEnter your text : ");
    scanf("%s", n);
    printf("\nYour text is : %s", n);

    p = (char*)malloc(n*sizeof(char));

    for(i = 0 ; i < strlen(n)-1 ; i++)
    {
    for(j = i+1 ; j < strlen(n) ; j++)
    {
    temp = *(p+i);
    *(p+i)=*(p+j);
    *(p+j)=temp;
    }
    }

    free(p);

    for(i = 0 ; i < strlen(n) ; i++)
    {
    printf("The text is reversed is : %s",*(p+i));
    }
    getch();
    }
    Khi chạy ct thi vẫn ra file exe nhưng mà báo đống lỗi và run cai exe đó thi no lai bao debug
    khi mình thay cái strlen(n) = strlen (p) thi chay ko báo lỗi nhung cũng bị debug
    Bạn nào biết giai thích hộ mình , và mình nên sữa như thế nào
     
  10. not_lucky1988

    not_lucky1988 Mr & Ms Pac-Man

    Tham gia ngày:
    4/4/08
    Bài viết:
    275
    Nơi ở:
    Ba Tư
    Chưa chạy thử nhưng mà thấy bạn khai báo char n mà lại dùng scanf("%s", n);
    Mà in ra xâu đảo ngược cũng không cần phức tạp như thế:
    Mã:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void main()
      { clrscr();
        char *n;
        int i;
    
        printf("\nEnter your text : ");
        gets(n);
    
        printf("\nYour text is : %s\n", n);
    
        printf("The text is reversed is: ",n);
    
        for(i = strlen(n) ; i >= 0 ; i--)
           printf("%c",*(n+i));
    
        getch();
      }
    Hình như bài trên không đúng yêu cầu, bài đảo ngược chuỗi nè:
    Mã:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void main()
    { clrscr();
    char *n,temp;
    int i,j;
    
    
    printf("\nEnter your text : ");
    gets(n);
    printf("\nYour text is : %s\n", n);
    for(i=0,j=strlen(n)-1;i<(strlen(n)/2);i++,j--)
    	{ temp=*(n+i);
    	  *(n+i)=*(n+j);
    	  *(n+j)=temp;
    	}
    
    printf("The text is reversed is: %s",n);
    
    getch();
    }
     
  11. Magic_fantasy

    Magic_fantasy Mr & Ms Pac-Man

    Tham gia ngày:
    22/6/06
    Bài viết:
    213
    1.Có lẻ bạn chưa hiểu thế nào la chuỗi thế nào là kí tự
    -Chuỗi là 1 mảng kí tự
    char temp, n;
    scanf("%s", n);
    nếu bạn muốn đọc chuỗi thì phải khai báo char *n hoặc char n[200]
    2.strlen(n) = strlen (p)
    hàm strlen() là 1 hàm có giá trị trả về với lại chỉ có biến mới đuợc gán giá trị thôi
     
  12. Drmar

    Drmar Youtube Master Race

    Tham gia ngày:
    30/11/08
    Bài viết:
    9
    Mình dùng scanf() là để có thể dung thằng malloc để xin cấp đủ vùng bộ nhớ chứ không , theo minh hiểu thi nếu dùng gets() thì mình đâu thể dùng malloc()
    và theo mình nghir thi nếu dùng gets() thì chắc phải thêm 1 biến để bắt khai báo số kí tự cần nhập để có thể xin vùng nhớ vừa đủ
    Ko bít mình hiểu vậy có đúng không
    Cám ơn mấy bạn đã bỏ chút thời gian giup đỡ mình::)
    .
    ___________Auto Merge________________

    .
    mình khai báo char n va *p sau đó minh mới gán cho
    p = (char*)malloc(n*sizeof(char));
     
  13. not_lucky1988

    not_lucky1988 Mr & Ms Pac-Man

    Tham gia ngày:
    4/4/08
    Bài viết:
    275
    Nơi ở:
    Ba Tư
    Cái này thì tớ cũng không rõ lắm.
    Nhưng mà thế này, cậu khai báo char n; tức là n chỉ là một kí tự mà scanf("%s", n); là dùng để nhập cho 1 chuỗi, ngoài ra scanf("%s", n); chỉ nhập được một chuỗi không có space, tức là nếu cậu nhập 1 chuỗi có space thì nó chỉ lấy được từ đầu tiên.
    Còn để nhập đúng 1 chuỗi thì phải dùng gets(); sau này lên C++ thì có thêm cin.get();
    gets(); thì không cần xin vùng nhớ đâu, cứ thế mà nhập là được.
    mà nếu cậu muốn thế này thì phải cho n là int rồi đặt nó là số kí tự tối đa của chuỗi.
     
  14. Drmar

    Drmar Youtube Master Race

    Tham gia ngày:
    30/11/08
    Bài viết:
    9
    cám ơn bạn ::)::)::)::)::)::)::)::)::)::)::)::)
     
  15. Drmar

    Drmar Youtube Master Race

    Tham gia ngày:
    30/11/08
    Bài viết:
    9
    Write a C program to store the names and scores of 5 students inh a structure aray. Sort the structure aray in descending order of score . Display name of 3 student have high score.
    Mình ko biết cách hiển thị tên vì đề bắt mình sắp xếp điểm
    Mong các pro hướng dẫn giúp thanx
     

Chia sẻ trang này