검색결과 리스트
2011/06에 해당되는 글 6건
- 2011.06.26 [HTML5] 데이터 스토리지
- 2011.06.16 고집불통 프로래머가 되지 않기 위한 10가지 방법
- 2011.06.13 HTML 소개
- 2011.06.13 과제 #2 제어문/선택문을 이용해 다양한 모양그리기
- 2011.06.13 과제 #1 입출력,연산자
- 2011.06.13 음수의 표현
글
[HTML5] 데이터 스토리지
언어로그/Html/Javascript/CSS
2011. 6. 26. 16:55
HTML5 학습 참고 사이트
W3School : http://www.w3schools.com
웹브라우저 클라이언트 단에 사용자에게 편리한 기능을 제공하기 위해 데이터를 저장해야 할 경우가 있다.
예를 들어 쇼핑몰 사이트에서 로그인을 하지 않아도, 쇼핑을 하고 상품을 담아둘 수 있는 장바구니 기능을 생각해보자.
장바구니에 담긴 상품들은 웹브라우저를 종료하고 나중에 다시 쇼핑물을 다시 방문했을 때도 상품항목이 남아있어서
사용자는 편리하게 이어서 쇼핑을 할 수 있다.
만일 매번 방문할 때마다 사용자의 쇼핑상품이 삭제되어 버린다면 상당히 번거로울 것이다. 이처럼 사용자에 기호 등과
관련된 정보를 웹브라우저 클라이언트에 저장을 하면 사용자에게 편리한 기능을 제공할 수 있다. 이러한 요구사항을
만족하기 위한 데이터 스토리지 메커니즘을 이 포스트에서 소개하겠다.
Cookie를 사용하는 방식이 오래전부터 사용되어 왔으며, HTML5에서는 쿠키의 단점을 보완하기 위해 웹 스토리지 API 와
웹SQL 데이터베이스 API를 제공한다. 이에 대해서 알아보자.
예를 들어 쇼핑몰 사이트에서 로그인을 하지 않아도, 쇼핑을 하고 상품을 담아둘 수 있는 장바구니 기능을 생각해보자.
장바구니에 담긴 상품들은 웹브라우저를 종료하고 나중에 다시 쇼핑물을 다시 방문했을 때도 상품항목이 남아있어서
사용자는 편리하게 이어서 쇼핑을 할 수 있다.
만일 매번 방문할 때마다 사용자의 쇼핑상품이 삭제되어 버린다면 상당히 번거로울 것이다. 이처럼 사용자에 기호 등과
관련된 정보를 웹브라우저 클라이언트에 저장을 하면 사용자에게 편리한 기능을 제공할 수 있다. 이러한 요구사항을
만족하기 위한 데이터 스토리지 메커니즘을 이 포스트에서 소개하겠다.
Cookie를 사용하는 방식이 오래전부터 사용되어 왔으며, HTML5에서는 쿠키의 단점을 보완하기 위해 웹 스토리지 API 와
웹SQL 데이터베이스 API를 제공한다. 이에 대해서 알아보자.
1. Cookie
Netscape 사에서 개발했으며, 단순히 key와 value의 데이터쌍을 저장하는 텍스트 파일이다.
Cookie 를 구성하는 데이터에는 name-value, expiry date, Domain and Path 가 있다 그 의미는 다음과 같다.
Cookie 를 구성하는 데이터에는 name-value, expiry date, Domain and Path 가 있다 그 의미는 다음과 같다.
name-value
모든 쿠키는 name-value 쌍을 구성되며, 쿠키의 이름(name)을 통해 정보(value)를 읽을 수 있다.
expiry date
쿠키가 폐기되는 유효기간. 명시하지 않으면 브라우저를 닫을 때 폐기된다. 만료일은 UTC(표준시)로 설정되야 한다.
Domain and Path
도메인은 브라우저가 쿠키를 보낼 도메인 주소를 의미하며, Path는 쿠키를 활성화되는 도메인의 디렉토리를 지정한다.
모든 쿠키는 name-value 쌍을 구성되며, 쿠키의 이름(name)을 통해 정보(value)를 읽을 수 있다.
expiry date
쿠키가 폐기되는 유효기간. 명시하지 않으면 브라우저를 닫을 때 폐기된다. 만료일은 UTC(표준시)로 설정되야 한다.
Domain and Path
도메인은 브라우저가 쿠키를 보낼 도메인 주소를 의미하며, Path는 쿠키를 활성화되는 도메인의 디렉토리를 지정한다.
쿠키는 자바스크립트 상에서 document.cookie 속성을 통해 접근할 수 있다. 아래의 코드를 보자.
쿠키값을 설정할 때는 위에서와 같이 정해직 포맷에 맞춰 설정해야 한다. 순서는 다음과 같다.
document.cookie = 'ppkcookie1=testcookie; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/' document.cookie = 'ppkcookie2=another test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'
쿠키값을 설정할 때는 위에서와 같이 정해직 포맷에 맞춰 설정해야 한다. 순서는 다음과 같다.
1 먼저 name-value 쌍을 설정한다
2 다음 세미콜론; 과 공백이 온다
3 다음으로 적절한 형식으로 만료일이 온다.
4 다시 세미콜론과 공백이 온다
5 다음 path가 온다
위의 예제에서 ppkcookie2의 값은 이전 쿠키값을 덮어 씌우지 않고 추가된다는 것에 주목하자.
쿠키를 삭제하기 위해서는 오늘 날짜 이전으로 만료일을 설정하면 브라우저가 만료됐음을 확인하고 삭제한다.
document.cookie 값 설정시 만료일을 -1로 설정하면 쿠키값이 즉시 삭제되며, 0으로 설정하면 브라우저를 닫을 때
삭제된다.
쿠키를 삭제하기 위해서는 오늘 날짜 이전으로 만료일을 설정하면 브라우저가 만료됐음을 확인하고 삭제한다.
document.cookie 값 설정시 만료일을 -1로 설정하면 쿠키값이 즉시 삭제되며, 0으로 설정하면 브라우저를 닫을 때
삭제된다.
2. 웹 스토리지
엄청나게 발전한 쿠키라고 생각할 수 있으며, 쿠키와 비슷하게 name=value 쌍으로 데이터를 저장한다.
도메인당 최대 5Mb 를 지원하며 sessionStorage, localStorage 를 제공한다. sessionStorage는 브라우저가 닫히기까지(세션)
동안 유효하며, localStorage 는 명시적으로 데이터를 지우지 않는 한 계속 남아있게 된다.
도메인당 최대 5Mb 를 지원하며 sessionStorage, localStorage 를 제공한다. sessionStorage는 브라우저가 닫히기까지(세션)
동안 유효하며, localStorage 는 명시적으로 데이터를 지우지 않는 한 계속 남아있게 된다.
브라우저별 웹스토리지 지원현황은 아래와 같이 최신버전의 브라우저 모두에서 지원하는 기능이다.
* 파이어폭스는 현재 스토리지에 대한 보안정책을 다른 브라우저와 다르게 구현하여서 쿠키를 반드시 지원해야만
스토리지 API를 사용할 수 있다고 한다. 그래서 쿠키를 사용가능한지 사전에 검사해야 한다.
스토리지 API를 사용할 수 있다고 한다. 그래서 쿠키를 사용가능한지 사전에 검사해야 한다.
쿠키가 가용한지 검사하는 코드는 아래와 같이 쿠키를 하나 생성하고 값 읽기를 시도해봐서 가용한지를 확인할 수 있다.
var cookieEnabled = (function() {
var id = new Date().getTime();
document.cookie = 'cookieprobe=' + id + ' ;path=/';
return (document.cookie.indexOf(id) != -1);
})();
웹 스토리지 API 형태는 다음과 같다.
속성 unsigned int length 메소드 DOMString key(unsigned int index) any getItem(DOMString key) void setItem(DOMString key, data) void removeItem(DOMString key) void clear()
데이터 저장 및 조회
sessionStorage.setItem(‘twitter’, ‘@rem’); sessionStorage.twitter = ‘@rem’; sessionStorage.getItem(‘cost’); sessionStorage.twitter
key 메소드 사용
for (var i = 0; i < sessionStorage.length; i++) {
alert(sessionStorage.key(i) + ‘=’ + sessionStorage.getItem(sessionStorage.key(i)));
}
데이터 삭제
removeItem 과 clear 함수를 사용할 수 있다. removeItem 은 지정한 key에 해당하는 아이템을 삭제하며, clear 함수는 모든
아이템을 삭제한다.
removeItem 과 clear 함수를 사용할 수 있다. removeItem 은 지정한 key에 해당하는 아이템을 삭제하며, clear 함수는 모든
아이템을 삭제한다.
문자열 이외 저장
웹 스토리지는 문자열 형태로 데이터를 저장하기 때문에 객체를 저장할 수 없다. JSON를 사용해서 객체를 텍스트화하여
저장하고 다시 텍스트를 객체로 복원하는 방식으로 우회하여 사용해야 한다.
JSON를 사용하여 객체화하고 복원하는 코드는 다음과 같다.
저장하고 다시 텍스트를 객체로 복원하는 방식으로 우회하여 사용해야 한다.
JSON를 사용하여 객체화하고 복원하는 코드는 다음과 같다.
function stringify() {
var videoDetails = {
author: '감우성',
description: '무법자',
rating: '5.51'
};
sessionStorage.setItem('videoDetails', JSON.stringify(videoDetails));
}
function parse() {
var videoDetails = JSON.parse(sessionStorage.getItem('videoDetails') || 'null');
alert(videoDetails.author + "\n" + videoDetails.description + "\n" + videoDetails.rating);
}
3. 웹 SQL 데이터베이스
웹SQL 데이터베이스는 웹브라우저에 내장된 데이터베이스이며, 대량의 데이터를 관리하기에 유용하다.
SQL 처리 후 콜백형태로 다음 실행내용을 전달하며 비동기 방식으로 동작하며, 서버가 아닌 로컬 데이터베이스를
사용하기 때문에 커넥션을 맺고 닫는 부분이 없다. 한 도메인에는 동일한 이름을 갖는 DB 버전은 하나만 존재한다.
(현재 1.0 버전을 사용하는데 같은 이름의 DB가 있을 수 없다는 의미 같다. )
데이터베이스 작업 간에 트랜잭션을 시작하고 그 콜백으로 SQL문을 수행하는 처리를 한다. 데이터 베이스 크기의
제한은 없지만 일반적으저 브라우저들이 5Mb의 크기로 제한한다.
SQL 처리 후 콜백형태로 다음 실행내용을 전달하며 비동기 방식으로 동작하며, 서버가 아닌 로컬 데이터베이스를
사용하기 때문에 커넥션을 맺고 닫는 부분이 없다. 한 도메인에는 동일한 이름을 갖는 DB 버전은 하나만 존재한다.
(현재 1.0 버전을 사용하는데 같은 이름의 DB가 있을 수 없다는 의미 같다. )
데이터베이스 작업 간에 트랜잭션을 시작하고 그 콜백으로 SQL문을 수행하는 처리를 한다. 데이터 베이스 크기의
제한은 없지만 일반적으저 브라우저들이 5Mb의 크기로 제한한다.
브라우저별 웹 SQL 데이터베이스의 지원현황은 아래와 같다.
아직은 브라우저에서의 지원이 미비하기 때문에, 사용시 반드시 지원유무를 확인하는 처리를 해야한다는 것에 주의하자.
아직은 브라우저에서의 지원이 미비하기 때문에, 사용시 반드시 지원유무를 확인하는 처리를 해야한다는 것에 주의하자.
데이터베이스를 조작하는 코드는 아래와 같다.
DB 생성 및 Open / API 지원유무 확인하기
var db;
if (window.openDatabase) {
db = openDatabase(‘mydb’, ‘1.0’, ‘My first database’, 2 * 1024 * 1024);
}
openDatabase의 인자는 DB이름, 버전, DB에 대한 설명, DB 의 크기이다.위 코드에서는 mydb 라는 이름의 2MB(2 * 1024 * 1024) 데이터베이스를 생성하였고,
window.openDatabase 속성을 확인하여 웹SQL 데이터베이스 API를 지원하는지 확인했다.
SQL 실행
db.transaction(
function(tx) {
tx.executeSql(sql, [], function () {
// 실행코드
});
},
function(tx, error) {
alert(‘에러: ‘ + error.message);
}
});
function(tx,error) 함수는 transaction 실패시 실행되는 에러처리 함수로 옵션사항이다. 별도의 에러처리를 하지 않아도
된다면 명시하지 않아도 된다.
또 executeSql(sql, [], function () {}) 함수는 실제로 SQL을 수행하는 함수로 필수 인자는 실행할 질의문 sql 인자 뿐이다.
[] 는 SQL 의 와일드 카드 문자에 삽입할 파라미터를 담은 배열이며, function()은 SQL 을 수행후 후속 작업을 처리할
함수이다.
된다면 명시하지 않아도 된다.
또 executeSql(sql, [], function () {}) 함수는 실제로 SQL을 수행하는 함수로 필수 인자는 실행할 질의문 sql 인자 뿐이다.
[] 는 SQL 의 와일드 카드 문자에 삽입할 파라미터를 담은 배열이며, function()은 SQL 을 수행후 후속 작업을 처리할
함수이다.
테이블 생성하기
var db;
if (window.openDatabase) {
db = openDatabase(‘tweetdb’, ‘1.0’, ‘All my tweets’, 2 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql(‘CREATE TABLE tweets (id, date, tweet)’); });
}
데이터 삽입하기
function saveTweets(tweets) {
tweets.results.forEach(function (tweet) {
db.transaction(function (tx) {
var time = (new Date(Date.parse(tweet.created_at))).getTime();
tx.executeSql(‘INSERT INTO tweets (id, screen_name, ¬date, text) VALUES (?, ?, ?, ?)’,
[tweet.id, ¬tweet.from_user, time / 1000, tweet.text]);
});
});
}
데이터 조회하기
var tweetEl = document.getElementById(‘tweets’);
function show(amount) {
db.transaction(function (tx) {
tx.executeSql(‘SELECT * FROM tweets’ + (amount != ‘all’ ? ‘ WHERE date > strftime(“%s”, “now”, “-’ + amount + ‘ minutes”)’ : ‘’), [],
function (tx, results) {
var html = [], len = results.rows.length;
for (var i = 0; i < len; i++) {
html.push(‘<li>’ + results.rows.item(i).text + ‘</li>’);
}
tweetEl.innerHTML = html.join(‘’);
}
});
});
}
위 SQL문에서 strftime(string format time) 함수는 sqlite 의 함수로 포맷팅 문자열에 맞게 날짜를 출려하는 함수이다.
위 코드에서는 amount가 all 아니면 현재시간(now)에서 amount 분만큼을 뺀 값을 1970-01-01 이후 경과한 초(%s)로 나타내고있다.
다음 링크에서 함수에 대한 설명을 참고하자 : SQLite
위 코드에서는 amount가 all 아니면 현재시간(now)에서 amount 분만큼을 뺀 값을 1970-01-01 이후 경과한 초(%s)로 나타내고있다.
다음 링크에서 함수에 대한 설명을 참고하자 : SQLite
데이터 조회시에는 다음과 같은 속성을 사용할 수 있다.
insertId : 삽입시에만 사용
rowAffected : select 조회시에는 이 값은 0임
rows : 컬렉션. rows 객체를 사용해
results.rows.item(i).screen_name 형태로 필드값을 가져올 수 있음.
results.rows.length 로 컬렉션의 길이를 알수 있음.
'언어로그 > Html/Javascript/CSS' 카테고리의 다른 글
| HTML5 Canvas API (0) | 2012.03.11 |
|---|---|
| jquery 간략한 사용법 (0) | 2011.10.15 |
| [HTML5] 데이터 스토리지 (0) | 2011.06.26 |
| HTML 소개 (0) | 2011.06.13 |
설정
트랙백
댓글
글
고집불통 프로래머가 되지 않기 위한 10가지 방법
생각로그
2011. 6. 16. 16:56
ProgrammerJ 님의 글을 구독하다가 전형적인 고집불통 프로그래머로서
스스로에게 말해주고 싶은 포스트를 보았다. 지금 나에게 가장 필요한 말이 아닐까 싶다...
스스로에게 말해주고 싶은 포스트를 보았다. 지금 나에게 가장 필요한 말이 아닐까 싶다...
출처: http://jacking.tistory.com/867
근데 홍배님...이름이 나랑 왠지 비슷하네 ㅋㅋㅋ
'생각로그' 카테고리의 다른 글
| 호감주는 말하기 (0) | 2012.03.01 |
|---|---|
| 건강한 심리 (0) | 2012.02.19 |
| 위험에 뛰어드는 사람만이 진정으로 자유롭다. (0) | 2012.01.25 |
| 고집불통 프로래머가 되지 않기 위한 10가지 방법 (0) | 2011.06.16 |
| 노력해서 공부하고 계신가요? (0) | 2011.04.26 |
| [안철수 특강] 무엇이 성공을 이끄는가? (0) | 2011.03.01 |
설정
트랙백
댓글
글
HTML 소개
언어로그/Html/Javascript/CSS
2011. 6. 13. 23:22
1. HTML (Hyper Text Markup Language)
문서가 서로 다른 OS에서 동일한 형식으로 보여지게 하기위한 필요성에 의해 등장했으면, SGML 이란 마크업 언어를
원류로 하고 있다.
원류로 하고 있다.
2. HTML의 구성
<head> 와 같은 눈에 보이지 않는 요소 와 <table>. <div>와 같은 눈에 보이는 요소 로 나뉜다
눈에 보이는 요소는 다시 block-level 과 inline-level 로 구분된다.
block-level 은 <div>와 같이 한라인에 하나만 위치할 수 있는 요소이고,
inline-level 은 <span>과 같이 한라인에 복수로 위치할 수 있는 요소이다.
inline-level 은 <span>과 같이 한라인에 복수로 위치할 수 있는 요소이다.
<div style="border:1px gray solid;">block-level element </div> <div style="border:1px gray solid;">block-level element </div> <span style="border:1px gray solid;">inline-level element </span> <span style="border:1px gray solid;">inline-level element </span>
block-level 요소는 inline-level 요소를 포함할 수 있지만, 그 반대는 불가능하다 .
2.1 block-level elements
p - 문단태그
h1~h6 - 글씨 태그
ul - 도형목록 태그
ol - 순서목록 태그
pre - 공백까지 그대로 출력
dl
div - 영역을 지정해줌
noscript
blockquote
form
hr - 수평선을 그려줌
table
fieldset
address
2.2 inline-level elements
samp
kbd
var
cite
abbr
acronym
a - 링크
img - 이미지
object
br
script
map
q
sub
sup
span
bdo
input
select
textarea
label
button
2.3 table 태그
사이트에 레이아웃을 잡는데 활용되며, 중첩해서 사용할 수 있다.
<table border=1 width="700" height="400">
<tr>
<td height="10%">상단</td>
</tr>
<tr>
<td height="80%" width="100%">
<table border=1 height="100%" width="100%" >
<tr>
<td> 테스트 1</td>
<td> 테스트 2</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="10%">하단</td>
</tr>
</table>
2.4 table 선을 단선으로 표현하기 : border-collapse
table에 border 속성을 주면 2중 선으로 테투리가 그려지는데, style 속성으로 border-collapse:collapse 를 줘서 단선으로 그릴수 있다.
<table width="90%" cellpadding="5" cellspacing="0" border="1" align="center" style="border-collapse:collapse;border:1px gray solid;">
<tr>
<td style="border:1px gray solid;">Css </td>
<td style="border:1px gray solid;">Cascading Style Sheet</td>
</tr>
</table>
2.5 table 셀 크기 고정하기 : table-layout 속성
table 태그에 한글을 쓰면 중간중간 공백이 들아가기 때문에 테이블의 width에 맞춰 자동 줄바꿈이 된다.
그러나 공백이 없는 영문 주소와 같은경우, width 를 지정해줘도 밀리는 경우가 생긴다.
이때 table 태그 style 속성에 style="table-layout:fixed" 를 지정해서 밀리는 것을 방지할 수 있다.
그러나 이럴경우, width 를 넘어서는 부분은 내용이 잘리는데, word-break:break-all 속성으로 width에 맞춰
줄바꿈하게 해줄 수 있다.
<!-- 한글은 공백으로 인해 자동 줄바꿈 -->
<table width="200" cellpadding="5" cellspacing="2" border="1" align="center">
<tr>
<td> 셀안의 데이터가 한글인 경우 지정한 셀의 크기에 따라서 자연스럽게 줄바꿈이 일어납니다.</td>
</tr>
</table>
<!-- 공백이 없는 영문주소는 width를 지정해도 셀이 측면으로 밀림 -->
<table width="200" cellpadding="5" cellspacing="2" border="1" align="center">
<tr>
<td>http://www.homejjang.com/09/border-callapse.php</td>
</tr>
</table>
<!-- table-layout:fixed 를 설정해서 셀 크기 고정 : 하지만 내용이 잘린다. -->
<table width="200" cellpadding="5" cellspacing="2" border="1" align="center" style="table-layout: fixed;">
<tr>
<td>http://www.homejjang.com/09/border_collapse.php</td>
</tr>
</table>
<!-- word-break:break-all; 지정해서 width에 맞춰 줄바꿈이 일어나게 함 -->
<table width="200" cellpadding="5" cellspacing="2" border="1" align="center" style="table-layout:fixed; word-break:break-all;">
<tr>
<td>http://www.homejjang.com/09/border_collapse.php</td>
</tr>
</table>
'언어로그 > Html/Javascript/CSS' 카테고리의 다른 글
| HTML5 Canvas API (0) | 2012.03.11 |
|---|---|
| jquery 간략한 사용법 (0) | 2011.10.15 |
| [HTML5] 데이터 스토리지 (0) | 2011.06.26 |
| HTML 소개 (0) | 2011.06.13 |
설정
트랙백
댓글
글
과제 #2 제어문/선택문을 이용해 다양한 모양그리기
언어로그/C/C++
2011. 6. 13. 23:08
#1. 윤년구하기
사용자에게 년도를 입력받아 윤년인지 아닌지를 판단하는 프로그램을 작성.
단, 하나의 1f~else 문을 이용하여 작성.
윤년의 조건
4로 나누어 떨어지는 해
그 중에서 100으로 나누어 떨어지는 해는 평년
하지만 400으로 나누어 떨어지는 해는 윤년
#2. 삼각형과 역삼각형 출력
선택 및 반복문을 이용하여 작성
임의 숫자를 입력받아 삼각형과 역삼각형 출력
결과
#3. 다이아몬드 출력
선택 및 반복문을 이용하여 작성
임의 숫자를 입력받아 삼각형과 역삼각형 출력
결과
#4. 다이아몬드 테두리 출력
선택 및 반복문을 이용하여 작성
임의 숫자를 입력받아 삼각형과 역삼각형 출력
결과
#5. 알파벳 출력
메뉴번호를 입력하면, 각 문자열 도형 출력.
정수 65부터 90까지가 ASCII A-Z 임.
결과
'언어로그 > C/C++' 카테고리의 다른 글
| [C/C++] C 언어 포스트 목록 (0) | 2015.08.30 |
|---|---|
| 과제 #2 제어문/선택문을 이용해 다양한 모양그리기 (0) | 2011.06.13 |
| 과제 #1 입출력,연산자 (0) | 2011.06.13 |
| 음수의 표현 (0) | 2011.06.13 |
| 문자열 조작함수 직접 구현하기 (2) | 2011.04.29 |
| 라인 입출력 함수 (0) | 2011.03.27 |
설정
트랙백
댓글
글
과제 #1 입출력,연산자
언어로그/C/C++
2011. 6. 13. 23:01
#1 온도변환 : 화씨, 섭씨
화씨 온도(F)를 입력 받은 후 섭씨 온도(C)로 계산하여 출력하는 프로그램
C = 5/ 9 * (F -32)
화씨 온도를 입력하세요 : 85
섭씨 온도는 29.4도 입니다.
#2 원의 넓이 구하기
사용자 입력으로 원의 반지르을 입력받고, 원의 넓이를 구하는 프로그램
원의 넓이 = 반지름 * 반지름 * 3.14159
원의 반지름을 입력하세요 : 10.5
원의 면적 346.36
#3 신체질량지수(BMI)
몸무게와 키를 입력받고, 신체질량지수(BMI)를 구하는 프로그램 작성. BMI는 비만도를 측정하는 한가지 방법.
BMI = 몸무게(kg) / 키(m)의 제곱
몸무게를 입력하세요( kg) : 62
키를 입력하세요(m) : 1.75
당신의 BMI는 : 20.2입니다.
#4 거리 및 속력계산
거리(km)와 속력(km/h)을 입력받고, 해당 거리를 속력으로 달릴 때 걸리는 시간 출력 프로그램 작성.
거리, 속력은 실수. 시간은 시간, 분까지 계산 출력. 초는 소수점 이하 셋째 자리까지 출력
거리(km)을 입력하세요 : 100
속력(km/h)을 입력하세요 : 85
걸리는 시간은 : 1시간, 10분, 35.294초 입니다
걸리는 시간은 : 1시간, 10분, 35.294초 입니다
#5 자판기 잔돈계산
커피 자판기에 입력받은 돈으로 거스름돈 계산 하는 프로그램 작성
커피 값은 150원
지폐는 1000단위만 입력가능.
거스름 돈은 500원, 100원, 50원, 10원.
자판기가 내주는 동전의 종류와 수를 계산하시오
돈을 입력하세요 : 1000
잔돈 드릴게요 ..
500원짜리 동전 1개
100원짜리 동전 3개
50원짜리 동전 1개
10원짜리 동전 0개
'언어로그 > C/C++' 카테고리의 다른 글
| [C/C++] C 언어 포스트 목록 (0) | 2015.08.30 |
|---|---|
| 과제 #2 제어문/선택문을 이용해 다양한 모양그리기 (0) | 2011.06.13 |
| 과제 #1 입출력,연산자 (0) | 2011.06.13 |
| 음수의 표현 (0) | 2011.06.13 |
| 문자열 조작함수 직접 구현하기 (2) | 2011.04.29 |
| 라인 입출력 함수 (0) | 2011.03.27 |
설정
트랙백
댓글
글
음수의 표현
언어로그/C/C++
2011. 6. 13. 22:53
컴퓨터에서는 모든 데이터들이 이진수로 표현된다. 어떻게 데이터들이 표현되는지 아는 것은
때로는 효율적인, 때로는 효과적으로 프로그래밍하기 위해 필수적인 요소이다.
문제가 발생하는 몇 가지 다른 음수의 비트 표현에 대해서 알아보자.
때로는 효율적인, 때로는 효과적으로 프로그래밍하기 위해 필수적인 요소이다.
문제가 발생하는 몇 가지 다른 음수의 비트 표현에 대해서 알아보자.
부호화 비트 표현법
가장 단순하게 음수를 표현하는 방법으로부호화비트 표현법이 있다. 가장 상위 비트를 부호비트로 표현하여
부호비트가 0이면 양수, 1이면 음수로 표현하는 방법이다. 하지만 두 수를 연산하는데 문제가 생기게 되는데...
4비트로 수를 표현하되 첫번째 비트가 부호비트라고 가정해보자
+ 5 => 0101
- 5 => 1101 (부호화 비트 표현)
와 같이 +5는 0101, -5는 부호비트만 바꾼 1010 으로 표현이 된다.
하지만 두 값을 더한 값은 0이 되야 하지만 결과는 0010 (2)가 되어 잘못된 결과가 나오게 된다.
1의 보수 표현법
그래서 다른 이진수 음수 표현법이 필요하게 됐고, 1의 보수표현법, 2의 보수표현법이 생겨나게 됐다.
1의 보수표현법은 음수를, 절대값의 이진수 표현에서 각 비트를 역전 시킨 값을 음수로 나타낸다.
+ 5 => 0101
- 5 => 1010 (1의 보수 표현 )
두 값 0101과 1010을 더하면 결과는 1111 이 나온다. 음수를 1의 보수로 변경했기 때문에
다시 결과를 1의 보수로로 취해주면 결과는 0000이 되어 올바른 결과가 나온다.
2의 보수 표현법
그럼 2의 보수 표현법을 알아보자. 2의 보수 표현법은 1의 보수표현법에 1을 더한 값이다
+ 5 => 0101
- 5 => 1011 (2의 보수 표현)
두 값 0101 과 1011 을 더하면 10000이 나오고, 4비트 표현이기 때문에 최상위 1비트를 버리면,
결과가 0으로 올바른 값이 나온다.
2의 보수표현법은 1의 보수 표현법보다 속도가 더 빠르기 때문에 (총 n비트라면 1의 보수표현법은 2n번의 비트 역전을,
2의 보수표현법은 1n + 1 번의 비트 역전을 수행한다.) 컴퓨터에서 음수를 표현하기 위해 2의 보수표현법이 선택되었다.
'언어로그 > C/C++' 카테고리의 다른 글
| 과제 #2 제어문/선택문을 이용해 다양한 모양그리기 (0) | 2011.06.13 |
|---|---|
| 과제 #1 입출력,연산자 (0) | 2011.06.13 |
| 음수의 표현 (0) | 2011.06.13 |
| 문자열 조작함수 직접 구현하기 (2) | 2011.04.29 |
| 라인 입출력 함수 (0) | 2011.03.27 |
| 배열의 이해 (0) | 2011.03.27 |
1_empty_year.c