자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
도서 [시작하는 사람들을 위한 델파이 프로그래밍] 모듈 6 - Exercise 3
2016.05.02 10:21
'시작하는 사람들을 위한 델파이 프로그래밍' 도서에서 제공하는 Exercise(연습문제) 입니다.
정해진 답은 없습니다. 해결방법을 찾으신 분은 아래 댓글로 공유해주세요.
간혹 수학이 나오지만, 충분히 할 수 있습니다. 필요하면 구글 검색에게 물어보세요.
중요한 것은 '내가 생각하면서 프로그래밍을 한다'는 것입니다.
모듈 6. 프로그램에서 조건에 따라 실행. IF...THEN...ELSE 문
Exercise 3.
서로 다른 3개의 실수 중에서 최대값과 최소값을 찾아 내보자.
- 다른 연습문제들도 풀어보세요!
댓글 9
-
관리자
2016.05.30 11:03
-
관리자
2016.06.09 10:27
깃허브(github)에 업로드된 소스코드는 별도 다운로드 받을 필요없이, RAD Studio(델파이, C++빌더)에서 바로 불러와 사용할 수 있습니다. 다음 링크를 통해 사용 방법을 확인해보세요: http://tech.devgear.co.kr/delphi_news/404452
-
달걀후라이
2020.07.01 21:48
여기도 for문 없이 배운걸로 모듈6의 if문으로만 구현하면 이렇게 되지 않을까 해보았습니다.
procedure TForm1.Button1Click(Sender: TObject);
var
a1, a2, a3, max1, min1 : integer;
begin
a1 := strtoint(edit1.Text);
a2 := strtoint(edit2.Text);
a3 := strtoint(edit3.Text);
if a1 > a2 then
begin
max1 := a1;
min1 := a2;
end
else
begin
max1 := a2;
min1 := a1;
end;
if max1 < a3 then max1 := a3;
if min1 > a3 then min1 := a3;
label1.Caption := inttostr(max1);
label2.Caption := inttostr(min1);
end;
-
관리자
2020.07.04 13:47
로직이 깔끔합니다.
다만, 실수를 비교하라고 문제에 명시되어있으므로, 데이터타입 선택 시, Integer 대신 Single, Double, Currency, Extended 중 하나를 사용하였으면하는 아쉬움이 있습니다.
숫자형 데이터타입에 대한 자세한 사항: http://www.delphibasics.co.uk/Article.asp?Name=DataTypes
* Delphi Basics는 영문이지만 설명이 간단명료하므로, 델파이 기초를 다지기에 좋습니다.
-
관리자
2020.07.04 14:55
실수는 직접 비교하지 않는 것이 안전합니다. 따라서 CompareValue 함수를 사용하여 비교하세요.
입문자에게는 어려울 수 있으므로, 정확히 이해하지 못해도 관계없습니다.
하지만, 실수 비교 시, CompareValue 사용하기(직접 비교하지 않기)는 어렵지도 않고, 좋은 습관이 됩니다.
자세히 알고 싶다면 아래 글(과 댓글) 참고:
https://tech.devgear.co.kr/428237
-
달걀후라이
2020.07.04 16:44
아... 실수는 먼가 까다롭군요! 도움 감사합니다!. 앞으로는 CompareValue 라는 걸 사용해야겠네요.
그리고 한가지 질문 드려도 될까요?
[시작하는~ ] 이 책을 보고 따라하는 중인데 여기 책 저자분은 위에 링크 해주신 글에는 아예 없는 real라는 걸로 실수형을 사용하시더라구요.
그래서 저도 실수형은 다 다 퉁쳐서 real인가 보다 하고 real로 실습해보고 있는데 언급도 없으셔서 이건 사용안하는건가 싶어서요.
책에 보면 dobule이랑 스펙이라고 해야되나? 설명이 다 같은데 그냥 궁금해서 질문 남겨봅니다.
감사합니다.
-
관리자
2020.07.06 14:35
네, 수학적 용어로 Real이고, Real이라는 이름을 가진 데이터 타입이 있어서 더 혼란스러우실 것입니다. 구글에서 Delphi Real을 키워드로 검색하면 관련 내용이 많습니다. (하지만, 프로그래밍 입문 단계에서는 중요한 것을 '선택'하고 '집중'하는 것이 중요합니다. 따라서 너무 깊이 들어가서 길을 잃지 않는 것이 좋습니다. 부동소수점으로 다루기 관련 문제이고, 연산 장치 하드웨어도 관계도고, 반올림 문제도 있고,... 재밌지만 복잡합니다.)
일단, 델파이에서 Double과 Real에 대한 답변만 드리자면
현재 버전에서 Double과 Real은 같습니다.
http://docwiki.embarcadero.com/RADStudio//en/Simple_Types_(Delphi)#Real_Types 를 클릭하면 아래와 같이 써 있습니다.
"Real is equivalent to Double, in the current implementation"
아울러, 위에 댓글에 있는 링크들도 궁금한 점을 해소하는데 도움이 될 것입니다.
그리고 이 책은 (멋있고, 화려하고, 세세한 것들 보다는 우선) 간단 명료하고 포괄적인 것을 위주로 진행함으로써 입문자가 프로그래밍을 처음 접할 때, 너무 주변으로 가지 않기를 바랬기 때문일 것입니다.
-
happy
2020.07.04 15:29
C++로 하면 겁나 간단한 건데 말입니다 ^^
#include <algorithm>
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const auto& [min, max] = std::minmax({ 1.2357, 14.5289, 2.36987, 5.7598 });
Caption = String().sprintf(L"min = %g, max = %g\n", min, max);
}
-
관리자
2020.07.06 14:45
네, 맞습니다. C++11부터 공식지원이 되는 것으로 알고 있습니다. C++은 가장 많이 쓰이는 언어에 들기도 하고, 지금도 진화하고 있는 언어입니다.
엠바카데로의 C++빌더는 C++ 표준위원회의 업데이트되는 스펙들을 빠르게 반영하고 있습니다.
C++을 공부하고 싶거나, 더 현대적인 C++을 습득하려면 아래 C++표준위원회의 깃허브페이지를 권장합니다:
https://github.com/isocpp/CppCoreGuidelines
C++의 과거,현재,미래를 C++창시자에게 직접 들을 수 있는 2019년 화상 회의 (53분, 한글 자막)도 추천합니다.
https://tech.devgear.co.kr/453063
(다만, 지금 이 도서는 프로그래밍을 처음 하는 사람들이 (가급적 너무 어렵지는 않더라도) 생각하면서 프로그래밍을 하도록 즉 알고리즘을 생각할 수 있도록 하기 위한 도서입니다. 위에서 비욘도 말했듯이 언어는 생명이 있습니다. 어느 언어가 영원한 최고다라는 것은 없습니다. 많은 프로그래밍 입문자들이 정말 멋진 개발자가 되기를 희망하고 응원합니다.)
도서 [시작하는 사람들을 위한 델파이 프로그래밍] 모듈 6 - Exercise 3
2016.05.02 10:21
'시작하는 사람들을 위한 델파이 프로그래밍' 도서에서 제공하는 Exercise(연습문제) 입니다. 정해진 답은 없습니다. 해결방법을 찾으신 분은 아래 댓글로 공유해주세요.
간혹 수학이 나오지만, 충분히 할 수 있습니다. 필요하면 구글 검색에게 물어보세요. 중요한 것은 '내가 생각하면서 프로그래밍을 한다'는 것입니다.
|
모듈 6. 프로그램에서 조건에 따라 실행. IF...THEN...ELSE 문
Exercise 3.
서로 다른 3개의 실수 중에서 최대값과 최소값을 찾아 내보자.
- 다른 연습문제들도 풀어보세요!
댓글 9
-
관리자
2016.05.30 11:03
-
관리자
2016.06.09 10:27
깃허브(github)에 업로드된 소스코드는 별도 다운로드 받을 필요없이, RAD Studio(델파이, C++빌더)에서 바로 불러와 사용할 수 있습니다. 다음 링크를 통해 사용 방법을 확인해보세요: http://tech.devgear.co.kr/delphi_news/404452
-
달걀후라이
2020.07.01 21:48
여기도 for문 없이 배운걸로 모듈6의 if문으로만 구현하면 이렇게 되지 않을까 해보았습니다.
procedure TForm1.Button1Click(Sender: TObject);
var
a1, a2, a3, max1, min1 : integer;
begin
a1 := strtoint(edit1.Text);
a2 := strtoint(edit2.Text);
a3 := strtoint(edit3.Text);
if a1 > a2 then
begin
max1 := a1;
min1 := a2;
end
else
begin
max1 := a2;
min1 := a1;
end;
if max1 < a3 then max1 := a3;
if min1 > a3 then min1 := a3;
label1.Caption := inttostr(max1);
label2.Caption := inttostr(min1);
end;
-
관리자
2020.07.04 13:47
로직이 깔끔합니다.
다만, 실수를 비교하라고 문제에 명시되어있으므로, 데이터타입 선택 시, Integer 대신 Single, Double, Currency, Extended 중 하나를 사용하였으면하는 아쉬움이 있습니다.
숫자형 데이터타입에 대한 자세한 사항: http://www.delphibasics.co.uk/Article.asp?Name=DataTypes
* Delphi Basics는 영문이지만 설명이 간단명료하므로, 델파이 기초를 다지기에 좋습니다.
-
관리자
2020.07.04 14:55
실수는 직접 비교하지 않는 것이 안전합니다. 따라서 CompareValue 함수를 사용하여 비교하세요.
입문자에게는 어려울 수 있으므로, 정확히 이해하지 못해도 관계없습니다.
하지만, 실수 비교 시, CompareValue 사용하기(직접 비교하지 않기)는 어렵지도 않고, 좋은 습관이 됩니다.
자세히 알고 싶다면 아래 글(과 댓글) 참고:
https://tech.devgear.co.kr/428237
-
달걀후라이
2020.07.04 16:44
아... 실수는 먼가 까다롭군요! 도움 감사합니다!. 앞으로는 CompareValue 라는 걸 사용해야겠네요.
그리고 한가지 질문 드려도 될까요?
[시작하는~ ] 이 책을 보고 따라하는 중인데 여기 책 저자분은 위에 링크 해주신 글에는 아예 없는 real라는 걸로 실수형을 사용하시더라구요.
그래서 저도 실수형은 다 다 퉁쳐서 real인가 보다 하고 real로 실습해보고 있는데 언급도 없으셔서 이건 사용안하는건가 싶어서요.
책에 보면 dobule이랑 스펙이라고 해야되나? 설명이 다 같은데 그냥 궁금해서 질문 남겨봅니다.
감사합니다.
-
관리자
2020.07.06 14:35
네, 수학적 용어로 Real이고, Real이라는 이름을 가진 데이터 타입이 있어서 더 혼란스러우실 것입니다. 구글에서 Delphi Real을 키워드로 검색하면 관련 내용이 많습니다. (하지만, 프로그래밍 입문 단계에서는 중요한 것을 '선택'하고 '집중'하는 것이 중요합니다. 따라서 너무 깊이 들어가서 길을 잃지 않는 것이 좋습니다. 부동소수점으로 다루기 관련 문제이고, 연산 장치 하드웨어도 관계도고, 반올림 문제도 있고,... 재밌지만 복잡합니다.)
일단, 델파이에서 Double과 Real에 대한 답변만 드리자면
현재 버전에서 Double과 Real은 같습니다.
http://docwiki.embarcadero.com/RADStudio//en/Simple_Types_(Delphi)#Real_Types 를 클릭하면 아래와 같이 써 있습니다.
"Real is equivalent to Double, in the current implementation"
아울러, 위에 댓글에 있는 링크들도 궁금한 점을 해소하는데 도움이 될 것입니다.
그리고 이 책은 (멋있고, 화려하고, 세세한 것들 보다는 우선) 간단 명료하고 포괄적인 것을 위주로 진행함으로써 입문자가 프로그래밍을 처음 접할 때, 너무 주변으로 가지 않기를 바랬기 때문일 것입니다.
-
happy
2020.07.04 15:29
C++로 하면 겁나 간단한 건데 말입니다 ^^
#include <algorithm>
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const auto& [min, max] = std::minmax({ 1.2357, 14.5289, 2.36987, 5.7598 });
Caption = String().sprintf(L"min = %g, max = %g\n", min, max);
}
-
관리자
2020.07.06 14:45
네, 맞습니다. C++11부터 공식지원이 되는 것으로 알고 있습니다. C++은 가장 많이 쓰이는 언어에 들기도 하고, 지금도 진화하고 있는 언어입니다.
엠바카데로의 C++빌더는 C++ 표준위원회의 업데이트되는 스펙들을 빠르게 반영하고 있습니다.
C++을 공부하고 싶거나, 더 현대적인 C++을 습득하려면 아래 C++표준위원회의 깃허브페이지를 권장합니다:
https://github.com/isocpp/CppCoreGuidelines
C++의 과거,현재,미래를 C++창시자에게 직접 들을 수 있는 2019년 화상 회의 (53분, 한글 자막)도 추천합니다.
https://tech.devgear.co.kr/453063
(다만, 지금 이 도서는 프로그래밍을 처음 하는 사람들이 (가급적 너무 어렵지는 않더라도) 생각하면서 프로그래밍을 하도록 즉 알고리즘을 생각할 수 있도록 하기 위한 도서입니다. 위에서 비욘도 말했듯이 언어는 생명이 있습니다. 어느 언어가 영원한 최고다라는 것은 없습니다. 많은 프로그래밍 입문자들이 정말 멋진 개발자가 되기를 희망하고 응원합니다.)
제가 생각해 본 알고리즘을 깃허브(github)에 올려놓았습니다.
이 문제에 대한 정해진 해답은 없습니다. 이 소스도 참고 정도로만 활용하시면 좋을 것 같습니다.
제 소스 코드에 대한 다양한 의견은 환영합니다^^
https://github.com/devgear/delphi_algorism_book/tree/master/Excercise/%EB%AA%A8%EB%93%8806/Exercise3