일단 20강까지 빠르게 공부하고 다시 1강부터 들으면서 다른 강의랑 같이 듣고 그때는 교재도 보면서 첨부터 개념 차근차근히 잡으려고 하고 있네요..! 1학년 때는 걍 visual studio 켜서 전 시간에 수업파일 남아있으면 코딩 테스트 볼때 그걸로 베껴서 일단 점수 받고 솔직히 이해보다는 암기식으로 하다보니까 한계가 너무 컸는데 ㅠㅠ 지금은 이해하면서 하니까 물론 문제가 막힐때도 많지만 그래도 기분이 너무 좋네요 ㅎㅎ C언어 끝나면 C언어 알고리즘 하고 내년에 2학년 복학하면 C++ 하니까 이것도 동시에 준비하고 어느정도 마무리 되면 파이썬도 도전해보려구요!! 2학년때 일단 최대한 할수 있는거 다 공부하고 3학년 때 부터는 제가 하고 싶은거에 방향을 틀어서 경진대회도 나가보고 싶고 그냥 이것저것 닥치는 대로 부딪히면서 코딩실력 진짜 쌓고 싶네요 ㅠㅠ 23살.. 이른 나이도 아니고 그렇다고 늦은 나이도 아니지만 그래도 진짜 열심히해서 꿈의 기업에 들어가 부모님 기쁘게 해드리고 싶어요 ★
궁금한점이 있는데요 어차피 어떤 두 점을 가지고 각 변이 x축,y축에 평행한 직사각형의 넓이와 둘레를 구하는거라면 영상처럼 구조체 안에 구조체를 만들고 그렇게 할 필요없이 #include #include struct point{ int x,y; }; int main(){ struct point a,b; int side,side2; printf("한 점의 좌표를 입력하세요:"); scanf("%d %d",&a.x,&a.y); printf("다른 한 점의 좌표를 입력하세요:"); scanf("%d %d",&b.x,&b.y); side=abs(b.x-a.x); side2=abs(a.y-b.y); printf("사각형의 넓이는 %d입니다.",side*side2); printf("사각형의 둘레는 %d입니다.",(side*2)+(side2*2)); } 이런식으로 구조체에 대한 변수를 두개 설정하면 경우의 수가 2X2로 두 점의 4개의 좌표를 입력 받을수있지않나요? 그리고 어차피 각 변에 절댓값 씌울거면 굳이 왼쪽 상단 오른쪽 하단 신경 쓸 필요없이 이렇게 서로 다른 두 점만 입력받아도 구할 수 있지 않나요??
struct는 x와 y를 받는 것과 점으로 사각형을 만들어주는 것 2개를 만드셨는데, main에서의 선언은 사각형을 만들어주는 것만 하고 값을 입력받을 때 두 struct를 연결해 주신것 같은데요.. x와 y를 받는 struct는 main에서 선언을 안해줘도 되나요? struct는 .으로 하위로 들어갈 수 있는 것인가요? 잘 이해가 안됩니다. 설명 부탁드릴게요.
저도 이 유툽채널로 배우는 학생1이라 정확하지 않을수도 있는데 일단 제가 이해한대로 대략 설명드리자면 다음과 같아요! 메인 함수 윗쪽에 구조체 설정해놓은거 보면 struct point가 struct rect에 포함되어있는 구조인것을 알 수 있어요! 그렇기 때문에 main함수에서는 struct rect만 선언해도 자동적으로 그 하위에 포함되어있는 struct point를 활용해서 프로그램을 작성할 수 있는거구요!! 그래서 따로 main함수에서 별개로 선언을 해주지 않아도 곧바로 r.p2.x이런 식으로 접근해 사용할 수 있는거구요! 근데 이건 구구절절한 설명보다는 직관적인 이해가 필요할것같아요!! / (선생님 나중에 이 댓글 보시면 제가 이해한게 맞는지 확인해주세요!) ㅎㅁㅎ!
마지막 예제에 보통 사각형의 꼭짓점이 4개니까 struct rect { struct point p1, p2, p3, p4; } 이렇게 정의해서 해야 하지 않나요? 혹시 그렇게되면 사각형의 각 변을 구해야되서 계산이 복잡해지니까 그런건가요? 제가 생각하기론 선생님께서 구하신 사각형은 각 변이 각각 x와 y에 평행한 직사각형을 구하려고 하는 것 같은데, 이때 휴대폰 화면을 인치로 구하듯이 꼭짓점 두개만 가지고 직사각형의 넓이를 구한것 같네요. 제가 생각한게 맞나요??ㅜ
두점만가지고 직사각형이라 가정하고 코드를 짜는거면 그냥 바론 전 강의 에서 두점사이거리 구하는 코드에서 #include #include struct point{ int x; int y; }; int main(void){ struct point p1,p2; int xdif,ydif; double distan;
printf("1번 점 좌표: "); scanf("%d %d",&p1.x,&p1.y) ; printf("2번 점 좌표 : "); scanf("%d %d",&p2.x,&p2.y);
return 0; } 여기서 xdif 를 w 로 ydif 를 h 로 보고 풀어도 똑같은거 아닌가요?? #include #include struct point{ int x; int y; }; int main(void){ struct point p1,p2; int w, h, area, peri; double distan;
printf("1번 점 좌표: "); scanf("%d %d",&p1.x,&p1.y) ; printf("2번 점 좌표 : "); scanf("%d %d",&p2.x,&p2.y);
w = abs(p1.x -p2.x); h = abs(p1.y - p2.y); area = w * h; peri = 2*w + 2*h;
printf("area = %d, peri = %d",area,peri);
return 0; } 예를 들어 이런식으로요. 여기서 struct 를 2개를 사용한거는 구조체를 2개 사용해서 한 구조체가 다른구조체에 속하게 만들 수 있다는걸 보여주기위해서인가요? 아니면 다른 의미가있나요
없으면 변수 4개를 선언해야되는데, 저렇게 하면, p1(x,y), p2(x,y)를 사용할 수 있기 때문에 저렇게 하는것 같아요. 그리고 저렇게 선언했기 때문에, 실제 메인문에서 r.p1.x, 와 같이 양파껍질 같은 구조를 갖을 수 있는것이구요. 구조체를 쓰는 이유이기도 합니다.
A = sqrt(a1*a1+a2*a2); B = sqrt(b1*b1+b2*b2); C = sqrt(c1*c1+c2*c2); area = abs(t.p2.x*t.p3.y - t.p3.x*t.p2.y + t.p1.y*t.p3.x - t.p1.x*t.p3.y + t.p1.x*t.p2.y -t.p2.x*t.p1.y); peri = A+B+C;\
일단 20강까지 빠르게 공부하고 다시 1강부터 들으면서 다른 강의랑 같이 듣고 그때는 교재도 보면서 첨부터 개념 차근차근히 잡으려고 하고 있네요..! 1학년 때는 걍 visual studio 켜서 전 시간에 수업파일 남아있으면 코딩 테스트 볼때 그걸로 베껴서 일단 점수 받고 솔직히 이해보다는 암기식으로 하다보니까 한계가 너무 컸는데 ㅠㅠ 지금은 이해하면서 하니까 물론 문제가 막힐때도 많지만 그래도 기분이 너무 좋네요 ㅎㅎ C언어 끝나면 C언어 알고리즘 하고 내년에 2학년 복학하면 C++ 하니까 이것도 동시에 준비하고 어느정도 마무리 되면 파이썬도 도전해보려구요!! 2학년때 일단 최대한 할수 있는거 다 공부하고 3학년 때 부터는 제가 하고 싶은거에 방향을 틀어서 경진대회도 나가보고 싶고 그냥 이것저것 닥치는 대로 부딪히면서 코딩실력 진짜 쌓고 싶네요 ㅠㅠ 23살.. 이른 나이도 아니고 그렇다고 늦은 나이도 아니지만 그래도 진짜 열심히해서 꿈의 기업에 들어가 부모님 기쁘게 해드리고 싶어요 ★
Struct rect는 사각형 준비. Struct point p1,2로 점 생성, struct rect r 이면 r이라는 직사각형 만든 것, peri는 둘레 의미. #math의 abs는 절댓값 나오게함.
그림판에 사각형을 그리면서 꼭지점에 좌표를 적고, w와 h는 단순하게 가로 세로라고 생각하면 이해하는데 훨씬 도움이 되네요
궁금한점이 있는데요 어차피 어떤 두 점을 가지고 각 변이 x축,y축에 평행한 직사각형의 넓이와 둘레를 구하는거라면 영상처럼 구조체 안에 구조체를 만들고 그렇게 할 필요없이
#include
#include
struct point{
int x,y;
};
int main(){
struct point a,b;
int side,side2;
printf("한 점의 좌표를 입력하세요:");
scanf("%d %d",&a.x,&a.y);
printf("다른 한 점의 좌표를 입력하세요:");
scanf("%d %d",&b.x,&b.y);
side=abs(b.x-a.x);
side2=abs(a.y-b.y);
printf("사각형의 넓이는 %d입니다.",side*side2);
printf("사각형의 둘레는 %d입니다.",(side*2)+(side2*2));
}
이런식으로 구조체에 대한 변수를 두개 설정하면 경우의 수가 2X2로 두 점의 4개의 좌표를 입력 받을수있지않나요? 그리고 어차피 각 변에 절댓값 씌울거면 굳이 왼쪽 상단 오른쪽 하단 신경 쓸 필요없이 이렇게 서로 다른 두 점만 입력받아도 구할 수 있지 않나요??
당신 정말 멋져요
진짜 감사합니다!!!
대단히 고맙습니다.
너무 잘가르쳐주세요
오른쪽 하단과 왼쪽 상단을 정했으니까 절댓값 따로 안해줘도 되지 않나요?
struct는 x와 y를 받는 것과 점으로 사각형을 만들어주는 것 2개를 만드셨는데, main에서의 선언은 사각형을 만들어주는 것만 하고 값을 입력받을 때 두 struct를 연결해 주신것 같은데요.. x와 y를 받는 struct는 main에서 선언을 안해줘도 되나요? struct는 .으로 하위로 들어갈 수 있는 것인가요? 잘 이해가 안됩니다. 설명 부탁드릴게요.
저도 이 유툽채널로 배우는 학생1이라 정확하지 않을수도 있는데 일단 제가 이해한대로 대략 설명드리자면 다음과 같아요! 메인 함수 윗쪽에 구조체 설정해놓은거 보면 struct point가 struct rect에 포함되어있는 구조인것을 알 수 있어요! 그렇기 때문에 main함수에서는 struct rect만 선언해도 자동적으로 그 하위에 포함되어있는 struct point를 활용해서 프로그램을 작성할 수 있는거구요!! 그래서 따로 main함수에서 별개로 선언을 해주지 않아도 곧바로 r.p2.x이런 식으로 접근해 사용할 수 있는거구요! 근데 이건 구구절절한 설명보다는 직관적인 이해가 필요할것같아요!! / (선생님 나중에 이 댓글 보시면 제가 이해한게 맞는지 확인해주세요!) ㅎㅁㅎ!
음!!!!! 자세한 설명 덕분에 한 번에 이해했습니다. 열공하세요!!!
마지막 예제에 보통 사각형의 꼭짓점이 4개니까
struct rect {
struct point p1, p2, p3, p4;
}
이렇게 정의해서 해야 하지 않나요?
혹시 그렇게되면 사각형의 각 변을 구해야되서 계산이 복잡해지니까 그런건가요?
제가 생각하기론 선생님께서 구하신 사각형은 각 변이 각각 x와 y에 평행한 직사각형을 구하려고 하는 것 같은데, 이때 휴대폰 화면을 인치로 구하듯이 꼭짓점 두개만 가지고 직사각형의 넓이를 구한것 같네요. 제가 생각한게 맞나요??ㅜ
사실 정말 "사각형"의 넓이를 구하기 위해서는 네개로 해야되는게 맞다고 생각합니다. 근데 영상에서는 그냥 무조건 "직각사각형"이라고 생각해서 p1,p2 2개만 설정 한 것 같네요, 어차피 직각사각형이면 p1(x,y) p2(x,y) 2개만 알아도 알 수 있기 때문에
두점만가지고 직사각형이라 가정하고 코드를 짜는거면 그냥 바론 전 강의 에서 두점사이거리 구하는 코드에서
#include
#include
struct point{
int x;
int y;
};
int main(void){
struct point p1,p2;
int xdif,ydif;
double distan;
printf("1번 점 좌표: ");
scanf("%d %d",&p1.x,&p1.y) ;
printf("2번 점 좌표 : ");
scanf("%d %d",&p2.x,&p2.y);
xdif = p1.x -p2.x;
ydif = p1.y - p2.y;
distan = sqrt(xdif * xdif + ydif * ydif) ;
printf("distance : %f",distan);
return 0;
}
여기서 xdif 를 w 로 ydif 를 h 로 보고 풀어도 똑같은거 아닌가요??
#include
#include
struct point{
int x;
int y;
};
int main(void){
struct point p1,p2;
int w, h, area, peri;
double distan;
printf("1번 점 좌표: ");
scanf("%d %d",&p1.x,&p1.y) ;
printf("2번 점 좌표 : ");
scanf("%d %d",&p2.x,&p2.y);
w = abs(p1.x -p2.x);
h = abs(p1.y - p2.y);
area = w * h;
peri = 2*w + 2*h;
printf("area = %d, peri = %d",area,peri);
return 0;
}
예를 들어 이런식으로요.
여기서 struct 를 2개를 사용한거는 구조체를 2개 사용해서 한 구조체가 다른구조체에 속하게 만들 수 있다는걸 보여주기위해서인가요? 아니면 다른 의미가있나요
struct 앞에 typedef를 붙이면 무슨 차이가 있나용?
정주행 16강/20강
struct rect {
struct point p1, p2;
};
이거는 없어도 되는 식이지 않나요? 그냥 좀 더 자세하기 보여주기 위해서 하신건가요?
없으면 변수 4개를 선언해야되는데, 저렇게 하면, p1(x,y), p2(x,y)를 사용할 수 있기 때문에
저렇게 하는것 같아요. 그리고 저렇게 선언했기 때문에, 실제 메인문에서 r.p1.x, 와 같이 양파껍질 같은 구조를 갖을 수 있는것이구요. 구조체를 쓰는 이유이기도 합니다.
사각형 넓이 둘레 공식이 이해가안됩니다... 직각으로만 가정하신건가요?
그러니깐 사각형 4개 변이 모두 좌표평면의 축에 평행하다는 가정하에 저리 하신 듯 합니다. 점 2개로 나올 수 있는 직사각형은 셀 수 없이 많습니다. 원주각 개념 살짝 가져오시면 무한개라는 거 아실 수 있겠군요.
코드 똑같이 따라했는데 자꾸 넓이값이 0이 나오고 둘레값은 30이 나오네요 왜그런거죠?ㅠㅠ
코드를 올려보셔야 어디가 틀렸는지 확인이 됩니다.
대부분 실수 하시는 부분이 세미콜론을 빼먹으시거나 i를 l이나 1로 잘못 보시는 경우입니다. 식을 제대로 작성 하셨는지 확인해보실 필요가 있습니다.
입력받은 값에서 x값이나 y값 차이가 없어서 그런거 아닐까요?
c언어가 절차지향언어이므로 좌표를 입력하는 함수코드 다음에 넓이를 연산하는 코드가 들어가있는지 확인해보세요 그래야 올바르게 작동하는 것 같네요 . 제가 지금 그랬거든요
세변의 좌표에 따른 삼각형의 둘레와 넓이
#include
#include
#include
struct point {
int x;
int y;
};
struct tri {
struct point p1;
struct point p2;
struct point p3;
};
int main(void)
{
struct tri t ;
double area, peri, A, B, C; // 세 변을 의미
int a1, a2, b1, b2, c1, c2;
printf("점1의 좌표를 입력하시요 :");
scanf("%d %d", &t.p1.x, &t.p1.y);
printf("점2의 좌표를 입력하시요 :");
scanf("%d %d", &t.p2.x, &t.p2.y);
printf("점3의 좌표를 입력하시요 :");
scanf("%d %d", &t.p3.x, &t.p3.y);
a1 = t.p1.x - t.p2.x;// p1과 p2의 x좌표 차이
a2 = t.p1.y - t.p2.y;// p1과 p2의 y좌표 차이
b1 = t.p2.x - t.p3.x;// p2과 p3의 x좌표 차이
b2 = t.p2.y - t.p3.y;// p2과 p3의 y좌표 차이
c1 = t.p3.x - t.p1.x;// p3과 p1의 x좌표 차이
c2 = t.p3.y - t.p1.y;// p과 p1의 y좌표 차이
A = sqrt(a1*a1+a2*a2);
B = sqrt(b1*b1+b2*b2);
C = sqrt(c1*c1+c2*c2);
area = abs(t.p2.x*t.p3.y - t.p3.x*t.p2.y + t.p1.y*t.p3.x - t.p1.x*t.p3.y + t.p1.x*t.p2.y -t.p2.x*t.p1.y);
peri = A+B+C;\
printf("삼각형의 넓이는 %f 이고 둘레는 %f이다.", area/2, peri);
return 0;
}
구조체
math.h 헤더파일에 들어있는 절대값은 fabs 입니다.
abs 는 stdlib.h 에 들어있어요.
아마도,,,?
math.h에 abs 있긴한데 입력이 int형만 받아요