void make_cart() { CART cart = {}; // クリア // 以下2行は共通 cart.person_number = 0; cart.prev_station_time = cart.next_station_time = standard_time; cart.cart_speed = default_cart_speed; #if 1 FILE *fp; const char *fname = "cart_info.csv"; char name[10]; int line, station; char direction[10]; double speed; fp = fopen( fname, "r" ); if( fp == NULL ){ printf( "%sファイルが開けません\n", fname ); exit(-1); } /* fscanf()やscanf()関数には%dや%sなどの、 変換文字(変換仕様)と言われる指定方法があります。 その中に、%[^...] という変換文字があり、カッコ内の文字以外を読み込むという意味です。 つまり、%[^abc] の場合は、「abc」以外の文字を読み込むという指定が出来ます。 これを、CSVファイル読み込みにも利用してみます。 */ int ret; int cart_number = 0; // 1行ステップ、捨て行 char dummy_line[100]; fgets( dummy_line, sizeof(dummy_line), fp); while((ret = fscanf( fp, "%[^,],%d,%d,%[^,],%lf", name, &line, &station, direction, &speed )) == 5 ){ printf("ret = %d: %s %d %d %s %lf \n", ret, name, line, station, direction, speed ); cart.number = cart_number++; strcpy(cart.name, name); cart.orig_station.line_num = cart.prev_station.line_num = line; cart.orig_station.station_num = cart.prev_station.station_num = station; if (strcmp(direction, "UP") == 0){ cart.direction = UP; cart.area = station; } else if (strcmp(direction, "DOWN") == 0){ cart.direction = DOWN; cart.area = station - 1; } else{ printf("%s\n",direction); printf("stop for error\n"); exit(0); } cart.cart_speed = speed; add_cart(&cart); } fclose( fp ); #endif }
/* C/C++あれこれ/Excel仕様のCSVファイルの読み込みと表示 http://winter-tail.sakura.ne.jp/pukiwiki/index.php?C%A1%BFC%2B%2B%A4%A2%A4%EC%A4%B3%A4%EC%2FExcel%BB%C5%CD%CD%A4%CECSV%A5%D5%A5%A1%A5%A4%A5%EB%A4%CE%C6%C9%A4%DF%B9%FE%A4%DF%A4%C8%C9%BD%BC%A8 を、私が忘れないことを目的として張り付けさせて頂きました 原作者は台北猫々さん(http://winter-tail.sakura.ne.jp/index.shtml)です。 mingwでも問題なく動いており、心より感謝申し上げます。 */ /* ==================== okinawa.csv ========================= */ 47201,"900 ","9000,""000","オキナワケン","ナハシ","イカニケイサイガナイバアイ","沖縄県","那覇市","以下に掲載がない場合",0,0,0,0,0,0 47201,"90101","9010154","オキナワケン","ナハシ","アカミネ","沖縄県","那覇市","赤嶺",0,0,0,0,0,0 /* ==================== main.cpp ========================= */ /* g++ -g main.cpp CSVReader.cpp -o CSVReader でmingwでコンパイルできます */ #include <iostream> #include <string> #include <vector> #include <fstream> using namespace std; #include "CSVReader.h" int main(void) { std::fstream r("c:\\okinawa.csv", std::ios::in); if( !r.is_open() ) { cerr << "Open Error! :" << endl; return -1; } CSVReader csv(r); vector<string> tokens; while( !csv.Read(tokens) ) { for( unsigned int i=0; i<tokens.size(); i++ ) { //cout << "[" << tokens[i].c_str() << "]" << endl; // ここちょっっとテスト printf("[%s]\n",tokens[i].c_str()); } } csv.Close(); return 0; } /* ==================== CSVReader.h ========================= */ /** * CSVファイル読み込みクラス * @author 台北猫々 * @version CVS $Id: CSVReader.h,v 1.1 2008/03/26 12:45:24 tamamo Exp $ * @license BSD license: * Copyright (c) 2008, Taipei Cat Project * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the Taipei Cat Project nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _CSVREADER_H__ #define _CSVREADER_H__ #include <string> #include <vector> #include <fstream> using namespace std; #define DEFAULT_SEPARATOR ',' #define DEFAULT_QUOTE_CHARACTER '"' class CSVReader { public: /** * コンストラクタ * @param stream ファイルストリーム * @comment セパレータ(,), エンクオート(") */ CSVReader(fstream& stream); /** * コンストラクタ * @param stream ファイルストリーム * @param sep セパレータ * @comment エンクオート(") */ CSVReader(fstream& stream, const char sep); /** * コンストラクタ * @param stream ファイルストリーム * @param sep セパレータ * @param quo エンクオート */ CSVReader(fstream& stream, const char sep, const char quo); /** * デストラクタ */ virtual ~CSVReader(void); /** * CSVファイルを1行読み込んで、分割して配列で返します。 * @param tokens トークン(OUT) * @return 0:正常 -1:EOF */ int Read(vector<string>& tokens); /** * ファイルストリームをクローズします。 * @return 0:正常 -1:異常 */ int Close(void); private: /** * ファイルから1行読み込みます。 * @param line 行データ * @return >=0:読み込んだデータ長 -1:EOF */ int GetNextLine(string& line); /** * データをパースします。 * @param nextLine 行データ * @param tokens パースしたデータの配列(OUT) * @return 0 */ int Parse(string& nextLine, vector<string>& tokens); std::fstream* pstream; char SEPARATOR; char QUOTE; }; #endif /* ==================== CSVReader.cpp ========================= */ /** * CSVファイル読み込みクラス * @author 台北猫々 * @version CVS $Id: CSVReader.cpp,v 1.1 2008/03/26 12:45:24 tamamo Exp $ * @license BSD license: * Copyright (c) 2008, Taipei Cat Project * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the Taipei Cat Project nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "CSVReader.h" CSVReader::CSVReader(fstream& stream): SEPARATOR(DEFAULT_SEPARATOR), QUOTE(DEFAULT_QUOTE_CHARACTER), pstream(&stream) { } CSVReader::CSVReader(fstream& stream, const char sep): SEPARATOR(sep), QUOTE(DEFAULT_QUOTE_CHARACTER), pstream(&stream) { } CSVReader::CSVReader(fstream& stream, const char sep, const char quo): SEPARATOR(sep), QUOTE(quo), pstream(&stream) { } CSVReader::~CSVReader(void) { } int CSVReader::Read(vector<string>& tokens) { tokens.clear(); string nextLine; if( GetNextLine(nextLine)<=0 ) { return -1; } Parse(nextLine, tokens); return 0; } int CSVReader::GetNextLine(string& line) { if( !pstream || pstream->eof() ) { return -1; } std::getline( *pstream, line ); return (int)line.length(); } int CSVReader::Parse(string& nextLine, vector<string>& tokens) { string token; bool interQuotes = false; do { if (interQuotes) { token += '\n'; if (GetNextLine(nextLine)<0) { break; } } for (int i = 0; i < (int)nextLine.length(); i++) { char c = nextLine.at(i); if (c == QUOTE) { if( interQuotes && (int)nextLine.length() > (i+1) && nextLine.at(i+1) == QUOTE ){ token += nextLine.at(i+1); i++; }else{ interQuotes = !interQuotes; if(i>2 && nextLine.at(i-1) != SEPARATOR && (int)nextLine.length()>(i+1) && nextLine.at(i+1) != SEPARATOR ){ token += c; } } } else if (c == SEPARATOR && !interQuotes) { tokens.push_back(token); token.clear(); } else { token += c; } } } while (interQuotes); tokens.push_back(token); return 0; } /** * ファイルストリームをクローズします。 * @return 0:正常 -1:異常 */ int CSVReader::Close(void) { if(pstream) { pstream->close(); pstream = NULL; } return 0; }
https://affiliate.amazon.co.jp/home/textlink/general?ac-ms-src=ac-nav
にいってから、
「テキストリンク」のタブをクリック
「URLを入力 (必須)」にamazonのURLを入力して
「表示するテキスト (必須)」に本の名前を入力して、
「HTMLを取得」のボタンを押す。
プレビューのソースコードをブログに張りつける。
/* gcc -g dummy.cpp -o dummy */ #include <stdio.h> typedef struct station_number{ int line; int number; } STATION_NUMBER,AREA; int main () { STATION_NUMBER st; st.line = 2; st.number = 5; AREA *area; area = &st; printf("%d : %d\n", area->line, area->number); area->line = 3; area->number = 6; printf("%d : %d\n", st.line, st.number); return 0; } /* 出力結果 dummy 2 : 5 3 : 6 */ /* typedefは1つの型を、2つ以上の別名(ここでは、 STATION_NUMBER と AREA の 2つ)で定義でき、 キャストしなくてもコンパイラは文句を言ってこないらしい */
/* gcc -g birth_digital_active.cpp -o birth_digital_active */ /* デジタルネイティブ/デジタルアクティブ 1992年生まれから人口の100%がディジタルネイティブになったと仮定する。 Q:日本のデジタルネイティブの比率は、どう変化していくだろうか */ #include "stdio.h" int main(int argc, char* argv[]) { double men[101],women[101]; // 年齢別人口 平成22年データ 単位は1000人 double men_death_rate[101],women_death_rate[101]; // 死亡率 平成22年データ (資料 厚生労働省大臣官房統計情報部人口動態・保健統計課「人口動態統計」) // ファイルデバイスとデータ形式の統一回避する為、データべた書き men[ 0]=549 ; men_death_rate[ 0]=2.5/1000.0 ; // 男性0歳人口549千人、死亡率0.25% 2012年生まれ men[ 1]=535 ; men_death_rate[ 1]=0.4/1000.0 ; //2011年生まれ men[ 2]=535 ; men_death_rate[ 2]=0.2/1000.0 ; //2010年生まれ men[ 3]=550 ; men_death_rate[ 3]=0.2/1000.0 ; men[ 4]=548 ; men_death_rate[ 4]=0.2/1000.0 ; men[ 5]=544 ; men_death_rate[ 5]=0.1/1000.0 ; men[ 6]=542 ; men_death_rate[ 6]=0.1/1000.0 ; men[ 7]=562 ; men_death_rate[ 7]=0.1/1000.0 ; men[ 8]=574 ; men_death_rate[ 8]=0.1/1000.0 ; men[ 9]=589 ; men_death_rate[ 9]=0.1/1000.0 ; //2003年生まれ men[10]=597 ; men_death_rate[10]=0.1/1000.0 ; //2002年生まれ men[11]=604 ; men_death_rate[11]=0.1/1000.0 ; men[12]=604 ; men_death_rate[12]=0.1/1000.0 ; men[13]=613 ; men_death_rate[13]=0.1/1000.0 ; men[14]=610 ; men_death_rate[14]=0.1/1000.0 ; men[15]=607 ; men_death_rate[15]=0.3/1000.0 ; men[16]=627 ; men_death_rate[16]=0.3/1000.0 ; men[17]=632 ; men_death_rate[17]=0.3/1000.0 ; men[18]=621 ; men_death_rate[18]=0.3/1000.0 ; //1990年生まれ (ここまでが、ディタルネイティブ) men[19]=631 ; men_death_rate[19]=0.3/1000.0 ; men[20]=623 ; men_death_rate[20]=0.6/1000.0 ; //1992年生まれ men[21]=632 ; men_death_rate[21]=0.6/1000.0 ; men[22]=648 ; men_death_rate[22]=0.6/1000.0 ; men[23]=668 ; men_death_rate[23]=0.6/1000.0 ; men[24]=683 ; men_death_rate[24]=0.6/1000.0 ; men[25]=697 ; men_death_rate[25]=0.7/1000.0 ; men[26]=723 ; men_death_rate[26]=0.7/1000.0 ; men[27]=745 ; men_death_rate[27]=0.7/1000.0 ; men[28]=754 ; men_death_rate[28]=0.7/1000.0 ; men[29]=754 ; men_death_rate[29]=0.7/1000.0 ; men[30]=764 ; men_death_rate[30]=0.8/1000.0 ; men[31]=797 ; men_death_rate[31]=0.8/1000.0 ; men[32]=818 ; men_death_rate[32]=0.8/1000.0 ; men[33]=852 ; men_death_rate[33]=0.8/1000.0 ; men[34]=873 ; men_death_rate[34]=0.8/1000.0 ; men[35]=917 ; men_death_rate[35]=1.0/1000.0 ; men[36]=960 ; men_death_rate[36]=1.0/1000.0 ; men[37]=1012 ; men_death_rate[37]=1.0/1000.0 ; men[38]=1028 ; men_death_rate[38]=1.0/1000.0 ; men[39]=1010 ; men_death_rate[39]=1.0/1000.0 ; men[40]=982 ; men_death_rate[40]=1.5/1000.0 ; men[41]=954 ; men_death_rate[41]=1.5/1000.0 ; men[42]=937 ; men_death_rate[42]=1.5/1000.0 ; men[43]=916 ; men_death_rate[43]=1.5/1000.0 ; men[44]=915 ; men_death_rate[44]=1.5/1000.0 ; men[45]=713 ; men_death_rate[45]=2.4/1000.0 ; men[46]=882 ; men_death_rate[46]=2.4/1000.0 ; men[47]=826 ; men_death_rate[47]=2.4/1000.0 ; men[48]=805 ; men_death_rate[48]=2.4/1000.0 ; men[49]=778 ; men_death_rate[49]=2.4/1000.0 ; men[50]=765 ; men_death_rate[50]=3.8/1000.0 ; men[51]=770 ; men_death_rate[51]=3.8/1000.0 ; men[52]=783 ; men_death_rate[52]=3.8/1000.0 ; men[53]=761 ; men_death_rate[53]=3.8/1000.0 ; men[54]=740 ; men_death_rate[54]=3.8/1000.0 ; men[55]=776 ; men_death_rate[55]=6.3/1000.0 ; men[56]=803 ; men_death_rate[56]=6.3/1000.0 ; men[57]=803 ; men_death_rate[57]=6.3/1000.0 ; men[58]=850 ; men_death_rate[58]=6.3/1000.0 ; men[59]=896 ; men_death_rate[59]=6.3/1000.0 ; men[60]=949 ; men_death_rate[60]=9.3/1000.0 ; men[61]=1018 ; men_death_rate[61]=9.3/1000.0 ; men[62]=1111 ; men_death_rate[62]=9.3/1000.0 ; men[63]=1099 ; men_death_rate[63]=9.3/1000.0 ; men[64]=1042 ; men_death_rate[64]=9.3/1000.0 ; men[65]=645 ; men_death_rate[65]=14.6/1000.0 ; men[66]=684 ; men_death_rate[66]=14.6/1000.0 ; men[67]=825 ; men_death_rate[67]=14.6/1000.0 ; men[68]=794 ; men_death_rate[68]=14.6/1000.0 ; men[69]=809 ; men_death_rate[69]=14.6/1000.0 ; men[70]=780 ; men_death_rate[70]=22.7/1000.0 ; men[71]=698 ; men_death_rate[71]=22.7/1000.0 ; men[72]=599 ; men_death_rate[72]=22.7/1000.0 ; men[73]=627 ; men_death_rate[73]=22.7/1000.0 ; men[74]=631 ; men_death_rate[74]=22.7/1000.0 ; men[75]=616 ; men_death_rate[75]=39.6/1000.0 ; men[76]=571 ; men_death_rate[76]=39.6/1000.0 ; men[77]=521 ; men_death_rate[77]=39.6/1000.0 ; men[78]=501 ; men_death_rate[78]=39.6/1000.0 ; men[79]=470 ; men_death_rate[79]=39.6/1000.0 ; men[80]=430 ; men_death_rate[80]=70.5/1000.0 ; men[81]=385 ; men_death_rate[81]=70.5/1000.0 ; men[82]=350 ; men_death_rate[82]=70.5/1000.0 ; men[83]=316 ; men_death_rate[83]=70.5/1000.0 ; men[84]=281 ; men_death_rate[84]=70.5/1000.0 ; men[85]=247 ; men_death_rate[85]=120.3/1000.0 ; men[86]=202 ; men_death_rate[86]=120.3/1000.0 ; men[87]=158 ; men_death_rate[87]=120.3/1000.0 ; men[88]=122 ; men_death_rate[88]=120.3/1000.0 ; men[89]=98 ; men_death_rate[89]=120.3/1000.0 ; men[90]=78 ; men_death_rate[90]=202.5/1000.0 ; men[91]=67 ; men_death_rate[91]=202.5/1000.0 ; men[92]=44 ; men_death_rate[92]=202.5/1000.0 ; men[93]=36 ; men_death_rate[93]=202.5/1000.0 ; men[94]=28 ; men_death_rate[94]=202.5/1000.0 ; men[95]=21 ; men_death_rate[95]=318.8/1000.0 ; men[96]=15 ; men_death_rate[96]=318.8/1000.0 ; men[97]=11 ; men_death_rate[97]=318.8/1000.0 ; men[98]=7 ; men_death_rate[98]=318.8/1000.0 ; men[99]=5 ; men_death_rate[99]=318.8/1000.0 ; women[ 0]=520; women_death_rate[ 0]=2.1/1000.0 ;// 女性0歳人口520千人、死亡率0.21% women[ 1]=510; women_death_rate[ 1]=0.4/1000.0 ; women[ 2]=511; women_death_rate[ 2]=0.2/1000.0 ; women[ 3]=525; women_death_rate[ 3]=0.1/1000.0 ; women[ 4]=522; women_death_rate[ 4]=0.1/1000.0 ; women[ 5]=518; women_death_rate[ 5]=0.1/1000.0 ; women[ 6]=517; women_death_rate[ 6]=0.1/1000.0 ; women[ 7]=538; women_death_rate[ 7]=0.1/1000.0 ; women[ 8]=545; women_death_rate[ 8]=0.1/1000.0 ; women[ 9]=561; women_death_rate[ 9]=0.1/1000.0 ; women[10]=568; women_death_rate[10]=0.1/1000.0 ; women[11]=573; women_death_rate[11]=0.1/1000.0 ; women[12]=576; women_death_rate[12]=0.1/1000.0 ; women[13]=585; women_death_rate[13]=0.1/1000.0 ; women[14]=583; women_death_rate[14]=0.1/1000.0 ; women[15]=578; women_death_rate[15]=0.2/1000.0 ; women[16]=595; women_death_rate[16]=0.2/1000.0 ; women[17]=597; women_death_rate[17]=0.2/1000.0 ; women[18]=589; women_death_rate[18]=0.2/1000.0 ;//1990年生まれ (ここまでが、ディタルネイティブ) women[19]=599; women_death_rate[19]=0.2/1000.0 ; women[20]=596; women_death_rate[20]=0.3/1000.0 ; women[21]=605; women_death_rate[21]=0.3/1000.0 ; women[22]=622; women_death_rate[22]=0.3/1000.0 ; women[23]=638; women_death_rate[23]=0.3/1000.0 ; women[24]=655; women_death_rate[24]=0.3/1000.0 ; women[25]=667; women_death_rate[25]=0.3/1000.0 ; women[26]=697; women_death_rate[26]=0.3/1000.0 ; women[27]=719; women_death_rate[27]=0.3/1000.0 ; women[28]=729; women_death_rate[28]=0.3/1000.0 ; women[29]=734; women_death_rate[29]=0.3/1000.0 ; women[30]=742; women_death_rate[30]=0.4/1000.0 ; women[31]=774; women_death_rate[31]=0.4/1000.0 ; women[32]=794; women_death_rate[32]=0.4/1000.0 ; women[33]=828; women_death_rate[33]=0.4/1000.0 ; women[34]=849; women_death_rate[34]=0.4/1000.0 ; women[35]=890; women_death_rate[35]=0.6/1000.0 ; women[36]=931; women_death_rate[36]=0.6/1000.0 ; women[37]=982; women_death_rate[37]=0.6/1000.0 ; women[38]=1001; women_death_rate[38]=0.6/1000.0 ; women[39]=981; women_death_rate[39]=0.6/1000.0 ; women[40]=958; women_death_rate[40]=0.8/1000.0 ; women[41]=931; women_death_rate[41]=0.8/1000.0 ; women[42]=920; women_death_rate[42]=0.8/1000.0 ; women[43]=902; women_death_rate[43]=0.8/1000.0 ; women[44]=898; women_death_rate[44]=0.8/1000.0 ; women[45]=705; women_death_rate[45]=1.3/1000.0 ; women[46]=872; women_death_rate[46]=1.3/1000.0 ; women[47]=815; women_death_rate[47]=1.3/1000.0 ; women[48]=798; women_death_rate[48]=1.3/1000.0 ; women[49]=772; women_death_rate[49]=1.3/1000.0 ; women[50]=760; women_death_rate[50]=1.9/1000.0 ; women[51]=768; women_death_rate[51]=1.9/1000.0 ; women[52]=783; women_death_rate[52]=1.9/1000.0 ; women[53]=765; women_death_rate[53]=1.9/1000.0 ; women[54]=744; women_death_rate[54]=1.9/1000.0 ; women[55]=783; women_death_rate[55]=2.8/1000.0 ; women[56]=810; women_death_rate[56]=2.8/1000.0 ; women[57]=813; women_death_rate[57]=2.8/1000.0 ; women[58]=868; women_death_rate[58]=2.8/1000.0 ; women[59]=918; women_death_rate[59]=2.8/1000.0 ; women[60]=975; women_death_rate[60]=3.9/1000.0 ; women[61]=1051; women_death_rate[61]=3.9/1000.0 ; women[62]=1152; women_death_rate[62]=3.9/1000.0 ; women[63]=1146; women_death_rate[63]=3.9/1000.0 ; women[64]=1090; women_death_rate[64]=3.9/1000.0 ; women[65]=685; women_death_rate[65]=6.0/1000.0 ; women[66]=741; women_death_rate[66]=6.0/1000.0 ; women[67]=903; women_death_rate[67]=6.0/1000.0 ; women[68]=875; women_death_rate[68]=6.0/1000.0 ; women[69]=899; women_death_rate[69]=6.0/1000.0 ; women[70]=873; women_death_rate[70]=9.8/1000.0 ; women[71]=793; women_death_rate[71]=9.8/1000.0 ; women[72]=690; women_death_rate[72]=9.8/1000.0 ; women[73]=738; women_death_rate[73]=9.8/1000.0 ; women[74]=755; women_death_rate[74]=9.8/1000.0 ; women[75]=753; women_death_rate[75]=17.9/1000.0 ; women[76]=718; women_death_rate[76]=17.9/1000.0 ; women[77]=675; women_death_rate[77]=17.9/1000.0 ; women[78]=671; women_death_rate[78]=17.9/1000.0 ; women[79]=646; women_death_rate[79]=17.9/1000.0 ; women[80]=614; women_death_rate[80]=34.3/1000.0 ; women[81]=573; women_death_rate[81]=34.3/1000.0 ; women[82]=547; women_death_rate[82]=34.3/1000.0 ; women[83]=515; women_death_rate[83]=34.3/1000.0 ; women[84]=482; women_death_rate[84]=34.3/1000.0 ; women[85]=454; women_death_rate[85]=69.1/1000.0 ; women[86]=405; women_death_rate[86]=69.1/1000.0 ; women[87]=349; women_death_rate[87]=69.1/1000.0 ; women[88]=313; women_death_rate[88]=69.1/1000.0 ; women[89]=276; women_death_rate[89]=69.1/1000.0 ; women[90]=236; women_death_rate[90]=131.2/1000.0 ; women[91]=213; women_death_rate[91]=131.2/1000.0 ; women[92]=146; women_death_rate[92]=131.2/1000.0 ; women[93]=128; women_death_rate[93]=131.2/1000.0 ; women[94]=106; women_death_rate[94]=131.2/1000.0 ; women[95]=87 ; women_death_rate[95]=238.1/1000.0 ; women[96]=63 ; women_death_rate[96]=238.1/1000.0 ; women[97]=49 ; women_death_rate[97]=238.1/1000.0 ; women[98]=35 ; women_death_rate[98]=238.1/1000.0 ; women[99]=25 ; women_death_rate[99]=238.1/1000.0 ; for (int year = 2012; year < 2100; year++){ // 2012年から2100年までループ計算 double dummy = 0; for(int i = 15; i < 50; i++){ // 特殊出産率の対象 15歳から49歳までの人口加算 dummy += women[i]; } // 1.4は、特殊出生率 / 35は特殊出生率の対象期間(35年) / 1.05は男性の出生比率 double mem_new_birth = dummy * 1.4 / 35.0 * 1.05/(1.05+1.00); double womem_new_birth = dummy * 1.4 / 35.0 * 1.00/(1.05+1.00); // 1年単位の人口移動 (死亡率も考慮) for (int k = 99; k >= 0; k--){ men[k+1] = men[k] * (1.0 - men_death_rate[k]); women[k+1] = women[k] * (1.0 - women_death_rate[k]); //printf("%d %f %f \n", k, men[k], women[k]); } // 新生児の人口を追加 men[0] = mem_new_birth; women[0] = womem_new_birth; // 人口総計(年齢99歳まで。100歳以上の人口は無視することにした) double sum_men = 0; double sum_women = 0; for (int m = 0; m <= 100; m++){ sum_men += men[m]; sum_women += women[m]; } #if 0 // ディタルネイティブ人口総計 double digital_sum_men = 0; double digital_sum_women = 0; int l = year -1990; if (l >= 100) l = 100; for (int n = 0; n <= l ; n++){ digital_sum_men += men[n]; digital_sum_women += women[n]; } #endif #if 0 // ここから江端仮説 // デジタルアクティブ人口総計 double digital_sum_men = 0; double digital_sum_women = 0; // 1970年以後の人は100%デジタルは使えるいう仮説の導入 int l = year -1970; if (l >= 100) l = 100; for (int n = 0; n <= l ; n++){ digital_sum_men += men[n]; digital_sum_women += women[n]; } // 1950-70年にかけてデジタルを使える人は線形に増加した、という仮説の導入 // デジタルアクティブ人口(江端"補正"仮説) int p1 = year -1970; // 例:2020年の時に50歳 int p2 = year -1950; // 例:2020年の時に70歳 for (int i = p1; i < p2 ; i++){ if (i < 100){ // 例:2020年の時に70歳の人の0%、 60歳の人の50%、50歳の人の100%がデジタルを扱えるとする digital_sum_men += men[i] * 1.0 / (double)(p2 - p1) * (double)(p2 - i); digital_sum_women += women[i] * 1.0 / (double)(p2 - p1) * (double)(p2 - i); } } #endif #if 1 // 高齢者世代(65歳以上)に特化して計算してみる // 人口総計(年齢65歳から99歳まで。100歳以上の人口は無視することにした) sum_men = 0; sum_women = 0; for (int m = 65; m <= 100; m++){ sum_men += men[m]; sum_women += women[m]; } // デジタルアクティブ人口総計 double digital_sum_men = 0; double digital_sum_women = 0; // 1970年以後の人は100%デジタルは使えるいう仮説の導入 int l = year -1970; if (l >= 100) l = 100; for (int n = 65; n <= l ; n++){ digital_sum_men += men[n]; digital_sum_women += women[n]; } // 1950-70年にかけてデジタルを使える人は線形に増加した、という仮説の導入 // デジタルネイティブ人口(江端"補正"仮説) int p1 = year -1970; // 例:2020年の時に50歳 2017年の時に47歳 int p2 = year -1950; // 例:2020年の時に70歳 for (int i = p1; i < p2 ; i++){ if ((i >= 65) &&(i < 100)){ // 例:2020年の時に70歳の人の0%、 60歳の人の50%、50歳の人の100%がデジタルを扱えるとする digital_sum_men += men[i] * 1.0 / (double)(p2 - p1) * (double)(p2 - i); digital_sum_women += women[i] * 1.0 / (double)(p2 - p1) * (double)(p2 - i); } } #endif printf("%d,%f,%f,%f\n", year, sum_men + sum_women, digital_sum_men + digital_sum_women, (digital_sum_men + digital_sum_women)/(sum_men + sum_women) ); } }
http://qa.nifty.com/cs/catalog/faq_nqa/qid_14105/1.htm?smptopc