30/09/2018, 20:06

Đây là bài tập C cơ bản hay nâng cao?

Mình có lướt trên web và tìm được 10 bài tập về ngôn ngữ C (cụ thể là bài tập về đệ quy).
Mình không biết các bài tập ấy là cơ bản hay nâng vì mình thấy giải hơi khó.
Bạn nào Pro hay giỏi thì reply mình nhé, đây là bài tập cơ bản hay nâng cao!

Ngô Doãn Tuấn viết 22:21 ngày 30/09/2018

Cơ bản bạn ơi
Việc sử dụng các hàm tự tạo và có sẵn để xử dụng

Người bí ẩn viết 22:08 ngày 30/09/2018

Ui, kinh thế cơ à! Thế bạn thử lấy 1 ví dụ về bài tập nâng cao giùm mình dc k?

Ngô Doãn Tuấn viết 22:17 ngày 30/09/2018

Xử lý thông tin từ fie, sử dụng con trỏ xử lý con trỏ
Các bài tập liên quan tới cấu trúc lớp struct

Ui, kinh thế cơ à!

Người bí ẩn viết 22:20 ngày 30/09/2018

Bạn có tài liệu không, cho mình xin?

Ngô Doãn Tuấn viết 22:20 ngày 30/09/2018

Mình không có…

Lê Đình Huy viết 22:22 ngày 30/09/2018

Bạn có tài liệu không, cho mình xin?

tài liệu ở đây là tài liệu về struct hả bạn ?

Người bí ẩn viết 22:21 ngày 30/09/2018

À không, miễn là nó nâng cao, khó là được (để mình thấy độ phiêu bạc của C nâng cao ấy mà :D)

Lê Đình Huy viết 22:07 ngày 30/09/2018

À không, miễn là nó nâng cao, khó là được (để mình thấy độ phiêu bạc của C nâng cao ấy mà :D)

Không biết có hợp ý bạn không nữa
http://daynhauhoc.com/t/tai-lieu-hay-ve-c-c-tong-hop-cac-bai-toan-de-va-kho-danh-cho-dan-luyen-olympic-tin-hoc/2210

Son Dang viết 22:16 ngày 30/09/2018

Mình chỉ biết có bài này mình thấy 2 câu cuối nâng cao. Mời các bạn cùng xem bài và trao đổi.
Nhập vào n điểm có toạ độ (x1, y1) … (xn, yn).
Tính:

  1. Tính Số tam giác tạo thành từ n điểm
  2. Tính số đường thẳng tạo thành
  3. Tính diện tích đa giác lồi nhỏ bao chứa tất cả các điểm.
  4. Tìm 1 đường thẳng mà chia đôi mặt phẳng sao cho mỗi nửa mặt phẳng chứa số điểm là N/2 (giả sử N chẵn)
Son Dang viết 22:19 ngày 30/09/2018

Tiện thể mình post đáp án câu 1 và 2 mình đã làm, câu 3 vs 4 các bạn làm tiếp, có sai xót gì xin góp ý.

 #include <stdio.h>
 #include <conio.h>
 #include<stdlib.h>
// Input n coordinates Function
void input_value(float x[],float y[],int n)
{   static short int i=0;
    printf("\nInput n values for n coordinate:\n");
    for(i=0;i<n;i++)
    {   printf("\nCoordinates %d:",i+1);
        printf(" x[%d]= ",i);   scanf("%f",&x[i]);
        printf("\t       y[%d]= ",i); scanf("%f",&y[i]);
    }
}
// Display n coordinates on screen
void output_value(float x[],float y[],int n)
{   static short int i=0;
    for(i=0;i<n;i++)
    {if(i%2==0) printf("\n");
    printf("\tx[%d],y[%d]= %.2f,%.2f",i,i,x[i],y[i]);}
}
// Delete the same coordinates
 int del_coordinates(float x[], float y[],int n)
{   static unsigned int i,j,k;
    for(i=0;i<n;i++)
     {  j=i+1;
        while(j<n)
            if(x[i]==x[j]&&y[i]==y[j])
            {   for(k=j;k<n-1;k++)
                { x[k]=x[k+1];
                  y[k]=y[k+1];
                } --n;
            }   else ++j;
     }
    return(n);
}
int del_array(float x[],int n)
{   static unsigned int i,j,k,count=0;
    for(i=0;i<n;i++)
    {   j=i+1;
        while(j<n)
            if(x[i]==x[j])
                {for(k=j;k<n-1;k++)
                x[k]=x[k+1];
                --n;}else ++j;
    }return(n);
}
// Delete the overlapping lines
unsigned int del_lines(float x[],float y[],int n)
{   static unsigned int i,j,count,count1,count2;
    float k,c,array_k[100],array_c[100];
    count=count1=count2=0;
    for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
    {
        if(x[i]!=x[j]&& y[i]==y[j]) count2++;
        else {
        // Equation straight line:x+(-k)y+(k*y[i]-x[i]) =0
             k=(x[i]-x[j])/(y[i]-y[j]);
             c=k*y[i]-x[i];
             array_k[count]=k;
             array_c[count]=c;
             count++;  }
    }
    count1=del_coordinates( array_k, array_c,count);
    return(count1+count2);
}
// Arrange the order of array in order to decrease value array x[]
void arrange_value(float x[], float y[],int n)
{   unsigned int i,j;
    float mid;
    for(i=0;i<n;i++)
      for(j=i+1;j<n;j++)
          {
           if(x[i]<x[j])
              { mid=x[i];
                x[i]=x[j];
                x[j]=mid;
                mid=y[i];
                y[i]=y[j];
                y[j]=mid;}
          }
    for(i=0;i<n;i++)
    for(j=0;j<n;j++)
    {
        if(x[i]==x[j]&&y[i]>y[j])
        {
                mid=y[i];
                y[i]=y[j];
                y[j]=mid;
        }
    }
}
// Invert position function
void invert_value(float *x, float *y)
{   float mid;
    mid=*x;
    *x=*y;
    *y=mid;
}



int main()
{
    // Declare Function
    float x[100], y[100];
    static int n,n2;
    // Input the value of n variable:
    do{
    printf("\nEnter the value of n variable:");
    scanf("%d",&n);
    if(n<0) printf("\n You've just enter the negative value. Redo again:\n");
    else input_value(x,y,n);
       }while(n<0);
    // Display the values of coordinates that you've just entered
    printf("\nThe values of coordinates that you've just entered:\n");
    output_value(x,y,n);
    // The number of same coordinates n2:
    n2=del_coordinates(x,y,n);
    printf("\n\nThe number of same coordinates is: %d",n-n2);
    printf("\n\nThe new coordinates is:\n");
    output_value(x,y,n2);
    // The number of straight line was created from n coordinates
    printf("\n\n\n---------Answer question 1 --------------\n\n");
    printf("The number of straight line was created from n coordinates: %d",del_lines(x,y,n2));
    // Calculating the convex polygon area
    printf("\n\n\n---------Answer question 3 --------------\n");
    return (0);
}
Bài liên quan
0