C/C++の宿題片付けます 139代目

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2010/09/16(木) 13:58:35
だよな
>>938も素直に自分の勘違いをみとめてりゃよかったのになw
953デフォルトの名無しさん:2010/09/16(木) 14:33:13
だいたい0でも問題ないし
954デフォルトの名無しさん:2010/09/16(木) 14:45:47
ふぅん
955デフォルトの名無しさん:2010/09/16(木) 17:05:05
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):入力した文字列の中に
指定した文字が含まれていればその文字が左から何文字目にあるかを表示し、
指定した文字がなかった場合は-1と表示する関数を作成せよ。
[3] 環境
 [3.1] OS: Windows7
 [3.2] コンパイラ名とバージョン: visual studio
 [3.3] 言語: C言語のみ
[4] 期限: [2010年09月21日まで]
[5] その他の制限: 関数名はint str_char(const char str[], int c)で作ること
956デフォルトの名無しさん:2010/09/16(木) 17:20:00
int str_chr(const char str[], int c)
{
int i;

for(i = 0; str[i]; i++) if(str[i] == c) return i;

return -1;
}
957955:2010/09/16(木) 17:21:14
>>956
ありがとうございます。
958デフォルトの名無しさん:2010/09/16(木) 17:23:36
っと表示する関数か
int str_chr(const char str[], int c)
{
int i;

for(i = 0; str[i]; i++) {
if(str[i] == c) {
printf("%d\n", i);
return i;
}}

printf("-1\n");
return -1;
}
959デフォルトの名無しさん:2010/09/16(木) 17:24:57
>>955
int str_char(const char str[], int c) {
int index;
for (index = 0; str[index] != '\0'; index++) {
if (str[index] == c) return index;
}
return -1;
}
960959:2010/09/16(木) 17:26:02
>>956-958
うわーリロードしてなかったゴメン。
961デフォルトの名無しさん:2010/09/16(木) 17:26:31
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):入力した文字列の中に
指定した文字がいくつあるか表示し、
指定した文字がなかった場合は0と表示する関数を作成せよ。
[3] 環境
 [3.1] OS: Windows7
 [3.2] コンパイラ名とバージョン: visual studio
 [3.3] 言語: C言語のみ
[4] 期限: [2010年09月21日まで]
[5] その他の制限: 関数名はint str_chnum(const char str[], int c)で作ること
連続ですみませんが、よろしくお願いします。
962デフォルトの名無しさん:2010/09/16(木) 17:28:18
>>955
ttp://codepad.org/QPK8jHFF

一番左は1文字目だろ
963デフォルトの名無しさん:2010/09/16(木) 17:31:04
>>961
// 指定した文字がいくつあるか表示し、 指定した文字がなかった場合は0と表示
// ↑表示は無視
int str_chnum(const char str[], int c) {
int sum = 0;
char *p;
for (p = str; *p != '\0'; p++) {
if (*p == c) sum++;
}
return sum;
}
964デフォルトの名無しさん:2010/09/16(木) 17:43:44
958 959 962さんもありがとうございます。
963さん、助かります。
965デフォルトの名無しさん:2010/09/16(木) 17:52:54
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
void put_string(const char str[])
{
  unsigned i = 0;

  while (str[i])
    putchar(str[i++]);
}
上の関数と同じ動きする関数をputcharではなくprintfを用いて作成せよ。
[3] 環境
 [3.1] OS: Windows7
 [3.2] コンパイラ名とバージョン: visual studio
 [3.3] 言語: C言語のみ
[4] 期限: [2010年09月21日まで]
[5] その他の制限:なし
一人でたくさん投稿してすみません。
課題が8つ出たので今のが3つ目です。
よろしくお願いします。
966963:2010/09/16(木) 17:56:22
修正:
char *p;

const char *p;
967デフォルトの名無しさん:2010/09/16(木) 18:04:07
>>965
void put_string(const char str[])
{
  printf("%s", str);
}


printf(str);
だと間違い。
968デフォルトの名無しさん:2010/09/16(木) 18:04:35
残り全部まとめて出したほうが面倒がなくていいと思うよ
969デフォルトの名無しさん:2010/09/16(木) 18:06:22
まとめて出したら答えないよ
970デフォルトの名無しさん:2010/09/16(木) 18:07:33
>>966
了解です。

>>967
ありがとうございます。
971デフォルトの名無しさん:2010/09/16(木) 18:11:19
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
void put_string(const char str[])
{
  unsigned i = 0;

  while (str[i])
    putchar(str[i++]);
}
上の関数をもとに、入力された文字列を逆に表示する関数を作成せよ。
例:ABC→CBA
[3] 環境
 [3.1] OS: Windows7
 [3.2] コンパイラ名とバージョン: visual studio
 [3.3] 言語: C言語のみ
[4] 期限: [2010年09月21日まで]
[5] その他の制限:なし
課題4つ目です。
よろしくお願いします。

972971:2010/09/16(木) 18:12:34
追加します。
関数名はput_rstringでお願いします。
973デフォルトの名無しさん:2010/09/16(木) 18:14:05
>>967
こうしないとUINT_MAXを超えたときの挙動が変わっちまうだろ?

void put_string(const char str[])
{
  unsigned i = 0;

  while (str[i])
    printf("%c", str[i++]);
}
974デフォルトの名無しさん:2010/09/16(木) 18:16:55
>>971
int put_rstring(const char str[]) {
unsigned i = 0, tail = strlen(str) - 1;
while (str[tail - i])
putchar(str[tail - i++]);
}
975974:2010/09/16(木) 18:22:14
>>971
// 変数一個減らしてみた。けど、ちょっと流れは不自然かも。
int put_rstring(const char str[]) {
unsigned i = strlen(str);
while (i)
putchar(str[--i]);
}
976デフォルトの名無しさん:2010/09/16(木) 18:23:37
977デフォルトの名無しさん:2010/09/16(木) 18:24:30
>>971
void put_rstring(const char str[])
{
unsigned i = 0;

while(str[i]) i++;

while(i--) putchar(str[i]);
}
978デフォルトの名無しさん:2010/09/16(木) 18:26:14
>>974
ダメ
>>976
ダメ
979デフォルトの名無しさん:2010/09/16(木) 18:29:53
>>978
どれならいいの?
980デフォルトの名無しさん:2010/09/16(木) 18:35:25
いやダメと言われても
981デフォルトの名無しさん:2010/09/16(木) 18:36:36
ダメな理由を書いてほしいな
982デフォルトの名無しさん:2010/09/16(木) 18:37:14
>>974
終了条件をよく考えましょう

>>978
どこから表示してるのかよく考えましょう
983デフォルトの名無しさん:2010/09/16(木) 18:38:15
>>978じゃなくて>>976
984974:2010/09/16(木) 18:39:27
>>978
unsigned i = 0, tail = strlen(str) - 1;
while (str[tail - i])

あー。こういうのは長さがゼロのときマイナス行っちゃうからダメなのか。
unsigned int で4294967295。
こちらの環境ではうまくいってるのは偶然か。
985デフォルトの名無しさん:2010/09/16(木) 18:41:52
長さが0とかじゃなく、文字列先頭の1文字前には何が入ってるか決まってないから
986デフォルトの名無しさん:2010/09/16(木) 18:42:47
>>983
>>976 は CBA と表示されてるだろ?
何が言いたいのかわからん。
987デフォルトの名無しさん:2010/09/16(木) 18:43:58
>>985
先頭の一文字前に行くの?
今の段階では strlen("") - 1のとき、
str + 4294967295を見ると思ってるけど、そうはならないのかな。
988デフォルトの名無しさん:2010/09/16(木) 18:48:04
[1] 授業単元:C基礎実習
[2] 問題文(含コード&リンク):ユーザーが入力できるr行s列の行列Xとt行y列の行列Yの掛け算を計算するプログラムを作成しなさい。尚、ポインタを使用して計算すること
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VC++ 2008
 [3.3] 言語: C
[4] 期限: 9月22日
[5] その他の制限: 必ずポインタを使う事と、任意の数をユーザーが入力できること

#include <stdio.h>
int main(void){
int a[][4]={{1,2,3,4},{5,6,7,8}};
int *b;
int sum[2], i, j;

b=a[0];
printf("&a[0][0]= %u, a[0]= %u\n", &a[0][0], a[0]);
sum[0]=sum[1]=0;
for(i=0; i<2; i++){
for(j=0; j<4; j++){
sum[i] += *(b+4*i+j);
}
}

printf("sum[0]= %d, sum[1]= %d\n", sum[0], sum[1]);
}

任意の数を入力させない場合はできたのですが、任意の数を読み込ませる形がわかりません・・・お願いします
989デフォルトの名無しさん:2010/09/16(木) 18:51:26
>>986
> while (str[i++]);
これが終了するときのiの値をよく考えてみましょう

>>987
char str[] = "abcdef";

put_rstring(str + 3);

って試してみましょう

990デフォルトの名無しさん:2010/09/16(木) 18:55:32
991デフォルトの名無しさん:2010/09/16(木) 19:00:40
>>989
unsigned 分かってなかった…。
char cs[] = "abcdef", *p = cs + 3;
unsigned ui = - 1;
printf("ui u[%u], d[%d]\n", ui, ui);
printf("cs[%s], p[%s]\n", cs, p);
printf("p[-1] = [%c]\n", p[-1]);
printf("p[ui] = [%c]\n", p[ui]);

ui u[4294967295], d[-1]
cs[abcdef], p[def]
p[-1] = [c]
p[ui] = [c]
992デフォルトの名無しさん:2010/09/16(木) 19:01:07
>>965
問題が有り得ないな、逆なら判るけど
993デフォルトの名無しさん:2010/09/16(木) 19:02:27
っていうかどこで止まるつもりだったんだよ
994デフォルトの名無しさん:2010/09/16(木) 19:08:19
>>989
>>976 は正しい様に思えるよ
putchar( str[--i] ); が putchar(str[i--]); なら間違いだけど
995デフォルトの名無しさん:2010/09/16(木) 19:11:52
>>994
なんで>>990で何も言わずに修正したのか理解できていません

while(str[i++]);
このループが終了したとき、str[i]は文字列終端の一文字後ろ指します
そして
putchar(stt[--i]);
の最初は、そこから一つ前、すなわち文字列の終端である'\0'になります
996デフォルトの名無しさん:2010/09/16(木) 19:16:16
失礼、>>990 見てなかった、ちょっと吊ってくる
997デフォルトの名無しさん:2010/09/16(木) 19:18:30
C/C++の宿題片付けます 140代目
http://hibari.2ch.net/test/read.cgi/tech/1284632294/
998デフォルトの名無しさん:2010/09/16(木) 19:19:05
ところで次スレ大丈夫?
999デフォルトの名無しさん:2010/09/16(木) 19:19:55
1000デフォルトの名無しさん:2010/09/16(木) 19:19:57
>>997
よくやった!乙!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。