質問するログイン新規登録

Q&A

1回答

422閲覧

ハッシュ探索のプログラミングを作りたい。

HOPE.tree

総合スコア1

0グッド

0クリップ

投稿2022/08/16 06:03

0

0

C言語のことで質問です。
データ探索のプログラミングを作りたいです。
学んでいる最中なのでソースコードがぐちゃぐちゃです。
アドレスいただけるとありがたいです。

実現したいこと

・配列要素数は 10 個と考えます。
・必ずシノニムが発生した状態の配列要素の設定とする
・シノムニが発生した場合、空いている格納場所を探し格納したいです。
・シノニム発生によりハッシュ値の場所に格納されなかったデータについて、正しく検索できていることを確認できる実行結果とする

発生している問題・エラーメッセージ

エラーメッセージ エラー E2188 194.cpp 8: 式の構文エラー(関数 main() ) エラー E2277 194.cpp 14: 左辺値が必要(関数 main() ) 警告 W8004 194.cpp 20: 'x' に代入した値は使われていない(関数 main() ) *** 4 errors in Compile *** ### 該当のソースコード #include <stdio.h> main() { int x[10]={90,-1,30,45,-1,68,-1,-1,25,12}; int i,x,a; printf("数値?"); scanf("%d",%x); i=0; i=x/10; while(i!=-1 && i<=9 && i!=x){ i=i++; } if(i>9 || i=-1 || i=x){ printf("格納エラ―"); } else{ printf("%d",i); } } ### 補足情報 疑似言語ではこうゆう風に考えました。 〇プログラム:データ探索 〇整数型:a□,x,i ・データxを入力 ・i←x%10 a[i]≠-1 and i <=9 and a[i]≠x ・i←i+1 i >9 or a[i]=-1 or a[i]=x  ・”探索エラー”を表示 ・iを表示

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

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

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

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

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

episteme

2022/08/16 08:21

で、ハッシュ表および検索のコードはどこですか?
HOPE.tree

2022/08/17 09:30

コードもよくわかっていません。。。 10個の配列があり、それのデータ探索するプログラムを教えていただきたいです。
HOPE.tree

2022/08/17 09:38

データの値をxとして、ハッシュ関数はh=(x)%10と考えました。 データを自分で決めて配列内に格納したいです。 例えば、データを3,10,25とすると、a[0]の部屋に10、a[5]の部屋に25、a[7]の部屋に3がはいるようなプログラミングを書きたいです。
episteme

2022/08/18 13:02

> 例えば、データを3,10,25とすると、a[0]の部屋に10、a[5]の部屋に25、a[7]の部屋に3がはいるようなプログラミングを書きたいです。 そのためには何が必要ですか? > a[7]の部屋に3がはいるような なんで? a[3] の部屋に 3がはいる ではなくて?
HOPE.tree

2022/08/19 10:50

while とif が必要だと思います。 変数をcut, a[], x, iとして、cut <=2 and a[i]≠x をwhile で回して、if でa[i]=x 表示するかしないかを選択する必要があるなと思いました。 割った数のあまりが入ると思っていました。a[3] の部屋に 3がはいるが正しいことでした。
episteme

2022/08/19 10:57

ではシノニムの対処はどうしますか? データが3,33,333 なら どの部屋に何がはいりますか?
HOPE.tree

2022/08/19 12:02

シノムニが発生したら、空いている部屋を探し入れたいです。 また、データ探索の場合のプログラムを以下のように考えたのですが、うまくシノムニが代入されません。初期値は-1を入れてみました。 #include <stdio.h> main() { int cnt,x,i,tbl[10]={20,-1,-1,-1,30,-1,-1,-1,-1,-1}; cnt=0; i=x%10; printf("データを入力"); scanf("%d",&x); while(cnt<=9 && tbl[i]!=x){ i=i+1; if(i==10){ i=0; } } if(tbl[i]==x){ printf("%dを表示",i); } else{ printf("格納エラ―\n"); } }
guest

回答1

0

最初に宣言した変数xとその次の行で宣言してる入力格納用の変数xの名前がかぶってますよ?

投稿2022/08/16 23:12

RiaFeed

総合スコア2703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問