• [THÔNG BÁO] CẢNH BÁO LỪA ĐẢO MẠO DANH QUẢN TRỊ VIÊN
    Chào các thành viên GameVN,
    Dạo gần đây tình trạng lừa đảo scamming và phishing đang gia tăng. Ban quản trị GameVN xin lưu ý toàn bộ thành viên:
    KHÔNG/ ĐỪNG / CẤM cho bất kỳ ai tự xưng là quản trị viên của server vay tiền.
    Mọi hành vi lân la làm quen, tự tiện nhắn tin trên Discord, Facebook, Zalo hoặc các nền tảng mạng xã hội khác,
    núp bóng dưới danh nghĩa sinh hoạt của quản trị viên, đều có tỉ lệ rất, rất cao là lừa đảo.
    Nếu có tài khoản lạ add friend hoặc nhắn tin xin tiền dưới danh nghĩa admin:
    Block ngay
    Report ngay
    Không chuyển khoản, không cung cấp thông tin cá nhân


    Quản trị viên của forum và Discord server GameVN không có nhu cầu vay tiền thành viên.
    Không có lý do nào để admin chủ động kết bạn rồi xin tiền.
    Mọi thông báo chính thức chỉ được đăng trên kênh thông báo của server và topic chính thức trên forum.
    Tin nhắn riêng từ tài khoản lạ không phải thông báo của ban quản trị.
    Cảm ơn các bạn đã chú ý và cùng giữ cộng đồng an toàn.
    — Ban quản trị GameVN

    Tắt thông báo bằng nút X bên góc phải của bảng thông báo*

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

  • Thread starter Thread starter Drmar
  • Ngày gửi Ngày gửi

Drmar

Youtube Master Race
Tham gia ngày
30/11/08
Bài viết
9
Reaction score
0
write a program to accept a string and find out if it is a palindrome
 
đâ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
 
Palindrome nghĩa là gì?

-Thêm dòng break ra ngoài vòng lặp.
 
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();

}
 
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
 
cái đấy là đọc dữ liệu vào từ file, có gì lạ đâu:))
 
người ta chưa học nên thấy lạ;))..............
 
đâ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

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
 
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
 
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();
}
 
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

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
 
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));
 
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ình khai báo char n va *p sau đó minh mới gán cho
p = (char*)malloc(n*sizeof(char));
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.
 
cám ơn bạn ::)::)::)::)::)::)::)::)::)::)::)::)
 
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
 
Back
Top