데이타처리에 다시 질문합니다.

phs38의 이미지

제가 물어보려는 건 메모리의 기억장소에 예를 들어 10비트 만큼의 공간을 확보하고 번호를 붙여서 주소를 주는 것이지요 0번부터9번으로 그래서 a라는 게 그 기억장소를 가르키게 합니다. a의 0번부터 4번까지 6번부터 9번까지 데이타를 저장시키면 5번은 비게 되지요. 번호가 매겨진데로 a를 읽어들일 때 a[5]은 주소만 할당되었지 저장된 데이타가 없으니 읽어들일게 없다는 것을 알아차리게 프로그램하는 게 가능한지를 묻고 싶었습니다. 또 이러한 데이타가 메모리의 기억장소뿐만 아니라 하드에도 파일로서 저장이 가능한지 알고 싶습니다.
자세히 알려주세요. 아니면은 이런것을 알 수 있는 좋은 책소개라도..

idlock의 이미지

빈공간 이라 말씀이 정확히 어떤 말씀인지 모르겠지만 일반적으로 가능합니다.
그건 프로그램상의 기법이라고 생각되는군요

또한 배열이 파일로 저장이 됩니다. 언어에 따라 다르긴 하지만요
이것또한 프로그램상의 기법적으로 -.- 저장이 되지요.

근데 저 배열이 c, c++, java, php... 어떤 것인지 말씀을 해주셔야 정확한답변이 가능할듯합니다

phs38의 이미지

씨나 파이썬으로 알려주세요.
초보자임을 감안하셔서 알아듣기 쉽게 설명해주시면 감사하겠습니다.

제가 아는 게 부족한 자라 질문 밖에 글을 올리지 못할거 같네요. 부디 많은 답변 바랍니다.

purewell의 이미지

'C'에서 숫자형에 대해 비어있는 형은 없습니다.

float형이나 double 같은 경우 C99에 NaN이라는 값을 정의하고는

있지만 이것이 비어있다는 의미는 아니죠.
(Not A Number)

'C'에서 어떤 변수의 선언은 대부분 어느 메모리주소(그리고 영역)와

연결하여 사람이 알아보기 쉽게 하는 것입니다.

따라서 비어 있다는 것은 있을 수 없죠.
(잘못된 메모리주소와 영역이 아니라면)

만약 int형의 비어있다를 표시하려거든

-1 이나 0등의 잘 쓰이지 않는 수로 비어있다의 표식으로써 쓰면

될 것 같습니다.

아니면 포인터배열로 만들어서 비어있으면 할당을 안 하고,

차 있다면 할당을 해서 메모리주소 값이 NULL인가 확인하는 방법이 있을

수 있겠네요...

int* array[20];
for (int i=0; i<20; i++) array[i]=NULL;
// ... SOME PROCESSING
if (array[k]==NULL) {/* 비었음! */}
else {/* 뭔가 있음! */}

구조체나 클래스라면 bool 값을 넣으면 되겠죠...

typedef struct tagMYSTRUCT
{
  bool bEmpty;
  int nKey;
} MYSTRUCT, *PMYSTRUCT

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

phs38의 이미지

제가 물어보려는 건 메모리의 기억장소에 예를 들어 10비트 만큼의 공간을 확보하고 번호를 붙여서 주소를 주는 것이지요 0번부터9번으로 그래서 a라는 게 그 기억장소를 가르키게 합니다. a의 0번부터 4번까지 6번부터 9번까지 데이타를 저장시키면 5번은 비게 되지요. 번호가 매겨진데로 a를 읽어들일 때 a[5]은 주소만 할당되었지 저장된 데이타가 없으니 읽어들일게 없다는 것을 알아차리게 프로그램하는 게 가능한지를 묻고 싶었습니다. 또 이러한 데이타가 메모리의 기억장소뿐만 아니라 하드에도 파일로서 저장이 가능한지 알고 싶습니다.
자세히 알려주세요. 아니면은 이런것을 알 수 있는 좋은 책소개라도..

제가 아는 게 부족한 자라 질문 밖에 글을 올리지 못할거 같네요. 부디 많은 답변 바랍니다.

cedar의 이미지

purewell님이 설명해 주셨듯,
C/C++에는 '비어있다.'라는 걸 나타내는 값이 없습니다.

배열에서 비었다라는 의미를 굳이 나타내려면,
C 배열을 써서 나타내기는 힘들고요,
ANSI C++ STL의 연관(associative) 배열 컨테이너인 map(또는 hash_map)을
쓰면 됩니다.
awk나 perl, python도 연관 배열을 기본으로 지원하니 거의 비슷한 방법으로 쓸 수 있죠.

//---------------------------------------------------------------------------
#include <iostream>
#include <map>
//---------------------------------------------------------------------------
int main()
{
    std::map<int, int> a;
    a[0] = 0; a[1] = 1; a[2] = 2; a[3] = 3; a[4] = 4;
    a[6] = 6; a[7] = 7; a[8] = 8; a[9] = 9;

    std::cout << "a[5] is "
    if (a.count(5) == 0)
        std::cout << "not ";
    std::cout <<"found.\n";
}
//---------------------------------------------------------------------------
익명 사용자의 이미지

구조체를 활용합니다. 데이타 처리의 핵심중 하나는 구조체를 얼마나 잘 활용하냐에 있습니다. 연결리스트 외 기본 알고리즘의 기본이 됩니다..

struct data
{
     int yes_no;  // 1 데이타 있음 , 0 데이타 없음
     Type data; // Type은 원하는 데이타 타입
};

struct data* dt = (struct data*)malloc( sizeof(data) * 10 );
dt[0].yes_no = 1;
dt[0].data = value;
.
.
.
int i;
for( i = 0; i < 10 ; i++ )
    if( dt[i].yes_no != 1 ){
        // skip code, 데이타 없음
    }
}
        
//파일 저장시
FILE* fp = fopen( filename , "w" );
for( i = 0; i < 10; i++)
    fwrite( &dt[i], sizeof(data), 1, fp );  // 블럭 단위 저장시 fwrite이용

메모리할당에 관한 예제는 우리의 영원한 바이블 C Programming Language(대영사, 참고로 C창시자가 쓴 책임다..)의 기억장소 할당기( 8장, 192p) 부분에 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.