落書きノート

ふと自分が気になった事を書いてます

PostgreSQLで問題を解く

-- q4-2-1
sukkiri=> select * from 偶数 union select * from 奇数 order by 値;
 値  
-----
 -10
  -9
  -8
  -7
  -6
  -5
  -4
  -3
  -2
  -1
   0
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
(21 rows)

-- q4-2-2
sukkiri=> select * from 整数 except select * from 偶数 order by 値;
 値 
----
 -9
 -7
 -5
 -3
 -1
  1
  3
  5
  7
  9
(10 rows)

-- q4-2-3
sukkiri=> select * from 整数 intersect select * from 偶数 order by 値;
 値  
-----
 -10
  -8
  -6
  -4
  -2
   0
   2
   4
   6
   8
  10
(11 rows)

-- q4-2-4
sukkiri=> select * from 自然数 except select * from 整数;
 値 
----
(0 rows)

C言語で問題を解く

解きながら学ぶC言語

解きながら学ぶC言語

// q12-7
#include <stdio.h>
#include <time.h>

void put_date(void) {
  time_t timer;
  struct tm *local;

  timer = time(NULL);
  local = localtime(&timer);
  char yobi[][3] = {"日","月","火","水","木","金","土"};
  printf("今日は%4d%02d%02d日(%s)です。\n", local->tm_year + 1900,
         local->tm_mon + 1, local->tm_mday, yobi[local->tm_wday]);
}

int main(void) {
  put_date();
  return 0;
}

// q12-8
#include <stdio.h>
#include <time.h>

void put_time(void) {
  time_t timer;
  struct tm *local;

  timer = time(NULL);
  local = localtime(&timer);
  printf("現在の時刻は%02d%02d%02d秒です。\n", local->tm_hour, local->tm_min,
         local->tm_sec);
}

int main(void) {
  put_time();
  return 0;
}

// q12-9
#include <stdio.h>

typedef struct {
  int y;
  int m;
  int d;
} Date;

void printDate(Date d) {
  printf("%4d%02d%02d日", d.y, d.m, d.d);
}

void printDateGen(Date d) {
  unsigned long days = (d.y * 10000UL) + (d.m * 100) + d.d;

  if(days < 18680908UL)
    printf("%04d年", d.y);
  else if(days < 19120730UL)
    printf("明治%02d年", d.y - 1867);
  else if(days < 19261225UL)
    printf("大正%02d年", d.y - 1911);
  else if(days < 19890108UL)
    printf("昭和%02d年", d.y - 1925);
  else
    printf("平成%02d年", d.y - 1988);
  printf("%02d%02d日", d.m, d.d);
}

int main(void) {
  Date day;
  puts("日付を入力してください。");
  printf("年 : "); scanf("%d", &day.y);
  printf("月 : "); scanf("%d", &day.m);
  printf("日 : "); scanf("%d", &day.d);
  printf("西暦 : "); printDate(day); putchar('\n');
  printf("元号 : "); printDateGen(day); putchar('\n');
  return 0;
}

ProcessingでCGシミュレーション

[普及版]ジェネラティブ・アート―Processingによる実践ガイド

[普及版]ジェネラティブ・アート―Processingによる実践ガイド

// CG1
size(500,300);
surface.setLocation(200,70);
smooth();
background(230,230,230);
stroke(130,0,0);
strokeWeight(4);
line(width/2 - 70, height/2 - 70, width/2 + 70, height/2 + 70);
line(width/2 + 70, height/2 - 70, width/2 - 70, height/2 + 70);
fill(255, 150);
ellipse(width/2, height/2, 50, 50);

// CG2
size(500, 300);
surface.setLocation(200,70);
smooth();
background(230,230,230);
float centX = width/2;
float centY = height/2;
stroke(130,0,0);
strokeWeight(1);
fill(0,40,0);
ellipse(centX,centY,30,30);
line(centX-70, centY-70, centX+70, centY+70);
line(centX+70, centY-70, centX-70, centY+70);

// CG3
size(500,300);
surface.setLocation(200,70);
smooth();
background(230,230,230);
stroke(130,0,0);
strokeWeight(1);
line(width/2-70,height/2-70,width/2+70,height/2+70);
line(width/2+70,height/2-70,width/2-70,height/2+70);
stroke(0,125);
strokeWeight(6);
fill(255,150);
ellipse(width/2,height/2,50,50);

// CG4 サンプルコードを参考にして自分でカスタマイズ
int diam = 10;
float centX,centY;
boolean flag = false;

void setup() {
 size(500,300);
 surface.setLocation(200,70);
 frameRate(24);
 smooth();
 background(180);
 centX = width/2;
 centY = height/2;
 stroke(0);
 strokeWeight(5);
 fill(255,50);
}

void draw() {
 if(diam >= 400)
  flag = true;
 else if(diam <= 10)
  flag = false;
 if(flag) {
  background(180);
  ellipse(centX,centY,diam,diam);
  diam -= 10;
 }
 if(!flag && diam <= 400) {
  background(180);
  ellipse(centX,centY,diam,diam);
  diam += 10;
 }
}

// CG5 サンプルコードを参考にしてカスタマイズ
int diam = 10;
float centX,centY;
boolean flag = false;

void setup() {
 size(500,300);
 surface.setLocation(200,70);
 frameRate(24);
 smooth();
 background(180);
 centX = width/2;
 centY = height/2;
 stroke(0);
 strokeWeight(5);
 fill(255,50);
}

void draw() {
 if(diam >= 400)
  flag = true;
 else if(diam < 10)
  flag = false;
 if(flag) {
  background(180);
  fill(255,50);
  ellipse(centX,centY,diam,diam);
  strokeWeight(0);
  noFill();
  int tempdiam = diam;
  while(tempdiam > 10) {
   ellipse(centX,centY,tempdiam,tempdiam);
   tempdiam -= 10;
  }
  diam -= 10;
 }
 if(!flag && diam <= 400) {
  background(180);
  fill(255,50);
  ellipse(centX,centY,diam,diam);
  strokeWeight(0);
  noFill();
  int tempdiam = diam;
  while(tempdiam > 10) {
   ellipse(centX,centY,tempdiam,tempdiam);
   tempdiam -= 10;
  }
  diam += 10;
 }
}

f:id:kh2n:20171021203916p:plain f:id:kh2n:20171021204326p:plain f:id:kh2n:20171021205524p:plain f:id:kh2n:20171021210628p:plain f:id:kh2n:20171021211722p:plain

PostgreSQLで問題を解く

スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)

スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)

-- q4-1-1
sukkiri=# select * from 注文履歴 order by 注文番号,注文枝番;
    日付    | 注文番号 | 注文枝番 |      商品名      | 分類 | サイズ | 単価 | 数量 | 注文金額
------------+----------+----------+------------------+------+--------+------+------+----------
 2012-01-01 |      101 |        1 | ブレンドコーヒー | 1    | S      |  210 |    1 |      210
 2012-01-01 |      101 |        2 | サンドイッチA    | 2    | X      |  360 |    1 |      360
 2012-01-05 |      105 |        1 | カフェラテ       | 1    | M      |  380 |    2 |      760
(3 rows)

-- q4-1-2
sukkiri=# select distinct * from 注文履歴 where 日付 >= '2013-01-01' and 日付 <= '2013-01-31' order by 商品名;
    日付    | 注文番号 | 注文枝番 |      商品名      | 分類 | サイズ | 単価 | 数量 | 注文金額
------------+----------+----------+------------------+------+--------+------+------+----------
 2013-01-05 |      105 |        1 | カフェラテ       | 1    | M      |  380 |    2 |      760
 2013-01-01 |      101 |        2 | サンドイッチA    | 2    | X      |  360 |    1 |      360
 2013-01-01 |      101 |        1 | ブレンドコーヒー | 1    | S      |  210 |    1 |      210
(3 rows)

-- q4-1-3
sukkiri=# select 商品名,単価 from 注文履歴 where 分類 = '1' order by 単価 limit 3;
      商品名      | 単価
------------------+------
 ブレンドコーヒー |  210
 アイスコーヒー   |  280
 抹茶ラテ         |  370
(3 rows)

-- q4-1-4
sukkiri=# select 商品名,単価 from 注文履歴 where 分類 = '2' limit 1 offset 0;
    商品名     | 単価
---------------+------
 サンドイッチA |  360
(1 row)

sukkiri=# select 商品名,単価 from 注文履歴 where 分類 = '2' order by 単価 limit 1 offset 1;
    商品名     | 単価
---------------+------
 サンドイッチA |  360
(1 row)

-- q4-1-5
sukkiri=# select 日付,商品名,単価,数量,注文金額 from 注文履歴 where 分類 = '3' and 数量 >= 2 order by 日付,数量 desc;
    日付    |        商品名        | 単価 | 数量 | 注文金額
------------+----------------------+------+------+----------
 2012-01-03 | トートバッグ         | 1500 |    3 |     4500
 2012-01-03 | ニューイヤービーンズ |  650 |    2 |     1300
 2012-01-08 | マグカップ           |  900 |    2 |     1800
(3 rows)

-- q4-1-6
sukkiri=# select 分類,商品名,サイズ,単価 from 注文履歴 where 分類 = '1' union select 分類,商品名,NULL,単価 from 注文履歴 where 分類 = '2' or 分類 = '3' order by 分類,商品名;
 分類 |        商品名        | サイズ | 単価
------+----------------------+--------+------
 1    | 抹茶ラテ             | S      |  370
 1    | カフェラテ           | M      |  380
 1    | アイスコーヒー       | M      |  280
 1    | ブレンドコーヒー     | S      |  210
 2    | サンドイッチA        |        |  360
 2    | サンドイッチB        |        |  350
 2    | ベーグルサンド       |        |  420
 3    | タンブラー           |        |  800
 3    | マグカップ           |        |  900
 3    | トートバッグ         |        | 1500
 3    | ニューイヤービーンズ |        |  650
(11 rows)

sukkiri=# select distinct 分類,商品名,サイズ,単価 from 注文履歴 where 分類 = '1' union select distinct 分類,商品名,NULL,単価 from 注文履歴 where 分類 = '2' union select distinct 分類,商品名,NULL,単価 from 注文履歴 where 分類 = '3' order by 1,2;
 分類 |        商品名        | サイズ | 単価
------+----------------------+--------+------
 1    | 抹茶ラテ             | S      |  370
 1    | カフェラテ           | M      |  380
 1    | アイスコーヒー       | M      |  280
 1    | ブレンドコーヒー     | S      |  210
 2    | サンドイッチA        |        |  360
 2    | サンドイッチB        |        |  350
 2    | ベーグルサンド       |        |  420
 3    | タンブラー           |        |  800
 3    | マグカップ           |        |  900
 3    | トートバッグ         |        | 1500
 3    | ニューイヤービーンズ |        |  650
(11 rows)

C言語で問題を解く

解きながら学ぶC言語

解きながら学ぶC言語

// q12-1
#include <stdio.h>

struct xyz {
  int x;
  long y;
  double z;
};

int main(void) {
  struct xyz a;
  a.x = 50;
  a.y = 99999;
  a.z = 3.14;
  printf("%d %ld %f\n", a.x, a.y, a.z);
  return 0;
}

// q12-2
#include <stdio.h>

int main(void) {
  struct xyz {
    int x;
    long y;
    double z;
  };
  struct xyz a = {
    50,
    99999,
    3.14
  };
  printf("%d %ld %f\n", a.x, a.y, a.z);
  return 0;
}

// q12-3
#include <stdio.h>

int main(void) {
  struct xyz {
    int x;
    long y;
    double z;
  };
  struct xyz a = { 50, 99999, 3.1456};
  struct xyz *b = &a;
  printf("%d %ld %f\n", a.x, a.y, a.z);
  printf("%d %ld %f\n", b->x, b->y, b->z);
  return 0;
}

// q12-4
#include <stdio.h>

struct xyz {
  int x;
  long y;
  double z;
};

void set_xyz(struct xyz *p, int x, long y, double z) {
  p->x = x;
  p->y = y;
  p->z = z;
}

int main(void) {
  struct xyz a;
  set_xyz(&a, 50, 99999, 3.1456);
  printf("%d %ld %f\n", a.x, a.y, a.z);
  return 0;
}

// q12-5
#include <stdio.h>

typedef struct xyz {
  int x;
  long y;
  double z;
}XYZ;

void set_xyz(XYZ *p, int x, long y, double z) {
  p->x = x;
  p->y = y;
  p->z = z;
}

int main(void) {
  XYZ a;
  set_xyz(&a, 50, 9999L, 3.1456);
  printf("%d %ld %f\n", a.x, a.y, a.z);
  return 0;
}

// q12-6
#include <stdio.h>

typedef struct xyz {
  int x;
  long y;
  double z;
}XYZ;

XYZ XYZof(int x, long y, double z) {
  XYZ a;
  a.x = x;
  a.y = y;
  a.z = z;
  return a;
}

int main(void) {
  XYZ a = XYZof(50, 9999L, 3.1456);
  printf("%d %ld %f\n", a.x, a.y, a.z);
  return 0;
}

C言語で問題を解く

解きながら学ぶC言語

解きながら学ぶC言語

// q11-8
#include <stdio.h>
#include <string.h>

void put_rstring(const char *st) {
  int i;
  printf("逆から読むと");
  for(i = strlen(st) - 1; i >= 0; i--)
    printf("%c", *(st + i));
  printf("です。\n");
}

int main(void) {
  char str[256];
  printf("文字列を入力してください : ");
  scanf("%s", str);
  put_rstring(str);
  return 0;
}

// q11-8-another
#include <stdio.h>
#include <string.h>

void put_rstring(const char *st) {
  const char *p = st;
  while(*st)
    st++;
  while(--st >= p)
    putchar(*st);
}

int main(void) {
  char str[256];
  printf("文字列を入力してください : ");
  scanf("%s", str);
  printf("逆から読むと");
  put_rstring(str);
  printf("です。\n");
  return 0;
}

// q11-9
#include <stdio.h>

int str_equal(const char *s1,const char *s2) {
  while(*s1 == *s2) {
    if(*s1 == '\0')
      return 1;
    s1++;
    s2++;
  }
  return 0;
}

int main(void) {
  char str1[256],str2[256];
  printf("文字列を入力してください : ");
  scanf("%s", str1);
  printf("文字列を入力してください : ");
  scanf("%s", str2);
  if(str_equal(str1,str2))
    printf("それらの文字列は同じです。\n");
  else
    printf("それらの文字列は異なります。\n");
  return 0;
}

// q11-10
#include <stdio.h>

int strtoi(const char *nptr) {
  int answer = 0;
  while(*nptr) {
    answer = answer * 10 + (*nptr - '0');
    nptr++;
  }
  return answer;
}

long strtol(const char *nptr) {
  return (long)strtoi(nptr);
}

double strtof(const char *nptr) {
  return (double)strtoi(nptr);
}

int main(void) {
  char str[256];
  printf("数値を入力 : ");
  scanf("%s", str);
  printf("int : %d\n", strtoi(str));
  printf("long : %ld\n", strtol(str));
  printf("double : %f\n", strtof(str));
  return 0;
}

C言語で問題を解く

解きながら学ぶC言語

解きながら学ぶC言語

// q11-5
#include <stdio.h>
#include <stdlib.h>

int str_chnum(const char *str, int c) {
  int i,cnt = 0;
  for(i = 0; *(str + i) != '\0'; i++) {
    if(*(str + i) == c)
      cnt++;
  }
  return cnt;
}

int main(void) {
  char *str,*ch;
  str = calloc(10, sizeof(char));
  ch = calloc(10, sizeof(char));
  printf("文字列を入力してください : ");
  scanf("%s", str);
  printf("検索する文字を入力してください : ");
  scanf("%s", ch);
  int cnt = str_chnum(str, ch[0]);
  printf("その文字は%d個含まれています。\n", cnt);
}

// q11-6
#include <stdio.h>
#include <stdlib.h>

void str_toupper(char *str) {
  int i;
  for(i = 0; *(str + i) != '\0'; i++)
    if(*(str + i) >= 'a' && *(str + i) <= 'z')
      *(str + i) = *(str + i) - ('a' - 'A');
    else
      continue;
}

void str_tolower(char *str) {
  int i;
  for(i = 0; *(str + i) != '\0'; i++)
    if(*(str + i) >= 'A' && *(str + i) <= 'Z')
      *(str + i) += 'a' - 'A';
    else
      continue;
}

int main(void) {
  char *str;
  str = calloc(20,sizeof(char));
  printf("文字列を入力してください : ");
  scanf("%s", str);
  str_toupper(str);
  printf("大文字 : %s\n", str);
  str_tolower(str);
  printf("小文字 : %s\n", str);
  return 0;
}

// q11-7
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void del_digit(char *str) {
  int i,j = 0;
  char *answer = calloc(20,sizeof(char));
  for(i = 0; *(str + i) != '\0'; i++)
    if(*(str + i) >= '0' && *(str + i) <= '9')
      continue;
    else
      *(answer + j++) = *(str + i);
  strcpy(str, answer);
}

int main(void) {
  char *str;
  str = calloc(20,sizeof(char));
  printf("文字列を入力してください : ");
  scanf("%s", str);
  del_digit(str);
  printf("数字文字を削除しました。\n");
  printf("str = %s\n", str);
  return 0;
}

// q11-7-another
#include <stdio.h>

void del_digit(char *str) {
  char *ptr = str;
  while(*str) {
    if(*str < '0' || *str > '9')
      *ptr++ = *str;
    str++;
  }
  *ptr = '\0';
}

int main(void) {
  char str[100];
  printf("文字列を入力してください : ");
  scanf("%s", str);
  del_digit(str);
  puts("数字文字を削除しました。");
  printf("str = %s\n", str);
  return 0;
}