[C言語]タグの中身をパースする

Webブラウザを作りたい
まず基本として、タグを表示させます

#include <stdio.h>

void parse_element(char *c){
	printf("%s\n", c);
}

int main(){

	char c[256] = "<html>Hello</html>";

	parse_element(c);

	return 0;
}

ここから、charのタグの中身をくりとります。
strchrで “>” 以降を取得して、先頭文字を削除し、”<" 以前を表示させます。

#include 
#include 

void parse_element(char *c){
	int len, i, j, k;
	char *tag;
	char moji[256];
	tag = strchr(c, (int)’>’);
	len = strlen(tag);
	for(i=1; i < len; i++){
		j = i-1;
		moji[j] = tag[i];
	}
	k = 0;
	while(moji[k] != '<'){
		printf("%c", moji[k]);
		k++;
	}
	printf("\n");

}

int main(){

	char c[256] = "Hello“;

	parse_element(c);

	return 0;
}

$ ./main
Hello

“<"と">“でパースして処理をしているのか。
Webブラウザって相当難しいね

マイコンモジュールArduino Uno

Arduino Unoを購入、入出力端子が少なく、Raspberry Piより安価

dav

マイコンチップ:ATmega328P
動作電圧:5V
入力電圧:7~12V (DCジャックもしくはVIN端子から入力)
デジタルI/Oピン:14本(うち6本はPWM出力可能)
アナログ入力ピン:6本(デジタルI/Oピンとしても利用可能)
DC出力電流:1つのI/Oピン当り20mA程度、I/Oピン全部の合計100mAまで
DC出力電流:3.3V出力ピン 50mA
Flashメモリ:32KB (うち0.5KBをブートローダーで使用)
SRAM:2KB
EEPROM:1KB
クロックスピード:16MHz

– Arduino Create(Arduinoのクラウド開発環境)を使うことができる
– センサー技術を組み合わせると色々できる

まずは初心者用のキットを動かすことから始めるのが王道か
手を広げすぎると、キャパオーバーになるから出来るところからやりた

Raspberry Piの基盤とOSインストール

SoC(System-on-a-Chip)と呼ばれるLSIはCPU、GPU、メモリを含む

Raspberry Pi 3 model BのCPUはARM社
– Broadcom BCM2837
– 1.2GHz 64-bit quad-core ARMv8 Cortex-A53
– メモリ1GB LPDDR2 SDRAM

DSI(Display Serial Interface)を備えたディスプレイは、タッチ操作が可能

取り敢えず、macからmicrobで電源供給して、OSインストールまでは出来た^^
ヒャッホー

sdr

USBキーボードがないとInputが出来ないので、キーボード待ちだけど、IoTコミュニティーに入る第一歩は踏み出せたかな。
がはははは

Raspberry Piをゼロから始めようとするとこうなる

まず、効率化を考えて、Raspberry Piと、ディスプレイ、HDMI端子、SDカード、USBカメラ、学習本を一気に購入

dav

### Raspberry Pi基礎知識
イギリスのラズベリーパイ財団によって開発
OSはラズビアンOS
GPIO端子を使って、センサーなど色々接続できる
ハードディスクの代わりにSDカードを使用
消費電力が低い
用途はパソコン、サーバー、電子工作など
GPIOの任意のピンの電圧ON/OFFができる

### ラズパイの学習ステップ
1.購入->2.セットアップ->3.パソコンを使って見る->4.電子工作

### ラズパイの周辺機器
電源アダプタ(○)、マウス(○)、キーボード(×)、ディスプレイ(○)、Wi-Fiアダプタ(×)、カメラ(○)

– 電源アダプタ : USBマイクロB型形状
– ディスプレイ :
  L HDMI端子(映像や音声などを1本のケーブルにまとめて送ることのできる通信規格)あり
  L 7inch HDMI LCDあり
  L マイクロB型のアダプタを新規購入
– SDカード: SunDisk Ultra 32GBあり
– WiFiアダプタ : TL-WN725Nを新規購入
– キーボード : メルカリで新規購入
– Raspberry Piケース : あり
– カメラ: USBカメラあり

て、さー始めるかと思ったら、まだ要るんかいな?
IoTは環境構築のハードルが高いですな。

[C言語]整数比の直角三角形

直角三角形はピタゴラスの定理が成り立つ
a^2 + b^2 = c^2

#include 

int main(){

	int a, a2, b, b2, c;

	printf("整数比の直角三角形を探索");

	for(a=1; a<= 100; a++){
		a2 = a*a;
		for(b=a; b<=100; b++){
			b2 = b*b;
			for(c=b+1; c<=100;c++){
				if(a2+b2 == c*c){
					printf("%d:%d:%d\n",a, b, c);
				}
			}
		}
	}

	return 0;
}

$ ./main
整数比の直角三角形を探索3:4:5
5:12:13
6:8:10
7:24:25
8:15:17
9:12:15
9:40:41
10:24:26
11:60:61
12:16:20
12:35:37
13:84:85
14:48:50
15:20:25
15:36:39
16:30:34
16:63:65
18:24:30
18:80:82
20:21:29
20:48:52
21:28:35
21:72:75
24:32:40
24:45:51
24:70:74
25:60:65
27:36:45
28:45:53
28:96:100
30:40:50
30:72:78
32:60:68
33:44:55
33:56:65
35:84:91
36:48:60
36:77:85
39:52:65
39:80:89
40:42:58
40:75:85
42:56:70
45:60:75
48:55:73
48:64:80
51:68:85
54:72:90
57:76:95
60:63:87
60:80:100
65:72:97

こんなにあるのか

[C言語]簡易電卓

#include 
#include 

int main(){

	char c[128],c1[128],op;
	int x=0, y=0, z=0,i=0, j;

	printf("計算式:\n");
	gets(c);

	for(j=0; c[i]>='0' && c[i]<='9'; i++){
		c1[j]=c[i];
		j++;
	}
	c1[j] = '\0'; x=atoi(c1);  // \0はNULL

	op = c[i]; i++;

	for(j=0; c[i]>='0' && c[i]<='9'; i++){ // iは第1項とoperandの次の配列から
		c1[j]=c[i];
		j++;
	}
	c1[j] = '\0'; y=atoi(c1);

	switch(op){
		case '+': z=x+y; break;
		case '-': z=x-y; break;
		case '*': z=x*y; break;
		case '/': z=x/y; break;
		case '%': z=x%y; break;
		default: printf("\a");
	}
	printf("answer: %d\n", z);

	return 0;
}

$ ./main
計算式:
22+3
answer: 25

forループを二回回しているが、2回目のiは第1項とoperandの次の配列からのiとなる
一見あれ?っと思った。

[C言語]無限ループ

#include <stdio.h>

int main(){

	char muki="L";
	int kn;

	while(1){
		system("cls");
		if(muki == 'L'){
			printf("                     \n");
            printf(" ***                 \n");
            printf("    *                \n");
            printf("     *********       \n");
            printf("      ******         \n");
            printf("       *  *          \n");
            printf("      *    *         \n");
            printf("_y_y_y*y_y_y*y_y_y_y_\n");
		} else if(muki == 'R'){
			printf("                     \n");
            printf("              ***    \n");
            printf("             *       \n");
            printf("    *********        \n");
            printf("      ******         \n");
            printf("       *  *          \n");
            printf("      *    *         \n");
            printf("_y_y_y*y_y_y*y_y_y_y_\n");
		}

		printf("\n");
		printf("<-で左向き、->で右向き、Escキーで終了\n");

		scanf("%d", &kn);
		if(kn == 27) break;  // Escキー
		if(kn!= 0) continue;

		if(kn == 77) muki="R";
		if(kn == 75) muki="L";
	}

	return 0;
}

<-で左向き、->で右向き、Escキーで終了
sh: 1: cls: not found

<-で左向き、->で右向き、Escキーで終了
sh: 1: cls: not found

<-で左向き、->で右向き、Escキーで終了
sh: 1: cls: not found

<-で左向き、->で右向き、Escキーで終了
sh: 1: cls: not found

<-で左向き、->で右向き、Escキーで終了
sh: 1: cls: not found

<-で左向き、->で右向き、Escキーで終了
sh: 1: cls: not found

<-で左向き、->で右向き、Escキーで終了

コンピュータが悲鳴を上げました。
scanf(“%d”, &kn);だと、32764となる
$ ./main
^[[C
32764

あ、キーコード取得はgetchar()だ。scanf()とこんがらがる。

#include 

int main(){

	int kn;

	kn = getchar();
	printf("%d", kn);

	return 0;
}

$ ./main
a
$ ./main
^[[C
27

[C言語]配列のアスキー

#include 
#include 
#include 
#include 

char buf[25][80];

void Gen_line(int,int,int,int);

int main(){

	int x1=5, y1=0;
	int x2=25, y2=0;
	int x3=30, y3=10;
	int y;

	memset(&buf[0][0],' ',25*80); 

	Gen_line(x1,y1,x2,y2);
	Gen_line(x2,y2,x3,y3);
	Gen_line(x3,y3,x1,y1);

	for(y=24; y > =0; y--){
		printf("%.80s",&buf[y][0]);
	}
	fflush(stdout);

	return 0;
}

void Gen_line(int xS, int yS, int xE, int yE){
	double dx, dy, a = 0, b=0;
	int x,y;

	buf[yS][xS]='*';
	buf[yE][xE]='*';

	if(xS==xE){
		if(yS > yE){
			y = yS; yS = yE; yE=y;}
			for(y=yS+1; y xE){
				x=xS; xS=xE;xE=x;y=yS;yS=yE;yE=y;
			}
			dx=xE-xS; dy=yE-yS;
			a=dy/dx; b=yS-a*xS;

			for(x = xS+1; x < xE; x++){
				y=a*x + b + 0.5;
				buf[y][x]= '*';
			}
		}
	}

$ ./main
** ** *** * ** *** * ** *** * ** *** * ** *********************

三角形になってる? 意味がわからん

[C言語]2進数から10進数への変換

#include <stdio.h>
#include <stdlib.h>

int main(){

	char c[128];
	int i, n;

	printf("2進数に10進数に変換します\n");
	printf("2進数:\n");fflush(stdout);

	gets(c);
	// scanf("%d",&n);
	i=0; n=0;

	while(1){
		if(c[i]=='1') n = n+1;

		i=i+1;
		if(c[i]=='\0') break;
		n=n*2;
	}
	printf("10進数=%d\n", n);

	return 0;
}

$ ./main
2進数に10進数に変換します
2進数:
11111
10進数=31

[C言語]10進数から2進数への変換

#include <stdio.h>
#include <stdlib.h>

int main(){

	char c[128];
	int n,m,i;

	printf("10進数を2進数に変換します\n");
	printf("10進数:\n");

	scanf("%d",&n);

	for(i=0; n>0; i++){
		m = n %2;
		n = n/2;
		c[i]= m + '0';
	}
	printf("答え\n");
	for(i--;i>=0;i--){
		printf("%c",c[i]);
	}
	printf("\n");

	return 0;
}

$ ./main
10進数を2進数に変換します
10進数:
9
答え
1001