C 大学の課題です。助けてください!

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Kazuma3
記事: 4
登録日時: 6ヶ月前

C 大学の課題です。助けてください!

#1

投稿記事 by Kazuma3 » 6ヶ月前

以下が課題です。
プログラムは、C言語で書きます。
キーボードから(空白類文字を含むかもしれない)1行を入力して,先頭のK文字と最 後の K 文字が順に同じであるかを判定するプログラムを書きたいとする.ただし,K はマクロで定めなければならず,1 行の長さに上限を勝手に設けてはいけなく,メモリ を動的に確保してはいけないとする.また,(入力のために打ち込んだ)改行文字を判 定に含めず,2K 文字未満の 1 行が入力された場合は「undecidable」を表示すること.条件に繰り返し文や goto 文を使ってはいけない場合のプログラムを書く.
おそらく、再帰的処理をするのかなとは思います.

アバター
みけCAT
記事: 6404
登録日時: 10年前
住所: 千葉県
連絡を取る:

Re: C 大学の課題です。助けてください!

#2

投稿記事 by みけCAT » 6ヶ月前

課題の丸投げは禁止です。
フォーラムルールを読み、従ってください。
質問は具体的にする
詳しくは「回答者が困る質問例」をご覧下さい

「うまくいきません」という質問は大抵回答に困ります。

自分は今何がしたくて
どう取り組んで(作ったプログラムはどれで
どのようなエラーやトラブルで困っていて
自分は何が解らないのか、知りたいのか
今のCの知識はどの程度なのか

この5点をしっかりと明記して下さい。

環境に依存する場合やライブラリを使っているときは
使っているOS名・コンパイラ名・ライブラリ名も明記しましょう。

コンパイルエラーの質問時は必ず最低限のエラーメッセージも書きましょう。
宿題の質問は OK! でも丸投げは NG!
宿題の文章だけ書いて「誰か答え教えて下さい」は×

課題の丸投げ(問題文だけ書く事)は禁止です。

ただし上のように記載してもらえればこれは当てはまりません。

自分でどこまでやったのか、今どこが解らないのかを明確にして下さい。

さっぱり解らず、手も足も出ない時は、その事を明記の上、

勉強方法からアドバイスを受けましょう。

どうしても提出期限の関係で答えが欲しい時はその事をしっかり明記の上、

回答者さん達の理解を求めるようにしましょう。

また、解決した時は、「解決しました」とだけ言って去らず、ソースコードや解決した方法を明記して下さい。

同じ事で困っている人の為に過去ログに有用な情報を残すようお願いします。
よくわからない人はテンプレを
質問の仕方がわからない時はテンプレを使って質問して下さい

どう質問していいか解らない時は、以下のテンプレをコピペして、

各項目に対して答える形で記載して下さい。

[1] 質問文
 [1.1] 自分が今行いたい事は何か
 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
 [1.4] 今何がわからないのか、知りたいのか

[2] 環境  
 [2.1] OS : Windows, Linux等々
 [2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々

[3] その他
 ・どの程度C言語を理解しているか
 ・ライブラリを使っている場合は何を使っているか
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
あたっしゅ
記事: 443
登録日時: 10年前
住所: 東京23区
連絡を取る:

Re: C 大学の課題です。助けてください!

#3

投稿記事 by あたっしゅ » 6ヶ月前

> 1 行の長さに上限を勝手に設けてはいけなく,メモリ を動的に確保してはいけないとする.

この条件では、作成不可能じゃ...コンピュータ通訳で、意味が逆になったんでしょうか ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.rosx.net/vtuber/index.html
レスがついていないものを優先して、レスすみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたっしゅ、[MrAtassyu]
http://ameblo.jp/mratassyu/
Pixiv: 666303
手提鞄屋魚有店(てさげかばんやうおありてん)

アバター
みけCAT
記事: 6404
登録日時: 10年前
住所: 千葉県
連絡を取る:

Re: C 大学の課題です。助けてください!

#4

投稿記事 by みけCAT » 6ヶ月前

あたっしゅ さんが書きました:
6ヶ月前
> 1 行の長さに上限を勝手に設けてはいけなく,メモリ を動的に確保してはいけないとする.

この条件では、作成不可能じゃ...コンピュータ通訳で、意味が逆になったんでしょうか ?
先頭のK文字と最後のK文字だけを保持しておけばいいので、作成不可能ではないと思います。
再帰だと末尾再帰最適化がされる保証が無く、スタックオーバーフローが怖いので、
仕方がないからsetjmp/longjmpを使うのが吉…ですかねえ…?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Kazuma3
記事: 4
登録日時: 6ヶ月前

Re: C 大学の課題です。助けてください!

#5

投稿記事 by Kazuma3 » 6ヶ月前

すみませんでした。このサイトを使うのが初めてなので、ルールを無視してしまいました。
今かけているコードは↓になります。

コード:

#include <stdio.h>
#define K 5

int main(void){
    char a[10];
    scanf("%s",a);
}
わからないことは、入力された文字列の先頭のK文字と最後のK文字が順に同じであるかを判定するっていうとこです。問題の条件に1行の長さを勝手に設けてはいけないとありますが、どのように書けばいいですか?ポインタ を使うんですかね…

やりたいことの例をあげます。
入力文字列がabcde123 (K=5) のとき、出力はdifferent
1234512345612345(K=5)の時、出力はsame

アバター
usao
記事: 1635
登録日時: 8年前

Re: C 大学の課題です。助けてください!

#6

投稿記事 by usao » 6ヶ月前

どう見てもわざわざ再帰で書く意味が無い内容のクソ問題だな.
まぁ実用するんじゃなくてただ課題なんだから
「スタックが尽きるような長さの入力はしないものと仮定」して良いんじゃないかな,とは思う.
(提出時にそういうお断りでも添えてやればよろしかろう)

・最初のK文字を保持しておく配列(A)
・最後のK文字を保持するための配列(B)

の2つを用意し,1文字ずつ入力を取得しては取得回数をカウントし,
現在のそのカウンタ値に応じてAかBのどちらかを更新していけばよかろう.
B側はリングバッファ的にでも扱って更新してやれば楽だと思う.

Kazuma3
記事: 4
登録日時: 6ヶ月前

Re: C 大学の課題です。助けてください!

#7

投稿記事 by Kazuma3 » 6ヶ月前

返信ありがとうございます!
「スタックが尽きるような長さの入力はしないもの」と仮定して、課題を提出します。
1文字ずつ入力を取得しては取得回数をカウント、現在のそのカウンタ値に応じてAかBのどちらかを更新していけばよかろう
↑これは別に関数を作るということですか?
また、入力文字列に勝手に上限を設けてはいけないとあるのですが、自分のコードだと設けており、どのように書けばよいかわかりません。

アバター
あたっしゅ
記事: 443
登録日時: 10年前
住所: 東京23区
連絡を取る:

Re: C 大学の課題です。助けてください!

#8

投稿記事 by あたっしゅ » 6ヶ月前

コード:

    char a[10];
    scanf("%s",a);
これは、一行単位で(行頭から改行まで、まとめて)、処理するやり方。
char a[10]; の 10 が、入力文字列の勝手な上限。

一行単位ではなく、一文字単位で処理する。

コード:

#include <stdio.h>
#include <conio.h>

#define K 5

char top[K];
char bottom[K];

int
main(void)
{
    while(1) {
        int a;

        a=getch();
        if(a==EOF) {
            break;
        }
        
        // a を top や bottom に入れたりする。
    }

    // top と bottom を比較。
}
入力終了は[Ctrl]+[Z]
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.rosx.net/vtuber/index.html
レスがついていないものを優先して、レスすみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたっしゅ、[MrAtassyu]
http://ameblo.jp/mratassyu/
Pixiv: 666303
手提鞄屋魚有店(てさげかばんやうおありてん)

Kazuma3
記事: 4
登録日時: 6ヶ月前

Re: C 大学の課題です。助けてください!

#9

投稿記事 by Kazuma3 » 6ヶ月前

ありがとうございます。もう少し自分で頑張ってみます!

返信

“C言語何でも質問掲示板” へ戻る