모바일 오유 바로가기
http://m.todayhumor.co.kr
분류
게시판
베스트
베스트오브베스트
베스트
오늘의베스트
유머
유머자료
유머글
이야기
자유
고민
연애
결혼생활
좋은글
자랑
공포
멘붕
사이다
꿈
똥
군대
밀리터리
미스터리
술한잔
오늘있잖아요
투표인증
새해
이슈
시사
시사아카이브
사회면
사건사고
생활
패션
패션착샷
아동패션착샷
뷰티
인테리어
DIY
요리
커피&차
육아
법률
동물
책
지식
취업정보
식물
다이어트
의료
영어
맛집
추천사이트
해외직구
취미
사진
사진강좌
카메라
만화
애니메이션
포니
자전거
자동차
여행
바이크
민물낚시
바다낚시
장난감
그림판
학술
경제
역사
예술
과학
철학
심리학
방송연예
연예
음악
음악찾기
악기
음향기기
영화
다큐멘터리
국내드라마
해외드라마
예능
팟케스트
방송프로그램
무한도전
더지니어스
개그콘서트
런닝맨
나가수
디지털
컴퓨터
프로그래머
IT
안티바이러스
애플
안드로이드
스마트폰
윈도우폰
심비안
스포츠
스포츠
축구
야구
농구
바둑
야구팀
삼성
두산
NC
넥센
한화
SK
기아
롯데
LG
KT
메이저리그
일본프로야구리그
게임1
플래시게임
게임토론방
엑스박스
플레이스테이션
닌텐도
모바일게임
게임2
던전앤파이터
롤
마비노기
마비노기영웅전
하스스톤
히어로즈오브더스톰
gta5
디아블로
디아블로2
피파온라인2
피파온라인3
워크래프트
월드오브워크래프트
밀리언아서
월드오브탱크
블레이드앤소울
검은사막
스타크래프트
스타크래프트2
베틀필드3
마인크래프트
데이즈
문명
서든어택
테라
아이온
심시티5
프리스타일풋볼
스페셜포스
사이퍼즈
도타2
메이플스토리1
메이플스토리2
오버워치
오버워치그룹모집
포켓몬고
파이널판타지14
배틀그라운드
기타
종교
단어장
자료창고
운영
공지사항
오유운영
게시판신청
보류
임시게시판
메르스
세월호
원전사고
2016리오올림픽
2018평창올림픽
코로나19
2020도쿄올림픽
제목
이름
회원가입
ID찾기
PASS찾기
게시판찾기
×
헬로날개넷
님에 대한 회원메모
회원메모는 메모 작성자 본인만 볼 수 있습니다.
확인
오유인페이지
개인차단 상태
헬로날개넷
님의
개인페이지입니다
회원메모
가입 :
04-06-20
방문 :
105회
닉네임변경 이력
일반게시판
베스트게시판
베스트오브베스트
댓글목록
회원차단
회원차단해제
헬로날개넷
님의 댓글입니다.
전체선택
번호
제목
댓글날짜
추천/비공감
삭제
120
아래 윈도우 체험지수 관해서 질문한 사람인데요;;
[새창]
2012-06-27 23:13:48
0
삭제
중고 판매자분이 ssd를 때고 hdd로 바꾼거 아니에요??
119
SSD 용량......
[새창]
2012-06-27 23:11:58
1
삭제
가상메모리 해제 / 최대절전모드 해제
118
20대 여자가 노트북 바꾸려는데 추천 부탁드려도 될까요?
[새창]
2012-06-24 23:58:08
0
삭제
도시바는 평이 안좋아요.
그리고 msi는 제가 써보고 잇는데
싼게비지떡이에요 정말 ㅡㅡ............ 소음이 왱왱. 노트북은 정말 성능이 다가 아니에요 ㅋㅋㅋㅋ
117
20대 여자가 노트북 바꾸려는데 추천 부탁드려도 될까요?
[새창]
2012-06-24 23:54:40
0
삭제
돈만 잇으면 삼성이 최고
돈값은 합니다~~~~~~
없으면 그냥 가볍고 싼거 추천....
작고가벼윤거에 모니터 추가로 사서쓰면 쾌적해요
116
메인보드 질문이용~~~(그래픽카드 사게요)
[새창]
2012-06-24 23:41:42
0
삭제
1g가 좋은대 모니터 해상도가 1920정도면 별 상관 없어요
115
리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요
[새창]
2012-06-24 23:22:01
1
삭제
헐. 시프면 성적관리 프로그램은 하면안돼요 ㅋㅋㅋㅋㅋㅋ vc에서도 그대로 돌아가요. 자료구조 과제엿엇어요 저건;;
식사하는 철학자 가 시프 관련 내용이 그나마 잇을텐데...
시프는 저도 전혀 이해가 안가서 도움이 안되겟네요 ㅋㅋㅋㅋ
114
리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요
[새창]
2012-06-24 23:19:01
1
삭제
설명 필요하면... 구글에거 wingnet88 검색하셔서 이글루스? 블로그에 잇어요...
113
리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요
[새창]
2012-06-24 23:09:58
1
삭제
위에건 성적관리 프로그램.......
비쥬얼스튜디오 든, 리눅스 gcc이든..잘 돌아가요.........
fork() pipe() 이런건 저도 전혀 몰라서 없네요 ㅜ_ㅜ
112
리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요
[새창]
2012-06-24 23:08:41
1
삭제
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM 4 //과목수
typedef struct info{
unsigned int schoolnum;
char *name; //동적할당으로 가변길이로 받을예정
char sex;
int point[NUM]; //과목수
int sum;
int avg;
int rank;
}info;
typedef struct doubleList{ //head - firstnode 는 next,prev 성립, 마지막node의 next 는 NULL 로 설정(순환리스트 X, TAIL X)
info record;
struct doubleList * next;
struct doubleList * prev;
}doubleList;
void insert_list(doubleList *head, info record);
void print_list(doubleList *head);
void rank_list(doubleList *head); //퀵소트를 이용해 구현
doubleList* search_list(doubleList *head, int schoolnum); //순차탐색으로 구현
void delete_list(doubleList *head, int schoolnum);
void delete_all(doubleList *head);
void input_data(info *record); //사용자로부터 data를 입력받음
void rank_Qsort( int *nArr,int *nArr_2, int nStart, int nEnd);
void swap(int *a, int *b);
int main(void){
doubleList *head = (doubleList *)calloc(1,sizeof(doubleList));
doubleList *search = (doubleList *)calloc(1,sizeof(doubleList));
info record;
int input, i;
int schoolnum;
while(1){
printf("1 :: 레코드 입력n2 :: 리스트 출력n3 :: 석차계산n4 :: 특정레코드 검색n5 :: 특정레코드 삭제n6 :: 모든레코드 삭제n7 :: 종료n");
printf("input number :: ");
scanf("%d",&input);
switch(input){
case 1:
input_data(&record);
insert_list(head,record);
break;
case 2:
print_list(head);
break;
case 3:
rank_list(head);
break;
case 4:
printf("검색할 학번 :: ");
scanf("%d",&schoolnum);
search = search_list(head, schoolnum);
printf("n학번 :: %d | 이름 :: %s | 성별 :: %c | 등수 :: %dn",search->record.schoolnum, search->record.name,search->record.sex, search->record.rank);
for(i=0;i<NUM;i++)
printf("과목<%d> :: %d | ", i+1, search->record.point[i]);
printf("n");
printf("합계 :: %d | 평균 :: %dnn",search->record.sum,search->record.avg);
break;
case 5:
printf("삭제할 학번 :: ");
scanf("%d",&schoolnum);
delete_list(head, schoolnum);
break;
case 6:
delete_all(head);
break;
case 7:
system("cls");
printf("bye bye~~~~n");
system("pause");
exit(0);
break;
default:
printf("ERR :: 번호를 잘못 입력하셨습니다.(1~6)n");
break;
}
}
}
void insert_list(doubleList *head, info record){
doubleList *pre_p, *newNode, *p;
newNode = (doubleList*)malloc(sizeof(doubleList));
if(newNode == NULL){
printf("Memory allocation error n");
exit(0);
}
if(head->next == NULL){ //리스트가 비어있을 경우
head->next = newNode;
newNode->next = NULL; //꼬리 node에서 next는 NULL로 지정
newNode->prev = head;
}else{ //리스트에 이미 자료가 있을 경우(학번에 따라 오름차순 정렬)
pre_p = head;
p = head->next;
while( (p!=NULL)&&(record.schoolnum > p->record.schoolnum) ){ //schoolnum 비교
pre_p = p;
p = p->next;
} //조건에 맞지않는 경우 한칸씩 앞으로 전진
newNode->next = pre_p->next;
newNode->prev = pre_p;
if(p!=NULL) //만약 newNode가 맨 뒤에 삽입될 경우 p는 존재하지 않음
p->prev = newNode;
pre_p->next = newNode;
}
newNode->record = record;
}
void print_list(doubleList *head){
doubleList *p = head->next;
int i;
int count = 0;
system("cls");
if(head->next == NULL)
printf("Empty List!!n");
while(p!=NULL){
printf("-------------%d list-------------n",++count);
printf("학번 :: %d | 이름 :: %s | 성별 :: %c | 등수 :: %dn",p->record.schoolnum, p->record.name,p->record.sex, p->record.rank);
for(i=0;i<NUM;i++)
printf("과목<%d> :: %d | ", i+1, p->record.point[i]);
printf("n");
printf("합계 :: %d | 평균 :: %dn",p->record.sum,p->record.avg);
printf("n");
p = p->next;
}
}
void rank_list(doubleList *head){
int *nArr[2]; //nArr[0] :: sum값, nArr[1] :: 해당하는 학번값
int count=0, temp;
int i;
doubleList *p = head->next;
nArr[1] = (int*)calloc(0,sizeof(int)); //점수에 해당하는 학번값 저장
nArr[0] = (int*)calloc(0,sizeof(int)); //등수를 계산하기위해 점수를 오름차순 정렬 -> 등수 실제 입력시 역으로 입력
while(p!=NULL){
count++;
nArr[0] = (int*)realloc(nArr[0], sizeof(int)*count);
nArr[1] = (int*)realloc(nArr[1], sizeof(int)*count);
*(nArr[0]+count-1) = p->record.sum;
*(nArr[1]+count-1) = p->record.schoolnum;
p = p->next;
}
rank_Qsort(nArr[0],nArr[1],0,count-1); //rank 구하려고 sort를 이용함
p = head->next; //p가 가르치는 노드 초기화 cuz)다시 링크 타고 들어가기위함
while(p!=NULL){ //실제로 rank 입력
for(i=0;i<count;i++){
if(p->record.schoolnum == *(nArr[1]+i)){
p->record.rank = count-(i); //퀵소트 수행후 오름차순으로 되어있는데 석차는 내림차순으로 계산해야해서 count - i
break;
}
}
p=p->next;
}
}
doubleList* search_list(doubleList *head, int schoolnum){
doubleList *p;
err: //만약 해당하는 학번이 없을경우 goto문에 의해 여기서부터 다시시작
p = head->next;
if(head->next == NULL)
printf("Emptry List!!n");
while( (p->record.schoolnum != schoolnum)&&(p!=NULL) ){ // 해당 값을 가지는 노드가 나타날 때 까지 포인터 p를 이동시킴.
p = p->next;
if(p == NULL){ //해당하는 학번을 찾을 수 없는 경우
printf("ERR :: 해당하는 학번이 없습니다n");
printf("학번 :: ");
scanf("%d",&schoolnum);
goto err; //해당하는 학번이 없는경우 search_list 를 다시 시작
//goto문 사용이유는 p = head->next부터 다시 리셋해야하는데 너무 소스가 길어지기 때문
}
}
return p; // 해당 값을 가지는 노드의 주소값을 반환
}
void delete_list(doubleList *head, int schoolnum){
doubleList *p = NULL;
p = search_list(head, schoolnum);
if((*head).next == NULL)
printf("Emptry List!!n");
p->prev->next = p->next; //이중연결리스트에서 prev값을 현재 p의 next값에 연결
if(p->next != NULL) //맨 앞의 노드는 head와 연결했지만 "맨 뒤"의 노드의 next는 NULL로 해놨음
p->next->prev = p->prev; //이중연결리스트에서 next값을 현재 p의 prev값에 연결
free(p);
rank_list(head); //delete를 하면 순위가 바뀌므로 rank를 명령
}
void delete_all(doubleList *head){
doubleList *p = head->next;
doubleList *deleteNode;
deleteNode = (doubleList *)malloc(sizeof(doubleList));
while(p->next != NULL){
deleteNode = p;
p = p->next;
free(deleteNode);
}
head->next = NULL;
}
void input_data(info *record){
int i;
char temp[20]; //구조체에 name을 동적할당으로 받기위한 임시값
(*record).sum = 0; //과목 점수 입력받을 때 이용하기 위해 초기화
printf("학번 :: ");
scanf("%d",&(*record).schoolnum);
printf("이름 :: ");
scanf("%s",&temp);
(*record).name = (char *)calloc(strlen(temp),sizeof(char));
strcpy((*record).name, temp);
fflush(stdin);
while(1){
printf("성별(M or W) :: ");
scanf("%c",&(*record).sex);
fflush(stdin);
if(((*record).sex == 'M') ||((*record).sex == 'W'))
break;
}
for(i=0;i<NUM;i++){
printf("과목(%d) :: ", i+1);
scanf("%d",&(*record).point[i]);
(*record).sum += (*record).point[i];
}
(*record).avg = (*record).sum / NUM;
(*record).rank = NULL; //rank는 따로 rank 명령이 들어와야 작성
system("cls");
}
void rank_Qsort( int *nArr,int *nArr_2, int nStart, int nEnd){
int nPivot = nArr[ nStart ];
int nLeft = nStart + 1;
int nRight = nEnd;
// 개수가 적어서 찾을 것이 없는가?
if( nEnd - nStart <= 0 ){
return;
}
while( 1 ){
// Left를 찾는다.
for( ; nLeft <= nEnd ; nLeft++ ){
if( nPivot < nArr[ nLeft ] ){
break;
}
}
// Right를 찾는다.
for( ; nRight > nStart ; nRight-- ){
if( nPivot > nArr[ nRight ] ){
break;
}
}
// 바꿔야할 상황이라면 바꾼다.
if( nLeft <= nEnd && nRight > nStart && nLeft < nRight ){
swap( &nArr[ nLeft ], &nArr[ nRight ] );
swap( &nArr_2[ nLeft ], &nArr_2[ nRight ] );
continue;
}
// Left, Right가 모두 범위 밖으로 나갔다면 배열 안의 숫자는 모두 같은 숫자다.
if( nRight <= nStart && nLeft > nEnd ){
return;
}
// 조건이 된다면 왼쪽 Array를 Recursive로 돌린다.
if( nRight > nStart ){
// Pivot과 Right를 바꾼다.
swap( &nArr[ nStart ], &nArr[ nRight ] );
swap( &nArr_2[ nStart ], &nArr_2[ nRight ] );
rank_Qsort( nArr, nArr_2, nStart, nRight );
}
// 오른쪽 Array는 지금의 함수를 재사용.
nStart = nRight + 1;
nPivot = nArr[ nStart ];
nLeft = nStart + 1;
nRight = nEnd;
// 개수가 적어서 찾을 것이 없는가?
if( nEnd - nStart <= 0 ){
return;
}
}
}
void swap(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
111
리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요
[새창]
2012-06-24 23:07:30
1
삭제
식사하는 철학자 알고리즘 문제.
근데....... 보통 학부수준에선
시스템프로그래밍만 아니면 윈도우- 리눅스 다 되는데 -.-;;
110
리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요
[새창]
2012-06-24 23:05:37
1
삭제
#include <stdio.h>
#include <stdlib.h>
#define N 5 //5명의 철학자
#define Left(p) (p)
#define Right(p) (((p) + 1) % N)
typedef int *semaphore;
semaphore chopstick[N];
semaphore make_semaphore(void);
int fork(void);
int pipe(int pd[2]);
int read(int fd, void *buf, unsigned len);
int write(int fd, void *buf, unsigned len);
void philosopher(int p);
void get_chopstick(int p);
void return_chopstick(int p);
void signal(semaphore s);
void wait(semaphore s);
void sleep(unsigned seconds);
int main() //메인함수
{
int i;
for (i = 0; i < N; ++i) { //테이블에 5개의 젓가락을 놓음.
chopstick[i] = make_semaphore();
signal(chopstick[i]);
}
for (i = 0; i < N; ++i) //5명의 철학자를 생성.
if (fork() == 0)
break;
philosopher(i);
return 0;
}
void philosopher(int p)//철학자 상태 출력함수.
{
char *s;
int i = 1;
while(1){
get_chopstick(p);
printf("t%d Philosopher eat [%d] !n", p, i);
sleep(1);
return_chopstick(p);
printf("t%d Philosopher thinking ! n", p);
sleep(1);
i++;
}
}
void get_chopstick(int p) //젓가락을 얻는 함수.
{
if (p == 0) {
wait(chopstick[Right(p)]);
// printf("%d Philosopher get right chopstick.n", p);
sleep(1); //데드락 발생 방지
wait(chopstick[Left(p)]);
// printf("%d Philosopher get left chopstick.n", p);
}
else {
wait(chopstick[Left(p)]);
// printf("%d Philosopher get left chopstick.n", p);
sleep(1); //데드락 발생 방지
wait(chopstick[Right(p)]);
// printf("%d Philosopher get right chopstick.n", p);
}
}
void return_chopstick(int p) //젓가락을 반환하는 함수.
{
signal(chopstick[Left(p)]);
// printf("%d Philosopher return left chopstick.n", p);
signal(chopstick[Right(p)]);
// printf("%d Philosopher return right chopstick.n", p);
}
semaphore make_semaphore(void)// 세마포어 생성함수
{
int *sema;
sema = calloc(2, sizeof(int));
pipe(sema);
return sema;
}
void wait(semaphore s) //wait 발생이 안될시 에러체크 함수.
{
int junk;
if (read(s[0], &junk, 1) <= 0) {
printf("ERROR: wait() failed, check semaphore creation.n");
exit(1);
}
}
void signal(semaphore s) //signal 발생이 안될시 에러체크 함수.
{
if (write(s[1], "x", 1) <= 0) {
printf("ERROR: write() failed, check semaphore creation.n");
exit(1);
}
}
109
소수구하기 알고리즘에서 시간복잡도를...
[새창]
2012-06-24 23:02:51
0
삭제
아 n의 제곱근 까지만 해봐도 되는구나
에라토스테네스 체 알고리즘쓰면 복잡도가 얼마나 나올래나............
은근히 재밋네요 이거 생각해보는것도 ㅋㅋ
108
메인보드 질문이용~~~(그래픽카드 사게요)
[새창]
2012-06-24 22:49:08
0
삭제
호환은 되지만,
파워용량 필히 점검하세요. 250은 좀 먹어요
그리고 ddr2 2gb 박으시면 될꺼같은데,,, ddr3가 아니라 ddr2니까 주의해서 구매하시고요
107
소수구하기 알고리즘에서 시간복잡도를...
[새창]
2012-06-24 22:36:09
0
삭제
댓글수정이 안되네;;;
첫번째껀 n까지의 숫자를 n-1번 나눠보니까 O(n^2)이고
두번째껀 n까지의 숫자를 n보다 작은 소수의 개수만큼 나눠보니까 O(n^2 / log n)이 나온거구요...
(n보다 작은 소수의 개수는 n / log n )
106
소수구하기 알고리즘에서 시간복잡도를...
[새창]
2012-06-24 22:34:57
0
삭제
그냥 구조체 내에 1~n 까지 숫자를 저장하고, flag 하나 두어서,
만약 나눠지는 숫자면 flag 를 1로 바꾸는식으로 구현했어요..
첫번째꺼는 정말 고전식으로 만약 10이 소수인지 아닌지 알아보려면
1~9까지 전부다 나눠보는 방식이고,
두번째꺼는 조금더 나아져서, 10이 소수인지 아닌지 알아보려면
10보다 작은 소수인 2,3,5,7 을 이용해서 나눠보는 방식으로 구현했어요...
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]