ERWin에서 그린 다이어그램으로

데이터베이스의 쿼리를 생성할 수 있다.

 

 

1. Physical/ logical중에 physical을 고른다.

 

2. Actions->Forward Engineer -> Schema 누른 후

Generate해준다.

(책에서는 Tools->Forward Engineer -> Schema 라는데...)

 

Posted by 친절한 LEELAB

erwin에서 다대다 관계 해결하기!

 

1. logical/ physical 중에 logical로 해야함.

삼발이가 양쪽으로 있는 것은 logical에서만 구현이 가능하기 때문이다.

 

2. 양쪽에 삼발이가 있는 거 클릭

두 객체 순서 없이 클릭

 

3. 관계를 클릭한 후 Actions -> Transformations -> Resolve Many to Many Relationship

다른 블로그에서는 오른 쪽 클릭해서 create ~하라고 나오는데

왜 난 create가 안나오는거야 !!!! 하면서

이거 찾았다 ㅠㅠㅠ

 

 

Posted by 친절한 LEELAB

tomcat서버 에러 문제는 무조건 아래 5가지 원인에 기인한다. 



1. web.xml 에러
servlet등록이 잘못되어 있을 때를 말한다. servlet-name, servlet-classm url-pattern을 오타없이 정확히 기입했는지 확인하자.

2. 서블릿 어노테이션
생성한 servlet의 어노테이션에 오타가 있을 경우 서버가 시작되지 않는다. 때문에 어노테이션 부분을 잘못 썼는지 다시 한번 확인해 보자.

3. 포트번호(8080) 충돌
기본설정 포트번호인 8080에 다른 서버가 잡혀 있어서 톰캣서버가 이 포트번호에 접속하려는 경우 충돌이 발생하면 역시 에러가 난다. 톰캣의 conf폴더의 server.xml파일에서 포트번호를 다른 번호로 변경해주자(보통 8090이나 80를 사용한다).

4. 프로젝트 클린 안해서
프로젝트를 주기적으로 클린해주지 않으면 가끔씩 서버가 꼬이는 경우가 있다. 때문에 프로젝트 클린 또한 한 번 실시해주도록 한다.

5. 프로젝트에 서버 업로드 안해서
웹프로젝트에 서버가 업로드 되지 않아서 발생할 경우도 있다(이 때는 프로젝트 파일들의 http관련 클래스에 빨간줄이 그어져 있을 것이다). 해당 프로젝트를 우클릭 한 후 properties => java build path=> libraries => add library => server runtime => tomcat7을 등록한다.



이에 해당하는 원인만 꼼꼼히 살펴주면 반.드.시 문제를 해결할 수 있다. 하나하나씩 정확하게 디버깅하여 에러의 원인을 찾도록 하자.



출처: http://tenlie10.tistory.com/31 [게임 개발자 블로그]

Posted by 친절한 LEELAB

◎html의 form에서 쓴 name을 javascript에서 사용하기

문제점 : if ( myform.userId.value == "") 가 실행이 안됨.

해결 1 : document.all.userId.value를 써보자.

all과 myform은 차이는 해당 폼 오브젝트에서 직접 엑세스 하냐의 차이

document가 큰 경우에는 all이 속도가 느림.

해결 2 : 스크립트를 </body>아래로 옮겨놓고 테스트하기

브라우저가 자바스크립트도 로딩하는데 myform이 생성되지 않은 상태에서 자바스크립트에서 document.myform 이런식으로 참조해서 에러가 났기 때문이다.

해답 출처

 

  • html

'개발 공부 > HTML5 & JAVASCRIPT' 카테고리의 다른 글

javascript 오류 모음  (0) 2017.11.24
daisy_hyun :: CSS font  (0) 2016.12.16
daisy_hyun :: CSS  (0) 2016.12.16
CSS 파일 import 또는 link  (0) 2016.12.16
크랩스 게임 코딩  (0) 2016.05.08
editplus 에디트플러스 설치하는 법  (0) 2016.05.05
Posted by 친절한 LEELAB

break < return < exit 으로 갈수록 범위가 커짐

 

1. break

 -switch문 / 반복문에서 중괄호를 빠져나오게 함.

 

2. return

 -함수에서 빠져나오게 함.

 -그 아래 코드는 실행하지 않음.

 

3.exit

 -main함수가 아닌 곳에서도 프로그램을 종료시킴 (그렇군!)

 -main함수에서 return 0한 것과 동일

 -exit(0) 정상적인 종료

  exit(1) 비정상적인 종료 (에러가 발생함을 보여줌)

Posted by 친절한 LEELAB

 c언어에서는 더 정확한 printf와 scanf를 하기 위해서 %d, %lf같이 형식지정자를 지정해줄 수 있다.

 

 

 형식지정자

 형식

 약자

 d

 int

 decimal number / 10진수

 o

 int

 octal number / 8진수 (printf 할 때 '0'을 표기하지 않음.

 x 또는 X

 int

 hexadecimal number / 16진수(printf하면 '0x'를 따로 표기하지 않음.)

X를 사용하면 ABCDEF 대문자 사용함.

 ld

 long

decimal number / 10진수

 u

 unsigned

decimal number 

 lu

 unsigned long

decimal number

 c

 char

single character

 s

 char pointer

string

 f

 float

 

 g

 float

 

 e

 float

 

 lf

 double

 

 lg

 double

 

 le

 double

 

 

1. int

#include<stdio.h>
void main(void)
{
 int i = 10;
 printf("10진수: %d\n", i);
 printf("8진수: %o\n", i);
 printf("16진수(대문자): %X\n", i);
 printf("16진수(소문자): %x\n", i);
}

 

2. 문자

#include<stdio.h>
void main(void)
{
 char c = 'A'; //A는 아스키코드로 65
 printf("문자열: %c\n", c);
 printf("아스키코드로 'A': %d\n", c);
 
}

 


참고


 

 

Posted by 친절한 LEELAB

c언어에서 다항식을 표현하는 것에는 두가지 방법이 있다.

poly_add1은 배열을 이용해 0차부터 최고차항까지 다 표현한다. 연산이 편리한 장점이 있다.

poly_add2는 0이 아닌 차수만 표현하기에 메모리 낭비가 적다.

 

 

 

#include <stdio.h>#define MAX(a,b) (((a)>(b))?(a):(b))

#define MAX_DEGREE 10
typedef struct
{
    int degree;
    int coef[MAX_DEGREE];
} polynomial;
 
polynomial poly_add1(polynomial A, polynomial B)
{
    int i;
    polynomial C;
    int Apos = 0, Bpos = 0, Cpos = 0;
    int degree_a = A.degree, degree_b = B.degree;
    C.degree = MAX(A.degree, B.degree);
    while (Apos <= A.degree && Bpos <= B.degree) {
        if (degree_a > degree_b) {
            C.coef[Cpos++] = A.coef[Apos++];
            degree_a--;
        }
        else if (degree_a == degree_b) {
            C.coef[Cpos++] = A.coef[Apos++] + B.coef[Bpos++];
            degree_a--; degree_b--;
        }
        else {
            C.coef[Cpos++] = B.coef[Bpos++];
            degree_b--;
        }
    }
    while (C.coef[0] == 0)
    {
        for (i = 0; i < C.degree; i++)
        {
            C.coef[i] = C.coef[i + 1];
        }
        C.degree--;
 
    }
    return C;
}
void print_poly1(polynomial p)
{
 
    int i;
    int exponent = p.degree;
 
    for (i = 0; i <= p.degree; i++)
    {
        if (p.coef[i] != 0)
            printf("%dx^%d ", p.coef[i], exponent);
        exponent--;
    }printf("\n");
}
int main(void) {
    polynomial a = { 6,{ 4, 3, 6, 0, 0, 0, 10 } };
    polynomial b = { 6,{ -4, -3, 7, 0, 5, 1, 10 } };
    //polynomial a = {6, {4, 3, 6, 0, 0, 0, 10}};
    //polynomial b = {4, {7, 0, -5, 1, 0}};
    polynomial c;
    c = poly_add1(a, b);
    printf("a = "); print_poly1(a);
    printf("b = "); print_poly1(b);
    printf("a + b = c = "); print_poly1(c);
    printf("C의 차수:%d\n", c.degree);
}

 

 

#include <stdio.h>
#define MAX_TERMS 11
typedef struct {
    int coef;
    int expon;
} term;
 
int poly_add2(term t1[], int t1Size, term t2[], int t2Size, term t3[])
{
 
    int i = 0, j = 0, k = 0;
    int coef;
    while (i < t1Size && j < t2Size)
    {
        if (t1[i].expon > t2[j].expon)
            t3[k++] = t1[i++];
        else if (t1[i].expon == t2[j].expon)
        {
            if ((coef = t1[i].coef + t2[j].coef) != 0)
            {
                t3[k].coef = coef;
                t3[k].expon = t1[i].expon;
                k++;
            }
            i++; j++;
 
        }
        else
            t3[k++] = t2[j++];
 
    }
    while (i < t1Size)
        t3[k++] = t1[i++];
 
    while (j < t2Size)
        t3[k++] = t2[j++];
 
 
    return k;
}
 
 
void print_poly2(term t[], int tSize)
{
    int i = 0;
 
    for (i = 0; i < tSize; i++)
    {
        printf("%dx^%d ", t[i].coef, t[i].expon);
 
    }printf("\n");
}
 
 
 
int main(void)
{
    term a[] = { { 60, 6 },{ 40, 4 },{ 30, 3 },{ 10, 1 } };
    int aSize = sizeof(a) / sizeof(a[0]);
    term b[] = { { -60, 5 },{ -40, 4 },{ -10, 1 } };
    int bSize = sizeof(b) / sizeof(b[0]);
 
 
 
 
 
    term c[MAX_TERMS];
    int cSize;
 
 
    cSize = poly_add2(a, aSize, b, bSize, c);
 
    printf("a = ");
    print_poly2(a, aSize);
    printf("b = ");
    print_poly2(b, bSize);
    printf("c = ");
    print_poly2(c, cSize);
 
    printf("\nC 항의 개수%d", cSize);
 
 
}
Posted by 친절한 LEELAB

 c언어에서 외부 파일을 불러오는 방법이다.

 

 

int main()
{
    FILE *fp;
    char sentence[30];
    if ((fp = fopen("input.txt""r")) == NULL)
    {
        fprintf(stderr, "fileOpenError");
        exit(1);
    }
    while (fgets(sentence, sizeof(sentence), fp) != NULL)
    {
        printf("%s\n", sentence);
    }
 
 
}
Posted by 친절한 LEELAB

merge sort

 #include<stdio.h>
#include<stdlib.h>
void display(int* A, int n);
void merge(int A[], int p, int q, int r);
void mergeSort(int A[], int p, int r);
void copyArray(int *A, int *temp, int p, int r);
int main()
{
    int n;
    int *A;
    int i;
 
    printf("배열의 길이를 입력하세요:");
    scanf("%d", &n);
    A = (int*)malloc(sizeof(int) * n);
 
    for (i = 0; i < n; i++)
    {
        printf("%d번째 배열의 원소를 입력하세요:", i + 1);
 
        scanf("%d", &A[i]);
    }
 
    printf("정렬 전:\n");;
    display(A, n);
 
    mergeSort(A, 0, n - 1);
    printf("정렬 후:\n");
    display(A, n);
    free(A);
}
 
void mergeSort(int A[], int p, int r)
{
    int q;
 
    if (p == r) return;
 
    q = (p + r) / 2;
    mergeSort(A, p, q);
    mergeSort(A, q + 1, r);
    merge(A, p, q, r);
}
void merge(int A[], int p, int q, int r)
{
    int i = p, j = q + 1, k;
    int *temp = (int*)malloc(sizeof(int) * (r - p + 1));
 
    if (!temp) printf("메모리를 할당할 수 없습니다.");
    for (k = 0; k < r - p + 1; k++)
    {
        while (i > q)
        {
            if (j > r)
            {
                copyArray(A, temp, p, r);
                free(temp);
                return;
            }
            temp[k] = A[j];
            k++;
            j++;
 
        }
        while (j > r)
        {
            if (i > q)
            {
                copyArray(A, temp, p, r);
                free(temp);
                return;
            }
            temp[k] = A[i];
            k++;
            i++;
 
        }
 
        if (A[i] < A[j])
        {
            temp[k] = A[i];
            i++;
        }
        else
        {
            temp[k] = A[j];
            j++;
        }
 
    }
    copyArray(A, temp, p, r);
 
}
void display(int* A, int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        printf("%d ", A[i]);
    }
    printf("\n");
}
 
void copyArray(int *A, int *temp, int p, int r)
{
    int i;
    int j = 0;
    for (i = p; i <= r; i++)
    {
        A[i] = temp[j];
        j++;
    }
}

 

 

insert sort

#include<stdio.h>
insertionSort(int *A, int n)
{
    int i, j, k, temp;
    for (i = 1; i < n; i++)
    {
        for (j = 0; j < i; j++) {
            if (A[j] > A[i]) break;//>:오름차순 <:내림차순
        }
 
       
        temp = A[i];//A[i]인지 A[j]인지 판단
        for (k = i; k > j; k--)
        {
            A[k] = A[k - 1];
 
        }
        A[j] = temp;
 
 
    }
}
void display(int* A, int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        printf("%d ", A[i]);
 
    }
    printf("\n");
}
int main()
{
    int A[5] = { 3,5,4,2, 6 };
    printf("정렬 전:\n");
    display(A, 5);
    insertionSort(A, 5);
    printf("정렬 후:\n");
    display(A, 5);
}

 

quick sort

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void quickSort(struct Student s[], int p, int r);
int partition(struct Student s[], int p, int r);
void print_array(struct Student s[], int n);
void swqp(struct Student s[], int i, int j);
struct Student
{
 int id;
 int english;
 int math;
 int korean;
};

int main()
{
 struct Student* s;
 int n;
 int i;
 srand(time(NULL));
 printf("학생의 수를 입력하세요:");
 scanf("%d", &n);
 s = (struct Student*)malloc(sizeof(struct Student) * n);
 if (!s)
 {
  printf("메모리를 할당할 수 없습니다.");
  return 0;
 }
 for (i = 0; i < n; i++)
 {
  s[i].id = i + 1;
  s[i].english = rand() % 101;
  s[i].math = rand() % 101;
  s[i].korean = rand() % 101;
 }
 quickSort(s, 0, n-1);


}

void quickSort(struct Student s[], int p, int r)
{
 int q;
 if (p >= r) return;
 q = partition(s, p, r);
 quickSort(s, p, q - 1);
 quickSort(s, q + 1, r);

}
void swap(struct Student s[], int i, int j)
{
 struct Student temp;
 temp = s[i];
 s[i] = s[j];
 s[j] = temp;

}
int partition(struct Student s[], int p, int r)
{
 int i = -1, j = 0;
 while (p != r)
 {
  if (s[j].korean < s[r].korean)
  {
   swap(i + 1, j);
   i++;
   j++;
  }
  else
   j++;

 }
 swap(i + 1, r);
 return i + 1;
}

void print_array(struct Student s[], int n)
{
 int i;
 printf("        id     korean    english        math\n");
 for (i = 0; i < n; i++)
 {
  printf("%10d %10d %10d %10d", s[i].id, s[i].korean, s[i].english, s[i].math);
  printf("\n");
 }

}

 

 

 

 

Posted by 친절한 LEELAB

m[0][0]에서 m[3][3]까지 가는데 합이 가장 큰 길은??

M배열에 자기 까지의 최고 합을 메모한다.

 

m배열

 6

12 

 5

 5

11 

 18

 7

 17

3

 3

 8

 10

14

 9

 

 #include <stdio.h>
#include <stdlib.h>
 
int matrixPath(int m[][4], int r, int c, int i, int j, int M[][4])
{
    if (i == 0 && j == 0)
    {
        printf("m[%d][%d] :%d  \n", i, j, m[i][j]);
        return m[i][j];
    }
    else if (i == 0)
    {
        if (M[0][j] == 0)
            M[0][j] = matrixPath(m, r, c, 0, j - 1, M) + m[i][j];
        printf("M[%d][%d] :%d  \n", i, j, M[i][j]);
 
        return M[0][j];
 
    }
    else if (j == 0)
    {
        if (M[i][0] == 0)
            M[i][0] = matrixPath(m, r, c, i - 1, 0, M) + m[i][j];
        printf("M[%d][%d] :%d  \n", i, j, M[i][j]);
       
        return M[i][0];
 
    }
    else
    {
        int a, b;
        if (M[i - 1][j] == 0)
            M[i - 1][j] = matrixPath(m, r, c, i - 1, j, M);
        if (M[i][j - 1] == 0)
            M[i][j - 1] = matrixPath(m, r, c, i, j - 1, M);
        a = M[i - 1][j];
        b = M[i][j - 1];
        printf("M[%d][%d] :%d , M[%d][%d]: %d \n",i-1, j, a, i, j-1,b);
        return ((M[i - 1][j] < M[i][j - 1]) ? M[i - 1][j] : M[i][j - 1]) + m[i][j];
    }
}
int main(void)
{
    int m[4][4] =  { { 6,7,12,5 },{ 5,3,11,18 },{ 7,17,3,3 },{ 8,10,14,9 } };
    int i, j, r, c;
    //int **M ;
 
    int M[4][4];
    r = c = 4; // 4x4 matrix
 
   
    for(i = 0; i < r; i++)
        for (j = 0; j < c; j++)
        {
            M[i][j] = 0;
 
       
        }
       
 
 
        printf("%d\n", matrixPath(m, r, c, 3, 3, M));
}

 

 

 

Posted by 친절한 LEELAB