交差点番号,x座標,y座標,交差名,隣接する交差点の数,以下隣接する交差点番号
1, 0.0, 0.0, 弘前駅, 2, 2, 4
2, -0.6, 0.15, 代官町, 3, 1, 3, 11
3, -0.83, 0.0, 上代官町, 4, 2, 4, 9, 10
4, -0.6, -0.38, 大町, 3, 1, 3, 5
5, -0.38, -0.68, 松森, 3, 4, 6, 7
6, 6.0, -0.3, 高田, 1, 5
7, -0.18, -1.02, 取上, 2, 5, 8
8, -0.84, -1.58, 中野, 3, 7, 9, 18
9, -0.9, -0.98, 弘前大学, 2, 3, 8
10, -0.98, 0.15, ルネス街, 3, 3, 11, 13
11, -0.78, 0.3, 弘前郵便局, 3, 2, 10, 12
12, -1.28, 0.68, 元寺町, 2, 11, 13
13, -1.32, 0.53, 一番町, 4, 10, 12, 14, 15
14, -1.8, 0.98, 弘前城, 2, 13, 20
15, -1.43, -0.15, 銅屋町, 2, 13, 16
16, -1.73, -0.26, 新寺, 3, 15, 17, 20
17, -1.8, -1.43, 旭ヶ丘, 3, 16, 18, 19
18, -1.2, -1.73, 西弘前, 2, 8, 17
19, -2.48, -1.2, 清水, 2, 17, 20
20, -2.33, -0.51, 樹木, 3, 14, 16, 19
をもとにして交差点番号を打ち込むと,隣接する交差点名と交差点番号および打ち込んだ交差点からの距離を表示させるプログラムを作ってほしいです。
お願いします。
道案内プログラムについて
Re: 道案内プログラムについて
これを読み込んで,プリントするプログラムは作成しました
1: /* P103.c */
2: #include <stdio.h>
3:
4: #define MaxNumber 20
5:
6: typedef struct{
7: int id;
8: double x, y;
9: char name[30];
10: int points;
11: int next[5];
12: } Crossing;
13:
14: Crossing cross[MaxNumber];
15:
16: void read_data(char *filename)
17: {
18: FILE *fp;
19: int i, j;
20:
21: fp = fopen(filename, "r");
22: if (fp == NULL){
23: printf("ファイル読み込み失敗 \n");
24: }
25:
26: for(i=0;i<MaxNumber;i++){
27: fscanf(fp, "%d, %lf, %lf, %[^,], %d", &cross.id, &cross.x, &cross.y,
28: cross.name, &cross.points);
29: for(j=0;j<cross.points;j++){
30: fscanf(fp, ", %d", &cross.next[j]);
31: }
32: }
33:
34: fclose(fp);
35:
36: }
37:
38: int main(void)
39: {
40: int i, j;
41:
42: read_data("map.dat");
43:
44: for(i=0;i<MaxNumber;i++){
45: printf("%d, %lf, %lf, %s, %d", cross.id, cross.x, cross.y,
46: cross[i].name, cross[i].points);
47: for(j=0;j<cross[i].points;j++){
48: printf(", %d", cross[i].next[j]);
49: }
50: printf("\n");
51: }
52: }
1: /* P103.c */
2: #include <stdio.h>
3:
4: #define MaxNumber 20
5:
6: typedef struct{
7: int id;
8: double x, y;
9: char name[30];
10: int points;
11: int next[5];
12: } Crossing;
13:
14: Crossing cross[MaxNumber];
15:
16: void read_data(char *filename)
17: {
18: FILE *fp;
19: int i, j;
20:
21: fp = fopen(filename, "r");
22: if (fp == NULL){
23: printf("ファイル読み込み失敗 \n");
24: }
25:
26: for(i=0;i<MaxNumber;i++){
27: fscanf(fp, "%d, %lf, %lf, %[^,], %d", &cross.id, &cross.x, &cross.y,
28: cross.name, &cross.points);
29: for(j=0;j<cross.points;j++){
30: fscanf(fp, ", %d", &cross.next[j]);
31: }
32: }
33:
34: fclose(fp);
35:
36: }
37:
38: int main(void)
39: {
40: int i, j;
41:
42: read_data("map.dat");
43:
44: for(i=0;i<MaxNumber;i++){
45: printf("%d, %lf, %lf, %s, %d", cross.id, cross.x, cross.y,
46: cross[i].name, cross[i].points);
47: for(j=0;j<cross[i].points;j++){
48: printf(", %d", cross[i].next[j]);
49: }
50: printf("\n");
51: }
52: }
Re: 道案内プログラムについて
とりあえず、交差点番号をiにして、crossにセットすれば
交差点番号から一発で指定した交差点情報が得られます。
そのようにしてはいかがでしょうか?
そうすれば、あとは割と簡単かもしれません。
交差点番号から一発で指定した交差点情報が得られます。
そのようにしてはいかがでしょうか?
そうすれば、あとは割と簡単かもしれません。
Re: 道案内プログラムについて
導入の部分だけ書いておきます。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define MaxNumber 20
typedef struct{
int id;
double x,y;
char name[30];
int points;
int next[4];
}Crossing;
Crossing AL[MaxNumber];
void read_data(char*filename)
{
FILE*fp;
int i;
fp = fopen(filename,"r");
if(fp==NULL){
printf("ファイル作成失敗 \n");
}
for(i=0;i<MaxNumber;i++){
fscanf(fp,"%d, %lf, %lf, %s, %d, %d, %d, %d, %d,", &cross.id, &cross.x, &cross.y, cross.name, &cross.points, &cross.next[0], &cross.next[1], &cross.next[2], &cross.next[3]);
}
fclose(fp);
}
これで読み込みできるはずなのでここから距離を求めていきます。距離を求めるには平方を使っていけばいいと思いますが。
ここから先は自分で頑張ってください。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define MaxNumber 20
typedef struct{
int id;
double x,y;
char name[30];
int points;
int next[4];
}Crossing;
Crossing AL[MaxNumber];
void read_data(char*filename)
{
FILE*fp;
int i;
fp = fopen(filename,"r");
if(fp==NULL){
printf("ファイル作成失敗 \n");
}
for(i=0;i<MaxNumber;i++){
fscanf(fp,"%d, %lf, %lf, %s, %d, %d, %d, %d, %d,", &cross.id, &cross.x, &cross.y, cross.name, &cross.points, &cross.next[0], &cross.next[1], &cross.next[2], &cross.next[3]);
}
fclose(fp);
}
これで読み込みできるはずなのでここから距離を求めていきます。距離を求めるには平方を使っていけばいいと思いますが。
ここから先は自分で頑張ってください。
Re: 道案内プログラムについて
void read_data(char*filename)
{
FILE*fp;
int i;
fp = fopen(filename,"r");
if(fp==NULL){
printf("ファイル作成失敗 \n");
exit(1);
}
for(i=0;i<MaxNumber;i++){
fscanf(fp,"%d, %lf, %lf, %d, %d, %d, %d, %d, %d, ", &cross.id, &cross.x, &cross.y, cross.name, &cross.points, &cross.next[0], &cross.next[1], &cross.next[2], &cross.next[3]);
}
fclose(fp);
}
{
FILE*fp;
int i;
fp = fopen(filename,"r");
if(fp==NULL){
printf("ファイル作成失敗 \n");
exit(1);
}
for(i=0;i<MaxNumber;i++){
fscanf(fp,"%d, %lf, %lf, %d, %d, %d, %d, %d, %d, ", &cross.id, &cross.x, &cross.y, cross.name, &cross.points, &cross.next[0], &cross.next[1], &cross.next[2], &cross.next[3]);
}
fclose(fp);
}
Re: 道案内プログラムについて
void read_data(char*filename)
{
FILE*fp;
int i;
fp = fopen(filename,"r");
if(fp==NULL){
printf("ファイル作成失敗 \n");
exit(1);
}
for(i=0;i<MaxNumber;i++){
fscanf(fp,"%d, %lf, %lf, %d, %d, %d, %d, %d, %d, ", &cross.id, &cross.x, &cross.y, cross.name, &cross.points, &cross.next[0], &cross.next[1], &cross.next[2], &cross.next[3]);
}
fclose(fp);
}
{
FILE*fp;
int i;
fp = fopen(filename,"r");
if(fp==NULL){
printf("ファイル作成失敗 \n");
exit(1);
}
for(i=0;i<MaxNumber;i++){
fscanf(fp,"%d, %lf, %lf, %d, %d, %d, %d, %d, %d, ", &cross.id, &cross.x, &cross.y, cross.name, &cross.points, &cross.next[0], &cross.next[1], &cross.next[2], &cross.next[3]);
}
fclose(fp);
}