学校の課題で、
ABCDE
BCDEA
CDEAB
DEABC
EABCD
ABCDE
という結果になるようなpgをmainでchange(上のように形式をととのえるところ)とdisp(結果を表示するところ)を呼んで、書けという課題を出されました。
自分は下のところまで書きましたがもう限界です。
#include <stdio.h>
//プロトタイプ宣言
void change(char str[/url]);
void disp(int flag);
//main文
int main(void)
{
char str[/url] = "ABCDE";
int flag = 1;
while(flag){
flag = change(str);
disp(flag);
}
return 0;
}
//並び替えを行うエリア
void change(char str[/url])
{
}
//結果を表示するエリア
void disp(int flag)
{
}
もう限界・・・
Re:もう限界・・・
うーん、自分で書いたと言われても…私の目には穴埋め課題文そのまんまで、全く進んでいないように見えてしまうのですが…気のせいでしょうか?(^_^;)
それで、この課題の何が分かりませんか?それから学校では何を習っていて、何を習っていないかを教えてください。話はそれからだと思いますよ(^-^)
それで、この課題の何が分かりませんか?それから学校では何を習っていて、何を習っていないかを教えてください。話はそれからだと思いますよ(^-^)
Re:もう限界・・・
問題を出されたときの状態です。
#include <stdio.h>
//main文
int main(void)
{
char str[/url] = "ABCDE";
int flag = 1;
while(flag){
}
return 0;
}
//並び替えを行うエリア
void change(char str[/url])
{
}
//結果を表示するエリア
void disp()
{
}
#include <stdio.h>
//main文
int main(void)
{
char str[/url] = "ABCDE";
int flag = 1;
while(flag){
}
return 0;
}
//並び替えを行うエリア
void change(char str[/url])
{
}
//結果を表示するエリア
void disp()
{
}
Re:もう限界・・・
何度も申し訳ないんですけど…
1つ確認なのですが、disp関数の引数は何もなかったですか?
下記のようではなかったですか?
1つ確認なのですが、disp関数の引数は何もなかったですか?
下記のようではなかったですか?
#include <stdio.h> //プロトタイプ宣言 void change(char str[/url]); void disp(char str[/url]); //main文 int main(void) { char str[/url] = "ABCDE"; int flag = 1; while(flag){ } return 0; } //並び替えを行うエリア void change(char str[/url]) { } //結果を表示するエリア void disp(char str[/url]) { }
Re:もう限界・・・
とりあえず、問題にはそこの引数は何も書いてませんでした。
引数が同じだから書かなかったのか?、違う引数だった?のかはわかりません。
とりあえず、引数をchar str[/url]にするとどういうふうになるんですか?
スミマセンが、教えていただけないでしょうか?
引数が同じだから書かなかったのか?、違う引数だった?のかはわかりません。
とりあえず、引数をchar str[/url]にするとどういうふうになるんですか?
スミマセンが、教えていただけないでしょうか?
Re:もう限界・・・
文字列はmain関数内で定義されていますよね?そういう事なので、基本的にはmain関数の中でしかこの文字列は使用できない訳です。
それでは、どうすれば他の関数で使用できるようになるかというと、change関数の引数のように教えてやる必要がある訳なんですね。
そういう訳で、disp関数に表示する文字列を教える必要はないのかな?と思った訳です。
とりあえず、文字列の入れ替えの考え方を書いておきますね。
文字列は下記のように格納されています。
str[0] = 'A'
str[1] = 'B'
str[2] = 'C'
str[3] = 'D'
str[4] = 'E'
str[5] = 'F'
str[6] = '\0' // 文字列の終端をあらわす文字です。
という事は、"ABCDEF"を"BCDEFA"にしたい場合は、何を入れ替えればいいでしょうか?
str[0] = str[1]
str[1] = str[2]
str[2] = str[3]
str[3] = str[4]
str[4] = str[5]
str[5] = str[0]
str[6] = str[6]
こういう事ですね?しかし、ここで問題が発生してしまいます。
最初の(str[0] = str[1])の時点で、str[0]の値がstr[1]の値に変わってしまう為、後の(str[5] = str[0])の式を実行しても、str[0]の値は保持されていませんので、str[5]の値は変換前のstr[1]の値になってしまいます。
具体的にどういう状態になるかというと…
str[0]('A') = str[1]('B') // str[0] = 'B' (この段階でstr[0]が'A'から'B'に変わってしまう)
str[1]('B') = str[2]('C') // str[1] = 'C'
str[2]('C') = str[3]('D') // str[2] = 'D'
str[3]('D') = str[4]('E') // str[3] = 'E'
str[4]('E') = str[5]('F') // str[4] = 'F'
str[5]('F') = str[0]('B') // str[5] = 'B'
こんなことになってしまいます。
そこで下記のように、str[0]の値をどこか別の場所で保持しておいて、上記の入れ替えが終了した段階でstr[5]に保持しておいた文字を代入してあげると見事に入れ替えが完成する訳です。
str[0]('A') = buf; // buf = 'A'
str[0]('A') = str[1]('B') // str[0] = 'B'
str[1]('B') = str[2]('C') // str[1] = 'C'
str[2]('C') = str[3]('D') // str[2] = 'D'
str[3]('D') = str[4]('E') // str[3] = 'E'
str[4]('E') = str[5]('F') // str[4] = 'F'
str[5]('F') = buf('A') // str[5] = 'A'
それでは、どうすれば他の関数で使用できるようになるかというと、change関数の引数のように教えてやる必要がある訳なんですね。
そういう訳で、disp関数に表示する文字列を教える必要はないのかな?と思った訳です。
とりあえず、文字列の入れ替えの考え方を書いておきますね。
文字列は下記のように格納されています。
str[0] = 'A'
str[1] = 'B'
str[2] = 'C'
str[3] = 'D'
str[4] = 'E'
str[5] = 'F'
str[6] = '\0' // 文字列の終端をあらわす文字です。
という事は、"ABCDEF"を"BCDEFA"にしたい場合は、何を入れ替えればいいでしょうか?
str[0] = str[1]
str[1] = str[2]
str[2] = str[3]
str[3] = str[4]
str[4] = str[5]
str[5] = str[0]
str[6] = str[6]
こういう事ですね?しかし、ここで問題が発生してしまいます。
最初の(str[0] = str[1])の時点で、str[0]の値がstr[1]の値に変わってしまう為、後の(str[5] = str[0])の式を実行しても、str[0]の値は保持されていませんので、str[5]の値は変換前のstr[1]の値になってしまいます。
具体的にどういう状態になるかというと…
str[0]('A') = str[1]('B') // str[0] = 'B' (この段階でstr[0]が'A'から'B'に変わってしまう)
str[1]('B') = str[2]('C') // str[1] = 'C'
str[2]('C') = str[3]('D') // str[2] = 'D'
str[3]('D') = str[4]('E') // str[3] = 'E'
str[4]('E') = str[5]('F') // str[4] = 'F'
str[5]('F') = str[0]('B') // str[5] = 'B'
こんなことになってしまいます。
そこで下記のように、str[0]の値をどこか別の場所で保持しておいて、上記の入れ替えが終了した段階でstr[5]に保持しておいた文字を代入してあげると見事に入れ替えが完成する訳です。
str[0]('A') = buf; // buf = 'A'
str[0]('A') = str[1]('B') // str[0] = 'B'
str[1]('B') = str[2]('C') // str[1] = 'C'
str[2]('C') = str[3]('D') // str[2] = 'D'
str[3]('D') = str[4]('E') // str[3] = 'E'
str[4]('E') = str[5]('F') // str[4] = 'F'
str[5]('F') = buf('A') // str[5] = 'A'