質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

0回答

1058閲覧

キューに変更したプログラムの書き方

fegeryh

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/05/31 08:35

編集2021/06/01 04:44
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> #define MAX 10 #define NAME_LEN 20 /*--- 身体データ型 ---*/ typedef struct{ int height; /* 身長 */ double vision; /* 視力 */ } Body ; /*--- 身体検査データ型 ---*/ typedef struct{ char *name; /* 氏名 */ Body body; /* 身体データ型 ---*/ } PhysCheck ; /*--- 身体検査データ型スタックを実現する構造体 ---*/ typedef struct { int max; /* スタックの容量 */ int ptr; /* スタックポインタ */ char **que; /* スタック本体(char* へのポインタ配列 )*/ } PhysCheckStack; /*--- キューを実現する構造体 ---*/ typedef struct { int max; /*キューの容量*/ int num; /*現在の要素数*/ int front; /*先頭要素のカーソル*/ int rear; /*末尾要素のカーソル*/ int *que; /*キュー本体*/ }IntQueue; /*--- Boyer-Moore 法による文字列探索 ---*/ char *bm_match(char *pat , char *txt){ char *pt; /* txt をなぞるカーソル */ char *pp; /* pat をなぞるカーソル */ int txt_len = strlen(txt); /* txt の文字数 */ int pat_len = strlen(pat); /* pat の文字数 */ int skip[UCHAR_MAX + 1]; /* スキップテーブル */ int i; for (i = 0; i <= UCHAR_MAX; i++) /* スキップテーブルの作成 */ skip[i] = pat_len; for (pp = pat; *pp != '\0'; pp++) skip[*pp] = strlen(pp) - 1; skip[*(pp - 1)] = pat_len; /* パターンの最後文字の移動距離はパターンの文字数 */ pt = txt + pat_len - 1; /* pat の末尾と比較する txt の文字を決定 */ while ( pt < txt + txt_len) { /* txt の比較する文字の位置が txt の末尾を越えるまで */ pp = pat + pat_len - 1; /* pat の最後の文字に着目 */ while (*pt == *pp) { if (pp == pat) return pt; /* 一致した文字がパターンの最初の文字になれば終了 */ pp--; pt--; } pt += (skip[*pt]> strlen(pp)) ? skip[*pt] : strlen(pp); } return NULL; } /*--- キューの初期化 ---*/ int Initialize(IntQueue *q, int max){ q->num = q->front = q->rear =0; if ((q->que = calloc(max, sizeof(int))) == NULL) { /*stk=que ?? char*=int ??*/ q->max = 0; /* 配列の確保に失敗 */ return -1; } /* 配列の確保に成功 */ q->max = max; return 0; } /*--- キューにデータをエンキュー ---*/ int Enque(IntQueue *q, int x){ if (q->num >= q->max) return -1; /* スタック満杯 */ else{ q->num++; q->que[q->rear++] = x; if(q->rear == q->max) q->rear = 0; return 0; } } /*---キューからデータをデキュー ---*/ int Deque(IntQueue *q, int *x){ if (q->num <= 0) return -1; /* キューは空 */ else{ q->num--; *x = q->que[q->front++]; if(q->front == q->max) q->front = 0; return 0; } } /*--- キューからデータをピーク ---*/ int Peek(const IntQueue *q, int *x){ if (q->num <= 0) return -1; *x = q->que[q->front]; return 0; } /*--- キューの容量 ---*/ int Capacity(const IntQueue *q){ return q->max; } /*--- キューに積まれているデータ数 ---*/ int Size(const IntQueue *q){ return q->num; } /*--- 身体検査データを1つ表示 ---*/ void OneDataPrint(const IntQueue *q){                     ➀ printf("%-18.18s%4d%5.1f\n", x->que, x->body.height, x-> body.vision);  ➁ } /*--- キューの全データの表示 ---*/ void Print(const IntQueue *q){ int i; for(i = 0; i < q->num; i++) OneDataPrint(q->que+i); putchar('\n'); } /*--- スタックのデータにあるパターンの表示とその数を数える ---*/ int Search(IntQueue *q, int x){ int i, last, num = 0; char *txt, *pat = x->name;                          ➂ for(i = 0; i < q->num; i++){ /* 底から頂上へ */ txt = q->que[i].name; while((txt = bm_match(pat, txt)) != NULL){ num ++; txt ++; last = i; } } if (num > 0) OneDataPrint(q->que + last); return num; } int main(void){ IntQueue que; if(Initialize(&que, MAX)== -1){ puts("キューの生成に失敗しました。"); return 1; } Initialize(&s, MAX); while (1) { int menu, num; printf("現在のデータ数:%d/%d\n",Size(&que), Capacity(&que)); printf("(1) エンキュー (2)デキュー (3) ピーク (4) 表示 (5)探索 (0) 終了:"); scanf("%d", &menu); if (menu == 0) break; switch (menu) { case 1: /* エンキュー */ printf("名前: "); scanf("%s", x.name); printf("身長: "); scanf("%d", &(x.body.height)); printf("視力: "); scanf("%lf", &(x.body.vision)); if (Enque(&que, x) == -1) puts("\a エラー:エンキューに失敗しました。\n"); break; case 2: /* デキュー */ if (Deque(&que, &x) == -1) puts("\a エラー:デキューに失敗しました。\n"); else{ printf("デキューしたデータは,"); OneDataPrint(&x); } break; case 3: /* ピーク */ if (Peek(&que, &x) == -1) puts("\a エラー:ピークに失敗しました。\n"); else{ printf("ピークしたデータは,"); OneDataPrint(&x); } break; case 4: /* 表示 */ Print(&que); break; case 5: /* 検索 */ printf("探す名前:"); scanf("%s", x.name); if ((num = Search(&que, &x)) >0) printf("名前に含まれるパターン数は,%d 個です,\n",num); else{ puts("\a エラー:パターンは存在しません。\n "); } break; } } Terminate(&que); return 0; }

動的スタックのプログラムを,動的なキューに変更したプログラムに変更したく上記のように書き換えたのですが、➀➁➂でエラーが生じてしまいます。解決方法が分からないです。
①でのエラーは
Main.c:110:35: note: passing argument to parameter 'q' here
②でのエラーは
Main.c:111:31: error: use of undeclared identifier 'x'
printf("%-18.18s%4d%5.1f\n", x->que, x->body.height, x-> body.vision);
Main.c:111:39: error: use of undeclared identifier 'x'
printf("%-18.18s%4d%5.1f\n", x->que, x->body.height, x-> body.vision);
Main.c:111:55: error: use of undeclared identifier 'x'
printf("%-18.18s%4d%5.1f\n", x->que, x->body.height, x-> body.vision);
③でのエラーが
Main.c:124:23: error: member reference type 'int' is not a pointer char *txt, *pat = x->name;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/05/31 08:39

Javaタグ← Cとかじゃないの? ソースコードはMarkDownのcode機能でブロック化してご提示ください。
y_waiwai

2021/05/31 08:45 編集

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください また、エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、いらぬ翻訳省略しないで、出たそのママをコピペで提示してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問