Tuesday, November 3, 2009

SW302 - Лабораторын ажил 6

Энэ лабораторын ажлаар Си хэл дээр бичигдсэн хэдэн энгийн жишээ турших болно. Эцсийн хугацаа XII долоо хоног

Дараах жишээг туршиж үзээд шаардлагатай хэсгүүдэд тайлбар бичиж ~/sw302/lab06/sort_random.c (~/sw302/lab06/sort_random - хөрвүүлэгдсэн файл нь ийм нэртэйгээр бас байх ёстой) директорт хадгална уу. Тайлбар бичихдээ хараад ойлгогдох зүйлийг биш цаад утга санааг нь тайлбарлах хэрэгтэй.

#include <stdio.h>
#include <stdlib.h>
/* Доорх мөрөнд тайлбар шаардлагатай */
void sort_array(int *, int, int (*compare_ptr)(int, int));
/* Доорх мөрөнд тайлбар шаардлагатай */
void swap(int *a, int *b);
/* Доорх мөрөнд тайлбар шаардлагатай */
int compare(int a, int b);
/* Доорх мөрөнд тайлбар шаардлагатай */
int reverse_compare(int a, int b);
/* Доорх мөрөнд тайлбар шаардлагатай */
void print_array(int *, int);
 
int main(int argc, char *argv[]){
  const int ARRAY_SIZE = 10, MAX_NUMBER = 100;
  int array[ARRAY_SIZE];
 
  int i;
  for(i = 0; i < ARRAY_SIZE; i++){
    array[i] =  1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
  }
  printf("Before sort\n");
  print_array(array, ARRAY_SIZE);
 
  sort_array(array, ARRAY_SIZE, &compare);
  printf("After sorting with regular compare\n");
  print_array(array, ARRAY_SIZE);
 
  sort_array(array, ARRAY_SIZE, &reverse_compare);
  printf("After sorting with reverse compare\n");
  print_array(array, ARRAY_SIZE);
 
  return 0;
}
 
/* Доорх мөрөнд тайлбар шаардлагатай */
void sort_array(int *a, int size, int (*compare_ptr)(int,int)){
  int i, j;
  for(i = 0; i < size - 1; i++){
    for(j = i + 1; j < size; j++){
      if(compare_ptr(a[i], a[j])){
        swap(a+i, &a[j]);
      }
    }
  }
}
 
/* Доорх мөрөнд тайлбар шаардлагатай */
void swap(int *a, int *b){
  int tmp = *b;
  *b = *a;
  *a = tmp;
}
 
void print_array(int *a, int size){
  int i;
  for(i = 0; i < size; i++){
    printf("%d ", a[i]);
  }
  printf("\n");
}
 
/* Доорх мөрөнд тайлбар шаардлагатай */
int compare(int a, int b) { if ( a > b ) return 1; else return 0; }
int reverse_compare(int a, int b) { if ( a < b ) return 1; else return 0; }


Дараах жишээг туршиж үзээд шаардлагатай хэсгүүдэд тайлбар бичиж ~/sw302/lab06/student_registration.c (~/sw302/lab06/student_registration - хөрвүүлэгдсэн файлынх нь нэр) директорт хадгална уу.

#include <stdio.h> 

#include <string.h>  
#include <stdlib.h>  
 
 
/* Доорх мөрөнд тайлбар шаардлагатай */
struct student {
  char name[80];
  char id[10];
};
 
/* Доорх мөрөнд тайлбар шаардлагатай */
#define STUDENT_COUNT 4  
 
/* Доорх мөрөнд тайлбар шаардлагатай */
void print_list(struct student *);
char *orders[] = {"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"};
char students[4][2][10] = { {"Dorj", "SW99D999"},
                           {"Dondog", "SW99D998"},
                           {"Bat", "SW99D997"},
                           {"Dulmaa", "SW99D996"}};
int main(void){
  int i;
 
  /* Доорх мөрөнд тайлбар шаардлагатай */
  struct student *sw302_students;
  sw302_students = malloc(sizeof(struct student) * STUDENT_COUNT);
  for(i = 0; i < STUDENT_COUNT; i++){
 
    /* Доорх мөрөнд тайлбар шаардлагатай */
    strcpy(sw302_students[i].name, students[i][0]);
    strcpy(sw302_students[i].id, students[i][1]);
  }
  print_list(sw302_students);
  return 0;
}
 
/* Доорх мөрөнд тайлбар шаардлагатай */
void print_list(struct student *list){
  int i;
  printf("Printing students:\n");
  for(i = 0; i < STUDENT_COUNT; i++){
    printf("%d%s students\n\t\tname: %s\n\t\tid:%s\n", i+1, orders[(i+1)%10], list[i].name, list[i].id);
  }
  printf("Done\n");
}

No comments:

Post a Comment