구조체의 배열
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
#define VMAX 21// 기력 최댓값 = 2.1 *10
// 신체검사 데이터 구조체
typedef struct{
char name[20];
int height;
double vision;
}PhysCheck; // physical check
// avg of height
double avg_height(const PhysCheck dat[], int n){
int i;
double sum = 0;
for(i=0;i<n;i++){
sum+=dat[i].height;
}
return sum/n;
}
// 시력 분포
void dist_vision(const PhysCheck dat[], int n, int dist[]){
int i;
for(i=0;i<VMAX;i++){
dist[i]=0;
}
for(i=0;i<n;i++){
if(dat[i].vision>=0.0 && dat[i].vision <= VMAX/10.0)
dist[(int)(dat[i].vision*10)]++;
}
}
int main(void){
int i;
PhysCheck x[] = {
{ "박현규", 162, 0.3 },
{ "함진아", 173, 0.7 },
{ "최윤미", 175, 2.0 },
{ "홍연의", 171, 1.5 },
{ "이수진", 168, 0.4 },
{ "김영준", 174, 1.2 },
{ "박용규", 169, 0.8 }
};
int nx = sizeof(x) / sizeof(x[0]); /* 인원수 */
int vdist[VMAX]; /* 시력 분포 */
puts("■ □ ■ 신체 검사 목록 ■ □ ■");
puts("이름 키 시력");
puts("----------------------------------");
for (i = 0; i < nx; i++)
cout << x[i].name<<" " <<x[i].height<<" "<< x[i].vision;
cout <<"평균 키: "<<avg_height(x, nx)<<"cm";
dist_vision(x,nx,vdist);
cout <<endl<<"시력 분포"<<endl;
for(i=0;i<VMAX;i++){
cout <<i/10.0<<" ~ : "<<vdist[i]<<"명"<<endl;
}
return 0;
}
Q12) 시력 분포 사람 수 *로 표현
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
#define VMAX 21// 기력 최댓값 = 2.1 *10
// 신체검사 데이터 구조체
typedef struct{
char name[20];
int height;
double vision;
}PhysCheck; // physical check
// avg of height
double avg_height(const PhysCheck dat[], int n){
int i;
double sum = 0;
for(i=0;i<n;i++){
sum+=dat[i].height;
}
return sum/n;
}
// 시력 분포
void dist_vision(const PhysCheck dat[], int n, int dist[]){
int i;
for(i=0;i<VMAX;i++){
dist[i]=0;
}
for(i=0;i<n;i++){
if(dat[i].vision>=0.0 && dat[i].vision <= VMAX/10.0)
dist[(int)(dat[i].vision*10)]++;
}
}
int main(void){
int i;
PhysCheck x[] = {
{ "박현규", 162, 0.3 },
{ "함진아", 173, 0.7 },
{ "최윤미", 175, 2.0 },
{ "홍연의", 171, 1.5 },
{ "이수진", 168, 0.4 },
{ "김영준", 174, 1.2 },
{ "박용규", 169, 0.8 }
};
int nx = sizeof(x) / sizeof(x[0]); /* 인원수 */
int vdist[VMAX]; /* 시력 분포 */
puts("■ □ ■ 신체 검사 목록 ■ □ ■");
puts("이름 키 시력");
puts("----------------------------------");
for (i = 0; i < nx; i++)
cout << x[i].name<<" " <<x[i].height<<" "<< x[i].vision;
cout <<"평균 키: "<<avg_height(x, nx)<<"cm";
dist_vision(x,nx,vdist);
cout <<endl<<"시력 분포"<<endl;
for(i=0;i<VMAX;i++){
cout <<i/10.0<<" ~ : ";
for(int j =0;j<vdist[i];j++){
putchar('*');
}
cout<<endl;
}
return 0;
}
Q13) 날짜 구조체
1. Date DateOf(int y, int m, int d); // 년월일을 나타내는 구조체를 바환하는 함수
2. Date After(Date x, int n); // 날짜 x의 n일 뒤의 날짜를 반환하는 함수
3. Date Before(Date x, int n); // 날짜 x의 n일 뒤의 날짜를 반환하는 함수
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
typedef struct{
int y;
int m;
int d;
}Date;
// 각 달의 날 수
int mdays[][12] = {
{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}
};
// year년이 운년인가?
int isleap(int year){
return (year % 4== 0 && year%100!=0) || year % 400 == 0;
}
int dayofyear(int y, int m, int d){
int i;
int days=d;
for(i=1;i<m;i++){
days+=mdays[isleap(y)][i-1];
}
return days;
}
//1. Date DateOf(int y, int m, int d); // 년월일을 나타내는 구조체를 바환하는 함수
//2. Date After(Date x, int n); // 날짜 x의 n일 뒤의 날짜를 반환하는 함수
//3. Date Before(Date x, int n); // 날짜 x의 n일 뒤의 날짜를 반환하는 함수
Date Before(Date x, int n);
Date After(Date x, int n);
Date DateOf(int y, int m, int d){
Date date;
date.y = y;
date.m = m;
date.d = d;
return date;
}
Date Before(Date x, int n){
if(n<0)
return After(x, -n);
x.d-=n;
while(x.d<1){
if(--x.m<1){
x.y--;
x.m=12;
}
x.d+=mdays[isleap(x.y)][x.m-1];
}
return x;
}
Date After(Date x, int n){
if(n<0)
return Before(x,-n);
x.d+=n; // 일+n;
while(x.d>mdays[isleap(x.y)][x.m-1]){
x.d-=mdays[isleap(x.y)][x.m-1];
if (++x.m > 12) {
x.y++;
x.m = 1;
}
}
return x;
}
int Print(Date x)
{
int y = x.y;
int m = x.m;
int d = x.d;
//char * ws[] = { "일", "월" "화" "수", "목", "금", "토" }; // error :: [C++] ISO C++11 does not allow conversion from string literal to 'char *'
const char * ws[] = { "일", "월" "화" "수", "목", "금", "토" }; // const 키워드 명시하여 해결
if (m == 1 || m == 2) {
y--;
m += 12;
}
cout <<x.y<<"년 "<< x.m<<"월 "<<x.d<<"일 "<< ws[(y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + d) % 7]<<endl;
return 0; ///???
}
int main(void){
int n;
int y , m, d;
Date x;
cout <<"날짜를 입력하시오. "<<endl;
cout <<"년 : ";
cin>> y;
cout <<"월 : ";
cin >> m;
cout <<"일 : ";
cin>> d;
x = DateOf(y,m,d);
cout <<"며칠 앞, 뒤의 날짜를 구할 것인가? : ";
cin>>n;
cout <<" 앞 : "<<Print(After(x, n))<<endl;
cout <<" 뒤 : "<<Print(Before(x, n))<<endl;
return 0;
}
실행은 되는데 끝에서 error 생김.. 왜 그런지는 잘 모르겠음 ㅠㅠ
'코딩 > C++' 카테고리의 다른 글
C++ 알고리즘 - binary search, complexity (0) | 2022.03.26 |
---|---|
C++ 알고리즘 - 검색 (0) | 2022.03.24 |
C++ 알고리즘 연습문제 - 함수사용, 윤년계산 (0) | 2022.03.23 |
C++ 알고리즘 연습문제 - 함수사용 (0) | 2022.03.22 |
C++ - 배열 요소 (calloc 사용) (0) | 2022.03.20 |