1 :デフォルトの名無しさん2011/05/20(金) 13:57:11.89
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他の発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://s2.etowns.slyip.net/~c_cpp_homework/cgi-bin/joyful/joyful.cgi
http://codepad.org/ ←遅い時間は重い事があります
http://ideone.com/
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/
前スレ
C/C++の宿題片付けます 147代目
http://hibari.2ch.net/test/read.cgi/tech/1301553333/
3 :デフォルトの名無しさん2011/05/20(金) 14:32:41.58
>>1乙
11 :デフォルトの名無しさん2011/05/20(金) 20:00:31.56
>>10
>>1を読めうんこ

あとサゲることぐらいしろ
592 :デフォルトの名無しさん2011/05/29(日) 16:37:03.58
>>590
>>1
・問題文は、出題されたまま全文を書いてください。
2 :デフォルトの名無しさん2011/05/20(金) 14:18:21.69
おまいら
janeの隠し機能を発見したぞ!

1.まず半角入力に切り替える
2.Wキーを押しっぱなしにする
3.Wキを押しっぱなしにしながらsageのチェックするところをおもむろにクリック
4 :デフォルトの名無しさん2011/05/20(金) 16:06:17.71
早速ですがよろしくお願いします

[1] 授業単元:趣味の独学
[2] 問題文(含コード&リンク):
ポインタを使って2つの戻り値を加算するプログラム
[3] 環境
 [3.1] OS: windows7
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:ポインタまで。難しいことはまだわかりません

http://codepad.org/14ZoJ5pK
コンパイルは通るんですが実行結果がおかしくなります。
ポインタを勘違いして使ってるのかと思うんですがどこを修正すればいいでしょうか?
お手数ですがよろしくお願いします。
6 :デフォルトの名無しさん2011/05/20(金) 16:30:21.77
8 :デフォルトの名無しさん2011/05/20(金) 16:35:05.83
なんだ、読み込むところから、全然できてないのか。
>>6
http://codepad.org/umIUcCEp
7 :デフォルトの名無しさん2011/05/20(金) 16:31:45.02
scanf -->引数に与える変数には&をつける
printf -->引数に与える変数に&を付けることは滅多にしない
9 :42011/05/20(金) 17:05:10.99
レスありがとうございます。
"の位置と、printfの引数に&を付けた事が原因だったようで・・・
もう一度読み直してきます、ありがとうございました。
10 :デフォルトの名無しさん2011/05/20(金) 19:56:55.21
英文字を読み込み、その一つ一つの文字の個数を求めるプログラム。

実行結果
英文字 BBACC
変換後 B2A1C2

よろしくお願いします。
12 :デフォルトの名無しさん2011/05/20(金) 20:11:02.18
[1]c言語
[2]英文字を読み込み、その一つ一つの文字の個数を求めるプログラム。

実行結果
英文字 BBACC
変換後 B2A1C2[3] 環境
[3.1] Linux
[3.3] C++
[4] 期限:5月22日(日)
13 :デフォルトの名無しさん2011/05/20(金) 20:25:47.21
>>12
>[3.3] C++

これ、合ってる?
今習ってるのはC言語ではないの?
15 :デフォルトの名無しさん2011/05/20(金) 21:07:48.00
>>12
#include <stdio.h>
#include <ctype.h.
17 :デフォルトの名無しさん2011/05/20(金) 21:13:15.37
手が滑った
>>12

#include <stdio.h>
#include <ctype.h>

int main(void)
{
int i, ch, cnt = 0, a[52][2] = {0};

printf("英文字 ");
while((ch = getchar()) != '\n') {
if(!isalpha(ch)) continue;
for(i = 0; i < cnt; i++) {
if(a[i][0] == ch) {
a[i][1]++;
break;
} }
if(i == cnt) {
a[cnt][0] = ch;
a[cnt++][1] = 1;
} }

printf("変換後 ");
for(i = 0; i < cnt; i++) printf("%c%d", a[i][0], a[i][1]);

return 0;
}
27 :デフォルトの名無しさん2011/05/20(金) 23:37:06.94
>>17
>[3.3] C++

>>12
http://codepad.org/pvfKUmVl
28 :デフォルトの名無しさん2011/05/20(金) 23:47:27.00
>>27
>[1]c言語
お前はバカなんだから他人の揚げ足とろうとか考えるな
29 :デフォルトの名無しさん2011/05/20(金) 23:55:34.18
31 :デフォルトの名無しさん2011/05/20(金) 23:55:57.02
>>28
あんまり、Qをいじめるなよ
32 :デフォルトの名無しさん2011/05/21(土) 00:08:17.54
>>27
>>17がC++でコンパイルできない環境を教えてくれ
34 :デフォルトの名無しさん2011/05/21(土) 00:39:30.71
>>32
たしかに gcc, bcc, cl ともコンパイル可能です。失礼しました。
36 :デフォルトの名無しさん2011/05/21(土) 01:37:25.94
>>27
おい

エラー E2094 ***.cpp 12: >> 演算子が使われたがクラス istream では std::string 型のための定義が存在しない (関数 main() )
38 : ◆XEE2zLj0dE 2011/05/21(土) 03:43:38.24
>>12
順序を保たないとだめなんだろうか。提出には不向きだと思いつつ投下。
http://codepad.org/wj0DTcl7
39 :デフォルトの名無しさん2011/05/21(土) 10:00:49.26
>>36, >>37
ご指摘感謝。

>>27
http://codepad.org/PlSuun2U
42 :デフォルトの名無しさん2011/05/21(土) 11:02:12.76
>>39
C++もロクに分からないのにコンパイルできないソースを上げるのはやめてくれ
出題者に迷惑だ
16 :デフォルトの名無しさん2011/05/20(金) 21:08:12.84
[1]授業単元:課題
[2]問題文:文字列を読み込み,各文字をアルファベットの辞書順にn文字循環シフトして出力するプログラム.
ただし'b'が'a'+1であると仮定してはならない.
整数 > 5
変換前の文字列 > ayzfvwhbpqrcegiklmnjostdux
変換後の文字列: fdekabmguvwhjlnpqrsotxyizc

[3] 環境
 [3.1]Linux
 [3.2]gcc
 [3.3]言語:C
[4]期限:5/23

18 :デフォルトの名無しさん2011/05/20(金) 21:22:00.50
>>16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
const char *alphabet="abcdefghijklmnopqrstuvwxyz", *p;
char buf[256];
int i, n, x;

fprintf(stderr, "整数 > ");
gets(buf);
n=atoi(buf);
fprintf(stderr, "変換前の文字列 > ");
gets(buf);
fprintf(stderr, "変換後の文字列 : ");
for(i=0;buf[i];i++)
{
p=strchr(alphabet, buf[i]);
if(p)
{
x=(p-alphabet+n)%26;
putchar(alphabet[x]);
}
else
{
putchar(buf[i]);
}
}
return 0;
}
19 :デフォルトの名無しさん2011/05/20(金) 21:45:40.77
20 :デフォルトの名無しさん2011/05/20(金) 21:56:44.81
[1]課題
[2]文字列Aと文字列Bを受け取り,文字列Bが文字列Aの終わりにあるかの判定を「yes」または「no」と出力するプログラム。
実行例1
文字列A > aaa
文字列B > aaa
yes
実行例2
文字列A > defg
文字列B > abcdefg
no
[3] 環境
[3.1] Linux
[3.3] C言語
[4] 期限:5月22日
21 :デフォルトの名無しさん2011/05/20(金) 22:21:27.92
>>20
#include <stdio.h>

int main(void)
{
char A[256], B[256], *p, *q;

printf("文字列A >");
scanf("%s", A);
printf("文字列B >");
scanf("%s", B);

for(p = A; *p; p++);
for(q = B; *q; q++);

while(*p == *q) {
if(q == B) {
printf("yes\n");
return 0;
}
if(p == A) break;
p--, q--;
}

printf("no\n");

return 0;
}
23 :デフォルトの名無しさん2011/05/20(金) 23:03:49.03
const TypeEvent ←戻り値の型
EvtData_Load::s_Event ←関数名
( "load" ); ←引数
30 :デフォルトの名無しさん2011/05/20(金) 23:55:47.78
>>23-26
なんとなく、わかりました。
TypeEventクラスの名前空間EvtData_Loadのs_Event変数をloadで初期化している?
という感じかなぁと思いました
別の箇所で、if(EvtData_Load::s_Event == event.getTypeEvent)というところがあったので
たぶんs_Eventは変数かなと・・

どうもありがとうございました
33 :232011/05/21(土) 00:25:48.89
>>30
読みきれず申し訳ないっす。
24 :デフォルトの名無しさん2011/05/20(金) 23:13:40.12
>22

>23揚げ足取るようですまんが、、、

const TypeEvent ←戻り値の型
EvtData_Load←名前空間
:s_Event ←関数名
"load" ←実引数
25 :デフォルトの名無しさん2011/05/20(金) 23:19:17.53
>>24
全然揚げ足じゃないので気にせず。
ただ、そこに関してはs_から、EvtData_Loadクラスのスタティック関数メンバかも知れないなぁと。
35 :デフォルトの名無しさん2011/05/21(土) 01:18:39.69
C++プログラム
CコンパイラではコンパイルできずにC++コンパイラでは出来るのを言う
by 禿げ
37 :デフォルトの名無しさん2011/05/21(土) 01:41:00.95
#include <string> が抜けてるな
これでよく C++ プログラムなんかうp出来たもんだ
40 :デフォルトの名無しさん2011/05/21(土) 10:52:47.77
どうせならコテいれろよ。
105 :デフォルトの名無しさん2011/05/21(土) 23:29:41.05
>>40
コテではありません。トリップです。
41 :デフォルトの名無しさん2011/05/21(土) 11:00:28.79
[1] 授業単元: Cプログラミング2
[2] 問題文(含コード&リンク): キーボードより文字列aと文字列bを入力し、
比較する(どちらが辞書並びで先かを表示する)プログラムを作りなさい。
但し、strcmp関数を用いてはならない。
[3] 環境
 [3.1] OS:Windows7
 [3.2] VisualStudio2008
 [3.3] 言語: C
[4] 期限: 5月23日16:00まで
[5] その他の制限: strcmp関数の使用禁止。
43 :デフォルトの名無しさん2011/05/21(土) 11:11:17.96
>>41
#include<stdio.h>
#define SIZE 5000
int my_strcmp(char *s1, char *s2)
{
while (*s1++ == *s2++);
return *--s2 - *--s1;
}
int main()
{
char a[SIZE], b[SIZE];
int result;
printf("a = ");
scanf("%s", a);
printf("b = ");
scanf("%s", b);
result = my_strcmp(a, b);
if (result > 0) {
puts("a, bの順番");
} else if (result == 0){
puts("a, bは同じ");

} else {
puts("b, aの順番");
}
}
44 :デフォルトの名無しさん2011/05/21(土) 11:25:01.85
>>43
早い対応ありがとうございます。
大変助かりました。
45 :デフォルトの名無しさん2011/05/21(土) 11:28:17.35
>>43
あれ・・・strcmp関数が使われてる・・・?
46 :デフォルトの名無しさん2011/05/21(土) 11:45:32.16
>>43
>int my_strcmp(char *s1, char *s2)
>{
>while (*s1++ == *s2++);
>return *--s2 - *--s1;
>}

同じ文字列与えたら、まずくね?
47 :デフォルトの名無しさん2011/05/21(土) 11:50:48.63
>>45,46
これでいいか?ww

#include<stdio.h>
#define SIZE 5000
int unko(const char *s1, const char *s2)
{
register const unsigned char *ss1, *ss2;
for (ss1 = (const unsigned char*)s1, ss2 = (const unsigned char*)s2;
*ss1 == *ss2 && *ss1 != '\0';
ss1++, ss2++)
;
return *ss1 - *ss2;
}

int main()
{
char a[SIZE], b[SIZE];
int result;
printf("a = ");
scanf("%s", a);
printf("b = ");
scanf("%s", b);
result = unko(a, b);
if (result < 0) {
puts("a, bの順番");
} else if (result == 0){
puts("a, bは同じ");
} else {
puts("b, aの順番");
}
}
64 :デフォルトの名無しさん2011/05/21(土) 16:18:56.63
66 :デフォルトの名無しさん2011/05/21(土) 16:29:46.42
>>63の3をJISで読むと

そうでない場合、すなわち、新しい型が符号付き整数型であって、値がその型で表現できない
場合は、結果が処理系定義の値となるか、又は処理系定義のシグナルを生成するかのいずれか
とする。

--------------------------------------------------

つまりunsigned型同士の演算の結果がUNIT_MAXになったとする
これをintに型変換すると明らかにINT_MAXでは収まりきらないため、結果は処理系定義の値と
なるか処理系定義のシグナルが生成される

これは意図した動作ではなかろう

>>64もcharはsigned charかunsigned charかは処理系によって異なるので、正しくはsigned char
と書かないと動かない可能性がある

6.2.5 Types
15 The three types char, signed char, and unsigned char are collectively called
the character types. The implementation shall define char to have the same range,
representation, and behavior as either signed char or unsigned char.35)
48 :デフォルトの名無しさん2011/05/21(土) 11:57:51.49
今時 register なんてつけてるし、変なところでキャストしてるし...

> int unko(const char *s1, const char *s2)

まあ、自覚はあるらしい。
49 :デフォルトの名無しさん2011/05/21(土) 12:05:51.87
>>48
registerが古臭いのはともかく
変なキャスト呼ばわりとかふざけんな
50 :デフォルトの名無しさん2011/05/21(土) 12:15:20.85
> register const unsigned char *ss1, *ss2;
こういうウンココード書くからウンコキャストする破目に陥る。
51 :デフォルトの名無しさん2011/05/21(土) 12:23:51.21
>>50
どこが不味いのか具体的に行ってみろよ禿
59 :デフォルトの名無しさん2011/05/21(土) 15:32:42.00
自作した>>43がバグってたから他のサイトから拾ってきたコードが>>47。
コピペしたもんだから>>51みたいに態度がでかい。
虎の威を借る狐。Qよりかこわるい。
52 :デフォルトの名無しさん2011/05/21(土) 12:37:16.80
態度でかいぞ、ウンコ禿。
53 :デフォルトの名無しさん2011/05/21(土) 12:38:09.93
>>52
おら指摘してみろよ
なんとなく吠えてただけなんだろ
正直にみとめろよwwwwwwwwwwwwww
54 :デフォルトの名無しさん2011/05/21(土) 12:48:02.74
ウンコじゃないキャストとはこうだ。憶えとけウンコ禿。

int unko(const char *s1, const char *s2)
{
for (; *s1 == *s2 && *s1 != '\0'; s1++, s2++)
;
return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}
56 :デフォルトの名無しさん2011/05/21(土) 14:10:55.48
>>54
>return *(const unsigned char*)s1 - *(const unsigned char*)s2;

return (unsigned char)*s1 - (unsigned char)*s2;
57 :デフォルトの名無しさん2011/05/21(土) 14:17:56.87
unsigned から unsigned を引いてマイナスになった時の挙動は規格票では
どう定義してたっけ?
58 :デフォルトの名無しさん2011/05/21(土) 15:16:11.45
>>57
unsigned - unsigned の型は unsigned
でも int として返してるからマイナスになる
60 :デフォルトの名無しさん2011/05/21(土) 15:42:14.25
>>58
それ規格票のどこかに保証ある?
62 :デフォルトの名無しさん2011/05/21(土) 16:04:14.27
>>60
型拡張でどうぞ
63 :デフォルトの名無しさん2011/05/21(土) 16:17:34.83
>>62
あれあれ?こんなのあるよ

6.3.1.3 Signed and unsigned integers
1 When a value with integer type is converted to another integer type other than _Bool, if
the value can be represented by the new type, it is unchanged.
2 Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or
subtracting one more than the maximum value that can be represented in the new type
until the value is in the range of the new type.49)
3 Otherwise, the new type is signed and the value cannot be represented in it; either the
result is implementation-defined or an implementation-defined signal is raised.

今回はこの3に該当するよね?処理系定義もしくはシグナルを発生するとあるけど
65 :デフォルトの名無しさん2011/05/21(土) 16:26:21.44
>>63
32bit 環境で
int a=4000000000;
の結果が
a==INT_MAX
になっちゃったりする可能性の話してるの?
61 :デフォルトの名無しさん2011/05/21(土) 16:03:59.76
例えば仮定だけど、intが64bit長でunsigned intが32bit長の処理系があるとして
(現実にはまずないだろうけど話として)、unsignedをintに変換したら必ずプラスに
なっちゃうんじゃないかなあ
67 :デフォルトの名無しさん2011/05/21(土) 16:30:16.70
The value cannot be represented in new signed type なの?
68 :デフォルトの名無しさん2011/05/21(土) 16:34:38.31
>>67
32bitだとして0xffffffffは INT_MAX の 0x7fffffff を超えている
つまり The value cannot be represented in new signed type だ
本当は -1 を返して欲しいんだろうけどその保証はない
70 :デフォルトの名無しさん2011/05/21(土) 16:37:04.99
>>68
でも intの範囲は 32bitだとしたら INT_MIN〜INT_MAXだから 0x80000000〜0x7fffffff
だから収まるんじゃね?
71 :デフォルトの名無しさん2011/05/21(土) 16:38:33.31
>>70
むう、そうか・・・俺の勘違いか すまん
72 :デフォルトの名無しさん2011/05/21(土) 16:41:39.37
http://codepad.org/hcbSbJNH
上のプログラムは入力した文字列を反転させるものです。
アドバイスをお願いします
76 :デフォルトの名無しさん2011/05/21(土) 16:56:28.65
>>72
Re() で r 返しちゃだめだろ。
main() の t[] って、何も設定してないのに、何を表示するつもりなんだ?

て言うか、まずコンパイルエラーぐらいはとってからアップ品よ。
77 :デフォルトの名無しさん2011/05/21(土) 17:10:22.88
>>72です

error C2440: 'return' : 'char [100]' から 'int' に変換できません。

error C2440: '=' : 'int' から 'char [100]' に変換できません。

エラーの内容です
80 :デフォルトの名無しさん2011/05/21(土) 18:06:52.94
>>72
--- 72.cpp.org 2011-05-21 18:03:45.708286588 +0900
+++ 72.cpp 2011-05-21 18:03:08.488519638 +0900
@@ -1,9 +1,8 @@
#include<stdio.h>

-int Re(char *q)
+char *Re(char *q, char *r)
{
int i,j;
- char r[100];
i=j=0;

while(q[j]!='\0'){
@@ -17,6 +16,7 @@ int Re(char *q)
i++;
}

+ r[i] = '\0';
return r;

}
81 :デフォルトの名無しさん2011/05/21(土) 18:07:09.24
>>72
@@ -25,17 +25,17 @@ int Re(char *q)
int main()
{
int x;
- char s[100],t[100];
+ char s[100],t[100], *str;
x=0;

printf("文字列を入力:");
scanf("%s",s);

- str = Re(s);
+ str = Re(s, t);

- while(str=='\0'){
- printf("%c",t[x]);
- x++;
+ while(*str!='\0'){
+ printf("%c", *str);
+ str++;
74 :デフォルトの名無しさん2011/05/21(土) 16:52:02.07
GCCしか知らない人って…
char *c = "ABC";

const char *c = "ABC";
と同じ。
75 :デフォルトの名無しさん2011/05/21(土) 16:52:44.54
>>74
ちげーよ
82 :デフォルトの名無しさん2011/05/21(土) 18:10:28.54
>>74
vc++のwarning 4996ってどんなやつ?
83 :デフォルトの名無しさん2011/05/21(土) 18:15:56.85
86 :デフォルトの名無しさん2011/05/21(土) 18:24:22.89
>>83
xxx系の関数も使えるけど、xxx_s系の関数使いなさいよっ!ってことか。
warningをoffにするより、vc++ならdefineでxxxをxxx_sに変換したいところだね。
87 :デフォルトの名無しさん2011/05/21(土) 18:26:24.31
>>86
引数の数が違うからそれはやっちゃダメだな
88 :デフォルトの名無しさん2011/05/21(土) 18:30:24.79
>>87
おのれvisual studio…
でもxxx_sの関数はC標準に入れてもいい気がする。
85 :デフォルトの名無しさん2011/05/21(土) 18:20:30.28
100文字の文字列を読みたい。
あるいは、\nが出るまで読みたい。
91 :デフォルトの名無しさん2011/05/21(土) 19:31:32.58
scanfとgetsは初心者本ですぐに出て使うなと言われる始末。
初めから「こういうものだ」とfgetsを教えるのは難しいかなあ。
92 :デフォルトの名無しさん2011/05/21(土) 19:37:25.63
全然難しくない。買ってはいけないクソ本を晒しあげて絶滅に追い込むべし。
93 :デフォルトの名無しさん2011/05/21(土) 20:22:27.75
でも宿題程度ならscanf()やgets()でも十分なのも事実
業務用には危なくて使えないというだけの話で
94 :デフォルトの名無しさん2011/05/21(土) 20:27:33.48
72です。ありがとうございました
scanfは危険なのは分かりました。ではオススメの入力用関数を教えて下さい
99 :デフォルトの名無しさん2011/05/21(土) 20:48:34.89
>>94
fgets() して atoi だの sprintf() だの。

http://hibari.2ch.net/test/read.cgi/tech/1301553333/944
96 :デフォルトの名無しさん2011/05/21(土) 20:46:06.22
fgets(stdin, ....)
98 :デフォルトの名無しさん2011/05/21(土) 20:47:14.25
>>96
とんでもないところに書き込もうとしてるぞw
100 :デフォルトの名無しさん2011/05/21(土) 21:11:06.16
>>98
stdoutだったwwww
101 :デフォルトの名無しさん2011/05/21(土) 21:18:03.37
>>100
そういう問題ではない。
102 :デフォルトの名無しさん2011/05/21(土) 21:25:48.62
>>101
stdoutを最後に持って行けって言うんだろ?
103 :デフォルトの名無しさん2011/05/21(土) 21:26:59.82
>>101
ちがった、stdinを最後に持って行けと言うんだよな
fprintf()ならstdoutが一番前
97 :デフォルトの名無しさん2011/05/21(土) 20:46:55.31
しかしこう書くと今度は fflush(stdin); とか書く馬鹿が出てくるんだよなあ
それはVC++独自の拡張だよって
106 :デフォルトの名無しさん2011/05/22(日) 00:45:15.37
[1] プログラミング
[2] aprioriを実装せよ。(ttp://www1.doshisha.ac.jp/~mjin/R/40/40.html)
[3] 環境
 [3.1] OS: Windows7
 [3.2] Microsoft Visual C++ 2010 Express
 [3.3] 言語: c
[4] 5月23日
[5] ポインタまでの範囲でお願いします。
できればそれぞれの関数等がどういう操作をしているのかのコメントも
お願いします。
109 :デフォルトの名無しさん2011/05/22(日) 07:44:10.40
>>106
キミ、それプログラミングの授業の課題じゃなくて業務でしょ。
この時期にその難易度の課題が出るわけないじゃん。100万/納期1か月で作ってやろうか?
113 :デフォルトの名無しさん2011/05/22(日) 12:50:28.72
【質問テンプレ】
[1]Cプログラミング
[2]10人の身長(150cm〜180cm)を任意にキーボードから入力し、
  160cm以上の人数と未満の人数、およびそれらの平均値を求めよ。
[3] 環境
 [3.1] windows xp
 [3.2] bcc55
 [3.3] C言語
[4] 期限:2011/05/23
[5]puts,scanf,if,elseなどは使えます。
114 :デフォルトの名無しさん2011/05/22(日) 15:38:54.88
>>113
一応動くけど、自分も学習中だから自信がない
http://codepad.org/ZbmxjcO2
115 :デフォルトの名無しさん2011/05/22(日) 15:45:55.23
それらの平均値の意味が曖昧
全体の平均だけでいいのか、160cm以上、未満それぞれの平均が必要なのか
116 :デフォルトの名無しさん2011/05/22(日) 18:49:10.53
[1] 授業単元: Cプログラミング
[2] 問題文:数Xを0がくるまでキーボードから入力して、各数字における
(X^2+1)/(X+X)を求めよ。ただし0が入力されたら終わりとする。
[3] 環境
[3.1] OS:(Windows XP
[4] その他:結果は画面に出力し、数字は整数入力とする。

補足 かなりの初心者なのでfor文ぐらいまでの知識しか理解できません
117 :デフォルトの名無しさん2011/05/22(日) 19:18:48.24
#include <stdio.h>
int main(void){
/**/int X;
/**/while(1){
/**//**/scanf("%d", &X);
/**//**/if (X==0)
/**//**//**/break;
/**//**/printf("%d\n", (X*X+1)/(X+X));
/**/}
/**/return 0;
}
118 :デフォルトの名無しさん2011/05/22(日) 19:54:29.28
>>117
0入力でしゅうりょうだから無限ループじゃなくて素直に判定に入れたほうが良くない?
あと入力が整数でも除算が含まれるので計算結果は整数とは限らない

と言うことで
#include <stdio.h>
int main(void){int num;while(scanf("%d",&num)&&num!=0){printf("%f\n",(num*num+1.)/(2.*num));}return 0;}

ただし数値以外を入力したときも終了するから、その場合読み飛ばすなら適当に処理を加えて
119 :デフォルトの名無しさん2011/05/22(日) 20:21:44.29
【質問テンプレ】
[1] 授業単元:アルゴリズム
[2] 問題文(任意の整数を入力、位が高いほうから一桁ずつ表示、各位の合計を算出):
[3] 環境
 [3.1] OS: (Windows)
 [3.2] gcc
 [3.3] 言語:C
[4] 期限: 2011年5月23日19:30まで]
[5] その他の制限: (配列、ポインタ、関数、使用禁止です)
cの本買ってきてまねして作っていますが、本が増えていくだけです。
さっぱり動きません。
120 :デフォルトの名無しさん2011/05/22(日) 20:27:52.71
関数使用禁止?
何も書けないな
132 :デフォルトの名無しさん2011/05/22(日) 23:30:31.25
>配列、ポインタ、関数、使用禁止
>>120の言うようにこのままだとアレなので
io以外の標準関数を使用しない縛りで
#include <stdio.h>
int main(void){int i,num,digit,power,val,sum=0;char str[11];scanf("%d",&num);digit=sprintf(str,"%d",num)-1;for(;digit>=0;digit--){for(power=1,i=0;i<digit;++i){power*=10;}printf("%d\n",val=num/power);sum+=val;num%=power;}printf("%d\n",sum);return 0;}
122 :デフォルトの名無しさん2011/05/22(日) 20:45:32.68
#include <stdio.h>
int main(void){
  int data, i, t;
  char work[20];

  putchar('>');
  scanf("%d", &data);
  sprintf(work, "%d", data);
  t = 0;
  for(i=0; work[i]; i++) {
    printf("%c\n", work[i]);
    t += work[i] - '0';
  }
  printf("total=%d\n", t);
}
123 :デフォルトの名無しさん2011/05/22(日) 20:53:18.98
>>122
おい関数使ってるじゃねーか
125 :デフォルトの名無しさん2011/05/22(日) 21:51:30.11
>>122
Qの弟子ですよね
127 :デフォルトの名無しさん2011/05/22(日) 22:14:10.85
>>125
最後に /* end */ って付けなくちゃなw
135 :デフォルトの名無しさん2011/05/23(月) 01:37:43.63
>>125
単純な1行入力にも、mygettext だっけ?何がメリットなのかよくわからない複雑怪奇なしかもバッファはたったの3バイトの例のあれを使わないと。
124 :デフォルトの名無しさん2011/05/22(日) 21:46:33.47
[1] 授業単元:プログラミング
[2] 問題文:
ファイルから指定した文字列を検索し、行番号と検索文字列該当部分に***の1行
検索文字列を含んだ行すべてを表記した1行を画面に出力する
ただし、ファイルについてはタブを半角スペースに変換させ、エラー文についても適宜出力させる
表記例(検索文字:aaa)
行番号 ***     ***
    aaa bbb ccc aaa 111
[3] 環境
 [3.1] OS: Windowsxp
 [3.3] 言語: C
[4] 期限:5月23日
[5] その他の制限: タブ→スペース変換については関数を新たに作る

別の板で***の表示について相談したのですが、Cでどのように書けばいいか分からなかったので
こちらで質問をさせていただきます。
つまづいている部分としては***の表示とタブをスペースに変換するという点についてです。
どうかよろしくお願いします。
126 :デフォルトの名無しさん2011/05/22(日) 22:04:14.13
>>124
表記例がイミフ
128 :1242011/05/22(日) 22:48:09.59
>>126
表記がずれましたスミマセン
行番号のところは検索文字列がある行の数字が入り、aaaの部分で***が
上に来るように出力を行えるようにしたいと思っています。
129 :1222011/05/22(日) 23:02:35.91
#include <stdio.h>
int main(void){
/*          2147483648 */
  int data, a, t, n = 1000000000;

  putchar('>');
  scanf("%d", &data);
  do {
    a = data / n;
    n /= 10;
  } while(a == 0 && n > 0);
  if(n == 0) n = 1;
  else n = n * 10;
/* printf("%d %d\n", a, n); */
  t = 0;
  do {
    a = data / n;
    printf("%d\n", a);
    data %= n;
    n /= 10;
    t += a;
  } while(n);
  printf("total=%d\n", t);
}
130 :デフォルトの名無しさん2011/05/22(日) 23:20:23.69
122さま、129さま
ありがとうございます。

ヒントもくれず、毎回出される出来そうもない課題に、
暗い毎日を送っております。
ひと時の安らぎをいただきました。
今夜は眠れそうです。



131 :デフォルトの名無しさん2011/05/22(日) 23:23:09.50
>>130
自分がどこまでわかっていて、どうすれば○○ができるのかがわからない、と質問すれば教えてくれるはずだよ。
133 :デフォルトの名無しさん2011/05/23(月) 01:16:09.58
[1] 授業単元: コンパイラ
[2] 問題文:
http://uploader.sakura.ne.jp/src/up41234.jpg
http://uploader.sakura.ne.jp/src/up41235.jpg
http://uploader.sakura.ne.jp/src/up41236.jpg
http://uploader.sakura.ne.jp/src/up41237.jpg
http://uploader.sakura.ne.jp/src/up41238.jpg
http://uploader.sakura.ne.jp/src/up41239.jpg
http://uploader.sakura.ne.jp/src/up41240.jpg
http://uploader.sakura.ne.jp/src/up41241.jpg
http://uploader.sakura.ne.jp/src/up41242.jpg
http://uploader.sakura.ne.jp/src/up41243.jpg
http://uploader.sakura.ne.jp/src/up41244.jpg
上の図の構文図を(上から順に図1〜図11)を拡張BNFで記述せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: 講義で使っている言語はC及びKPLです。
[4] 期限: 5月23日16時まで
コンパイラが得意な方お願いします。
134 :デフォルトの名無しさん2011/05/23(月) 01:30:38.71
137 :デフォルトの名無しさん2011/05/23(月) 01:53:45.34
138 :デフォルトの名無しさん2011/05/23(月) 01:55:38.67
>>137
パスは9317です
141 :デフォルトの名無しさん2011/05/23(月) 03:38:12.01
>>133
スレ違い。
139 :デフォルトの名無しさん2011/05/23(月) 03:01:41.55
求められてるのは拡張BNFでの記述のみなんだろ?
どうみてもC言語の宿題じゃない件
140 :1062011/05/23(月) 03:36:09.73
貼ったURLはあくまで参考です。その中にあるaprioriのアルゴリズムの部分だけ
実装していただきたいと思いました。ちなみに研究室の課題です。
142 :デフォルトの名無しさん2011/05/23(月) 03:39:58.03
>>140
研究室か。
そろそろ年貢の納め時だよー
143 :デフォルトの名無しさん2011/05/23(月) 03:41:27.82
課題提出後このスレ一度チェックしてあげてくださいってメールしておいたし
144 :デフォルトの名無しさん2011/05/23(月) 08:15:29.71
この時期に研究室で出た宿題を丸投げするようじゃもう詰んでるから、
私文受けなおすか、頭つかわない肉体派に転向しなよ。
146 :デフォルトの名無しさん2011/05/23(月) 12:19:41.07
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
  for文を用いて、下の実行結果のように、定価(price)を入力すると
  1〜9割引の価格(kakaku)を表示するプログラムを作成せよ

  定価の入力:500
1割引=450
2割引=400
3割引=350
4割引=300
5割引=250
6割引=200
7割引=150
8割引=100
9割引=50

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:C++
[4] 期限:2011/5/31

宜しくお願いします
149 :デフォルトの名無しさん2011/05/23(月) 12:40:29.13
>>146
#include <iostream>
int main()
{
using namespace std;
cout << "  定価の入力";
int teika;
cin >> teika;
for(int i = 1; i < 10; ++i)
cout << i << "割引=" << teika * (10 - i) / 10 << endl;
}
151 :デフォルトの名無しさん2011/05/23(月) 12:53:56.35
>>149
ありがとうございました
272 :デフォルトの名無しさん2011/05/26(木) 21:27:10.51
>>149のどこがダメなのか指摘ヨロ
288 :デフォルトの名無しさん2011/05/27(金) 01:06:49.51
そんなの>>149の変数名変えるだけだろ?
150 :デフォルトの名無しさん2011/05/23(月) 12:52:08.63
price kakakuを使用していない
using namespaceは常に悪
152 :デフォルトの名無しさん2011/05/23(月) 12:56:18.24
>>151
いいのかよw

>>150
常に悪は言い過ぎ。
汚染させまくる可能性が高い初心者の「オマジナイ」としてなら無くはない程度。
274 :デフォルトの名無しさん2011/05/26(木) 21:56:48.82
>>271
だから>>150書いたのになぁ
153 :デフォルトの名無しさん2011/05/23(月) 13:05:28.59
using namespaceをそこまでぼこぼこに叩く奴を初めて見た
using namespace stdならよく見かけるが
154 :デフォルトの名無しさん2011/05/23(月) 22:44:28.40
129 :122:2011/05/22(日) 23:02:35.91
#include <stdio.h>
int main(void){
/*          2147483648 */
int data, a, t, n = 1000000000;

n = 1000000000はの意味が分かりません。1000000000をnに入れて初期化ですか。
ご指導をお願い申し上げます。
155 :デフォルトの名無しさん2011/05/23(月) 22:49:17.44
>>154
考えるな、感じろ!
156 :デフォルトの名無しさん2011/05/23(月) 23:13:32.92
>>154
1000000000をnに入れて初期化です
157 :デフォルトの名無しさん2011/05/24(火) 01:56:37.70
>>154
一番上の桁から取りたいんだとおもうよ
159 :デフォルトの名無しさん2011/05/24(火) 02:25:29.76
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク):
英語のテキストデータを入力とし、ファイル内に現れる「単語」(文字列)と
そのカウントをプリントするプログラムを作成せよ。同時に現れた「単語」の総数を
プリントすること。なお、ここで「単語」とはデリミタで区切られるアルファベットだけ
からなる文字列と定義する。「単語」は各データファイルにつき、総単語数は高々2,000単語
しか現れないと仮定して良い。配列でプログラムする場合、1単語長の最大値を適当に固定して良い。

ヒント
デリミタとは、この課題では以下のASCII文字と定義する。
(a) 制御文字 (iscntrl(c)が1となる文字c)
(b) 数字 (isdigit(c)が1となる文字c)
(c) アルファベット以外の印刷可能文字 (isprint(c)が1で、isalpha(c)が0となる文字c)
[3] 環境
 [3.1] OS:Mac OS X
 [3.2] コンパイラ名とバージョン:gcc 4.1
 [3.3] 言語:C
[4] 期限:5月25日
[5] その他の制限:単語を保持するために、
1.ポインタを使う場合 と
2.ポインタを使わずに配列で表す場合
とをお願いします。
168 :デフォルトの名無しさん2011/05/24(火) 16:12:00.85
>>159
http://pastebin.com/U1R5pxgx

-DUSE_POINTERでコンパイルすると
1.ポインタを使う場合
指定なしで
2.ポインタを使わずに配列で表す場合
171 :1592011/05/24(火) 18:09:49.22
>>161
区別して大丈夫です

>>168
ありがとうございます。
申し訳ないのですが、ポインタを使う場合と使わない場合で、
別のソースファイルにしていただけますでしょうか?

できれば説明のコメントも付けて頂けるとありがたいです。
172 :デフォルトの名無しさん2011/05/24(火) 18:42:37.58
>>171
条件の後出しはお断りだ。
282 :デフォルトの名無しさん2011/05/26(木) 23:10:03.19
>>159
ごめんなさい。1 だけ。
http://codepad.org/8QqUqc81
こういう問題は解答がつきにくいですね。
335 :デフォルトの名無しさん2011/05/27(金) 19:31:10.94
>>307
二分木を使ったことが糞ですか?
では、平衡二分木(AVL木)を使ったものを示します。
http://codepad.org/WYLGbk1J
>>282 の二文木ルーチン自体が糞ならば、もっといい二文木処理法を示していただけるとありがたいです。

それにしてもなんだか盛況ですねえ。
342 :デフォルトの名無しさん2011/05/27(金) 19:55:24.15
>>335-336
あほ、このスレは回答者がオナニーするスレじゃないんだよ。
質問者がどのレベルの回答を求められているか判断して適切なレベルで回答を作ることが重要。
出題者は木構造で管理する事を求めていない(出来るとは思っていない)。
したがってそれを使う事はカンニングを疑われる。

わかったか? クズ。
345 :デフォルトの名無しさん2011/05/27(金) 20:09:11.10
>>342
適切なレベルで回答を作れたと思われるコードを挙げた上で言わないと説得力がないよ。

それに、どれだけ出題者のレベルに合わせたとしても、説明を求められた時に
説明できないようではカンニングと見なされてもおかしくない。
結局は出題者にかかってるんだよ。
346 :デフォルトの名無しさん2011/05/27(金) 20:12:19.96
>>345
とっくにあげてある。
348 :デフォルトの名無しさん2011/05/27(金) 20:19:34.37
出題者のレベルをまるで見抜けてない>>168以外見つからなかったわけだが、、、
350 :デフォルトの名無しさん2011/05/27(金) 20:23:11.94
>>348
「質問者」だろ。バカは引っ込んでろ。
352 :デフォルトの名無しさん2011/05/27(金) 20:25:39.67
>>350
すりかえテクニック半端ねぇっす参考になります
で、コードはどこに
355 :デフォルトの名無しさん2011/05/27(金) 20:31:51.11
てめーのバカを棚に上げてスリ替え呼ばわりスンナ。カス。

>>168 enum以外は全部習った範囲のはずだ。
361 :デフォルトの名無しさん2011/05/27(金) 20:56:36.48
質問者が理解できない可能性という点においては
QZのxmallocと、>>168の-DUSE_POINTERは同じぐらいじゃないかな。

enumハックが必要な場面でもないのに、enumか。
宿題の回答としてならマジックナンバーの方がまだマシなんじゃないかとすら思える。

>>360
緻密な計算の結果>>171というありがたいレスをもらったわけだ。
364 :デフォルトの名無しさん2011/05/27(金) 21:02:22.65
>>361
あと、てめーもコード書いてから文句付けろ。バカ。
366 :デフォルトの名無しさん2011/05/27(金) 21:06:08.95
> 緻密な計算の結果>>171というありがたいレスをもらったわけだ。
断ってから出てきてないから自分で考えたんだろ。学習効果まで緻密に計算済みなんだよ。
367 :デフォルトの名無しさん2011/05/27(金) 21:06:36.56
>>364
結局それかよ。自分のコードの否を認めない点ではQZにすら劣る。
特定できる情報が強制開示されるようになってれば、今まで書いたコードがどれか分かって楽なんだけどね。
>>364も自分が過去に書いたコードがどれなのか、証拠も無いままにせっせと提示するのはいやでしょ。
368 :デフォルトの名無しさん2011/05/27(金) 21:10:22.90
>>366
あきらめたんじゃ、、、、ない、、かな
それか友達に見せてもらったとか
369 :デフォルトの名無しさん2011/05/27(金) 21:12:03.16
>>367
今までに書いたコードを出せと言ってるんじゃない。これから書けといっているんだ。
とっとと書け。
370 : ◆QZaw55cn4c 2011/05/27(金) 22:04:02.27
>>369
結局は◆QZaw55cn4cと同じことを主張してますねぇ。
弟子ですか?
371 :デフォルトの名無しさん2011/05/27(金) 22:09:17.41
>>369
http://codepad.org/D1puRAUv
時間かかったけど、書いてみた。配列版。
375 :デフォルトの名無しさん2011/05/27(金) 22:24:16.83
・gcc4.1ではコンパイルできない
・メモリリークする
・動作がおかしい
・要件を満たしていない
そんな>>168よりはマシだと思うよ。
377 :デフォルトの名無しさん2011/05/27(金) 22:28:31.93
>>370
コードも書かずにつけたケチが、本人が理解できたようである#ifでの切り替えと、
しらなくても理解できる遊びで入れたenumだからな。Qzにも劣るくずだよ。

>>371
単語長の最大値は適当にとっていいとは書いてあるけど、チェックしなくていいとは書いてないね。
Qzにも劣るバグ入り。
379 :デフォルトの名無しさん2011/05/27(金) 22:33:04.54
>>377
ケチつけてくるとは思ってたけど、まさかそことは。
380 :デフォルトの名無しさん2011/05/27(金) 22:34:39.29
>>379
最初にチェックする、基本中の基本だよ。
382 :デフォルトの名無しさん2011/05/27(金) 22:45:57.90
>>377
遊びで入れた…?enumハックのつもりですらないってこと?
固定で決めた単語長を超えた場合に切り詰めていいとは書いてないね。
384 :デフォルトの名無しさん2011/05/28(土) 00:10:07.98
>>375
それみるまで気づかんかったわ
387 :デフォルトの名無しさん2011/05/28(土) 00:44:43.57
do ...; while(0); て ...; じゃない? >>168
388 :デフォルトの名無しさん2011/05/28(土) 00:55:19.37
>>387
それはセミコロン必須にするためのidiomかな。
389 :デフォルトの名無しさん2011/05/28(土) 01:09:55.45
>>371って煽られて1時間で作った割には、宿題の回答としてそれなりなんじゃないの?
学生向けだからこそもっとガチで書くべきなのかな
392 :デフォルトの名無しさん2011/05/28(土) 01:39:14.45
>別のソースファイルにしていただけますでしょうか?
CGI >>168
http://ideone.com/ZiBKv
393 :デフォルトの名無しさん2011/05/28(土) 01:43:15.26
>>392
単なる嫌がらせとしか思えない
そう言えばクワイン(自分自身を出力するプログラム)を思い出した
396 :3922011/05/28(土) 02:36:19.35
>>371
argv[1]で落ちた
397 :デフォルトの名無しさん2011/05/28(土) 08:59:35.82
>>382
問題文も読めない池沼がくだらない言いがかり付けてるよ。必死すぎるて痛いぞ。バカ。
> 1単語長の最大値を適当に固定して良い。
1 最大長で切り詰める
2 最大長を超えた単語は読み飛ばす。
どちらでも問題の条件はクリアする。

>>371は言いがかり付けてくることがわかっていながら、この程度の課題を後出しという
好条件にもかかわらず、完璧な回答を作成する能力が無い事が立証されたって事だ。
QZにすら劣るな。
398 :デフォルトの名無しさん2011/05/28(土) 09:02:40.28
>>375
> ・gcc4.1ではコンパイルできない
できるよ。バカ。出来ないと主張するならエラーメッセージ張れ。

> ・メモリリークする
しねーよ。クズ。
399 :3922011/05/28(土) 11:05:36.87
426 :デフォルトの名無しさん2011/05/28(土) 21:06:24.50
>>398
横だけど、strlcpyがないっていわれた
リークはstrdupじゃない?
444 :デフォルトの名無しさん2011/05/28(土) 23:12:22.20
>>361
>enumハックが必要な場面でもないのに、enumか。
>宿題の回答としてならマジックナンバーの方がまだマシなんじゃないかとすら思える。
それどころか、
>>168
buffer[1024]
fgets(buffer, 1024, stdin)
というのをみると、どうして 1024 を #define なり enum なりしなかったのかが疑問ですね。
enum/#define する基準を意識しておらず、てきとーに エニュミュを使いたかっただけのようです。
449 :デフォルトの名無しさん2011/05/28(土) 23:24:57.35
>>444
結局enumにしかケチ付けられないクズなんだから引っ込んでろよ。
言いがかり付けられることがわかっていながらバグ作りこむヘボグラマ。w
452 :デフォルトの名無しさん2011/05/28(土) 23:28:03.36
>>449
じゃあ改めてバグの無いコードをどうぞ。非の打ち所の無いものを頼むよ
453 :デフォルトの名無しさん2011/05/28(土) 23:31:42.77
>>444
みょうではあるがあんまり突っ込むなよ
それが>>168の絶対的こだわりなんだから
ついでに終了時に開放しないにも絶対なこだわりあるみたいだが
QZのこだわりと同じ





454 :デフォルトの名無しさん2011/05/28(土) 23:31:46.62
>>449
enum に突っ込んでいるのではなく、
enum/#define する基準を意識せず、不用意にマジックナンバを使用していることを批判しています。
457 :デフォルトの名無しさん2011/05/28(土) 23:33:21.54
>>453
そりゃまあ、こだわり、といわれたら、そうかも知れませんね。
この件は撤退しましょうか。
458 :デフォルトの名無しさん2011/05/28(土) 23:33:21.64
>>453
絶対的なこだわりじゃないよ。緻密な計算だよ
460 :デフォルトの名無しさん2011/05/28(土) 23:35:49.23
>>452
残念ながらお前(ヘボグラマ)の作品と違ってバグは全くない。w
464 :デフォルトの名無しさん2011/05/28(土) 23:41:22.13
>>460=>>168なの?
>>168のコードに非の打ち所がないならこんなことになってないだろ。
471 :デフォルトの名無しさん2011/05/28(土) 23:46:15.82
>>464
後出しで言いがかり付けられることがわかっていながらバグを作りこんだ
ヘボグラマの作品(笑)と違ってバグは無い。
473 :デフォルトの名無しさん2011/05/28(土) 23:48:05.71
>>471
俺、誰なのw
478 :デフォルトの名無しさん2011/05/28(土) 23:54:56.09
>>471
非の打ち所の無いものを頼む
→バグは無い!!!

バグは無いけど非の打ち所があるのは認めてるんだな。要件を満たしてはいないが、バグは無い、と。
質問者には蹴られるし、Linuxだとまともに動きすらしない可搬性の無いコード。
484 :デフォルトの名無しさん2011/05/29(日) 00:15:51.81
>>168をLinuxで動かしてみた。macなら動くんだろうけどなぁ。

% gcc -DUSE_POINTER main.c
% cat main.c | ./a.out
#include <stdio.h>
1
#include <ctype.h>
1
#include <string.h>
1

4
enum { MAXWORDS = 2000};
1
(以下略)
489 :デフォルトの名無しさん2011/05/29(日) 00:23:15.70
おなじく >>168 を cygwin 上で動かしてみました。なぜこうなるの?
$ gcc -DUSE_POINTER a.c

$ cat a.c | ./a.exe
#include <stdio.h>
1
#include <ctype.h>
1
#include <string.h>
1

4
enum { MAXWORDS = 2000};
1
(以下略)
490 :デフォルトの名無しさん2011/05/29(日) 00:31:12.58
>>489
macで動くかどうか試せないんだけど、動かなかった場合は問題がバグってるって言うと思う。
動くなら緻密な計算の結果だと思う。
491 :デフォルトの名無しさん2011/05/29(日) 00:39:34.54
>>490
私の >>282 も mac で動くかどうか心配だなあ。
strtok() って使わないほうがいいかもしれませんねえ。
492 :デフォルトの名無しさん2011/05/29(日) 00:40:30.00
>>489
お前のctypesが問題通りの値を返さないから。

>>159
> (a) 制御文字 (iscntrl(c)が1となる文字c)
> (b) 数字 (isdigit(c)が1となる文字c)
> (c) アルファベット以外の印刷可能文字 (isprint(c)が1で、isalpha(c)が0となる文字c)
493 :デフォルトの名無しさん2011/05/29(日) 00:41:46.71
>>491
>>282はメモリリークしてるからなおすように。



確保したメモリを返さないのはメモリリークと呼ばれても

し か た な い で す よ ね wwww
494 :デフォルトの名無しさん2011/05/29(日) 00:42:51.04
>>492
macだとそれ保証されてるの?
Cの規格だけでは保証されてないからわかんないんよ
495 :デフォルトの名無しさん2011/05/29(日) 00:44:06.38
>>489
 [3.1] OS:Mac OS X
 [3.2] コンパイラ名とバージョン:gcc 4.1
ではちゃんと動くんですよ
緻密な計算してるんです
496 :デフォルトの名無しさん2011/05/29(日) 00:44:45.67
>>491
isDelimiterで回避してると思う。
でも、0xffとand取ってるのは何でかわからず。この際ついでに補足してくれると助かる
499 :デフォルトの名無しさん2011/05/29(日) 00:48:39.31
>>494
>>159出した先生に言えよ。
502 :デフォルトの名無しさん2011/05/29(日) 00:53:09.20
>>497
それが、>>450の主張。

確保したメモリを返さないのはメモリリークと呼ばれても

し か た な い で す よ ね wwww




とっとと、>>282なおせよ。簡単ななおし方教えてやろうか?
mallocの代わりにmmap, freeの代わりにmunmapこれでケチの付けようがなくなる。

バカ丸出しだけどな。www
503 :デフォルトの名無しさん2011/05/29(日) 00:54:13.00
>>499
保証されてるかどうかはわからんけど、ともあれ、macだとうまく動くってことかな
505 :デフォルトの名無しさん2011/05/29(日) 01:06:35.11
>>504
>>502がそろそろ潮時かなって思ったあたりから
506 :2822011/05/29(日) 01:10:37.88
>>493
ないと思いますよ、多分。
でも、もし見つかれば、メモリーリークしている領域の最初の16バイトを教えてください。(修正をかけます。)
それとメモリーリークの定義も。なにせ、malloc() しても free() しない(こともある)派のいうところのメモリーリークはよくわかりませんからね。

>>496
確かに私の環境では
ctype.h の is*(int c) は真のとき 32 を返しているなあ、1 じゃなく。

あと & をとっているのは、char c が符号拡張を受けると、往々にして2byte 文字を扱うときに嵌ってしまうから。
char が signed か unsigned かは環境依存だし、char -> int のプロモーションには特に気をつけて自分でどっちに転ぶか決めてしまっているのです。
これでいいのかどうかはわかりませんが。
508 :デフォルトの名無しさん2011/05/29(日) 01:24:25.58
>>506
とっととメモリリークなおせよ。クズ。
509 :デフォルトの名無しさん2011/05/29(日) 01:26:47.87
>>506
&の理由ありがとう。
>>371みたいにそもそもintで受けてしまうっていうのはどうなんだろ。
fgetcがint返すのも符号の問題があるからcharを避けたのかなぁ
511 :デフォルトの名無しさん2011/05/29(日) 01:46:46.65
>>509
演習問題などでは 7bit ascii しか使わないし、今回私が & を取ったのも、実ははじめて
gcc -ansi -pedantic -Wall
したらコンパイラが char は signed か unsigned かどっちですか?って聞いてくるもんだから、
ちゃっちゃと消しにまわっただけで、深い意味はありません。漢字でも扱わない限り問題ないんじゃないかなあ。
516 :デフォルトの名無しさん2011/05/29(日) 03:02:48.85
容姿ともども、まあ仕方ないです。
でも >>168 に一貫性がないことがよくわかりました。
ctype.h にはびっくりしましたし、悪い感情は持っていません。
おやすみなさい。
517 :デフォルトの名無しさん2011/05/29(日) 03:20:19.41
>>168p.c
for (i = 0; words[i].count > 0; i++) {
   printf("%-32s %5d\n", words[i].word, words[i].count);
   free(words[i].word);
}
543 :デフォルトの名無しさん2011/05/29(日) 10:43:54.52
>>537
お聞きしたいのは、議論をするために急遽でっちあげたルールではなくて、
>>168 を書いたときに念頭においていたルールであり、避けるべきメモリーリークとはなにか、ということです。
565 :デフォルトの名無しさん2011/05/29(日) 13:34:00.85
>>563の続き

これからお前が従うルールは「確保したメモリを開放しないのはメモリリーク」だ。
そして>>282のうんこコードをとっととなおせ。

確保したメモリを返さないのはメモリリークと呼ばれても
し か た な い で す よ ね wwww
568 :デフォルトの名無しさん2011/05/29(日) 14:12:43.29
>>282
おい、カス。なんとも見る気の起きないうんこコードだけど、頑張ってみてやったぞ。
> if (*(p - 1) == '\n')
> *(p - 1) = '\0';

課題にない勝手なデリミタ判定すんな。後出しでこれかよ。www
570 :デフォルトの名無しさん2011/05/29(日) 14:30:27.44
>>282
なんとも、うんこなコードだねえ。
> exit(-1);
statusは実装依存だから、macosが期待する値(255以下の正整数)にするべき。

ヘボな初心者がよくやる間違い。www
571 :デフォルトの名無しさん2011/05/29(日) 14:33:14.25
>>282
お前のルールでメモリリーク発見。wordがリークするぞ。www

> wd = xmalloc(sizeof(struct worddata), ID_WORDDATA);
> if (!wd) {
> fprintf(stderr, "cannot allocate enough memory, aborted.\n");
> exit(-1);
> }
572 :デフォルトの名無しさん2011/05/29(日) 14:35:45.39
>>282
ここも二分木がリークするよな。www うんこコード。

> if (!word) {
> fprintf(stderr, "cannot allocate enough memory, aborted.\n");
> exit(-1);
> }
580 :デフォルトの名無しさん2011/05/29(日) 15:33:59.59
>>568
待ってました。ありがとうございます。
>課題にない勝手なデリミタ判定すんな。
そこは fgets() が勝手につけるデリミタを判定しているところですので無問題。
581 :デフォルトの名無しさん2011/05/29(日) 15:37:13.42
>>580
iscntrlって知ってる?
582 :デフォルトの名無しさん2011/05/29(日) 15:39:49.28
>>579
だからその平常心を保つための儀式だ。
しかし、うんこなコードだな。二分木つくるpush。
無条件でノードを作っておいて、検索して見つかったら廃棄。しかも再帰。

>>580
アウツ。fgetsが勝手につけるんじゃなくて元データからそうなっている。
583 :デフォルトの名無しさん2011/05/29(日) 15:41:18.06
>>570
ご指摘ありがとうございます。
引数の値がどのように返されるかは環境依存なんで、逆にどんな値をつかってもいいのでは?
584 :デフォルトの名無しさん2011/05/29(日) 15:44:38.89
>>582
>無条件でノードを作っておいて、検索して見つかったら廃棄。
んー、んー、たしかにつらいですね。かといって毎回、追加前に検索をかけるのも同じくらいにうんこだし。
なにかいい知恵があれば教えてください。
586 :デフォルトの名無しさん2011/05/29(日) 15:54:55.28
>>571 >>572
たしかに malloc() が NULL を返すと、すべてを放り投げて終了させていますね。
malloc()-free() 教徒としては、異常系でも free() するところでしょうけれども、信心が足りないところを見つけられてしまいましたか。
588 :デフォルトの名無しさん2011/05/29(日) 16:07:19.00
>>582
ご指摘のとおり、'\n' を無条件にデリミタとして扱っております。
本来ならば、
int isDelimiter(char c)
で判定させるべきでした。
ただし、iscntrl('\n') は真ですので、問題の条件を満たしており問題はありません。
683 :デフォルトの名無しさん2011/05/30(月) 17:47:29.87
>>682
んー、落としどころは予定通り >>599 となりましたし。
あと、strdup() の返り値が NULL かどうかみていない、とつっこもうかと思いましたが、それは >>282 にもいえることですので、遠慮しておきました、って書いてるくせに本当に遠慮してるのか?
それより次の宿題、宿題。
684 :デフォルトの名無しさん2011/05/30(月) 20:22:51.22
>>683
うんこな教義を異教徒に押し付けようと宗教戦争仕掛けた詫びを入れてもらおうか。
692 :デフォルトの名無しさん2011/05/30(月) 21:56:45.59
>>662
http://codepad.org/gDrQfjcR>;>684

>>684
んー、根に持つタイプなんですね。
695 :デフォルトの名無しさん2011/05/30(月) 22:26:32.60
>>662
http://codepad.org/aNXNHnz9 visual c

>>692
あたりめーだ。てめーが自分から仕掛けた宗教戦争で全面敗北したんだからな。
697 :デフォルトの名無しさん2011/05/30(月) 22:34:37.32
>>695
>List **find(List **p, const char *name, const char *tel)
この書き方が個人的に好み。
でも、なぜ、データの書き換わらない find() で List **p を渡すのですか?むしろ、
input(List **haed, ...)
delete(List **head, ...)
load(List **had, ...)
の方が合理的だと思いますが、どうでしょうか?

あと線形リストのソーティングはおいしい課題なのに、パスするとはもったいない。
698 :デフォルトの名無しさん2011/05/30(月) 22:53:48.45
>>697
コード読めないバカは引っ込んでろ。
699 :デフォルトの名無しさん2011/05/30(月) 22:54:20.78
>>695
失礼。線形リスト全体にソーティングはかけずに、insert() のときに挿入点を見つける形にしているのですね。なるほど。
700 :デフォルトの名無しさん2011/05/30(月) 23:19:05.69
>>662
線形リスト全体のソーティングは(馬鹿馬鹿しいので)とりやめ、
>>695 に習って、入力時に挿入ポイントを探す形に訂正いたしました。
http://codepad.org/2B6aNIrD
161 :デフォルトの名無しさん2011/05/24(火) 13:23:47.34
当然、大文字小文字は区別するのかな?
163 :デフォルトの名無しさん2011/05/24(火) 14:25:11.20
デミリタはASCIIだけどアルファベットの文字コードについては規定しないんだよね?
164 :デフォルトの名無しさん2011/05/24(火) 15:44:30.26
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
int型の二つの変数があるとする。
この二つの変数の値の和を一方の変数に代入する関数
void add(int *address1, int * address2)を定義し、
その動作を確認するプログラムkadai6-1.cを作りなさい。
ただし、答えはaddress1で指定された変数に代入されるものとする。
scanf("%d %d", &a, &b);
答えは以下で出力されるものとする。
printf("a = %d, b = %d\n", a, b);
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: ([2011年5月27日])
165 :デフォルトの名無しさん2011/05/24(火) 15:45:47.00
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
キーボードから入力した長さ10の文字列の任意の2つの文字を
入れ換える関数void swap(char *address1, char *address2)を定義し、
その動作を確認するkadai6-2.cを作りなさい。
この関数は引数で与えられたアドレスのメモリにアクセスして中身を
入れ換える作業を行う。
ただし、文字列と入れ換える2つの文字の位置は次のように入力されるものとする。
scanf("%s %d %d", str, &position1, &position2);//それぞれ文字列、位置1, 位置2を表している。
答えは以下で出力されるものとする。
printf("answer = %s\n", str);
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: ([2011年5月27日])
167 :デフォルトの名無しさん2011/05/24(火) 16:04:10.91
>>164
#include <stdio.h>

void add(int *address1, int *address2) { *address1 += *address2; }

int main(void)
{
int a, b;
scanf("%d %d", &a, &b);
add(&a, &b);
printf("a = %d, b = %d\n", a, b);
return 0;
}

>>165
#include <stdio.h>

void swap(char *address1, char *address2) {
char temp = *address1;
*address1 = *address2;
*address2 = temp;
}

int main(void)
{
int position1, position2;
char str[11];
scanf("%s %d %d", str, &position1, &position2);
swap(str + position1, str + position2);
printf("answer = %s\n", str);
return 0;
}
169 :デフォルトの名無しさん2011/05/24(火) 16:21:28.15
>>167
すみません。やってもらってなんなんですが
>>165のプログラムの実行結果がちがうのですが・・・
170 :デフォルトの名無しさん2011/05/24(火) 16:54:06.28
>>169
どこがどう違うのか書けよksg
188 :デフォルトの名無しさん2011/05/25(水) 00:08:50.38
>>169
問題文ぐらい読めるようになっとこうぜ

> 答えは以下で出力されるものとする。
> printf("answer = %s\n", str);
これは、出力が「printf("answer = %s\n", str);」という文字列なんじゃなくて、
printf("answer = %s\n", str);という記述を用いて答えを出力しなさいよって意味だよ。
189 :デフォルトの名無しさん2011/05/25(水) 00:31:00.51
>>188
エスパーするとそういうことじゃなくて、
何文字目を入れ替えるって入力したいのに何バイト目を入れ替える処理
になってるから1文字分入れ替え位置がずれてるってことじゃね?

間違ってたらすまん。
190 :デフォルトの名無しさん2011/05/25(水) 01:20:07.29
>>167は1文字ずれてるから末尾の文字を指定しようとすると、ヌル文字を入れ替えてしまっておかしくなるな
まぁ1行だけ修正すれば動く
swap(str + position1, str + position2);

swap(str + position1 - 1, str + position2 - 1);
194 :デフォルトの名無しさん2011/05/25(水) 05:01:25.44
>>189
ああ、納得した。てっきり。
173 :デフォルトの名無しさん2011/05/24(火) 18:48:15.25
[1]プログラミング演習
[2] 問題文:RPGに登場するキャラをイメージした
テストプログラムを作成する。
下記メンバを含む構造体を定義(1)キャラの名前
(2)HP(3)関数ポインタ
179 :デフォルトの名無しさん2011/05/24(火) 19:09:31.22
>>173見にくくてすいません。どうかよろしくお願いします
185 :デフォルトの名無しさん2011/05/24(火) 19:49:23.46
偽者が出るほど>>173は人気なのか
嫉妬!
174 :デフォルトの名無しさん2011/05/24(火) 18:51:55.93
<<174
上記構造体を4体分配列として宣言。
下記の仕様でプログラムを作成する。
?1回のループで、それぞれのキャラが1回アクションを行う。
*ループは、一回ごとにキー入力で行う。
?各キャラが行うアクションは次の通り。
ノーマル状態・・・HPなどに変化なし。現在のHPを表示。
175 :デフォルトの名無しさん2011/05/24(火) 18:55:32.06
>>173>>174
毒状態・一回実行するごとにHP-5、HPを表示する。
回復状態・・HPが+20される。HPを表示する。
死亡状態・”xxxxxは死んでいます・・・”を表示
各状態の遷移条件は次の通り。
176 :デフォルトの名無しさん2011/05/24(火) 18:59:21.76
>>173>>174>>175
・ノーマル状態からは10%で毒になる。
・毒状態からは10%でノーマルになり、
10%で回復状態になる。
・回復状態からは強制的に通常状態になる。
177 :デフォルトの名無しさん2011/05/24(火) 19:05:08.89
>>173>>174>>175>>176
・死亡状態からは1%でノーマルになりHPは1になる。
・死亡状態からは5%でゾンビ状態となる
・ノーマル状態からは2%でヘブン状態になる。
178 :デフォルトの名無しさん2011/05/24(火) 19:06:30.41
>>176
・HPが0以下になれば死亡になりそれ以降の遷移はない。
[3.1] OS:Windows7[3.3] 言語:C
[4] 期限:2011年5月26日12:00まででお願いします。
184 :デフォルトの名無しさん2011/05/24(火) 19:44:09.80
ttp://pastebin.com/snGKGQUS
とりあえずこんな感じでどうかな

>>177
は明らかに偽物だろwwwww
186 :デフォルトの名無しさん2011/05/24(火) 20:07:29.18
173です。お騒がせしてすいません。
>>184
ありがとうございました!
182 :デフォルトの名無しさん2011/05/24(火) 19:40:44.94
>・死亡状態からは1%でノーマルになりHPは1になる。
>・死亡状態からは5%でゾンビ状態となる

>・HPが0以下になれば死亡になりそれ以降の遷移はない。

やりとほこ
187 :デフォルトの名無しさん2011/05/24(火) 21:01:05.93
・HPが0になっても改造コマンド「リジェネ改」を掛けてあれば一度倒れても
むくっと起き上がる
191 :デフォルトの名無しさん2011/05/25(水) 03:08:05.19
[1]暇つぶし
[2]ピクロスの問題が与えられたとき、解が一意に決まるかどうかを判定するプログラムを作成せよ
問題は標準入力からカンマ区切りで与えられ、縦横ともに30を最大のサイズとする(正方形とは限らない)

入力例
2
1,1
4
1,1
1,1
4
1,1
1,1
4

出力例
問題として成立しています
□■■□
■□□■
■■■■
■□□■
■□□■

[3]環境
 [3.1] OS: 指定無し
 [3.2] コンパイラ名とバージョン: 指定無し
 [3.3] 言語: どちらでも可
[4] 期限: 無期限
[5] その他の制限: できる限り処理が早くなるように
192 :デフォルトの名無しさん2011/05/25(水) 03:15:43.37
>>191
何行目までが横なのか不明なフォーマットだから無理じゃね?
193 :デフォルトの名無しさん2011/05/25(水) 03:20:00.79
>>192
確かに境界部分に0が並ぶとマズいね
195 :デフォルトの名無しさん2011/05/25(水) 05:04:08.54
>>192
数えたらわかると思う
196 :デフォルトの名無しさん2011/05/25(水) 05:06:05.23
>>193
その時は0が並んだところだけ、複数パターン検査で
197 :デフォルトの名無しさん2011/05/25(水) 18:00:44.36
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://codepad.org/t6Un18Xw
上記のファイルを元に40年間の年平均気温の平均気温より平均気温が低い年を
ファイルkadai05.datへ出力するプログラムkadai05.c を作成せよ。

また同様に年平均気温の低い順番に並び替えて、
ファイルkadai06.datへ出力するプログラムkadai06.c を作成せよ

元のファイルで使っているtokyo.datは↓です
http://www.dotup.org/uploda/www.dotup.org1668350.dat
[3] 環境
 [3.1] OS: windows
 [3.2] cigwin gcc -o
 [3.3] 言語: C
[4] 期限:出来れば本日中
[5] その他の制限:
ファイルの内容が大体の習った内容です
199 :デフォルトの名無しさん2011/05/25(水) 18:19:28.92
>>197
追記

tokyo.dat は1970年から2009年までの気象情報のデータである。
各行の情報は左から、
年、平均気温、
最高気温の年平均、最高の最高気温、最高の最高気温を記録した日、
最低の最高気温、最低の最高気温を記録した日、
最低気温の年平均、最低の最低気温、最低の最低気温を記録した日、
最高の最低気温、最高の最低気温を記録した日
である。
200 :デフォルトの名無しさん2011/05/25(水) 18:32:12.19
>>197
元のコードがひどいんだけど
201 :デフォルトの名無しさん2011/05/25(水) 18:47:16.12
>>200
元が酷いのは仕様です…
同じ程度のレベルなら書き直していただいて大丈夫です
204 :デフォルトの名無しさん2011/05/25(水) 20:12:28.47
202 :デフォルトの名無しさん2011/05/25(水) 19:02:13.44
構造体や関数は使っても良い?
203 :デフォルトの名無しさん2011/05/25(水) 19:16:12.11
>>202
多分どっちも習っていないと思うので使わないでいただけると
理解がしやすくて助かります
205 :デフォルトの名無しさん2011/05/25(水) 20:14:16.51
>>203
元のどのあたりが酷いと思う?
206 :デフォルトの名無しさん2011/05/25(水) 20:21:35.36
>>204
ありがとうございます

>>205
見難いなという事しか…
208 :デフォルトの名無しさん2011/05/25(水) 20:52:46.94
>>207
出来たけど、>>205に答えたら公開する
209 :デフォルトの名無しさん2011/05/25(水) 21:07:45.72
>>208
酷いといわれたから、よくわからないまま同調して酷いといってしまったんだろうけど、
しいていうなら見難いらしい。

別に見にくいとはまるで思わないんだけど「もしかして:インデント」
207 :デフォルトの名無しさん2011/05/25(水) 20:36:12.21
すみません、もう1問お願いします

[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
寒暖の差が大きい順番に並び替えて、ファイルkadai07.datへ出力するプログラムkadai07.c を作成せよ。
寒暖の差: 最高の最高気温? 最低の最低気温
[3] 環境
 [3.1] OS: windows
 [3.2] cigwin gcc -o
 [3.3] 言語: C
[4] 期限:出来れば本日中
[5] その他の制限:
211 :デフォルトの名無しさん2011/05/25(水) 21:31:01.84
>>207
解説しちゃったんで公開するね
ttp://ideone.com/LFRCr
210 :デフォルトの名無しさん2011/05/25(水) 21:10:39.86
インデントも修正すべきだけども、

char型へdouble型代入しようとしてる所と、
scanfでポインタのポインタ渡してる所あるでしょ、
そこが期待通りの動作になってない。
215 :2132011/05/25(水) 22:03:51.36
(続き)
のことを言ってるんだと思う
ポインタのポインタっていうか型が間違ってるのが適切な気がするが
216 :デフォルトの名無しさん2011/05/25(水) 23:27:04.03
質問なんですが、時間オーダーと計算量オーダーってどう違うんでしょうか?
うちの大学の教授が違うように書いているんですが、時間オーダーってググッても出ません。
217 :デフォルトの名無しさん2011/05/25(水) 23:34:04.00
>>216
同じ O(n) のアルゴリズムがあるとして
同じデータに対して片方は1秒、もう片方は100秒かかるとかそういうんじゃね?
219 :デフォルトの名無しさん2011/05/25(水) 23:41:30.64
>>216
時間オーダーと空間オーダー(必要メモリ量)、は確かに違うと思いますが、
時間オーダーと計算量オーダーは一緒のような気が。

いちど先生に聞いてみればいいと思います。
例外はあるでしょうが、学生の質問というものは先生にとってはウェルカムだと思います。
自分のしゃべっていることが相手に一部でも届いていることを確認できる機会ですから。
218 :デフォルトの名無しさん2011/05/25(水) 23:38:01.75
オーダーなんだからどっちも同じになるはずなんだがなぁ
むしろそうでなきゃ指標として何の意味が・・・・・・・
220 :デフォルトの名無しさん2011/05/25(水) 23:46:28.91
全然わからなくて困ってます。よろしくお願いします。
[1] 授業単元:実用プログラミング
[2] 問題文(含コード&リンク):
キーボードから入力された2つの整数と演算番号(1〜4)に対して、ポインタを使って以下の処理をするプログラムを作りなさい。
ただし、演算番号として1〜4以外の値が入力された場合は、"該当する番号がありません.確認して下さい"
と表示してプログラムを終了させることとする。
(↓からプログラム実行例。_が後ろの数字に付いてる所はキーボードからの入力を表す)

2つの実数a,bを入力してください.
a=3_
b=5_
計算の種類を選んでください.
1:a+b
2:a-b
3:a*b
4:a/b
==>4_
a/b=0.600000
[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2008 Express edition
 [3.3] 言語: C++
[4] 期限: 2011年 5月27日(金) 13:00 まで
[5] その他の制限:
入出力関数を用いて解答すること。ポインタを使うこと。
printfとscanfでお願いします。
221 :デフォルトの名無しさん2011/05/25(水) 23:47:56.87
>>220
何がわからないの?
とりあえず出来てる分のコードを書け
224 :デフォルトの名無しさん2011/05/26(木) 00:06:27.98
>>221
出来たのはここまでです。
これ以上どうやれば分からないです(;ω;)

#include <stdio.h>

int main(void)
{
int a, b, c;
printf("2つの実数a,bを入力して下さい.\n");
printf("a=%d");
scanf("%d", &a);
printf("b=%d");
scanf("%d", &b);

printf("計算の種類を選んでください.\n");
printf("1:a+b\n");
printf("1:a-b\n");
printf("1:a*b\n");
printf("1:a/b\n");
printf(" ==>%d");
scanf("%d", &c);
}

225 :デフォルトの名無しさん2011/05/26(木) 00:22:42.44
>>224
ここまでは出来ました。これから先はどうしたらいいでしょうか。
#include <stdio.h>
int main(void)
{
double a, b;
int c;
printf("2つの実数a,bを入力して下さい.\n");
printf("a=");
scanf("%lf", &a);
printf("b=");
scanf("%lf", &b);

printf("計算の種類を選んでください.\n");
printf("1:a+b\n");
printf("2:a-b\n");
printf("3:a*b\n");
printf("4:a/b\n");
printf(" ==>");
scanf("%d", &c);

switch(c) {
case 1:
printf("a+b=%f\n", a + b); break;
case 2:
printf("a-b=%f\n", a - b); break;
case 3:
printf("a*b=%f\n", a * b); break;
case 4:
printf("a/b=%f\n", a / b); break;
}
}
226 :デフォルトの名無しさん2011/05/26(木) 00:46:51.28
>>225
該当する番号がない場合を
switchに追加すれば完成だろう
defaultを使うのが楽
227 :デフォルトの名無しさん2011/05/26(木) 00:54:23.43
>>226
加えて結果を表示するときにa(演算子)bじゃなくて入力した数値を出せばいいかもね
228 :デフォルトの名無しさん2011/05/26(木) 00:56:13.27
>>227
問題文と違っちゃわないかそれ
229 :デフォルトの名無しさん2011/05/26(木) 01:18:50.92
>>228
マジだ。。。スマン
232 :デフォルトの名無しさん2011/05/26(木) 01:26:34.04
てゆーか>>225までできてこれ以上なにを求めてるんだ?
254 :デフォルトの名無しさん2011/05/26(木) 18:16:42.67
>>225
ありがとうございます
ポインタを使うので*ptrとchar*に変える?でしょうか・・・
続きを分かる方居れば、教えて欲しいです。
256 :デフォルトの名無しさん2011/05/26(木) 18:31:27.22
>>254
課題に現れる「ポインタ」があいまいなんだよ。
計算結果をポインタ経由で返すのか、引数をポインタで渡すのか、はたまた演算関数を
ポインタで呼び出すのか。
どれもポインタを使用する必然性が無いから、授業を受けていない部外者には選択できない。

結果をポインタ経由で返す
void calc(int c, double a, double b, double *ret)

引数をポインタで渡す:
double calc(int c, double *a, double *b)

関数ポインタ
double (*add)(double a, double b)
double (*sub)(double a, double b)
222 :デフォルトの名無しさん2011/05/25(水) 23:48:17.40
[1] 授業単元:実用プログラミング
[2] 問題文(含コード&リンク):
配列とポインタを使って以下の2つの行列AとBの足し算を行い、
結果(行列C)を表示させるプログラムを作りなさい。

[11] [5]
[22] [4]
A=[33], B=[3] C=A+B
[44] [2]
[55] [1]

(下は表示例)

c[5]={16, 26, 36, 46, 56}

[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2008 Express edition
 [3.3] 言語: C++
[4] 期限: 2011年 5月27日(金) 13:00 まで
[5] その他の制限:
入出力関数を用いて解答すること。
配列とポインタを使用する事。
223 :デフォルトの名無しさん2011/05/25(水) 23:48:55.58
[1] 授業単元:実用プログラミング
[2] 問題文(含コード&リンク):
配列とポインタを使って以下の2つの行列AとBの足し算を行い、
結果(行列C)を表示させるプログラムを作りなさい。

[11] [5]
[22] [4]
A=[33], B=[3] C=A+B
[44] [2]
[55] [1]

(下は表示例)

c[5]={16, 26, 36, 46, 56}

[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2008 Express edition
 [3.3] 言語: C++
[4] 期限: 2011年 5月27日(金) 13:00 まで
[5] その他の制限:
入出力関数を用いて解答すること。
配列とポインタを使用する事。
258 :デフォルトの名無しさん2011/05/26(木) 18:50:49.92
>>222 >>223
については触れないことにしているのかな。
230 :デフォルトの名無しさん2011/05/26(木) 01:19:19.36
ポインタ使って演算ってのは変なこと考えなければ、関数化しろってことだと思うよ
255 :デフォルトの名無しさん2011/05/26(木) 18:23:35.61
>>254
>>230であってるの?
257 :デフォルトの名無しさん2011/05/26(木) 18:35:55.64
>>255
教科書には、

変数は変数名とデータ型の情報をもっていて、メモリの任意のアドレスに配置されている。
これまでのプログラムでは変数名を指定して、データを代入したり、参照したりした。
ポインタは指し示すの意味が示すように、ある変数を指し示す変数でポインタ変数という。
ポインタ変数には指し示したい変数のアドレスを格納する。
ポインタ変数を使用する場合、変数と同様に宣言が必要である。
その場合、ポインタ変数は変数名の頭に[*]を付け、指し示す変数と同じデータ型で宣言する。
また、ポインタ変数の名前の付け方は変数の場合と同様である。

と書いてあります。
これは関数化するという事ですか?
231 :デフォルトの名無しさん2011/05/26(木) 01:25:14.61
scanfで使ってるからいいんじゃねーの?
233 :デフォルトの名無しさん2011/05/26(木) 01:28:13.99
>>231
入出力の後の、四則演算部分でポインタを使えと
指定してあるようにも読める
236 :デフォルトの名無しさん2011/05/26(木) 06:24:51.86
[1]C言語初級課題
[2]次のコードは、キーボードから0から9までの4つの数を
受け取って小さい順から書き出すプログラムの未完成版である。
コードを完成させなさい。fgetsでキーボードから文字列を受け取り、
それをatoi関数で整数に変換し、0から9までの範囲にあるか確認し、
範囲にない場合は再入力を促し再入力させること。

#include <stdio.h>
#inckude <stdlib.h>
int main(void){
char s[1024];//fgets関数に与える文字列バッファ
char *t;//fgets戻り値格納用
int n;//atoi関数の戻り値格納用
{
//この部分にコードを追加してコードを完成させてください。
return(0);
}
[3] Windows 7/Microsoft SDK/C言語
[4]5/31まで
[5]簡単な課題だそうですが、手こずってます。どうかよろしくお願いします。
237 :デフォルトの名無しさん2011/05/26(木) 06:38:26.66
>>236
atoiで変換してから判定しろって書かれてるようだからそうしたけど、それだと妙な入力されると0だと判定しちゃうけどいいんだろうかってのと
t結局使ってない

#include <stdio.h>
#include <stdlib.h>

int main(void){
char s[1024];//fgets関数に与える文字列バッファ
char *t;//fgets戻り値格納用
int n;//atoi関数の戻り値格納用
//この部分にコードを追加してコードを完成させてください。
do {
t = fgets(s, 1024, stdin);
n = atoi(s);
} while(!(0 <= n && n <= 9) && printf("[0, 9] に無いのでもう一回入力してください\n"));
printf("[0, 9] の値が入力されました\n");
return(0);
}
238 :2362011/05/26(木) 07:00:32.77
>>237
迅速な回答ありがとうございます。
とりあえずコピペして動かしてみます。
実行結果も提出しなければならないらしいので...
ありがとうございました。
275 :デフォルトの名無しさん2011/05/26(木) 21:57:29.29
239 :デフォルトの名無しさん2011/05/26(木) 09:01:46.54
4つの数字が入力されないし、小さい順にも出力されないんじゃね?
241 :2362011/05/26(木) 11:18:26.99
動かさせていただきました。
とりあえず動きましたが、やはり
問題文の意図どおりじゃないのかも
しれません。出来ればもう一度お願い
したいのですが...
242 :デフォルトの名無しさん2011/05/26(木) 11:32:06.27
[1] 授業単元: Cプログラミング1
[2] 問題文: 与えられた文字数分だけ文字を1文字ずつ順に表示する print 関数を作成せよ。
引数として文字列配列 string と整数 n を用いること。
ここで、 string は文字列型ポインタ配列の先頭アドレスを。 n は表示する文字数を意味する。

[3] 環境
 [3.1] OS: Windows7
 [3.2] コンパイラ名とバージョン: Visual Studio2008
 [3.3] 言語: C
[4] 期限: 5月31日09:00まで
[5] その他の制限: ありません。
243 :デフォルトの名無しさん2011/05/26(木) 12:21:16.37
  a
244 :デフォルトの名無しさん2011/05/26(木) 12:22:10.71
>>243はスペース試し、ゴメン

#include <stdio.h>

void print(const char *string, int n) {
  int i;
  for (i = 0; i < n; i++) {
    putchar(string[i]);
  }
}

int main(void) {
  print("Hello World", 5);
  return 0;
}
247 :デフォルトの名無しさん2011/05/26(木) 12:53:24.43
>>244
早い対応ありがとうございます。
245 :デフォルトの名無しさん2011/05/26(木) 12:24:51.22
void print(const char *string, int n) {
printf("%.*s", n, string);
}
246 :デフォルトの名無しさん2011/05/26(木) 12:34:33.24
>>245
こんなの出来たんだ、知らんかったw
248 :デフォルトの名無しさん2011/05/26(木) 14:40:46.99
[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):VC++で3つのメモリマップドファイルを作成しそれぞれに1,2,3の値を入れ表示するプログラムを作りなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC++2008
 [3.3] 言語: c++
[4] 期限: なるべく早めに
[5] その他の制限:

お願いします
249 :872 2011/05/26(木) 15:31:45.73
>>248
winapiつかっていいの?
251 :デフォルトの名無しさん2011/05/26(木) 16:35:23.17
>>248
http://ideone.com/wo0du

こんなんでいいの?
252 :デフォルトの名無しさん2011/05/26(木) 17:33:24.00
メモリマップドファイルを読むプログラムは別にした方がいいですかね?
まあsub()の内容を別プログラムにしてsystem()で呼び出すだけだけど
あと継承をONにしとかないとだめだったけな

SECURITY_ATTRIBUTESをいじる

別にHANDLEを継承しなくても名前でオープンするんだから継承は不要だと思うけど
259 :デフォルトの名無しさん2011/05/26(木) 20:03:09.55
>>249
winapi使って大丈夫です

>>252
できれば別がいいです
280 :デフォルトの名無しさん2011/05/26(木) 22:45:17.28
>>259
うーんどうもmutexの使い方が間違っていると思うんだけど原因がわからない
2つめのDOS窓がmutexを解放する前に1つめのDOS窓が終了してしまいます

http://ideone.com/oEysx
http://ideone.com/6OGcs
260 :デフォルトの名無しさん2011/05/26(木) 20:15:18.85
[1] 授業単元:繰り返し処理

[2] 問題文
2つの整数(num1、num2)を入力させる。
このとき、num1<num2であるように入力する。
このときnum1以上num2以下の偶数を全て表示させるプログラムを作成して下さい

[3] 環境
 [3.1] Windows7
 [3.2] Microsoft Visual Studio 2008
 [3.3] 言語: C

[4] 期限:出来れば今日で

お願いします!
261 :デフォルトの名無しさん2011/05/26(木) 20:31:08.46
>>260
#include <stdio.h>
int main(int ac, char **av)
{
int num1, num2;
do {
num1 = 0; num2 = -1;
printf("2つの整数(num1 < num2)を空白で区切って入力してください。 ");
scanf(" %d %d", &num1, &num2);
} while(num1 >= num2);
num1 = (num1 + 1) / 2 * 2;
for (; num1 <= num2; num1 += 2)
printf("%d\n", num1);
}
262 :デフォルトの名無しさん2011/05/26(木) 20:33:51.79
>>260
>>261は負の場合にバグってた。
#include <stdio.h>
int main(int ac, char **av)
{
int num1, num2;
do {
num1 = 0; num2 = -1;
printf("2つの整数(num1 < num2)を空白で区切って入力してください。 ");
scanf(" %d %d", &num1, &num2);
} while(num1 >= num2);
num1 = (num1 + (num1 < 0 ? -1 : 1)) / 2 * 2;
for (; num1 <= num2; num1 += 2)
printf("%d\n", num1);
}
263 :デフォルトの名無しさん2011/05/26(木) 20:34:26.11
>>260

#include <stdio.h>

int main()
{
int num1, num2;

printf("num1 = "); scanf("%d", &num1);
printf("num2 = "); scanf(" %d", &num2);

for (num1; num1 <= num2; num1++) {
if (num1 % 2 == 0) {
printf("%d\n", num1);
}
}
return 0;
}

これでいいの?
264 :デフォルトの名無しさん2011/05/26(木) 20:34:48.55
>>261

ありがとうございます!
266 :デフォルトの名無しさん2011/05/26(木) 20:45:38.35
>>265 お前>>263?
> このとき、num1<num2であるように入力する。
3つしかないそれも極めて容易な要求仕様を全部実装できないなんて…
269 :デフォルトの名無しさん2011/05/26(木) 20:56:24.59
>>262
お前の頭がバグってるw
270 :デフォルトの名無しさん2011/05/26(木) 21:08:15.73
>>266
入力させるじゃなくて入力するだから>>263で十分
265 :デフォルトの名無しさん2011/05/26(木) 20:41:38.39
俺のほうがスマートだな
267 :デフォルトの名無しさん2011/05/26(木) 20:54:33.58
>このとき、num1<num2であるように入力する。
この条件に合わなかったときの要求は書いてない
271 :デフォルトの名無しさん2011/05/26(木) 21:17:58.31
すみませんがコレをもう1度お願いします・・・

[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
  for文を用いて、下の実行結果のように、定価(price)を入力すると
  1〜9割引の価格(kakaku)を表示するプログラムを作成せよ

  定価の入力:500
1割引=450
2割引=400
3割引=350
4割引=300
5割引=250
6割引=200
7割引=150
8割引=100
9割引=50

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:C++
[4] 期限:2011/5/31

price kakakuを入れて作りたいです
294 :デフォルトの名無しさん2011/05/27(金) 09:30:17.75
>>271
#include <iostream>
int main()
{
using namespace std;
cout << "  定価の入力";
int price;
cin >> price;
for(int i = 1; i < 10; ++i) {
int kakaku = price * (10 - i) / 10;
cout << i << "割引=" << kakaku << endl;
}
}
327 :2712011/05/27(金) 16:57:26.76
>>288 >>294
どうも有難うございました、解決しました
351 :2712011/05/27(金) 20:24:07.94
>>288>>294
どうもありがとうございました
273 :デフォルトの名無しさん2011/05/26(木) 21:31:09.99
[1] 授業単元: Cプログラミング2
[2] 問題文: char型の2次元配列 city[3][15]を宣言し、キーボードから3つの文字列 ”Osaka”,”Kyoto”,”Kobe”を入力し、配列 city[][]に格納する。そして、ポインタを使って格納された文字列データを文字ごとに画面に表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Windows7
 [3.2] コンパイラ名とバージョン: Visual Studio2008
 [3.3] 言語: C
[4] 期限: 6月2日09:00まで
[5] その他の制限: 問題文中にある「文字ごとに」というのは、1つずつ文字を出力することです。
277 :デフォルトの名無しさん2011/05/26(木) 22:12:33.12
>>273
#include <stdio.h>
int main(void)
{
  int i,j;
  char city[3][15],*p;
  for (i=0; i<sizeof(city)/sizeof(city[0]); ++i)
  {
    scanf("%s", &city[i]);
  }
  p=city[0];
  for(i=0; i<sizeof(city)/sizeof(city[0]); ++i)
  {
    j=0;
    while(putchar(*(p+sizeof(city[0])*i+j++))!='\0')
    {}
    putchar('\n');
  }
  return 0;
}
279 :デフォルトの名無しさん2011/05/26(木) 22:28:26.56
>>277
とても助かりました。ありがとうございます。
276 : ◆YXb4nS0g1I 2011/05/26(木) 22:11:17.43
[1] 授業単元:繰り返し処理
[2] 問題文:
五者択一の自作の問題文章を表示させ、整数入力を受けつけ、正解・不正解の判定を行う。
ただし、正解が入力されるまで、「不正解」と表示した後、同じ問題を正解となるまで繰り返し表示し、回答を入力させる。
問題が2問である上記のようなプログラムを作成しなさい。
278 : ◆YXb4nS0g1I 2011/05/26(木) 22:16:45.27
>>276 の続き

[3] 環境
[3.1]OS: Windows7
[3.2] コンパイラ名とバージョン: Visual Studio2008
[3.3] 言語: C
[4] 期限: 今日

281 :デフォルトの名無しさん2011/05/26(木) 23:06:10.39
>>276
#include <stdio.h>
int main()
{
int a_num;
int answer1 = 1, answer2 = 2; // 質問1の答えと質問2の答えを決めている
while (1) {
printf("問題1\n"); printf("1.〇〇\n2.〇〇\n3.〇〇\n4.〇〇\n5.〇〇\n");
printf("答の番号を入力してください\n"); scanf("%d", &a_num);
if (a_num == answer1) {
printf("正解です!\n\n");
break;
} else {
printf("不正解です!\n\n");
continue;
}
}
while (1) {
printf("問題2\n"); printf("1.〇〇\n2.〇〇\n3.〇〇\n4.〇〇\n5.〇〇\n");
printf("答の番号を入力してください\n");
scanf("%d", &a_num);
if (a_num == answer2) {
printf("正解です!\n\n");
break;
} else {
printf("不正解です!\n\n");
continue;
}
}
return 0;
}
283 :デフォルトの名無しさん2011/05/26(木) 23:31:12.60
【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文:
http://ideone.com/O6a82
以下のプログラムは、宣言(int ai[3][4][5];)の代わりに必要なメモリ領域だけを
mallocにより確保し、その中を配列と同様に利用しているものである。
なおメモリ内での配列の要素の配置順序は宣言による場合と同じとする。
(1)下線部を埋めてプログラムを完成させよ。(解答は下線部のみで良い)
(2)こうした手法の利点と欠点を述べよ。(箇条書きで良い)
[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] C言語
[4] 期限:05月27日12時まで

何卒よろしくお願いします。
284 :デフォルトの名無しさん2011/05/26(木) 23:55:19.37
285 :デフォルトの名無しさん2011/05/27(金) 00:39:41.77
>>283
迅速な返答有難う御座いました。とても助かりました。
286 :デフォルトの名無しさん2011/05/27(金) 00:41:34.03
すみません。間違えました。
284様に感謝です。有難う御座いました。
287 :2712011/05/27(金) 01:01:51.86
すみませんどうにもprice kakakuの文字を入れたくて
151は自分ではないのですが、驚いて出てくるタイミング失ってしまいました

なんかダメダメですね・・・スレ汚し失礼しましたorz
289 :デフォルトの名無しさん2011/05/27(金) 03:12:04.87
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク):
 M*R次元の行列(mat1)とR*N次元の行列(mat2)の乗算を行いM*N次元の行列(mat3)を
 得る関数(matMul)を作成せよ。ただし、関数のプロトタイプにおいて行列を表す引数部分には、
 2つの行列のサイズを表す引数と、行列データそのものを表す引数(2次元配列)を含めること。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5/29
[5] その他の制限:
任意の入力データファイルはmatDataとし、中身は以下の内容に習うこと。仮に、
mat1(M = 3, R = 2) = {{-1, 1}, {3, 0}, {-1, 2}}
mat2(R = 2, N = 3) = {{-1, 0, 3}, {1, -1, 1}}
の場合
[matData]
3 2 3
3 2
-1.0 1.0
3.0 0.0
-1.0 2.0
2 3
-1.0 0.0 3.0
1.0 -1.0 1.0

意味は、1行目の3 2 3は3*2と2*3行列を乗算するよ、という意味で、
2行目の3 2が3*2の行列で、そのあと3行が行列の中身、
続いて2 3は2*3行列で、そのあと2行がその中身を表します。
各数字の間は半角スペースがひとつ入っています。
※ポインタは使わないでください
※プログラムがどこで何をしているか分かりやすいように、できるだけコメント分を書いて頂けるとありがたいです
よろしくお願いします。
290 :デフォルトの名無しさん2011/05/27(金) 03:22:25.49
>>289
補足
行列の乗算は、
C = AB ≡ C(i, j) = Σ(i=0, M-1)Σ(j=0, N-1)Σ(k=0, R-1)a(i,k)b(k,j)
の関係を利用した3重ループで作成すること。
また、配列の次元は適当な最大値で固定して良いです。(今回は最大で10行10列の行列を扱うということでお願いします。)
295 :デフォルトの名無しさん2011/05/27(金) 10:16:00.13
>>289
動的二次元配列
ポインタ使うな、二次元配列を渡せってのをきっちり満たそうとするのが困難だなぁ
(配列の引数がポインタになる件は[]でいいってことにしても)

C99でわりと条件通りにやれそうだけどそれもどうなんだという気がするし
返り値がやっぱりどうにもならないし

どの条件を崩しちゃっていいのかがなんとも
296 :デフォルトの名無しさん2011/05/27(金) 10:20:21.84
ごめん>>290見てませんでした
297 :デフォルトの名無しさん2011/05/27(金) 10:23:09.07
>>290をちゃんと読めば、そんな疑問は出てこないはずだが
298 :2892011/05/27(金) 10:24:26.13
>>295
ありがとうございます
>>290で補足していますが、配列は10*10
が最大と固定してしまって大丈夫です
291 :デフォルトの名無しさん2011/05/27(金) 06:28:14.06
282はQZ氏か?
292 :デフォルトの名無しさん2011/05/27(金) 07:05:02.87
>>291
多分な。「回答が付きにくい」と勝手に決めつけてめし
最後が /* end */ で終わってるし間違いないだろう

時間がなくて放置しただけかもしれないのにさも自分が「皆難しくて解けない
だろうから俺様だけが解ける」とでも言わんばかりの思いきり上から目線
何様だと思っているのやら
一言多いんだよなこいつは
313 :デフォルトの名無しさん2011/05/27(金) 15:25:08.43
>>292
そんな理由で判断してるのか。

上から目線に見えるのなら、まだ未熟なんでしょう。
317 :デフォルトの名無しさん2011/05/27(金) 15:32:48.15
>>313
思い切り上から目線じゃねーか
自覚ないのかお前?重症だな
318 :デフォルトの名無しさん2011/05/27(金) 15:51:27.09
>>315
お前にはかなわないよ。
>>316
だから、そんな理由で判断してるからダメなんだよ。
>>317
>>313のレスが上から目線だったって?そりゃあんまりだ。
319 :デフォルトの名無しさん2011/05/27(金) 15:56:34.98
>>318

>まだ未熟なんでしょう。

普通こんな事は書かないだろが?あ?
293 :デフォルトの名無しさん2011/05/27(金) 07:21:37.38
あのまま提出すれば、まずろくなことにはならないクソコードだしな
299 :デフォルトの名無しさん2011/05/27(金) 10:31:21.99
void matMul(double mat1[][10], mat2[][10], mat3[][10], int M, int R, int N)
{
int i, j, k;
for(i = 0; i < M; i++) {
for(j = 0; j < N; j++) {
mat3[i][j] = 0;
for(k = 0; k < R; k++) mat3[i][j] += mat1[i][k] * mat2[k][j];
} } }
301 :2892011/05/27(金) 10:42:20.78
>>299
main関数のファイルの入力部分もよろしいですか?
310 :デフォルトの名無しさん2011/05/27(金) 14:45:55.86
>>299
void matMul(double mat1[][10], double mat2[][10], double mat3[][10], int M, int R, int N)
{
int i, j, k;
double sum;

for(i = 0; i < M; i++)
for(j = 0; j < N; j++) {
sum = 0.0;
for (k = 0; k < R; k++)
sum += mat1[i][k] * mat2[k][j];
mat3[i][j] = sum;
}
}

のように引数全部にdoubleを付けないとコンパイルエラー
302 :デフォルトの名無しさん2011/05/27(金) 10:57:14.78
303 :2892011/05/27(金) 11:03:33.07
>>302
ありがとうございます
時間が出来たら確認してみます
308 :デフォルトの名無しさん2011/05/27(金) 13:31:45.31
>>302
Pastebin.com is under heavy load right now, sorry...
But we are working on it!

In the mean time you can...

というのがずっと出て見れないんですけど...
出来たらcodepadかideoneにお願いします
311 :デフォルトの名無しさん2011/05/27(金) 14:53:53.25
312 :デフォルトの名無しさん2011/05/27(金) 15:09:26.47
>>311
ありがとうございます
304 :2892011/05/27(金) 11:07:48.65
時間が出来なかったのでそのまま提出します
305 :289 ◆6OuEQ4XCO. 2011/05/27(金) 11:12:48.28
>>304←偽物です
306 :デフォルトの名無しさん2011/05/27(金) 11:32:34.37
>>305
おい偽物だまれ
307 :デフォルトの名無しさん2011/05/27(金) 13:02:13.39
QZの糞はまた飽きもせず遅い役立たずな自作二分木を使い回しているのか
いい加減にやめろ
そのうち誰かが代わりに作った物だという事がすぐにバレるようになるぞ
まあ出題した教官もここを見ているからすぐにバレるだろうが
314 :デフォルトの名無しさん2011/05/27(金) 15:30:16.27
>>307
じゃあかわりにコード書けば?
315 :デフォルトの名無しさん2011/05/27(金) 15:31:09.97
>>314
うざいなお前
316 :デフォルトの名無しさん2011/05/27(金) 15:31:56.44
>>314
QZを擁護するのはQZ本人だという法則
320 :デフォルトの名無しさん2011/05/27(金) 15:58:35.35
QZって本当に思い上がりもはなはだしいよね
321 :デフォルトの名無しさん2011/05/27(金) 16:00:49.44
>>319
落ち着けよ。煽るのは好きだが煽られるのは嫌いなのか?あ?
>>320
そう?ちゃんとしたコードを書けないことは認めてなかった?
ただ、まともに指摘できる人が少ないだけで。
322 :デフォルトの名無しさん2011/05/27(金) 16:08:15.00
>>321

>ただ、まともに指摘できる人が少ないだけで。

ほらほらまた上から目線
自己愛性人格障害だな
326 :デフォルトの名無しさん2011/05/27(金) 16:27:08.53
>>321
「お前らまともに指摘してねーじゃんwwwゴミレスひっこんでろwww」だと上から目線に取られないかもしれないから試せ
あと、なぜか句点が怖い世代もいるから注意な
329 :デフォルトの名無しさん2011/05/27(金) 18:13:40.79
このスレにはQZとQZと同類だけしかいない。
つまり、基地害だけスレ
330 :デフォルトの名無しさん2011/05/27(金) 18:57:47.47
いんぎん‐ぶれい【×慇×懃無礼】 [名・形動]

表面は丁寧で礼儀正しいように見えるが、実は尊大で無礼なこと。
また、そのさま。慇懃尾籠(いんぎんびろう)。「―な態度」

まさにQZの事だwww
331 :デフォルトの名無しさん2011/05/27(金) 19:03:44.51
>>330
何がしたいの?
333 :デフォルトの名無しさん2011/05/27(金) 19:07:46.39
何この難しい漢字?辞書で調べたら分かった!みんなも知らないだろうから貼ってあげよう!
334 :デフォルトの名無しさん2011/05/27(金) 19:09:29.26
これだけ嫌われるコテも珍しいな
336 :デフォルトの名無しさん2011/05/27(金) 19:34:48.59
>>334
本当に嫌っているのなら、まずいコードを具体的に引用して徹底的に叩くでしょう。
それができずに、単にキチガイ呼ばわりするだけでは、んー、言いにくいのですが、一アマチュアの私よりも能力が不足しているのではないでしょうか?
349 :デフォルトの名無しさん2011/05/27(金) 20:20:36.49
>>336
お、無職のQZがファビョり出したぞw
376 :デフォルトの名無しさん2011/05/27(金) 22:27:52.54
>>373
荒らしだとしたらコスト対パフォーマンス比が極めて良好ですね。
わずかな燃料を投下するだけで、これですか。

>>338
>>336 は不発に終わりました。
381 :デフォルトの名無しさん2011/05/27(金) 22:39:57.64
>>376
そんな事は誰も聞いてない
荒らしは荒らし
報告しとく
337 :デフォルトの名無しさん2011/05/27(金) 19:41:09.50
[1] 授業単元:組み込みシステム
[2] 問題文(含コード&リンク):
http://ideone.com/qwczx
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc 3.4
 [3.3] 言語C
[4] 期限: 無期限
[5] その他の制限: 使われてるコマンド以外は使わないで欲しい

ttp://ideone.com/qwczx

構造体と関数を使ったプログラムで、main文で値を決めて関数に送って計算する、
といった簡単なプログラムなのですがエラーがでて動きません。
どこが間違っているのでしょうか?
340 :デフォルトの名無しさん2011/05/27(金) 19:46:20.65
>>337
まず深呼吸を
341 :デフォルトの名無しさん2011/05/27(金) 19:50:00.38
>>337
プロトタイプ宣言を変える(戻り値と引数)
double keisan (ONE_POINT point[2], double a1, double a2, double a3, double a4);
~~~~~~                 ~~~
関数の定義を変える(戻り値のタイプミスと引数)
double keisan (ONE_POINT point[2],double a1, double a2, double a3, double a4)
~~~~~~                 ~~~
343 : ◆0RbUzIT0To 2011/05/27(金) 19:57:37.93
>>340
深呼吸したらタイプミスを発見しました。すいません。

>>341
コンパイルできました。ありがとうございます。
関数のとこを point[2] ってするってことはもしかしてこれは
配列の構造体 じゃなくて 構造体の配列 だったのか…
勉強不足でした
338 :デフォルトの名無しさん2011/05/27(金) 19:42:06.79
本人来たか。相変わらず人気者だよ
ってかまた燃料投下したね
339 :デフォルトの名無しさん2011/05/27(金) 19:44:53.36
QZはバカすぎて自分の負けもまともに理解できないから、納得させるために説明するのは時間の無駄
344 :デフォルトの名無しさん2011/05/27(金) 20:05:28.03
>>339
そう言うのも愛情表現なんだが
347 :デフォルトの名無しさん2011/05/27(金) 20:17:59.70
それが分かるようなレスにしないと、その辺のゴミレスと同じ扱いにされるよ
トリつけようぜトリ
354 :デフォルトの名無しさん2011/05/27(金) 20:27:39.69
IDだけじゃなぁ。
356 :デフォルトの名無しさん2011/05/27(金) 20:34:15.91
>>354
IPも表示?意味無いんじゃない?
358 :デフォルトの名無しさん2011/05/27(金) 20:41:52.73
>>355
でも -Dスイッチを知らなかった質問者に蹴られたんでしょ。後付けよくないとか言ってるけども。
面倒でも二つに分けてコードをあげればその後QZが沸くこともなかっただろうし。(こればっかりは分からんが)
それをしないで放置したことはオナニーにならないの?

>>356
前その辺の話題をしたときは、忍法帖の情報使えばIDよりはましになるかも、と書いた。
どうせ単発が沸くにしても、連投規制が役に立つのと、真っ当なレスをしている人はずっと特定できるでしょ。
360 :デフォルトの名無しさん2011/05/27(金) 20:49:07.20
>>358
1 マクロは習ってるはず。
2 #ifは習ってなくてもif文からの推測で理解できるはず。
3 1,2から2つのコードに分解できる。
4 strtokはマニュアル見れば理解できる。
5 配列は習っている。当然配列の順アクセスも可能。
6 enumは見ればわかるだろう。
という緻密な計算の元に作られた回答なのだよ。わかったか? バカ
363 :デフォルトの名無しさん2011/05/27(金) 20:59:51.83
>>358
忍法帖ですか?なるほど、調べて見ますねw
365 : 忍法帖【Lv=40,xxxPT】 2011/05/27(金) 21:02:51.98
>>363
今はこんなんしか出ない。名前欄 !ninja で。
もともとは巻き添え規制を減らすために作られた仕組みだったけど、運営が変な機能ばかり足してる感じ。
372 :デフォルトの名無しさん2011/05/27(金) 22:15:48.04
コメントがまったく消臭剤になってない、
息苦しい読みにくいプログラムのいい例だな。
373 :デフォルトの名無しさん2011/05/27(金) 22:16:51.99
◆QZaw55cn4cは完全な荒らしだな
こいつが一人いるだけで宿題スレはカチャカチャに荒れる
アク禁要望出してみるか
374 :デフォルトの名無しさん2011/05/27(金) 22:20:24.66
>>373
一緒に粘着荒らしも駆除してくれよ
383 :デフォルトの名無しさん2011/05/27(金) 23:36:03.98
◆QZaw55cn4cは宿題出さないのか、教室の中で生徒でないなら教師だな。
386 :デフォルトの名無しさん2011/05/28(土) 00:22:22.83
C++ならstringなりスマポなりカスタムデリータを指定出来るのに
Cでmalloc()が絡むと本当に苦労する
390 :sage2011/05/28(土) 01:23:35.47
[1] 授業単元:
[2] 問題文(含コード&リンク):
#include <stdio.h>
int main()
{
int i;
float test;
float avr=0;
for(i=0;i<10;i++){
printf("%d番目の試験結果:",i+1);
scanf("%f",&test);
avr=avr+test;
}
printf("平均: %f\n", avr/10);
return(0);
}
を応用し、平均値に加えて、最大値・最小値を求めるプログラムを作りなさい
ただし、正の整数だけではなく、負の整数を含めた実数の入力を想定したプログラムにしなさい
[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン:Visual Studio2008
 [3.3] 言語: C
[4] 期限:今日まで
391 :デフォルトの名無しさん2011/05/28(土) 01:29:28.21
[1] 授業単元:C
[2] 問題文(含コード&リンク):
>>390のプログラムを応用し、平均に加えて分散を求めるプログラムに拡張しなさい
[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン:Visual Studio2008
 [3.3] 言語: C
[4] 期限:今日まで
394 :デフォルトの名無しさん2011/05/28(土) 01:50:07.99
>>390
#include <stdio.h>
int main()
{
int i;
float test;
float avr=0;
float max, min;
for(i=0;i<10;i++){
printf("%d番目の試験結果:",i+1);
scanf("%f",&test);
avr=avr+test;
if(i==0){
max = test;
min = test;
}else{
if (max < test) max = test;
if (min > test) min = test;
}
}
printf("平均: %f\n最大: %f\n最小: %f\n", avr/10, max, min);
return(0);
}
395 :デフォルトの名無しさん2011/05/28(土) 02:02:35.80
400 :デフォルトの名無しさん2011/05/28(土) 11:18:46.37
#include <stdio.h>
char *input_str(void){
char str[MAX];
printf("文字列 > ");scanf("%s", str);return str;}
void output_str(char *str){
printf("変換結果: %s\n", *str);}
int main(void){
char *str1, *str2;
char *p1, p2;
*str1 = input_str();
p1 = &str1;p2 = &str2;
printf("変換開始\n");
while (p1 != '\0') {
if ('a' <= *p1 && *p1 <= 'z') {
p2 = p1 + 'A' - 'a';}
p2++;p1++;}
printf("変換終了\n");output_str(*str2);
return 0;}
実行結果
文字列 > abc123ABC!"#
変換開始
変換終了
変換結果: ABC123ABC!"#
401 :デフォルトの名無しさん2011/05/28(土) 11:24:51.75
[1] 授業単元:課題
[2] 問題文(含コード&リンク):↑の問題文についてなんですがうまくプログラムが動作しないのでどこをどう直せばよいのか解答お願いします。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:明日まで
403 :デフォルトの名無しさん2011/05/28(土) 11:33:12.43
[1] 授業単元:課題
[2] 問題文(含コード&リンク):
):↑の問題文についてなんですがプログラムの修正箇所をお願いします。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:明日まで

405 :3872011/05/28(土) 11:45:46.51
#include <stdio.h>
#define MAX 100
static char str[MAX];
char *input_str(void){
  printf("文字列 > ");
  scanf("%s", str);
  return str;
}
void output_str(char *str){
  printf("変換結果: %s\n", str);
}
int main(void){
  char *str1, *str2;
  char *p1, *p2;
  str1 = input_str();
  p1 = p2 = str2 = str1;
  printf("変換開始\n");
  while (*p1 != '\0') {
    if ('a' <= *p1 && *p1 <= 'z') {
      *p2 = *p1 + 'A' - 'a';
    }
    p2++;
    p1++;
  }
  printf("変換終了\n");
  output_str(str2);
  return 0;
}
406 :デフォルトの名無しさん2011/05/28(土) 12:06:03.57
#include <stdio.h>
/* 大きい値を指し示すポインタを返す */
int *largePtr(int *a, int *b)
{
/* ... */
}
int main(void)
{
int a, b, *c;
printf("整数 > "); scanf("%d", &a);
printf("整数 > "); scanf("%d", &b);
c = largePtr(/* ... */);
printf("変更前: %d, %d\n", a, b);
*c = 0;
printf("変更後: %d, %d\n", a, b);
return 0;
}
実行結果
整数 > 5
整数 > 3
変更前: 5, 3
変更後: 0, 3
[1] 授業単元:課題
[2] 問題文(含コード&リンク):
):*の箇所の訂正お願いします。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:明日まで
408 :デフォルトの名無しさん2011/05/28(土) 12:11:34.43
>>406
関数内部は
return (*a > *b) ? a : b;

cへの代入時の使用部分は
&a, &b
407 :デフォルトの名無しさん2011/05/28(土) 12:09:53.41
また以下のプログラムではなぜ上の題意を満たせないのか,「引数」,「値渡し」,「アドレス」という単語を用いて説明してもらえませんか?
#include <stdio.h>

void max(int *a, int *b, int *c)
{
if (*a > *b)
c = a;
else
c = b;
}

int main(void)
{
int a, b, c;

printf("整数 > "); scanf("%d", &a);
printf("整数 > "); scanf("%d", &b);
max(&a, &b, &c);
printf("変更前: %d, %d\n", a, b);
c = 0;
printf("変更後: %d, %d\n", a, b);

return 0;
}
409 :4082011/05/28(土) 12:20:14.00
>>407
max関数の「引数」である int *c はint型ポインタの「値渡し」となっている、
その為max関数内で「アドレス」を代入したとしても、
main関数側に返る事は無い、返るのはint型の値である。

「引数」でアドレスを返そうと思ったら、int型ポインタのポインタの「値渡し」をする必要がある。
411 :デフォルトの名無しさん2011/05/28(土) 12:34:38.95
>>407
引数として値渡しされたint *変数にアドレスが入っているのに、
アドレスをデリファレンスして使うことも無いので、
関数内での変数の代入で影響が完結している。
*c = *a, *c = *bなどとすれば、呼び出し元の変数に代入される。

また、そのような仕様のmax関数を定義しておきながら、
main関数の中のmax呼び出し以降がトンチンカンなのも問題。
410 :4092011/05/28(土) 12:32:57.51
仕組みの解説も踏まえて分かり易くしてみた

「引数」では「値渡し」しか出来ないが、ポインタを使えば結果を返す事が出来る、
その仕組みは、ポインタに代入された変数への「アドレス」を使い、間接参照する事によって
呼び出し側の変数に間接的に代入しているからだ、
したがって、上記の式(c =a や c = b)は間接参照を行えていない為、結果を返せていない。

つまり、「アドレス」を引数を使い返すのであれば、ポインタのポインタに代入されたポインタへの「アドレス」を使って間接参照をすれば良い。



長くなっちゃった。
412 :デフォルトの名無しさん2011/05/28(土) 12:47:49.94
[1] 授業単元:C
[2] 問題文(含コード&リンク):1~nまでの整数の和を求めるプログラムを次の条件で作成
(1)for文を使用
(2)while文を使用
(3)do-while文を使用
(4)if文を使用

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: VISUAL2008 win32
 [3.3] 言語: C
[4] 期限: 2011年5月30日
[5] どこまで習っているか:初歩の初歩
  その他の制限:nの値はキーボードから入力できるプログラム
413 :デフォルトの名無しさん2011/05/28(土) 13:07:32.56
>>412
int main() {
int n, i, sum;
printf("n = ");
scanf("%d", &n);
for (i = 1, sum = 0; i <= n; i++) sum += i;
i = 1, sum = 0;
while (i <= n) sum += i++;
i = 1, sum = 0;
do {} while (i <= n && (sum += i++));
printf("1〜%dまでの整数の和 %d\n", n, sum);
return 0;
}
414 :デフォルトの名無しさん2011/05/28(土) 13:33:57.46
>>412
すでに回答でてることだし
ふざけてみた

#include <stdio.h>
int main()
{
int n;
for (;0;); while (0); do {} while (0); if (0);
scanf("%d", &n);
printf("1から%dまでの和は%dです\n", n, ((1 + n)* n) / 2);
return 0;
}
415 :デフォルトの名無しさん2011/05/28(土) 13:43:25.74
>>413-414
ありがとうございます
しかしごめんなさい、こちらの説明不足でした
(1)~(4)は別個です

for文を使ったもの、while文を使ったもの、do-while文を使ったもの、if文を使ったもの
1~nの和を出すプログラムを計4個作る問題です
お手数かけますがお願いします
417 :デフォルトの名無しさん2011/05/28(土) 14:10:21.94
>>414
それならもっとこう

#include <stdio.h>
int main()
{
int n,sum;
scanf("%d", &n);
do{for(;1;){while(1)if(sum=((1+n)*n)/2)break;break;}}while(0);
printf("1から%dまでの和は%dです\n",n,sum );
return 0;
}
418 :デフォルトの名無しさん2011/05/28(土) 14:20:20.50
>>412
http://ideone.com/bouqx
if文ひょっとしてgoto使えってことだったんだろうか・・・・・・・・
420 :3872011/05/28(土) 14:37:49.91
>>418 再帰でやるならもっとこう
int sum1(int a, int n){
  if (a < n) return 0;
  return n + sum1(a, n + 1);
}
int main(){
  int n, sum;
  printf("n = ");
  scanf("%d", &n);

  sum = sum1(n, 1);
  printf("1から%dまでの和は%dです\n", n, sum);
  return 0;
}
421 :デフォルトの名無しさん2011/05/28(土) 14:40:53.97
>>420
まだforとか習った段階なのに関数使っちゃだめかな・・・・・って・・・・そのくせgotoのこと忘れてて
しかもそれなら再帰もダメだろうと思い直して

>>412
というわけでifとgoto版も作っておきましたややこしくなってすいません

#include <stdio.h>
int main()
{
int n, i, sum = 0;
printf("n = ");
scanf("%d", &n);
i = 1;
raberu:
sum += i;
i++;
if (i <= n)
goto raberu;
printf("1から%dまでの和は%dです\n", n, sum);
return 0;
}
422 :3872011/05/28(土) 15:39:45.46
>>412
gotoは習ってないかもというわけで再帰版も作っておきました

int sum1(int n){
  if (1 > n) return 0;
  return n + sum1(n - 1);
}
int main(){
  int n, sum;
  printf("n = ");
  scanf("%d", &n);

  sum = sum1(n);
  printf("1から%dまでの和は%dです\n", n, sum);
  return 0;
}
432 :4122011/05/28(土) 21:46:26.23
>>418-422
ありがとうございました
419 :デフォルトの名無しさん2011/05/28(土) 14:29:13.69
do whileでsumみたいな計算させようとすると、
条件分岐でごっちゃになっていやだな。
423 :デフォルトの名無しさん2011/05/28(土) 20:48:08.05
[1] 授業単元:C
[2] 問題文(含コード&リンク):
3つの異なる値の実数を入力させる。それがどんな順番で入力されたとしても、昇順に並び替えて表示するプログラムを作成しなさい
なお、プログラムの末尾には、このプログラムが正しいことを確認するためには、何パターンのデータを試す必要があるかを考え、必要なテストを行った結果を記録しなさい
[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン:Visual Studio2008
 [3.3] 言語: C
[4] 期限:今日まで

424 :デフォルトの名無しさん2011/05/28(土) 20:58:46.60
>>423
#include <stdio.h>

int main(void)
{
double a, b, c, temp;

scanf("%lf", &a);

scanf("%lf", &b);
if(a > b) {
temp = a;
a = b;
b = temp;
}

scanf("%lf", &c);
if(b > c) {
if(a > c) {
temp = a;
a = c;
c = temp;
}
temp = b;
b = c;
c = temp;
}

printf("%f %f %f\n", a, b, c);

return 0;
}
425 :デフォルトの名無しさん2011/05/28(土) 21:04:10.03
[1] 授業単元:C
[2] 問題文(含コード&リンク):
この問題では、数列として扱う値はすべて実数での処理を想定する
初項および項数を入力すると、その等差数列の和を求めるプログラムを作成する
○公式を利用して求める場合→項数(初項+末項)÷2
○1つずつの項を順次足し合わせる場合→公差=(末項−初項)÷(項数−1)
との2種類の計算方法で値を求めるプログラムを作成しなさい
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン:Visual Studio2008
 [3.3] 言語: C
[4] 期限:今日まで


428 :デフォルトの名無しさん2011/05/28(土) 21:10:26.02
>>425
末項は入力させないの?
429 :デフォルトの名無しさん2011/05/28(土) 21:12:43.36
>>428
末項も入力します
問題に書くの忘れてました
すいません
430 :デフォルトの名無しさん2011/05/28(土) 21:21:55.34
>>425
#include <stdio.h>

int main(void)
{
int i, n;
double first_term, last_term, diff, sum, term;

scanf("%d", &n);
scanf("%lf%lf", &first_term, &last_term);

printf("%f\n", n * (first_term + last_term) / 2);

diff = (last_term - first_term) / (n - 1);
for(i = 0, sum = 0, term = first_term; i < n; i++, term += diff) sum += term;

printf("%f\n", sum);

return 0;
}
427 :デフォルトの名無しさん2011/05/28(土) 21:07:54.77
あ、もしかしたらmacだとあるのかな
431 :デフォルトの名無しさん2011/05/28(土) 21:22:49.38
>>427
BSD系だからあるよ
445 :デフォルトの名無しさん2011/05/28(土) 23:15:11.96
>>431
なるほど、ありがとん
433 :デフォルトの名無しさん2011/05/28(土) 21:48:55.18
> リークはstrdupじゃない?
しねーよ。コードも読めない低能が批評とは片腹痛い。
442 : ◆QZaw55cn4c 2011/05/28(土) 22:48:54.75
>>433
words[i].word = strdup(p);
しているけれども、プログラム終了時に free(words[i].word); していませんね。
これはメモリーリークと言われても仕方がないと思います。

http://archive.linux.or.jp/JM/html/LDP_man-pages/man3/strdup.3.html
>strdup() 関数は、文字列 sの複製である 新しい文字列へのポインタを返す。
>新しい文字列のためのメモリは malloc(3) で得ている。

少なくとも私は strdup() で得たポインタは free() する人です。
443 :デフォルトの名無しさん2011/05/28(土) 23:02:56.85
>>442
しねーよ。バカ。プログラム終了時に全部解放されるから問題ない。
446 :デフォルトの名無しさん2011/05/28(土) 23:15:53.66
>>443
ほー、
malloc() したのを free() しなかったら、それはメモリーリークと呼ぶのが普通なのでは?
プログラム終了時にスタートアップが解放したり、プロセス終了時に OS がリソースを回収したりするにしても。
447 :デフォルトの名無しさん2011/05/28(土) 23:22:03.47
>>446
バカ。プログラムの終了時に開放する/しないは宗教戦争だ。
てめーは宗教戦争仕掛ける気か? 死ねバカ。氏ねじゃなくて死ね。
448 :デフォルトの名無しさん2011/05/28(土) 23:24:14.94
>>443
へたくそな言い回しだな。ネタレスならいいけど。
450 :デフォルトの名無しさん2011/05/28(土) 23:26:20.32
>>447
宗教戦争ということにしたいのですね。確かに実害はないことを盾に問題ない、とする人々はいるようですが。

け れ ど も

malloc() したのを free() しなかったら、それはメモリーリークと呼ばれても

し か た な い で す よ ね
451 :デフォルトの名無しさん2011/05/28(土) 23:26:21.39
>>447
解放しない派はメモリリークしていないなんて言わないよ
456 :デフォルトの名無しさん2011/05/28(土) 23:33:19.21
>>451
words[0].word = strdup(p);
words[0].word = strdup(p);

これがメモリーリークだ。普通に言う。

死ね。バカ。氏ねじゃなくて死ね。
459 :デフォルトの名無しさん2011/05/28(土) 23:34:19.83
>>456
じゃあ、解放漏れ
461 :デフォルトの名無しさん2011/05/28(土) 23:37:23.35
>>456
あれ?最初の strdup() で得たポインタは宙ぶらりんになるにしても、結局、終了時に解放されるのだから
プログラム終了時に意図的に解放しない派的には、これも「メモリリーク」とは呼ばないのではないのでは?

なぜ >>456 の場合だけ特別にメモリリークと呼ぶのかくわしく。
463 :デフォルトの名無しさん2011/05/28(土) 23:40:13.73
>>450
それでは聞いてやろう。それを全部freeすることでどういうメリットがあるのだ?
プログラム開始時の状態に戻すことに病的にこだわるなら、変数も全部戻したらどうだ?

メモリアロケーターがOSから確保したメモリブロックを終了前にOSに返さないのはメモリリークと呼ばないのか?


確保したのを返さないのはメモリリークと呼ばれても

し か た な い で す よ ね wwww
468 :デフォルトの名無しさん2011/05/28(土) 23:43:22.31
>>456
のケースも、どうせfreeするつもりが無い場合は、
ただの使い捨てであってメモリリークじゃない。

void leak() {
char *tmp = malloc(1024);
//略
if (略) return;
free(tmp);
}

こんなふうになっちゃってるのがメモリリークかと。
469 :デフォルトの名無しさん2011/05/28(土) 23:45:40.06
>>467
なんか人多いね。

>>468
後でfreeしようと思ってもできなくなってるって意味では同じなんじゃないの?
472 :デフォルトの名無しさん2011/05/28(土) 23:47:33.12
>>470
>>463がおかしいだけ。引っ込みつかないんじゃないかっていう。
474 :デフォルトの名無しさん2011/05/28(土) 23:48:42.15
>>470
逃げてないで>>463に答えろよ。

確保したメモリを返さないのはメモリリークと呼ばれても

し か た な い で す よ ね wwww
477 :デフォルトの名無しさん2011/05/28(土) 23:54:08.98
>>463
>それでは聞いてやろう。それを全部freeすることでどういうメリットがあるのだ?
メリットのあるなしは関係ないのでは?宗教戦争なんでしょ?

「malloc() したのをfree() しなかったのならメモリーリークだ」という人がいても仕方がないのでは、ということです。宗教戦争だそーですから。
そもそも、解放しない派的には、何をメモリーリークと呼ぶのかすら、はっきりしていないようですね。
479 :デフォルトの名無しさん2011/05/28(土) 23:56:41.05
>>474
すみませんが、
「メモリアロケーターがOSから確保したメモリブロックを終了前にOSに返さない」
という事態を、普通のプログラムでどうやって引き起こしたらいいのかわからないのですが。

そもそも何を突っ込まれているかよくわからないので、説明していただけないでしょうか?
480 :デフォルトの名無しさん2011/05/28(土) 23:59:19.90
>>477
> そもそも、解放しない派的には、何をメモリーリークと呼ぶのかすら、はっきりしていないようですね。
バカにもわかるように実コードで示してやっただろ。>>456

それと>>463の後半に対する反論もどうぞ。
sbrkやmmapやVirtualAllocしたのは解放しないのかな?




確保したメモリを返さないのはメモリリークと呼ばれても

し か た な い で す よ ね wwww
481 :デフォルトの名無しさん2011/05/29(日) 00:07:23.47
>>456をメモリリークといい、解放漏れをメモリリークといわないのってどこの文化なんだろう。
手元のリークチェッカはどちらもメモリリークしているとエラーを出すんだけど、そのチェッカが糞って言われて終わりなのかな
482 :デフォルトの名無しさん2011/05/29(日) 00:10:28.68
>>479
> 「メモリアロケーターがOSから確保したメモリブロックを終了前にOSに返さない」
> という事態を、普通のプログラムでどうやって引き起こしたらいいのかわからないのですが。
int main()
{
free(malloc(1000 * 1000 * 1000));
}
病的にこだわった自作のメモリアロケータを使っていなければこれで発生する。
メモリアロケータ(malloc)はOSから(大き目な)メモリブロックの割り当てを受けて、
それを分割して渡す。普通のメモリアロケーターはfreeされてもOSには返却しない。

てめーはこれから自作のメモリアロケータ使って、プログラム終了時にOSにメモリを確実に返せ。
ここで回答するときも忘れるなよ。




確保したメモリを返さないのはメモリリークと呼ばれても

し か た な い で す よ ね wwww
483 :デフォルトの名無しさん2011/05/29(日) 00:12:38.90
>>480
>バカにもわかるように実コードで示してやっただろ。>>456
>>461

何をメモリーリークと呼んでいるのか、今ひとつよくわかりません。適当に気分でメモリーリークといったりいわなかったりのような気が。
楽でいいですねえ。

>sbrkやmmapやVirtualAllocしたのは解放しないのかな?
申し訳ないけれども、mallc() したものですら free() する派の人が、それらについては使用後解放しないなんてありえないと思いませんか?
485 :デフォルトの名無しさん2011/05/29(日) 00:16:20.92
>>482
それは初耳。kwsk
malloc() したものは、free() しなくてもプログラム終了時にすべて回収されるのではなかったでしょうか?
malloc() で要求するサイズによって、OS に返すか返さないかが変化するのであれば、
あぶなくってしかたがない。

malloc() したものはすべてfree() したほうがいいのではないでしょうか?
504 :デフォルトの名無しさん2011/05/29(日) 00:55:08.82
>>502
freeしてればメモリリークと呼ばないのが>>450の主張だと思うんだが、どの辺でずれたの?
507 :デフォルトの名無しさん2011/05/29(日) 01:18:46.64
>>504
> strdupは内部でmallocを使っている。mallocしたメモリをfreeしないのはメモリリークだ。
とバカが宗教戦争を仕掛けてきたから、

mallocは内部でsbrk/mmap他を使っている、sbrk/mmapしたメモリを開放しないのはメモリリークだ。

と言っている。
510 :デフォルトの名無しさん2011/05/29(日) 01:38:55.97
>>507
勝手にメモリーリークの定義をされても。
まあ、>>456 のとおり、メモリーリークの定義がふらふらしているようだし、やっぱりあんまり考えていないようですね。

>>507
> >strdupは内部でmallocを使っている。mallocしたメモリをfreeしないのはメモリリークだ。
これはひとつの考え方だと思いますよ。宗教戦争のネタになるくらいだから。

それに比べると、
>mallocは内部でsbrk/mmap他を使っている、sbrk/mmapしたメモリを開放しないのはメモリリークだ。
という宗教戦争は寡聞にして知りません。
free() しても OS にメモリリソースが返るとは限らないなんて、C FAQ にも書いてある既定事項なんですが、それをあげつらわれても。

であなたのいうところのメモリーリークってなんですか?
514 :デフォルトの名無しさん2011/05/29(日) 02:53:18.62
>>513
だってわかりにくいんだもの。
>>456 でメモリーリークの例をあげておきながら、急に方針転換して、>>463 の定義にかわったので混乱してしまいました。
一貫していないんですよね。
519 :デフォルトの名無しさん2011/05/29(日) 03:26:46.08
>>463が>>456の定義の変更だと思うあたり、頭悪すぎだな
537 :デフォルトの名無しさん2011/05/29(日) 09:14:02.61
>>510
てめーがmallocしたメモリをfreeしないのはメモリリークだという勝手なルール押し付けてきたから、
「確保したメモリを開放しないのはメモリーリークだ」とより普遍化したルールを押し付けてるだけだ。

てめーのクソコードがメモリーリークしてる証拠だ。とっととなおせよ。

http://bellard.org/jslinux/でコンパイルできるようにインクルードと観測用のコード追加。
http://codepad.org/tfiYIu9T

実行結果:
~ # cat /dev/clipboard > 282.c
~ # tcc -o 282 282.c
282.c:175: warning: assignment makes pointer from integer without a cast
282.c:177: warning: assignment makes pointer from integer without a cast
~ # ./282 < 282.c > /dev/null
0x804a000 0x804c000 <<< main_呼び出しの前後で変わっているすなわち、メモリーリーク

確保したメモリを返さないのはメモリリークと呼ばれても

し か た な い で す よ ね wwww
563 :デフォルトの名無しさん2011/05/29(日) 13:31:34.11
>>543
オレのルールは>>451だ。したがってメモリリークはない。

てめーが宗教戦争仕掛けてきて勝手なルールを押し付けようとしたんだから、他人の
ルールも受け入れろ。
続く…
569 :デフォルトの名無しさん2011/05/29(日) 14:15:05.11
>>567
アンカーは間違っていたな。>>456だ。最初から言っている。
436 :デフォルトの名無しさん2011/05/28(土) 22:21:58.30
[3.1] OS:vista
[3.2] コンパイラ名とバージョン:Linux
[3.3] 言語: C
[4] 期限:月曜日まで
437 :デフォルトの名無しさん2011/05/28(土) 22:27:32.13
名前: デフォルトの名無しさん
E-mail:
内容:
1] 授業単元:C
[2] 問題文(含コード&リンク):
今回は、単方向リストを用いて電話帳のプログラムを作ってもらいます。
実装するのは、入力、削除、表示、終了、load、saveです
440 :デフォルトの名無しさん2011/05/28(土) 22:32:27.14
>>438は>>437の続きです。
記載するのを忘れておりました。
よろしくお願いします
438 :デフォルトの名無しさん2011/05/28(土) 22:29:35.67
1.入力は、名前、電話番号を入力する。(可能ならばソートを行う)
2.saveは終了時にsaveを行うかどうか判断してから終了を行う(txtで保存する)
3.loadで読み込んだtxtファイルに再び、入力、削除、表示を行えるようにする
4.ヒント(mallocの意味を調べること)
[3.1] OS:vista
[3.2] コンパイラ名とバージョン:Linux
[3.3] 言語: C
[4] 期限:月曜日まで
540 :デフォルトの名無しさん2011/05/29(日) 09:58:15.75
>>437〜>>438を教えていただけないでしょうか?
541 :デフォルトの名無しさん2011/05/29(日) 10:04:43.10
>>540
>>438の仕様が大雑把なんだよな
まぁ適当に判断してやるよ
598 :デフォルトの名無しさん2011/05/29(日) 18:07:02.47
>>541
>>438の仕様が大雑把なんだよな
まぁ適当に判断してやるよ

よろしくお願いします。
後、課題のプリントのほうにプログラムの例が載っているのですが、
そちらも記載した方がよろしいでしょうか?
439 :デフォルトの名無しさん2011/05/28(土) 22:32:19.36
vistaなのかlinuxなのか・・・
441 :デフォルトの名無しさん2011/05/28(土) 22:34:42.52
>>439
Linuxでvimを使ってコンパイルをしております。
455 :デフォルトの名無しさん2011/05/28(土) 23:32:56.75
freeしたと思っていてできてないのがメモリリーク。
freeしながらヒープをやりくりするプログラムでの話。
ヒープを使いっぱなしで話が済むプログラムではケアの必要などない。
462 :デフォルトの名無しさん2011/05/28(土) 23:39:06.13
メモリリークとは「あるリソースを指しているポインタが失われた状態」を指して言うんだぞ

名著「Exceptional C++」を読め

つまりプログラム内ではもうそのリソースを解放する手段が無くなった時に、初めて「メモリ
リーク」と呼ぶのであり、malloc()したのをfree()しないのは単なる怠慢であってメモリリーク
ではない

しかし、プログラムの終了時もしくは実行時でもいいが、malloc()したものをfree()しないで
長時間動かすといずれヒープ領域の枯渇を招く危険があり、こまめに解放出来るリソースは
解放すべきである

これは「プログラム作法」に属する

確かにプログラムがterminateするとそのプロセスが保持していたメモリはOSに返却されるが、
もしリソースをロックしていたらそのリソースまで返却されるとは限らない
使ったものはちゃんと返してからプログラムを終了する癖を付けておかないとそのうち痛い目に遭う
465 :デフォルトの名無しさん2011/05/28(土) 23:41:26.69
一応、MacもWindows NT系、UNIXのようにプロセス終了時にはメモリが解放されるのは保証されてる、
でもプロセスが終了しない間はメモリが解放されないわけだからちょっと規模大きくなって連続稼働するとプログラムがダウンする。
このプログラムだと問題ない、と言えるけど害悪しかないだろ、ヒープチェッカーとかどうすんの。
466 :デフォルトの名無しさん2011/05/28(土) 23:42:48.00
気持ち悪い応酬だな

↓の糞スレでやってくれ

俺の課題を誰か作ってくれ!!
http://hibari.2ch.net/test/read.cgi/tech/1169822971/
467 :4652011/05/28(土) 23:42:48.79
リロードしないうちに同じ事書かれた、ってかみんなペース早いw
470 :デフォルトの名無しさん2011/05/28(土) 23:45:55.32
なんだか、プログラム終了時に意図的に free() しない派の辞書にはメモリーリークという言葉が存在しないように思えてきました。

楽でいいですねえ。
547 :デフォルトの名無しさん2011/05/29(日) 11:32:41.63
>>537
普遍化かどうかは疑問ですね。
「malloc() したものは free() しない(こともある)派」、と括弧をつけてはいますが、
>>461 の指摘に答えはなく、実のところ、>>470 なんですね。
567 :デフォルトの名無しさん2011/05/29(日) 14:06:10.77
>>563
リンク先まちがっていませんか?
>>470 でしょう?
486 :デフォルトの名無しさん2011/05/29(日) 00:17:00.26
main(){malloc(1);}
でメモリリークするとか言ってる奴は
屋根無し駐車場を借りといて
雨漏りがすると大家に因縁つける基地外
487 :デフォルトの名無しさん2011/05/29(日) 00:19:56.38
> 申し訳ないけれども、mallc() したものですら free() する派の人が、それらについては使用後解放しないなんてありえないと思いませんか?

やっぱりバカだ。
mallocはsbrkやmmapやVirtualAllocなどを使って、OSからメモリの割り当てを受けるんだよ。
普通のメモリアロケータはOSに返却しないけど、てめーは返却してるっていうのか?
そりゃスゲー。www
どうやって返却してるんだ? www
488 :デフォルトの名無しさん2011/05/29(日) 00:19:58.38
freeは即座にOSに返却されないが、実行中にメモリが足りなくなれば返却するし、
返却されなくてもプログラム終了時には返却される。
タイミングの話?
497 :デフォルトの名無しさん2011/05/29(日) 00:45:45.12
freeしてるのにメモリリーク発生してるって事は
プログラム終了時にメモリを返していなければメモリリークって事でOK?
498 :デフォルトの名無しさん2011/05/29(日) 00:46:52.29
そうなるとGCある言語だとメモリリーク防ぎようがないなw
500 :デフォルトの名無しさん2011/05/29(日) 00:49:41.90

プログラム終了時にメモリを返すのは基地外とQZだけ
覚えとくように
501 :デフォルトの名無しさん2011/05/29(日) 00:51:23.29
メモリリークってプログラム実行中にしか発生しないだろ。
終了した後は、どう転んでも回収されるんだから。
512 :デフォルトの名無しさん2011/05/29(日) 01:52:20.91
こういう時のQZは見てて「こいついい所もあるな」と思える
513 :デフォルトの名無しさん2011/05/29(日) 02:40:29.02
相手の言ってるメモリリークの意味が理解できてない時点で、あいかわらずバカだなあとしか
518 :デフォルトの名無しさん2011/05/29(日) 03:26:41.13
月の英語名を配列に代入するプログラムhttp://ideone.com/UXI8a
「 1 番目の引数を 'char *' から 'char **' に変換できません。」という
内容のエラーを起こしてしまいます。アドバイスをお願いします。
522 :デフォルトの名無しさん2011/05/29(日) 03:34:14.69
520 :デフォルトの名無しさん2011/05/29(日) 03:28:52.30
今回は長いな。QZ批判してる人がコード書いたから?

QZ:宿題の回答としては無駄に複雑かつ要件を満たしていない
QZ批判:macのis系が1を返すことが保証されていたとしても要件を満たしてない
QZ批判批判:かなり後から書いたにもかかわらずエラー処理がない
524 :デフォルトの名無しさん2011/05/29(日) 03:38:49.68
ねむれないや。
>>520
>QZ:宿題の回答としては無駄に複雑かつ
はしかたがないとして、

>要件を満たしていない
についてkwsk
525 :デフォルトの名無しさん2011/05/29(日) 03:43:44.15
>>524
たいしたこっちゃないよ。
> 同時に現れた「単語」の総数をプリントすること。
535 : ◆6W4srb4nmo 2011/05/29(日) 08:47:38.93
>同時に現れた「単語」の総数をプリントすること。
同時に、現れた「単語」の総数をプリントすること。
なら、出力に最初の1行も必要だね。
でも、句点が無いから強調の意味の繰返しとも読める。>>525
521 :デフォルトの名無しさん2011/05/29(日) 03:30:18.36
char **m;
m = (char **)malloc(sizeof(char*) * 12);
523 :デフォルトの名無しさん2011/05/29(日) 03:37:05.49
>>521-522
ありがとうございました。
よければ原因がなんだったのか具体的に教えて下さい
528 :デフォルトの名無しさん2011/05/29(日) 03:53:46.96
>>523
mはchar型へのポインタのポインタ(ポインタ配列)として確保しなければならないのに
char型へのポインタとして確保されていたから

そして呼び出しの型が合わずエラー
589 :デフォルトの名無しさん2011/05/29(日) 16:20:25.02
>>528
ありがとうございました。
526 :デフォルトの名無しさん2011/05/29(日) 03:48:01.64
[1]C言語上級
[2]
malloc/realloc/callocで確保したヒープ変数がアプリケーション終了時
に確実にfreeされているかチェックする方法を考えて実装しなさい。
[3] Linux/Gcc4.5(Open source版)/C言語
[4] 無期限
530 :デフォルトの名無しさん2011/05/29(日) 03:55:00.45
>>526
CodeGuard
533 :デフォルトの名無しさん2011/05/29(日) 04:21:46.77
>>526のような物が出来るだけ必要ないようにC++ではデストラクタ、スマポ、
コンテナが用意されているんだよな

言葉を換えればそれだけCは原始的で車輪の再発明が当たり前のように
されているので時間と労力の無駄が多い
534 :デフォルトの名無しさん2011/05/29(日) 08:39:14.53
>>526
Google Performance tools の Heap Checker使うとか、
もしくは既存のメモリアロケータラップしてshared_ptrのように参照カウント追加すればでいけそうな気がする。
545 : ◆6W4srb4nmo 2011/05/29(日) 10:59:24.36
>避けるべきメモリーリーク
100円の小銭で105円の買い物をするの例え。
100円の小銭で30円の買い物3回してもよし。また100円足せば105円の買い物ができる。
strdup()も加える?なら、他にもありそうな無さそうな?>>526
546 :デフォルトの名無しさん2011/05/29(日) 11:09:00.88
>>525
ご指摘感謝。訂正をかけます。

>>159 >>526
なお、calloc() については未対応です。
http://codepad.org/gShtpAyU
529 :デフォルトの名無しさん2011/05/29(日) 03:54:02.34
valgrind使うなぁ。知らないなら教えてくれっていえばいいのに。
536 :デフォルトの名無しさん2011/05/29(日) 08:52:01.41
せいぜい
my_mallocみたいなの作って、内部でカウンタ増やしてmalloc呼び出し
my_freeみたいなの作って、内部でカウンタ減らしてfreeするの作れってレベルじゃないのか?

授業内容どんなんなんだろうなぁ
542 :5412011/05/29(日) 10:19:30.19
すいません撤回しますスレ汚しすいませんでした
544 :デフォルトの名無しさん2011/05/29(日) 10:47:38.77
>>542
スケルトンみたいなコードの作成を依頼してみては?QZさんが書いてくれるかも
548 :デフォルトの名無しさん2011/05/29(日) 11:38:39.34
普通はプログラム実行の最後まで参照が保持されてる
変数については、freeしなくてもメモリリークとは言わない
だって参照がある(使える)んだからね
551 :デフォルトの名無しさん2011/05/29(日) 11:48:08.34
>>548
GC 的には、それってまずいんじゃなかったんでしたっけ?
「普遍的」に使えないルールのような気が。
552 :デフォルトの名無しさん2011/05/29(日) 11:50:24.15
>>551
プログラムがメモリを使いすぎているのと、
メモリリークは違うよ?
553 :デフォルトの名無しさん2011/05/29(日) 11:59:33.07
>>552
free() しようと思えばいつでもできる、けどしない、ということですか。
完璧、というにはお粗末に見えるのですが。
556 :デフォルトの名無しさん2011/05/29(日) 12:23:52.11
>>553
そんなこと言ってなくて、単純にメモリリークとは何か?って話
GCのある言語だって参照が残ってたら回収されない
599 : ◆QZaw55cn4c 2011/05/29(日) 18:10:14.96
>>595
>>548 >>553 あたりで収束したようです。予定通りです。
555 :デフォルトの名無しさん2011/05/29(日) 12:22:31.92
内容:
[1] 授業単元:C
[2] 問題文(含コード&リンク):
正の整数を入力したとき、その数値が素数であれば「素数です」、素数でないなら「素数ではありません」と表示するプログラムを作成しなさい
入力した値が0または負の整数であれば、繰り返し再入力させるようにプログラムを作成すること
557 :デフォルトの名無しさん2011/05/29(日) 12:32:20.82
>>555の続き
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン:Visual Studio2008
 [3.3] 言語: C
[4] 期限:今日まで
560 :デフォルトの名無しさん2011/05/29(日) 13:23:23.20
561 :デフォルトの名無しさん2011/05/29(日) 13:29:21.01
[1] 授業単元:C
[2] 問題文(含コード&リンク):
「*」の記号を利用して、入力した数字を等しい2辺に持つ、次のような直角二等辺三角形を表示するプログラムを作成しなさい
[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン: Visual Studio2008
 [3.3] 言語: C
[4] 期限:明日まで
564 :デフォルトの名無しさん2011/05/29(日) 13:32:37.42
>>561
#include <stdio.h>
int main(void) {
int i, j, n;
scanf("%d", &n);
for(i = 0; i < n; i++) {
for(j = 0; j <= i; j++) putchar('*');
putchar('\n');
}
return 0;
}
574 :デフォルトの名無しさん2011/05/29(日) 14:42:17.41
QZみたいなアホに的外れな突っ込みされて切れちゃった人がいるだけ
575 :デフォルトの名無しさん2011/05/29(日) 14:45:40.06
そういう粘着のレビューはしたくないな
プロジェクトからはハズされるだろ、大体
576 :デフォルトの名無しさん2011/05/29(日) 15:05:44.67
この程度で粘着っていうな。mygetlineのようなうんこコードは普通書き直しだぞ。
3文字読むたびにstrlen×2してreallocしてstrcatして … 目が腐る。
577 :デフォルトの名無しさん2011/05/29(日) 15:09:39.94
>>576
草を生やしてまで書くような事じゃない
585 :デフォルトの名無しさん2011/05/29(日) 15:50:46.23
>>576
ご指摘ありがとうございます。
「3 文字ごとにぐるぐる」ですが、
#define BUFFSIZE 3 /* >= 2 */
で指定していますので、2 以上の数値であればOKです。環境にあわせて 1024 なり 65536 なりに設定できるようにしています。
なおこの数値に関わらず、ファイルの1行あたりのバイト数に拘束されないように作っております。
578 :デフォルトの名無しさん2011/05/29(日) 15:11:46.24
草はうんこを見てしまった心に平穏を取り戻すために必要な儀式だ。
579 :デフォルトの名無しさん2011/05/29(日) 15:17:07.33
>>578
どんな事が起きても平常心が保てないと、プロとは言えないw
587 :デフォルトの名無しさん2011/05/29(日) 16:02:50.38
http://www.dotup.org/uploda/www.dotup.org1672214.jpg
いやぁダービーで儲けさせてもらった。
プログラミングだけじゃやっぱ食っていけねぇ
590 :デフォルトの名無しさん2011/05/29(日) 16:30:26.48
1] 授業単元:C演習
[2] 問題文
30 29   28 27 26 計 140
25 24   23 22 21 計 115
20 19 18 17 16 計 90
15 14 13 12 11 計 65
計  計   計  計  計
90 86 82 78 72

[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン: Visual Studio2010
 [3.3] 言語: C
[4] 期限:6月8日
?for文 もしくはwhile もしくはswitch
?配列利用パターン
構造体は使わず(未履修)
I,2両方です。とほほ・・・。課題やり始めると時間がワープするみたいに
飛んでってしまう。その割にはエラーしか出ない。
591 :デフォルトの名無しさん2011/05/29(日) 16:32:35.29
>>590
「2chで答えを貰う」ってのが課題なの?
593 :デフォルトの名無しさん2011/05/29(日) 16:49:49.74
>>590
>課題やり始めると時間がワープするみたいに飛んでってしまう。
快感でしょう。
で、なにをどうすればいいのでしょうか?
596 :デフォルトの名無しさん2011/05/29(日) 17:56:14.86
>>590
難問過ぎるだろ
597 :デフォルトの名無しさん2011/05/29(日) 18:06:52.43
>>590 なんか出力結果が違うけどゴメンネ
#include <stdio.h>

int main(void)
{
int i, j, x=30;
int sum_h, sum_v0=0, sum_v1=0, sum_v2=0, sum_v3=0, sum_v4=0;

for(i=0;i<4;i++){
sum_h=0;
for(j=0;j<5;j++)
{
sum_h+=x;
switch(j)
{
case 0: sum_v0+=x; break;
case 1: sum_v1+=x; break;
case 2: sum_v2+=x; break;
case 3: sum_v3+=x; break;
case 4: sum_v4+=x; break;
}
printf("%3d ", x);
x--;
}
printf("計 %3d\n", sum_h);
}
printf(" 計 計 計 計 計\n");
printf("%3d %3d %3d %3d %3d\n", sum_v0, sum_v1, sum_v2, sum_v3, sum_v4);

return 0;
}
601 : ◆6W4srb4nmo 2011/05/29(日) 18:48:58.16
595 : ◆6W4srb4nmo 2011/05/29(日) 17:15:10.76
1. これはメモリーリーク? 168( ) 282( ) 369( )
while(1){
  words[0].word = strdup(p);
  words[0].word = strdup(p);
}
2. これはメモリーリーク? 168( ) 282( ) 369( )
words[0].word = strdup(p);
3. これはメモリーリーク? 168( ) 282( ) 369( )
words[0].word = strdup(p);
words[0].word = strdup(p);
free(words[0].word);
600 :デフォルトの名無しさん2011/05/29(日) 18:45:25.78
現状、C言語はOSとデーモンの作成で使われることが多いから、システムによるメモリ回収を当てにしては駄目。
602 :デフォルトの名無しさん2011/05/29(日) 18:51:25.87
>>600
じゃあ、異常系でも回収するコードを書くのが信徒には要求されるのですね。けっこうつらいんですけど。
603 :デフォルトの名無しさん2011/05/29(日) 18:58:18.09
>>602
異常系でも回収するコードを書くよ。だからC言語って生産性が悪いんだ。コードの大半がエラー処理だ。
通常、goto文でmallocとfreeを上下対称に書く(mallocに限った話じゃないが)。
int foo(void)
{
char *a, *b, *c;
a = malloc(1, sizeof(*a));
if (a == NULL) {
/** エラー出力 */
return文
}
b = malloc(2, sizeof(*b));
if (b == NULL) {
/** エラー出力 */
goto err1;
}
c = malloc(3, sizeof(*c));
if (c == NULL) {
/** エラー出力 */
goto err2;
}
/** なんかの処理(free(a), free(b), free(c)とかするのかも) */
return文
err2:
free(b);
err1:
free(a);
return文
}
604 :デフォルトの名無しさん2011/05/29(日) 19:03:51.18
>>603
ふむ。
思い通りの malloc() にNULL を返させるにはどうすればいいでしょうか。
私の xmalloc() ならば簡単ですが、一般にはそういうのは使わないでしょうし。
605 :デフォルトの名無しさん2011/05/29(日) 19:08:58.56
>>604
機能テストレベルなら自プログラムの裏でメモリを食いまくるプロセスを動かすとかかな。
単体テストレベルなら、テスト用ライブラリでmallocをオーバーライドさせて、
任意のタイミングでNULLを返すとかやるんだろう。
609 :デフォルトの名無しさん2011/05/29(日) 19:24:00.22
>>603
メモリプールでも使ってろよ
610 :デフォルトの名無しさん2011/05/29(日) 19:26:07.58
>>609
うるせーマイコン馬鹿。
611 :デフォルトの名無しさん2011/05/29(日) 19:29:14.49
>>603
もうちっと考えれば少し楽できるよ
612 :デフォルトの名無しさん2011/05/29(日) 19:32:58.88
>>611
mallocを3回読んでるのは例え話であって、a, b, cを配列的にアクセスすればいいんじゃね?ってのとはちょっと違う。
1回目のmallocがfopenとかでもエラー処理は必要でしょ?
613 :デフォルトの名無しさん2011/05/29(日) 19:34:19.48
>>612
そうじゃなくてNULLで初期化しておくと楽できるってだけ
オーバーヘッドが云々とか言われたら知らんけど
617 :デフォルトの名無しさん2011/05/29(日) 21:04:14.42
>>614
free(NULL) はなにもしないから、NULL で初期化しとけば、取り合えず
エラー時は free(a); free(b); free(c); ってやっとけばいいって話だろ。

>>612 で fopen() の話出てるんだから、オーバーヘッド以前に単なるバカ
だと思うけど。
618 :6132011/05/29(日) 21:06:42.25
>>617
自分が分からないからって馬鹿呼ばわりはヒドイな
619 :デフォルトの名無しさん2011/05/29(日) 21:10:19.64
>>604
Fault Simulator でも使えばええやん、


って書こうとしたら、メーカーの Web に載ってない...。
Micro Focus に吸収されたときに、無くなったんだろうか。
620 :デフォルトの名無しさん2011/05/29(日) 21:12:42.84
>>618
> 自分が分からないからって馬鹿呼ばわりはヒドイな

じゃあ、ちゃんと説明してみて。
621 :6132011/05/29(日) 21:15:39.66
>>620
まずはどこをバカだと思ったのか説明してみてよ
622 :デフォルトの名無しさん2011/05/29(日) 21:19:13.78
>>604
こんなのある、
ちょっとプレゼン資料見難いけども。
624 :デフォルトの名無しさん2011/05/29(日) 21:36:15.50
>>621
>まずはどこをバカだと思ったのか説明してみてよ

>>617 だと fopen() はだめだろ。
なんかいい方法があるなら、書いてみてよ。
625 :デフォルトの名無しさん2011/05/29(日) 21:41:03.21
>>622
こんなプレゼンどうやってつくったんだ?
今はやりなんですか?


ちょっとやってみたい。
626 :6132011/05/29(日) 21:46:09.08
>>624
fopen がダメってどういうこと?
何か難しいことがあるの?
628 :デフォルトの名無しさん2011/05/29(日) 21:56:53.50
>>626
ねえ、>>613 で「楽できる」って書いてるんだから、その方法とっとと書いたら?
631 :6142011/05/29(日) 22:14:19.89
>>617
なるほどね
658 :デフォルトの名無しさん2011/05/30(月) 08:35:24.01
>>603
killされたときにもシグナル捕まえてちゃんとfreeしないとダメだね。
SEGVとかメモリアロケータの中で発生する事も多いけど、特製のメモリアロケータなんだろうな。

大変だな、信者。
673 :デフォルトの名無しさん2011/05/30(月) 13:28:22.10
>>658
シグナルハンドラから抜けた先は、C のスタートアップですか?ならば信者としては free() しなくちゃいけないですね。
そうでなければ、free() する必要性を感じませんね。
678 :デフォルトの名無しさん2011/05/30(月) 15:57:35.11
>>673
お前バカすぎて話になんない。
スタートアップに帰るならfree必要、それ以外は不要という教義に修正するのか? ww
信者たる者、どんな条件でもfreeすべきだろ。
c6e5511a42026dc7b7f43848fec3cdcdf53fe2ab4d7b8d86d8372510f7742b79
680 :6022011/05/30(月) 16:10:56.74
>>678
神の教えはそう説くのですが、我ら下々には時として苛斂誅求な要求でもあり、世の宗教にも修正主義という言葉もありますし、
適当なところで折り合いをつけるのが、ひいては神の御威光を世に知らしめることになると信じております。
神よ、なにとぞお許しを。異常系の free() は勘弁してください。
682 :デフォルトの名無しさん2011/05/30(月) 17:10:13.22
>>680
教義を修正するという事はてめーが仕掛けた宗教戦争の敗北を認めて撤退するんだな?
二度と来んなカス。
607 :デフォルトの名無しさん2011/05/29(日) 19:13:00.34
プリプロセッサで頑張るのだ。
#include <stdio.h>
#include <stdlib.h>

#define malloc mymalloc

static void *mymalloc(size_t size)
{
return NULL;
}

int main(void)
{
char *a;

a = malloc(1);
if (a == NULL) {
perror("malloc");
return 1;
}

free(a);
return 0;
}

あるいはgdbにお願いするか。
614 :デフォルトの名無しさん2011/05/29(日) 19:36:51.93
よく分からん。
もう少し詳しく。
656 :デフォルトの名無しさん2011/05/30(月) 06:36:36.86
名前:入れないから2人で話してるつもりになる。>>614
615 :デフォルトの名無しさん2011/05/29(日) 19:45:52.81
591>発想、思わぬ使い方。
しょぼ、しょぼ、なが〜いプログラムをつくる。
ところが、出来る人がつくると、
えーこんなにみじかいのとか、こんなやり方が
あるのとか。
 ブレークスルーをもとめてみたいな。
616 :デフォルトの名無しさん2011/05/29(日) 20:23:50.19
>>615
地の言葉を使いたまえ、キミに合わせよう
623 :6222011/05/29(日) 21:19:32.53
630 :デフォルトの名無しさん2011/05/29(日) 22:13:06.02
>>623
これ楽しいなぁ
637 :6252011/05/29(日) 22:25:08.81
>>630
正直(最初は新鮮だった)ppt ももう飽きちゃって‥‥‥。
意味のない「眩暈感」がいい。

>>623 の内容自体を指しているのなら勘違いごめんなさい。
32bit 時代のアセンブラはちとわからない。
627 :デフォルトの名無しさん2011/05/29(日) 21:55:31.79
fclose(NULL)はダメだって話だろ
mallocは一例に過ぎないんだから、それにしか適用できないものを出すのはアホ
629 :6132011/05/29(日) 22:09:53.01
答えでてんじゃん
632 :デフォルトの名無しさん2011/05/29(日) 22:14:44.52
>>629
>答えでてんじゃん

これのことか? (w

>> それにしか適用できないものを出すのはアホ
633 :6132011/05/29(日) 22:16:20.75
>>632
fclose に NULL を渡さなきゃいいじゃんってことだよ
634 :デフォルトの名無しさん2011/05/29(日) 22:19:05.53
>>633
お前のやり方だと fclose() に NULL 渡さないのも「楽できる」んだろ?

どうやってやるんだ?

書いてみなよ。
636 :6132011/05/29(日) 22:23:29.95
>>634
自分で答え書いてるって言ったのになw
int hoge(void)
{
FILE *fp=NULL;
int *p=NULL;

fp=fopen(...);
if(fp==NULL) goto err;

p=malloc(...);
if(p==NULL) goto err;

// なんか処理

// 後処理とか

return 1;

err:
free(p);
if(fp) fclose(fp);
return 0;
}
640 :デフォルトの名無しさん2011/05/29(日) 22:35:37.96
>>635
>ちなみにfree(NULL)の挙動はC規約にある?

ある。

>>636
さんざ引っ張って結局それかよ。
641 :デフォルトの名無しさん2011/05/29(日) 22:38:17.81
>>636
>if(fp==NULL) goto err;
>if(fp) fclose(fp);

なんで、こんな一貫性のないコードが書けるんだ?
643 :デフォルトの名無しさん2011/05/29(日) 22:45:08.72
>>636がアホすぎるw
635 :デフォルトの名無しさん2011/05/29(日) 22:21:48.51
もうどうでもいい

ちなみにfree(NULL)の挙動はC規約にある?
638 :デフォルトの名無しさん2011/05/29(日) 22:31:18.54
>>635
free(NULL) はOK とあります。
ISO/IEC 9899:1999 7.20.3.1.2

fclose(NULL) はない。
ISO/IEC 9899:1999 7.19.5.1
639 :デフォルトの名無しさん2011/05/29(日) 22:33:50.81
>>638
thx
645 :デフォルトの名無しさん2011/05/29(日) 22:55:41.81
613とQZか
646 :デフォルトの名無しさん2011/05/30(月) 01:36:21.40
>>645
いや、お前だろ
647 :デフォルトの名無しさん2011/05/30(月) 01:42:11.16
http://codepad.org/FNSa1ZOS

これのシェルソートを選択ソートにしたいです
よろしくおねがいします

ソースコードのs[6]の比較回数 s[7]s[8]の交換回数が主に必要なデータになります
651 :デフォルトの名無しさん2011/05/30(月) 04:44:26.45
>>647
http://ideone.com/FjhTh

こんな感じですか?
s[]の付け方の基準がいまいち分からないのでご自分で後は修正して下さい
実行オーダーはO(N^2)のはずです
649 :デフォルトの名無しさん2011/05/30(月) 04:05:21.35
仮想メモリなはもとい、HDすらまともなものがなく、シェルすら貧弱だった
時代はmalloc/freeは一体不可分。
不要なメモリは極力システムに返すように設計しなければ、システム
全体が使い物にならなかった。
しかし何故かコードはメモリにロードされっぱなしだったことが問題視され
ていて、DLLやらSOなどの概念が生まれたが、これはHDがそれなりに
発達して仮想メモリも実現できるようになった頃と大差がなかった
662 :デフォルトの名無しさん2011/05/30(月) 09:28:43.54
[1] 授業単元:C
[2] 問題文(含コード&リンク):
今回は、単方向リストを用いて電話帳のプログラムを作ってもらいます。実装するのは、入力、削除、表示、終了、load、saveです
1.入力は、名前、電話番号を入力する。(可能ならばソートを行う)
2.saveは終了時にsaveを行うかどうか判断してから終了を行う(txtで保存する)
3.loadで読み込んだtxtファイルに再び、入力、削除、表示を行えるようにする
4.ヒント(mallocの意味を調べること)

[3.1] OS:vista
[3.2] コンパイラ名とバージョン:Linux又は、Visual Studio
[3.3] 言語: C
[4] 期限:本日中
664 :デフォルトの名無しさん2011/05/30(月) 09:37:36.94
>>663は>>662のプログラム例です。
よろしくおねがいします
693 :6922011/05/30(月) 21:58:12.00
>>662
リンクミスを訂正します。
http://codepad.org/gDrQfjcR
663 :デフォルトの名無しさん2011/05/30(月) 09:35:18.29
typedef struct List /* 電話帳の構造体 */
{
char name[ NAMESIZE ]; /* 氏名 */
char tel[ TELSIZE ]; /* 電話番号 */
struct List *next; /* 次の電話帳のアドレス */
} List;

List *input( List *head ); /* データを入力する関数 */
    ・
int main(void)
{
List *list,*head;
char command = '\0';

head = load( head );
while( 1 )
{
printf( "コマンドを入力してください\n" );
printf( "入力(I),削除(D),表示(P),終了(E): ");

command = getchar();
while( getchar() != '\n');

switch( command )
{
case 'I':
case 'i':
head = input( head );
              ・
よろしくおねがいします。
677 :デフォルトの名無しさん2011/05/30(月) 15:54:02.58
>>662〜>>663
どうにかお願いできないでしょうか?
669 :6472011/05/30(月) 11:37:09.52
s[]には各項目が実行された回数が入ってると思うのですが

シェルソートと交換回数は同じになると思のですが、交換回数と思われるs[7]で降順だけとても大きな数になるのはなぜでしょうか?
また比較回数はどこにあたるのでしょうか?

よろしくお願いします
674 : ◆Iw3CQ.CfHS9w 2011/05/30(月) 14:31:15.30
++s[6] &&
↑いらない >>669
s[5]++; if (a[j] < min) {
s[6]++; min = a[j];
s[7]++; k = j;
 }
}
s[8]++; t = a[minIdx]; a[minIdx] = a[i]; a[i] = t;
676 :デフォルトの名無しさん2011/05/30(月) 15:28:03.09
ありがとうございます
プログラム修正したのですが
シェル
http://ideone.com/whXyL
選択
http://ideone.com/Cl39G

昇順で0になるので
比較回数はランダム2399 昇順0 降順62500
交換回数はn - 1 でどれも499でいいのでしょうか?
679 : 忍法帖【Lv=1,xxxP】 674 ◆/91kCCQXBo 2011/05/30(月) 16:04:57.42
比較  回数はどれも124750 ?{i=1,n-1} i
比較成功回数はランダム2399 昇順0 降順62500
交換  回数はどれも499 n-1
681 :デフォルトの名無しさん2011/05/30(月) 16:25:04.23
1.言語/環境
C / Linux

2.問題文
あるアルファベットの文字列中に出現する「a」の出現数を表示するプログラムを作れ。

3.条件
アルファベットの文字列は確実適当にプログラム内に作ること。

26文字全てのアルファベットの出現数を保持する配列を作ること。

大文字、小文字は区別しない。



宜しくお願いします。
685 :デフォルトの名無しさん2011/05/30(月) 20:55:21.55
内容:
[1] 授業単元:課題
[2] 問題文:次に示す関数はどのような計算、処理を行うものか説明せよ。
問1.1
int sum(int start, int end)
{
int ans;
inti;
ans = 0;
for(i = start; i <= end; i++){
ans = ans + i;
}
return ans;
}
問1.2
int is_number(char c)
{
if('0' <= c && c <= '9'){
return 1;
}
else{
return 0;
}
}
[3] 環境
 [3.1]Linux
 [3.2]gcc
 [3.3] 言語:C
[4] 期限:本日中
686 :デフォルトの名無しさん2011/05/30(月) 21:14:33.16
[1] 授業単元:課題
[2] 問題文:問3.1次の関数を作成せよ。
/*xとyのうち小さいほうを返す*/
double min2(double x, double y)
問4.1
問3.1の関数min2を利用して4つの実数値から最小の値を返す関数min4を作成せよ。
/*w,x,y,z*/
double min4(double w, double x, double y, double z)
問4.2
関数の効能が3つ挙げられている。関数の効能がどのようなものか問4.1の関数min4の作成を具体例として挙げて説明せよ。

1.関数単位で手続きをまとめることにより、プログラム全体を見通しよく構成することができる
2.関数にまとめられた手続きは手続きの詳細を知らなくても呼び出すだけで簡単に利用できる
3.よく使う手続きを関数の形にまとめておき何度でも再利用できる
[3] 環境
 [3.1]Linux
 [3.2]gcc
 [3.3] 言語:C
[4] 期限:本日中
687 :デフォルトの名無しさん2011/05/30(月) 21:21:29.22
1.1:startからendまでの総和を計算する
1.2:文字cが数字なら1を0を返す
688 :デフォルトの名無しさん2011/05/30(月) 21:26:43.94
[1] 授業単元:課題
[2] 問題文:問2次のプログラムにTEL:(0561)89-2111を入力したときの実行結果を書け。
#include<stdio.h>
int main(void)
{
char string[128];
char *strPtr;
printf("文字?");
scanf("%s",string);
for(strPtr = string;*strPtr != '\0';strPtr++){
if(is_number(*strPtr)){//前レスの問1.2の関数
*strPtr = '#';
}
}
printf("%s\n",string);
return 0;
}
[3] 環境
 [3.1]Linux
 [3.2]gcc
 [3.3] 言語:C
[4] 期限:本日中
691 :デフォルトの名無しさん2011/05/30(月) 21:52:42.20
前レスの問2でTEL:(0561)89-2000を入力したときの結果もよろしくお願いします。
またなぜそのような結果になるのか教えてもらえないでしょうか?
694 :デフォルトの名無しさん2011/05/30(月) 22:04:26.43
/* xとyのうち小さいほうを返す関数 */
double min2(double x, double y)
{
  if(x<y) return x;
  else return y;
}
/* 関数min2を利用して4つの実数値から最小の値を返す関数 */
double min4(double w, double x, double y, double z)
{
  return min2(min2(w,x), min2(y,z));
}
696 :デフォルトの名無しさん2011/05/30(月) 22:27:45.94
[1] 授業単元:課題
[2] 問題文:
関数の効能が3つ挙げられている。関数の効能がどのようなものか前レスの問4.1の関数min4の作成を具体例として挙げて説明せよ。
1.関数単位で手続きをまとめることにより、プログラム全体を見通しよく構成することができる
2.関数にまとめられた手続きは手続きの詳細を知らなくても呼び出すだけで簡単に利用できる
3.よく使う手続きを関数の形にまとめておき何度でも再利用できる
[3] 環境
 [3.1]Linux
 [3.2]gcc
 [3.3] 言語:C
[4] 期限:本日中

マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006
マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006