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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けない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://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【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++の宿題片付けます 135代目
http://pc12.2ch.net/test/read.cgi/tech/1269438098/
2デフォルトの名無しさん:2010/05/26(水) 12:04:44
[1] 授業単元:プログラミング演習
[2] 問題文:単価と数量を入力するごとに金額を表示し、データ入力終了後合計金額と、千円札のみで払う場合の枚数と釣り銭を表示しなさい。なお、入力データのの終わりは単価0とする。
実行例
300 2         <ーーデータ入力
300*2=600円     <ー表示
250 5
250*5=1250円
100 1
100*1=100円
1500 2
1500*2=3000円
350 4
350*4=1400円
0 0         <ーーデータの終わり
合計金額 6350円   <ーー合計表示
1000円札 7枚     <ーー1000円札の枚数表示
釣り銭 650円     <ーー釣り銭の金額表示

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4]期限:26日PM10:00
[5]その他制限: printf int while scanf float for
今まで習ったのはコレくらいです。今回もよろしくお願いします。
3デフォルトの名無しさん:2010/05/26(水) 12:40:38
>>2
前スレまだ残っているが。0 0の時の出力はない方がいいなら、
if ( tanka != 0 )
を、小計出力の前に置けばいい。

int main()
{
    int tanka, kosu, shokei; // 単価 個数 小計
    int maisu, gokei = 0; // お札枚数, 合計
    do {
        scanf("%d", &tanka);
        scanf("%d", &kosu);
        shokei = tanka * kosu;
        gokei += shokei;
        printf("%d * %d = %d 円\n", tanka, kosu, shokei);
    } while ( tanka != 0 );
    printf("合計金額 %d円\n", gokei);
    maisu = gokei/1000 + 1;
    printf("1000円札 %d枚\n", maisu);
    printf("お釣り %d円", maisu*1000 - gokei);
}
4デフォルトの名無しさん:2010/05/26(水) 22:48:48
>>3
ありがとうございます!!
新レスについ、スレしてしまいました;;
5デフォルトの名無しさん:2010/05/26(水) 23:39:12
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
以下の実行結果になるようおねがいします

文字列を入力してください
adlkjgeiakdalf

確認したい文字を入力してください
a

文字(a)の数は3文字です



[3] 環境
 [3.1] OS: Windows
 [3.2] gcc 3.4
 [3.3] 言語:C
[4] 期限:できる限り早くおねがいしますorz
[5] その他の制限: 一次元二次元配列まで習いました
6デフォルトの名無しさん:2010/05/27(木) 00:21:54
7デフォルトの名無しさん:2010/05/27(木) 00:37:35
前スレで同じ質問したのですが
行列の積を計算するプログラムのコードを提出という課題が学校で出たのですが
前スレでは初期化していない事と添え字がずれていると指摘されたのですが、それを直しても下の実行結果でした
n (n<=10) の値を入力して下さい。
2
行列aの1行1列の値を入力して下さい。
1
行列aの1行2列の値を入力して下さい。
2
行列aの2行1列の値を入力して下さい。
3
行列aの2行2列の値を入力して下さい。
4
行列bの1行1列の値を入力して下さい。
1
行列bの1行2列の値を入力して下さい。
2
行列bの2行1列の値を入力して下さい。
3
行列bの2行2列の値を入力して下さい。
4
c[0][0] = 10551303
c[0][1] = 4106
c[1][0] = 15
c[1][1] = 29
8デフォルトの名無しさん:2010/05/27(木) 00:52:18
>>7
ちゃんと↓のまま試した?
http://codepad.org/ZsuxxDc6

そのまま試していれば、この添え字にはならないと思うんだけど
c[0][0] = 10551303
c[0][1] = 4106
c[1][0] = 15
c[1][1] = 29
9デフォルトの名無しさん:2010/05/27(木) 11:31:31
質問中に大変申し訳ありません。

ここに気付かずに重複スレ立ててしまいました。すみません。
http://pc12.2ch.net/test/read.cgi/tech/1274926862/

前スレの消化速度はおおよそ2ヶ月でしたが、削除依頼すべきか、再利用するのか。
これまでのケースを知りませんので、ご意見を伺いたく思います。
10デフォルトの名無しさん:2010/05/27(木) 12:05:08
>>008
#include<stdio.h>
int main (void)
{
  int i,j,k,n;
  int a[10][10],b[10][10],c[10][10];
  printf("n (n<=10) の値を入力して下さい。\n");
  scanf("%d",&n);
  for(i=1;i<=n;i++) { for(j=1;j<=n;j++) {
    printf("行列aの%d行%d列の値を入力して下さい。\n",i,j);scanf("%d",&a[i-1][j-1]);}}
  for(i=1;i<=n;i++) { for(j=1;j<=n;j++) {
    printf("行列bの%d行%d列の値を入力して下さい。\n",i,j);scanf("%d",&b[i-1][j-1]);} }
//  for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { for(k=0;k<=n;k++){
  for(i=0;i<n;i++) { for(j=0;j<n;j++) { c[i][j] = 0; for(k=0;k<n;k++){
    c[i][j] += a[i][k] * b[k][j];}}}
//  for(i=0;i<=n;i++){for(j=0;j<=n;j++){
  for(i=0;i<n;i++){for(j=0;j<n;j++){
    printf("c[%d][%d] = %d\n",i,j,c[i][j]);}}
  return 0;
}
>>009 が、おせっかいな人=あわて者
982 が焦ったということで。
11デフォルトの名無しさん:2010/05/27(木) 15:24:48
>>9
落ちてなければ次スレとして使えばいいさ
検索で飛んでくる人はどっちにいくか知らないけどw
12デフォルトの名無しさん:2010/05/27(木) 18:16:43
RGBで虹色のグラデーションを作るプログラムを3行以内で教えてくだしあ><
13デフォルトの名無しさん:2010/05/27(木) 19:16:30
虹色の7色っていうのは何らかの規則性があるのでしょうか
自分で1つ1つ色を指定していなかくてはいけないのですか??
14デフォルトの名無しさん:2010/05/27(木) 19:18:36
国によって虹の色の考え方は違う
15デフォルトの名無しさん:2010/05/27(木) 19:43:46
>>12
なんとか三行になったぞw
int f(int x){int y;x%=1024;y=x/256;z=x%256;if(y==0)return 0;if(y==1)return z;
if(y==2)return 255;return 255-z;}
long col(int x){if(x<0||896<x)return 0;return f(x+512)<<16+f(x+256)<<8+f(x);}
16 ◆/91kCCQXBo :2010/05/27(木) 20:11:37
>>015 1/30 でバンドになるから、30*30で表示してみた。いいぞ。
#include <stdio.h>
int f(int x){
  int y, z;
  x%=1024;y=x/256;z=x%256;
  if(y==0)return 0;
  if(y==1)return z;
  if(y==2)return 255;
  return 255-z;
}
long col(int x){
  if(x<0||896<x)return 0;
  return (f(x+512)<<16) + (f(x+256)<<8) + f(x);
}
int main(void){
  int i, j;
  printf("Content-type: text/html\n\n");
/* ここから3行 */
  printf("<html><body><table width=200 height=200>\n"); for(i=0;i<30;i++){ printf("<tr>\n");
  for(j=0;j<30;j++) printf("<td bgcolor=\"#%06LX\"></td>", col(i*30+j));
  printf("</tr>\n");} printf("</table></body></html>\n");
/* ここまで */
}
17デフォルトの名無しさん:2010/05/27(木) 20:33:16
>>16
そりゃ三日三晩考え抜いたからな
18デフォルトの名無しさん:2010/05/27(木) 22:51:06
7行プログラムスレでやれw
19デフォルトの名無しさん:2010/05/27(木) 23:28:09
>>6
ありがとうございます!!助かりました
209:2010/05/28(金) 07:33:53
先日のうっかり者です。
ここはスレ立てに関していい意味で緩いようですので、再利用不可の単発でもないので残すことにいたします。
もしも落ちていなければ、次スレにでも隔離スレにでも何なりと使ってください。以上です。
質問メインのスレでお騒がせしいたしました。それでは失礼いたします。
21デフォルトの名無しさん:2010/05/28(金) 11:21:43
いいってことよ
22デフォルトの名無しさん:2010/05/28(金) 11:52:21
↑自演
23デフォルトの名無しさん:2010/05/28(金) 12:00:29
スレタイって主以外でも変えられるのかな。できないとすると使い物にならないけど。
24デフォルトの名無しさん:2010/05/28(金) 12:06:23
主が立てた人って意味なら主でも変えられないよ
25デフォルトの名無しさん:2010/05/28(金) 17:23:50
なんかインターネット創成期みたいな会話だな
26デフォルトの名無しさん:2010/05/28(金) 18:19:59
インターネット創成期にこんな高度な会話してる人がいたらびっくりするね
27デフォルトの名無しさん:2010/05/28(金) 19:11:17
>>23
馬鹿?
28デフォルトの名無しさん:2010/05/29(土) 08:34:07
猫、以下の話だが↓この結果が

#include<stdio.h>
main(){
int i;
for(i=1;i<6;i++)
printf("%*d\n",i,i);
}

↓こうなるように誰かお願いします。

@
 @
  @
   @
    @
   @
  @
 @
@
29デフォルトの名無しさん:2010/05/29(土) 09:43:46
// 描画
#include <stdio.h>
#define N 6
int main(void){
  int i;
  for(i=1; i<N; i++)
    printf("%*d\n", i, i);
  for(i-=2; i>0; i--)
    printf("%*d\n", i, i);
  return 0;
}
30デフォルトの名無しさん:2010/05/29(土) 11:58:25
無駄にループを一つにしてみた。
#include <stdio.h>

int main(void)
{
int i, j = 1;

for(i=1; i > 0; i += j) {
if(i==5) j = -1;
printf("%*d\n", i, i);
}

return 0;
}
31デフォルトの名無しさん:2010/05/29(土) 12:35:17
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10625.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2010年6月2日まで
[5] その他の制限:なし
2問ありますが、よろしくお願いします。
32デフォルトの名無しさん:2010/05/29(土) 13:06:45
>29 >30
ありがとうございます。数字が@に変身すると、もっとありがとうなんですが。
がんばって立派な大学生になります。
33デフォルトの名無しさん:2010/05/29(土) 13:09:27
>>31
【1】
(1) print_g(&t);
(2) x = (t->a.x + t->b.x + t->c.x) / 3;
(3) y = (t->a.y + t->b.y + t->c.y) / 3;

【2】
(1) return 1;
(2) return car(head) * fact(cdr(head));
34デフォルトの名無しさん:2010/05/29(土) 13:16:32
>>32
printf("%*d\n", i, i) → printf("%*c", i, '@');
35デフォルトの名無しさん:2010/05/29(土) 13:52:28
>34
まじ、ありがとうございました。
36デフォルトの名無しさん:2010/05/29(土) 14:06:54
[1]授業単元:プログラミング演習
[2]問題文:たしてちょうど15になる7個の自然数の組合せをすべて列挙し、、
すべての組合せを表示し終えた後にそれらの組合せが全部でいくつあるの
かも出力するプログラムを作れ。

[3]
[3.1]OS:windows7
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C++

[4]期限:2010年6月1日まで
[5]できればfor文orwhile文(他の文が一部混ぜっていてもいい)

お願いします。
37デフォルトの名無しさん:2010/05/29(土) 14:08:59
元のスレの答えで十分だろ
38デフォルトの名無しさん:2010/05/29(土) 14:14:27
test
39デフォルトの名無しさん:2010/05/29(土) 14:22:22
http://qb5.2ch.net/operate/
テストするな
40デフォルトの名無しさん:2010/05/29(土) 14:47:34
>>36 for文も使ってある
#include <stdio.h>

void hoge(int *count, int result[], int left_num, int min_num, int rest){
int i;

if(rest<=1)
{
result[0]=left_num;
for(i=0;i<7;i++) printf(" %d", result[i]);
printf("\n");
*count+=1;
return;
}

for(i=min_num;i<=left_num/rest;i++)
{
result[rest-1]=i;
hoge(count, result, left_num-i, i, rest-1);
}
}

int huga(void){
int count=0, result[7];

hoge(&count, result, 15, 1, 7);
return count;
}

int main(void){
printf("%d\n", huga());
}
41デフォルトの名無しさん:2010/05/29(土) 15:01:03
>>40
ありがとうございます。
42デフォルトの名無しさん:2010/05/29(土) 23:48:19
>>33
ありがとうございました。
43デフォルトの名無しさん:2010/05/30(日) 00:27:48
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10627.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2010年5月31日8:30まで
[5] その他の制限:step通りに作成

よろしくお願いします。
44デフォルトの名無しさん:2010/05/30(日) 11:39:25
>>43
5目並べなのか10目並べなのかはっきりしてほしい
45デフォルトの名無しさん:2010/05/30(日) 11:43:18
どこをどう読んだら10目並べなんてものが出てくるのかw
46デフォルトの名無しさん:2010/05/30(日) 11:44:56
>>45
これ
[step1]'十','−’,'|’などの文字を使って五目並べをするための10行10列の格子枠をキャラク
   タモードで表示する。関数化(関数名waku)しておく。(注意:この格子枠を表示するのが
   難しければ、列を表す最上端の数字1〜1Oと、各行の左端に行を現す数字1〜10を表示
   すること)
1 2 ・・・・・10
+−−−+−−−+・・・
1 |

2 |
47デフォルトの名無しさん:2010/05/30(日) 11:53:38
五目並べをする盤のサイズが10*10なだけにしか読めないが。
48デフォルトの名無しさん:2010/05/30(日) 12:00:06
そうだな、ルールを勘違いしてた
49デフォルトの名無しさん:2010/05/30(日) 15:56:54
50デフォルトの名無しさん:2010/05/30(日) 16:03:12
AとBとでループ2つってのは微妙
51デフォルトの名無しさん:2010/05/30(日) 16:08:01
>>49
ありがとうございました。
52デフォルトの名無しさん:2010/05/30(日) 16:26:57
>>49
斜めの判定の実装で悪戦苦闘しているうちに先越された!
くやしい! でも感じちゃう。
53デフォルトの名無しさん:2010/05/30(日) 16:34:29
>>49
そう思ったなら自分で改造してみるのがプログラマってもんでしょう!
…負け惜しみじゃないですよ^q^
54デフォルトの名無しさん:2010/05/30(日) 16:35:13
アンカミス…
>>53>>50宛です
55デフォルトの名無しさん:2010/05/30(日) 16:45:00
案外すぐ直せたので直しました

void main() {
int x, y, player = 1;
char buf[32];

waku(0, 0, 0);
for (;;) {
do {
printf("%sさん次の手を入力しなさい\n", koma[player]);
fgets(buf, MAX_BUF, stdin);
} while (inputToVector(buf, &x, &y));
waku(x, y, player);
if (narabi(x, y, player)) {
printf("%sさんの勝ち\n", koma[player]);
break;
}

player = 3 - player;
}
}
56デフォルトの名無しさん:2010/05/30(日) 16:53:04
質問1に答えやすくしてるのかと思ったけどそうじゃなかったのか
57デフォルトの名無しさん:2010/05/30(日) 17:08:08
最初はそのつもりだったけど>>50に指摘された時点ではすっかり忘れてたw
58デフォルトの名無しさん:2010/05/31(月) 16:59:42
[1] 授業単元:C言語プログラミング
[2] 問題文:10進数を2進数に変換するプログラムをC言語でつくれ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日の昼
[5] その他の制限: 制限はありませんが基本的な構造でお願いします
59デフォルトの名無しさん:2010/05/31(月) 17:19:47
60デフォルトの名無しさん:2010/05/31(月) 17:27:04
>>59
ありがとうございます。

制限に書き忘れましたができればビット演算子は無しでお願いします。
61デフォルトの名無しさん:2010/05/31(月) 17:34:16
どこにビット演算子が
62デフォルトの名無しさん:2010/05/31(月) 17:55:43
>>59
短くしてみたw
http://codepad.org/4clJto84
再帰でリバースを排除
これで提出はしない方がいいと思うけど
63デフォルトの名無しさん:2010/05/31(月) 18:19:35
>>62
さらに
負号で負数にも対応
http://codepad.org/A6omw7NU

むしろ
ビット演算子を使った場合(この環境では負数は2の補数表現であることがわかる)
http://codepad.org/I4sjhz4A
64デフォルトの名無しさん:2010/05/31(月) 18:41:54
簡単な問題だとレスがたくさん付くなw
65デフォルトの名無しさん:2010/05/31(月) 18:49:24
たくさんも何も一人しか答えてないんじゃ?
66デフォルトの名無しさん:2010/05/31(月) 18:51:42
>>62
再帰呼び出しの必要のない時は使わないのが吉
67デフォルトの名無しさん:2010/05/31(月) 19:00:42
>>64
そうそう、これが「4元1次方程式を解け」とか「ルンゲ・クッタ法で」とかだったら、とたんに放置されてしまうんですよね。
68デフォルトの名無しさん:2010/05/31(月) 19:01:39
放置+void main()議論でごまかす
69デフォルトの名無しさん:2010/05/31(月) 19:06:22
>>68
void main() 議論は宿題がでなかった時期に燃えたのでは?
70デフォルトの名無しさん:2010/05/31(月) 19:21:35
>>69
よく見るとそうだな
でも、数独議論でごまかすはあったようなきがする
71デフォルトの名無しさん:2010/05/31(月) 19:42:49
数独は英語が読めないバカだったかバブルソートも知らないアホだったかが
スレを流そうとしてたんじゃねーの?w
72デフォルトの名無しさん:2010/05/31(月) 20:43:55
C++の宿題出してくれ
73デフォルトの名無しさん:2010/05/31(月) 21:02:19
自分自身を出力するソースコードをお願いします
74デフォルトの名無しさん:2010/05/31(月) 21:06:26
ググればみつかるだろ
75デフォルトの名無しさん:2010/05/31(月) 21:44:04
[1] 授業単元:C言語プログラミング
[2] 問題文:コマンドライン引数に指定された文字列それぞれが
16進数表記で表された0以上100万以下の整数であ
るをことをチェックした後、それを12進数に
変換したものを表示するプログラムをつくれ
16進数表記の先頭の0xはなくても良いがあってもエラーに
してはならない。16進数表記になっていない、あるいは
指定された範囲に無い場合はその旨表示する。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual C++.NET 2008
 [3.3] 言語: C
[4] 期限: 明日の夕方
[5] その他の制限:
stdio.hをincludeできる。
そこで定義されている関数のみ標準関数として使用できる
標準関数以外で定義して使用できるものは1個に限るものとする。
グローバル変数は使用してはならない
各関数のローカル変数は2個まで使用できる。配列は使えない。
構造体、共用体 else文を使ってはならない。
76デフォルトの名無しさん:2010/05/31(月) 21:48:53
制限めんどくさくてやる気しないw
77デフォルトの名無しさん:2010/05/31(月) 21:49:14
やってみようと思ったが制限が厳しすぎて一気にやる気がなくなった
まぁ、可能なんだろうけど
78デフォルトの名無しさん:2010/05/31(月) 21:50:59
意訳すると
「やる気がない」=「できない」
79デフォルトの名無しさん:2010/05/31(月) 21:54:24
>標準関数以外で定義して使用できるものは1個に限るものとする。

これって自作関数1個しか作っちゃいけないってことか?
メイン一つと自作関数一つ、それぞれローカル変数2個だけってかなり厳しくないか?
80デフォルトの名無しさん:2010/05/31(月) 21:55:38
main定義したら終わりじゃね
81デフォルトの名無しさん:2010/05/31(月) 21:57:20
仮引数ってローカル変数扱いだから、メインで他の変数宣言しちゃだめじゃんw
82デフォルトの名無しさん:2010/05/31(月) 22:01:55
83デフォルトの名無しさん:2010/05/31(月) 22:05:12
>>80
暗黙のうちに、main関数以外で自作できるのは1つだけ
でいいんぢゃね?
あと引数は、C言語教室的にはローカル変数とは区別されるだろ?
{}の中で定義される変数のことなんだろから
84デフォルトの名無しさん:2010/05/31(月) 22:07:34
#include<stdio.h>

int main(int argc, char *argv[]){
long x, y=0;

if(argc<2){
printf("\nエラー:コマンドライン引数を指定してください\n");
return 1;
}
if(sscanf(argv[1], "0x%lx", &x)!=1){
if(sscanf(argv[1], "%lx", &x)!=1){
printf("\nエラー:十六進数ではありません\n");
return 2;
}
}
if(x<0 || 1000000<x){
printf("\nエラー:値が範囲外です\n");
return 3;
}
y+=(x/(1*12*12*12*12*12))%12<<20;
y+=(x/(1*12*12*12*12))%12<<16;
y+=(x/(1*12*12*12))%12<<12;
y+=(x/(1*12*12))%12<<8;
y+=(x/(1*12))%12<<4;
y+=(x/(1))%12;
printf("%lx\n", y);

return 0;
}
85デフォルトの名無しさん:2010/05/31(月) 22:07:45
ずいぶん厳しい制限だなぁこれ。
86デフォルトの名無しさん:2010/05/31(月) 22:11:41
>>84
文字列は一つじゃないみたいだけど
87デフォルトの名無しさん:2010/05/31(月) 22:12:36
strtolってstdlibか
まんどくせ
88デフォルトの名無しさん:2010/05/31(月) 22:18:31
>>86
y使い回せばよくね
89デフォルトの名無しさん:2010/05/31(月) 22:19:04
#include<stdio.h>
long func(long x){
long y=0;

y+=(x/(1*12*12*12*12*12))%12<<20;
y+=(x/(1*12*12*12*12))%12<<16;
y+=(x/(1*12*12*12))%12<<12;
y+=(x/(1*12*12))%12<<8;
y+=(x/(1*12))%12<<4;
y+=(x/(1))%12;
return y;
}
int main(int argc, char *argv[]){
long i, x;

for(i=1;i<argc;i++){
if(sscanf(argv[i], "0x%lx", &x)!=1){
if(sscanf(argv[i], "%lx", &x)!=1){
printf("\nエラー:十六進数ではありません. %s\n", argv[i]);
continue;
}
}
if(x<0 || 1000000<x){
printf("\nエラー:値が範囲外です. %ld\n", x);
continue;
}
printf("%s -> %lx\n", argv[i], func(x));
}
return 0;
}
90デフォルトの名無しさん:2010/05/31(月) 22:20:47
sscanf()って前の一部が条件満たすと読み込めちゃうんだよな。
91デフォルトの名無しさん:2010/05/31(月) 23:11:12
>>75
http://codepad.org/NrlIZHVT

>>90の問題にも対応したぞ
92デフォルトの名無しさん:2010/05/31(月) 23:17:17
[1] 授業単元:応用プログラム〜C言語講座
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10633.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限: 2010年6月1日15時まで

よろしくお願いします
93デフォルトの名無しさん:2010/05/31(月) 23:45:53
これが12進数じゃなくて8進数とか6進数とかだったら
お手上げだな
94デフォルトの名無しさん:2010/05/31(月) 23:49:53
>>93
なんでそう思うの?
95デフォルトの名無しさん:2010/05/31(月) 23:54:04
96デフォルトの名無しさん:2010/05/31(月) 23:54:44
先程はありがとうございました。

たびたび申し訳ありません。


[1] 授業単元:C言語プログラミング
[2] 問題文:引数に与えられた10進数を2進数に変換し表示するするプログラムをC言語でつくれ       
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日の昼
[5] その他の制限: 制限はありませんが基本的な構造でお願いします
97デフォルトの名無しさん:2010/05/31(月) 23:59:32
>>96
ありがとうございます
98デフォルトの名無しさん:2010/06/01(火) 00:02:17
安価ミスです

>>95
ありがとうございます
99デフォルトの名無しさん:2010/06/01(火) 00:03:50
100デフォルトの名無しさん:2010/06/01(火) 00:06:54
101デフォルトの名無しさん:2010/06/01(火) 00:15:44
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
n元連立1次方程式を解き,掃き出し法により求まる係数マトリクスの逆行列と解ベクトルを表示するプログラムを作れ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語:C++
[4] 期限: 2010年6月3日15:00頃まで
[5] その他の制限: 出来るだけ基本的な方法でお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10637.txt

時間がなくなってきたので質問させていただきました。
自分なりにC++を扱うホームページの逆行列のプログラムを参考に、あまり分からないながら作ったのが下のプログラムです。
メモリやn次元の定義等は講義中で習っていないので良くわからないのですが、解を代入して求める未知数ベクトルを算出する作業が思うようにいきません。
URLのプログラムをうまい具合に変えて問題文の条件を満たすプログラムにして頂けると助かります。
またinclude<iostream>やcout、cinは授業の方では扱っていないので
include<stdio.h>の形でprintfやscanfを用いて作って頂けたら幸いです。
102デフォルトの名無しさん:2010/06/01(火) 00:21:46
C++の授業でiostreamでなくstdio.hを使わせるってのはどうなんだろう
せめてstdio.hでなくcstdioじゃないかいな
103デフォルトの名無しさん:2010/06/01(火) 01:56:27
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):整数を一つ入力してその数以下の素数をすべて出力するプログラムを作れ
[3] 環境
 [3.1] OS:WindowsVista
 [3.2] コンパイラ名とバージョン:Microsoft visual c++
 [3.3] 言語:C
[4] 期限:2010年6月3日
[5] その他の制限:基本的な構造でお願いします

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10639.txt
こう書いてみたらノートン先生が怒るんですけど
どうすればいいんですか?
104デフォルトの名無しさん:2010/06/01(火) 03:14:20
>>103
ノートン先生のSONARが怒っているんだろ?
だったら自分のコンパイル環境に問題がないと信じているのなら、
それが吐いた実行ファイルも信頼してやれ。
最近のSONARは過剰反応しすぎだ。
105デフォルトの名無しさん:2010/06/01(火) 03:23:16
>>103
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10640.c
修正点は、
・mを初期化
・2も素数
106デフォルトの名無しさん:2010/06/01(火) 03:25:15
>>104
最近じゃなく昔からだw

>>103
nに2以上が代入されたときにiのループの最初(i=2)はjのループを一回も回らない(j<i不成立)から
初期化されていないmと0とを比較しようとするので2が出力されるかどうかは運次第
107デフォルトの名無しさん:2010/06/01(火) 09:45:38
[1] 授業単元:応用プログラム〜C言語講座
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10641.txt
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限: 2010年6月1日まで

よろしくお願いします
108デフォルトの名無しさん:2010/06/01(火) 11:34:57
>>101
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10642.txt

もし問題があったら早めに知らせて下さい。
ちなみに演算結果は行列の教科書で検算して正しいことを確かめています。
逆行列が潰れる時(行列式が0の時)のチェックはしていません。
109デフォルトの名無しさん:2010/06/01(火) 13:23:09
>>107
やってみたけど俺には制限が厳し過ぎて_
http://ideone.com/OOoLr
110デフォルトの名無しさん:2010/06/01(火) 17:03:02
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):(1)x^2*cosx の0〜π/2までの積分 (2)(logx)^2
の1〜eまでの積分
[3] 環境
 [3.1] OS: Windows
 [3.2] visual c++
 [3.3] 言語: c++
[5] シンプソンの公式と台形公式を使っての数値積分をするプログラム
111デフォルトの名無しさん:2010/06/01(火) 17:34:42
112デフォルトの名無しさん:2010/06/01(火) 18:02:28
>>111
ありがとうございます
113デフォルトの名無しさん:2010/06/01(火) 18:19:04
[1] 授業単元: 情報システム学演習
[2] 問題文(含コード&リンク): http://uproda11.2ch-library.com/11244916.pdf.shtml
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: わからないのですが、
gcc -o というコマンドを使っています。
 [3.3] 言語: C
[4] 期限:2010年6月3日13:00まで
[5] その他の制限:制限というか、ヒント文みたいなのです。>>1のろだは容量オーバーで使えなかったので、別ろだです。
http://uproda11.2ch-library.com/11244915.pdf.shtml

切実に困っています。
よろしくお願いします。
114デフォルトの名無しさん:2010/06/01(火) 18:36:34
>>113
x-y 平面に展開せよ、とのことであるが、 x軸、y軸になにをわりあてるか、情報をください。
1) x: 時間t, y:θ(t)
2) x: 時間t, y:θ'(t)
3) x: θ(t), y:θ'(t)
どれもありそうです。
115デフォルトの名無しさん:2010/06/01(火) 19:52:00
宿題っていうかプログラム作成依頼スレみたいなのって無い?
116デフォルトの名無しさん:2010/06/01(火) 19:58:37
>>115
岡ちゃん乙
117デフォルトの名無しさん:2010/06/01(火) 21:09:26
>>115
ちゃんと払ってくれるのか?
118デフォルトの名無しさん:2010/06/02(水) 00:08:32
>>114
>>113です。
3つのデータを作って、そのあとgnuplotで2つ選んでレポートを書くという課題です。
なので、3つのデータをファイルで書き出せるようにしたいです…。
説明不足ですいません…
119デフォルトの名無しさん:2010/06/02(水) 00:18:35
それ、答えになってんの?
120デフォルトの名無しさん:2010/06/02(水) 00:22:37
[1] 授業単元:プログラミング演習
[2] 問題文:整数nを入力し、以下のようになサイズnの”Z型の図形”を”*”で表示するプログラムを作成しなさい。
ただし、図形を表示するためのnの値は3以上とし、2以下の値が入力された場合は処理を終了する様にしなさい。
[実行例]
3      <-n入力
n=3
***
 *
***
4 <-n入力
n=4
****
   *
  *
****  
8 <-n入力
n=8
********
         *
        *
       *
     *
   *
  *
********
2
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4]期限:6/2日PM10:00
[5]その他制限: printf int while scanf float for のみ使用、2重ループ必
121デフォルトの名無しさん:2010/06/02(水) 00:34:47
#include <stdio.h>

int main(void)
{
int i, j, n;

while(1) {
scanf("%d", &n);
if(n <= 2) break;
printf("n = %d\n", n);

for(i=1; i<=n; i++) {
for(j=0; j<n; j++) printf("%c", i==1||i==n||i+j==n ? '*' : ' ');
printf("\n");
}}

return 0;
}
122デフォルトの名無しさん:2010/06/02(水) 08:46:34
厳密にはcの宿題と言えないかもしれないんですが、宜しくお願いします。
cをコンパイルしてできたexeを起動して、プログラムの中で起きてる割り込みを調べるには
どのようなコマンドや方法で調べればいいのでしょうか?
123デフォルトの名無しさん:2010/06/02(水) 15:58:49
[1] 授業単元: デバイス情報処理
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10644.zip
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語:C++
124デフォルトの名無しさん:2010/06/02(水) 16:02:24
>>123
字が小さすぎて区別できない
125デフォルトの名無しさん:2010/06/02(水) 16:04:27
>>124
すみません、もっと大きな画像を貼れるアップローダを探してきます。
126デフォルトの名無しさん:2010/06/02(水) 16:14:22
>>124
http://www1.axfc.net/uploader/Img/link.pl?dr=7990810177&file=Img_84299.jpg
多少大きなサイズにできたと思います。
127デフォルトの名無しさん:2010/06/02(水) 17:53:56
>>121
書いていただきありがたいのですが
制限がprintf int while scanf float for のみ使用、2重ループ必
なので、breakは使用できません。
説明が曖昧でスミマソ
128デフォルトの名無しさん:2010/06/02(水) 17:57:13
ちょっと条件はっきりしないんだけど、nは入力するごとにプログラムが終了するのか、
>>121みたいに2以下が入力するまで繰り返し入力するのか、どっち?
129デフォルトの名無しさん:2010/06/02(水) 18:07:56
>>127
- if(n <= 2) break;
+ if(n <= 2) return 0;
130デフォルトの名無しさん:2010/06/02(水) 18:11:25
2以下を入力するまで繰り返しです
何度もすっ見ません;
131デフォルトの名無しさん:2010/06/02(水) 18:14:36
#include <stdio.h>
int main(void)
{
int i, j, n;
while(scanf("%d", &n)==1 && n > 2) for(i=1; i<=n; i++) for(j=0; j<=n; j++) printf("%c", j==n?'\n':i==1||i==n||i+j==n?'*':' ');
return 0;
}
132デフォルトの名無しさん:2010/06/02(水) 18:16:17
printf("n=%d\n", n)忘れたw

#include <stdio.h>
int main(void)
{
int i, j, n;
while(scanf("%d", &n)==1 && n > 2){
printf("n=%d\n", n);
for(i=1; i<=n; i++) for(j=0; j<=n; j++) printf("%c", j==n?'\n':i==1||i==n||i+j==n?'*':' ');}
return 0;
}
133デフォルトの名無しさん:2010/06/02(水) 18:20:45
>>132
ありがとうございます。!!
134デフォルトの名無しさん:2010/06/02(水) 18:28:02
いえいえ
135デフォルトの名無しさん:2010/06/02(水) 18:37:25
またお前か
136デフォルトの名無しさん:2010/06/02(水) 18:50:38
>>135-136
くだらん書き込みでスレを汚さんでくれ
137デフォルトの名無しさん:2010/06/02(水) 18:56:08
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10645.txt
[3] 環境
 [3.1] OS:WindowsVista
 [3.2] コンパイラ名とバージョン:Microsoft visual c++
 [3.3] 言語:C
[4] 期限:2010年6月3日8:00まで
[5] その他の制限:基本的な構造でお願いします
138デフォルトの名無しさん:2010/06/02(水) 19:04:11
>>137
「ポインタ配列」ってなんですか?
”配列へのポインタ”ですか?

というあたりを出題者に問うてください。
139デフォルトの名無しさん:2010/06/02(水) 19:06:28
ポインタの配列でしょう
140デフォルトの名無しさん:2010/06/02(水) 19:10:51
>>139
それだと話があわない。
141デフォルトの名無しさん:2010/06/02(水) 19:11:26
>>137
[1]
#include <stdio.h>

int main(void)
{
int i, a[5] = {1,2,3,4,5}, b[5] = {6,7,8,9,10}, *p[2];

p[0] = a;
p[1] = b;

for(i=0; i<5; i++) printf("%f ", (p[0][i] + p[1][i]) / 2.0);

return 0;
}
142デフォルトの名無しさん:2010/06/02(水) 19:15:25
void print(char **string, int n) { while(n--) puts(*string++); }
143 ◆QZaw55cn4c :2010/06/02(水) 19:23:15
144デフォルトの名無しさん:2010/06/02(水) 19:25:03
初期化は代入とは区別されるのが普通
145デフォルトの名無しさん:2010/06/02(水) 19:33:44
>>138=140は問題をどう解釈したのか気になる
146デフォルトの名無しさん:2010/06/02(水) 20:17:05
>>138
配列はANSI Cでもまとめて扱うことはできない。
だから”配列へのポインタ”と言うのは存在しない。
”配列の先頭要素へのポインタ”なら存在する。
147デフォルトの名無しさん:2010/06/02(水) 20:39:37
>>135
俺じゃないから別の人だよ。
148デフォルトの名無しさん:2010/06/02(水) 20:40:01
int (*p)[N];
pは要素数Nの配列へのポインタ
149デフォルトの名無しさん:2010/06/02(水) 20:40:56
>>146
またそういう物議をかもすレスをする。いいんだけどさ。
150デフォルトの名無しさん:2010/06/02(水) 20:48:56
>>102
やはり授業の延長だけでは難しいんですかね。
cstdioについて自分でも少し勉強してみます。

>>108
ありがとうございます。
動作に不具合はありませんでした。
こちらの要望にも沿ってお答え頂き大変助かりました。
151デフォルトの名無しさん:2010/06/02(水) 20:54:01
>>144
ん、古いC ならば理解できますが、auto な変数への初期化が OK となっている現在では差異がわかりません。
でも C++ の話はなしね。
152138 ◆QZaw55cn4c :2010/06/02(水) 20:57:27
>>145
いや、間違って解釈していました。
ごめんなさい。
153デフォルトの名無しさん:2010/06/02(水) 20:59:24
ほんと毎回毎回日本語読めない低脳だなw
154デフォルトの名無しさん:2010/06/02(水) 21:18:40
ちゃんと謝ったら謝ったでこの扱いか。厳しいスレだなあ。同情する。
155デフォルトの名無しさん:2010/06/02(水) 21:22:25
ささいなミスでも厳しく追求されるのがこのスレだぜ?w
156デフォルトの名無しさん:2010/06/02(水) 21:24:22
なに、馴れてます。どうせ自分では宿題のひとつもとけない人でしょうし。
157デフォルトの名無しさん:2010/06/02(水) 21:25:37
慣れる前に問題を正しく読めるようになってくれw
158デフォルトの名無しさん:2010/06/02(水) 21:26:57
ん、精進します。
159デフォルトの名無しさん:2010/06/02(水) 21:27:34
>>156
>>123=>>126 を解いてくれ
若干情報が落ちてるから半導体の勉強して無いと調べるのが面倒だけど
公式にあてはめるだけの問題だ
160デフォルトの名無しさん:2010/06/02(水) 21:28:37
トリつけるんならレス全部につけてくれないかな。
NGしやすくなるし。
161デフォルトの名無しさん:2010/06/02(水) 21:30:43
物性は専門ではないので、どう公式にあてはめればいいかわからないのです。ごめんなさい。
162デフォルトの名無しさん:2010/06/02(水) 21:34:18
163デフォルトの名無しさん:2010/06/02(水) 21:39:22
一行以上の文章が読めない人なのかもしれない
164デフォルトの名無しさん:2010/06/02(水) 21:56:47
[1] 授業単元:応用プログラム〜C言語講座
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10646.txt
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限: 2010年6月2日まで

できなくて困っております よろしくお願いします
165デフォルトの名無しさん:2010/06/02(水) 22:01:50
166デフォルトの名無しさん:2010/06/02(水) 22:06:39
>>165
>>109
ありがとうございます
167デフォルトの名無しさん:2010/06/02(水) 22:13:15
学校の先生ってやっぱバカがやってんだな。。
scanfとか平気で使わせるし、第一曖昧すぎる。
mainから呼び出すだけならwhileも使えないしどうやってやれっての。
168デフォルトの名無しさん:2010/06/02(水) 22:17:14
燕雀いずくんぞ鴻鵠の志を知らんや
169デフォルトの名無しさん:2010/06/02(水) 22:17:24
>>167
sanf() はよく批判されていますが、危険性のない使い方であればいいと思います。
170デフォルトの名無しさん:2010/06/02(水) 22:19:09
sed -e 's/sanf/scanf/'
171デフォルトの名無しさん:2010/06/02(水) 22:20:17
>>167
グローバル変数使いまくれば出来るんだけど
引数や戻り値を持つ意味がなくなる
172デフォルトの名無しさん:2010/06/02(水) 22:31:20
>>171
まったく。
なまじ分かる学生の方が悩むだろうな
173デフォルトの名無しさん:2010/06/02(水) 22:35:42
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
1、x[6]を宣言して、x[0]に5、x[1]に8、x[2]に6、x[3]に4、x[4]に1、x[5]に3を代入した後、ポインタを使って、x[0], x[2], x[4]の和と、x[1], x[3], x[5]の積を求めるプログラムを作成せよ。
2、与えられた文字数分だけ文字を一文字ずつ順に表示するprint関数を作成せよ。引数として文字列配列stringと整数nを用いること。ここで、stringは文字型配列の先頭アドレスを、nは表示する文字を意味する。
3、以下のmain分に従い、2つの文字列配列の中身を交換する関数exchangeを完成させよ。

int main(void){
char string1[] = "abcdefg";
char string2[] = "hijklmn";

printf("string1 = %s string2 = %s\n", string1, string2);
printf("exchange(string1, string2)");
exchange(string1, string2);
printf("string1 = %s string2 = %s\n", string1, string2);

return 0;
}
[3] 環境
 [3.1] OS:Win Vista
 [3.2] コンパイラ名とバージョン:VS 2008
 [3.3] 言語:C
[4] 期限:[2010年6月3日12:00まで]
[5] その他の制限:問題文で指定されていること以外は無し

よろしくお願いします
174デフォルトの名無しさん:2010/06/02(水) 23:12:28
>>173 [1]
#include <stdio.h>
int main(void){
  int x[6];

  x[0]=5, x[1]=8, x[2]=6, x[3]=4, x[4]=1, x[5]=3;
  printf("wa=%d\n", *(x) + *(x+2) + *(x+4) );
  printf("seki=%d\n", *(x+1) * *(x+3) * *(x+5) );
  return 0;
}
175デフォルトの名無しさん:2010/06/02(水) 23:15:55
>>173
1
int main(int argc, char ** argv)
{
  int x[6]={5,8,6,4,1,3};
  int *p = x;
  printf("sum = %d, mul =%d\n", (*p) + *(p + 2) + *(p + 4), *(p + 1) * (*(p + 3)) * (*(p + 5)));

  return 0;
}
2は意味がまったく分からない。
文字列配列ってのは文字配列の事か?普通に考えるとchar**になるが、それだともっと意味が分からない。
void myprintf(int n, char * string)
{
  int len = strlen(string);
  while(len--)putc(n);
}
ほい。(ほんとか?)

3.
void exchange(char *str1, char *str2)
{
  char buff[7];
  memcpy(buff, str1, 7);
  memcpy(str1, str2, 7);
  memcpy(str2, buff, 7);
}
176 ◆QZaw55cn4c :2010/06/02(水) 23:22:05
177デフォルトの名無しさん:2010/06/02(水) 23:22:41
>>174-176
ありがとうございます
178 ◆QZaw55cn4c :2010/06/02(水) 23:33:14
訂正一問目
http://codepad.org/AafTjGmU
179デフォルトの名無しさん:2010/06/03(木) 00:14:50
>>143
おいそれC++じゃないとコンパイルエラーになるぞ
>>137の[3.3]にはCと書いてあるんだが
180デフォルトの名無しさん:2010/06/03(木) 00:38:27
>>179
コンパイラは何をお使いで?
181デフォルトの名無しさん:2010/06/03(木) 00:46:26
>>180
コンパイラは関係ない

int *p[2] = {a, b};

これがC++でしか通らない
Cなら

int *p[2];
p[0] = a;
p[1] = b;

と書かなければならない
182デフォルトの名無しさん:2010/06/03(木) 00:48:00
>>180
gccの拡張を当てにすんなよ
183デフォルトの名無しさん:2010/06/03(木) 03:48:39
>>180
VC2.0で通りますかね
184 ◆QZaw55cn4c :2010/06/03(木) 04:17:55
>>179
おかしいですね。
gcc でも bcc32 でも cl でも駄目押しの lsi-c でも、コンパイルできましたが。
auto な配列への初期化は、最近の規格では OK ではないでしょうか。
185デフォルトの名無しさん:2010/06/03(木) 05:38:31
gccをつかって細かいこと気にしすぎな人用のコンパイルオプションつけてコンパイルできたらそれでいいよ
186デフォルトの名無しさん:2010/06/03(木) 08:22:26
>>184
cppじゃなくてcにしてみるとか。
187184:2010/06/03(木) 08:41:46
はい、拡張子は .c です。どのコンパイラでも問題なくコンパイルできます。
188デフォルトの名無しさん:2010/06/03(木) 09:53:13
>>181
勘違いしてるぞ
Cは初期化の時はもう値が決まっている定数ならば何でもよい
関数の戻り値だけがC++で拡張された
189デフォルトの名無しさん:2010/06/03(木) 13:32:44
>>188
なるほど、元のコードでは
static int a[] = { 0 };
static int b[] = { 0 };
int p[] = {a, b};
としてあり、 a, b, はコンパイル時には確定しているので auto な p への初期化は可能なんですね。
これを
int a[] = { 0 ];
int b[] = { 0 };
int p[] = {a, b};
とすると、a, b は実行するまではわからないから、コンパイルできないようですね。
190デフォルトの名無しさん:2010/06/03(木) 13:58:50
> int a[] = { 0 ];
> int b[] = { 0 };
> int p[] = {a, b};

・・・。
int *p[] = {a, b}; じゃないのか?
191デフォルトの名無しさん:2010/06/03(木) 14:44:11
>>190
なんで神妙な感じでそこにつっこみいれたんだろ。
流れ見てたらそれはtypoだと予想できる
192デフォルトの名無しさん:2010/06/03(木) 14:49:07
どうせなら]にも突っ込もうぜw
193デフォルトの名無しさん:2010/06/03(木) 15:26:06
>>189
そんな感じだね
C++ではコンパイルできてしまうから、Cでも出来ると思いがちだが
実は無理だという。

特に俺の場合staticは関数の呼び出し毎に値が変わって欲しくない
変数にしか付けないので、余計にエラーが出やすい。
194デフォルトの名無しさん:2010/06/03(木) 16:40:46
で、今回の場合はaとbがstaticであり、この場合にpをabで初期化することを咎めるのはありやなしや
195デフォルトの名無しさん:2010/06/03(木) 18:26:30
>>194
標準のCでは問題ない、ということですね。
196デフォルトの名無しさん:2010/06/03(木) 18:32:19
>>182
脊髄反射乙
付和雷同乙
197デフォルトの名無しさん:2010/06/03(木) 21:28:40
覚えたての格言や四字熟語を並べ立てて越に浸ってるやつなんなの
198デフォルトの名無しさん:2010/06/03(木) 21:30:27
「悦に浸る」だった。Google IMEって誤用とかも変換候補にあるから使いづらい。
199デフォルトの名無しさん:2010/06/03(木) 21:36:02
書き込み前に確認しなかった過失を棚に上げてGoogleIMEのせいにするやつってなんなの
使いづらいならやめればいいじゃん
200デフォルトの名無しさん:2010/06/03(木) 21:53:06
これがゆとりの実態です
経験値を得ることでモンペへと進化します
201デフォルトの名無しさん:2010/06/03(木) 22:01:05
GoogleでもIMEでもとにかく外人の作るソフトはウザイのがおおいな。
テキストボックスの中の文字列に編集を加えようとすると必ず全部選択する。
オレは神経をつかってカレットが狙ったところに来るようにクリックしてるんだがな!
202デフォルトの名無しさん:2010/06/03(木) 22:39:35
>>201
コピーしたいのに全選択がめんどくさいというゆとりのための仕様だよ
っていうか、業務系だと日本でも多々ある、というか、そういう要望がでてくるよ
言われたことない?
203デフォルトの名無しさん:2010/06/03(木) 23:39:04
#include<stdio.h>

int main(void)
{
int array[5][4];
int i,j;

for(i=0;i<4;i++){
for(j=0;j<3;j++){


printf("%d行%d列の要素を入力してください: ", i+1, j+1);
scanf("%d", &array[i][j]);

array[i][3] += array[i][j];
array[4][j] += array[i][j];
}
}
204デフォルトの名無しさん:2010/06/03(木) 23:42:10

for(i=0; i<5; ++i){
for(j=0; j<4; ++j){
printf( "%5d ", array[i][j] );
while(i==5){
printf( "%5d ", array[i][3] );
i++;
while(j==4){
printf( "%5d ", array[4][j]);
j++;
}
}

}
printf( "\n" );
}

「4行3列の配列をキーボードから読み込み、
各行、各列の和、及び配列全体の総和を求め、表示する
プログラムを作成しなさい。」という問題です。
途中まで作りましたが、出力が↓のようになってしまいます。どうすればいいんでしょうか?

1 3 2 -858993454
4 5 6 -858993445
2 4 7 -858993447
11 13 15 -858993421
858993442 -858993435 -858993430 -858993460
205デフォルトの名無しさん:2010/06/03(木) 23:47:25
言語はC++
環境はvisual C++ です。
あさってまでに提出しなければなりません。
206デフォルトの名無しさん:2010/06/03(木) 23:48:13
配列範囲外
207デフォルトの名無しさん:2010/06/03(木) 23:50:57
>>206
配列範囲外とはどういうことでしょうか?
208デフォルトの名無しさん:2010/06/03(木) 23:59:35
配列範囲内だが未初期化、というか、過大な領域を作っている
209デフォルトの名無しさん:2010/06/04(金) 00:02:17
>>208
どこが悪いんですか?修正の仕方を教えてもらえるとありがたいです。
210デフォルトの名無しさん:2010/06/04(金) 00:09:59
配列の範囲だっつってんだろ
211デフォルトの名無しさん:2010/06/04(金) 00:11:50
>>209
int array[5][4]={{0}};
212デフォルトの名無しさん:2010/06/04(金) 00:27:30
>>211
ありがとうございます。
おかげで総和以外は出力できました。

もう一つ、総和の計算と出力はどうすればいいんでしょうか?
213デフォルトの名無しさん:2010/06/04(金) 00:31:09
>>209
自分で作ってないからわかんないんだよ
文字列のクセで1個余分に、ってしたのかもしれないけどさ。
214デフォルトの名無しさん:2010/06/04(金) 00:33:57
あと一息だね ↓これが何してるのか知ってたらピンとくる
array[4][j] += array[i][j];
215デフォルトの名無しさん:2010/06/04(金) 06:37:13
ここって、プログラムができなくて授業についていけてない奴を、さらについていけなくさせるために
プログラムを全部作ってあげるスレだと思ってたけど、意外とみんな優しいんだね
216デフォルトの名無しさん:2010/06/04(金) 07:01:02
>>215
若い芽を摘むかのごとく、
全部教えて上げて、自分たちの食い扶持を維持するためのスレでもある。
217デフォルトの名無しさん:2010/06/04(金) 08:40:05
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
下記のアップロードされたファイル(数字の羅列)を読み込み、並び替え方法(昇順/降順)で指定されたファイル(out.txt)
へ出力するプログラムを作成せよ
http://www1.axfc.net/uploader/He/so/280605
以下実行結果

並び替え方法をしていしてください(1:昇順、2:降順)
1

並び替えたファイルへ出力しました。

cat out.txt ←catコマンドで中身確認
1
3
3
3
[3] 環境
 [3.1] OS:Win Vista
 [3.2] コンパイラ名とバージョン:GCC
 [3.3] 言語:C
[4] 期限:本日中

急で申し訳ないですがよろしくお願いします。
218デフォルトの名無しさん:2010/06/04(金) 09:34:27
授業すらついていけない奴は競争相手にもならんが
死ぬほど足を引っ張ってくれるので成敗しておく
219デフォルトの名無しさん:2010/06/04(金) 10:06:58
>>217
http://codepad.org/kpLdySlN

ソートはしないけど、入力例に限定的な解法。
入力が、非負でかつ1000未満の整数のみを仮定。
tableでカウントするとき、nのチェックしてなかった。
220デフォルトの名無しさん:2010/06/04(金) 10:09:56
そもそもからして、C言語記述課題に対して「解答」という
用語が適切か?
221デフォルトの名無しさん:2010/06/04(金) 10:11:44
>>220
頭を使わなくても解ける問題なら質問には来ない
すくなくとも回答ではない
222デフォルトの名無しさん:2010/06/04(金) 10:17:20
>>220
もとい文法やライブラリなどの制限があるから完全に自由ではない
のだがそれでも結果が殆ど同一(例えば数字だけとかキーワードだけ
とか)というわけではないんで解答とは言わないほうが良いよな...
だから>>221の言う通り回答というのもおかしい。
強いて言えば模範文例ってところなんだろな
223 ◆/91kCCQXBo :2010/06/04(金) 10:25:56
224デフォルトの名無しさん:2010/06/04(金) 10:43:33
>>219
これはひどいw
225デフォルトの名無しさん:2010/06/04(金) 10:46:47
せっかく上げてくれた模範文例を貶すのはやはりマナー違反
226デフォルトの名無しさん:2010/06/04(金) 11:00:03
間違ってても?
227デフォルトの名無しさん:2010/06/04(金) 11:22:22
コンパイラが文法違反とかはチェックしてくれるんで
「間違っている」という文章があがることはあまりない
文法以外の明示的暗黙的問わず存在する構文制限や
課題の意図に沿った文章になっているかどうかについては
100%そうであるとも言えないのは当然だが
228デフォルトの名無しさん:2010/06/04(金) 11:27:21
219を昇順・降順で実行して見てから言えよw
>>219はコンパイルできるけど、「間違った」プログラムだぞ
229デフォルトの名無しさん:2010/06/04(金) 12:18:36
[1] 授業単元:データベース論
[2] 問題文(含コード&リンク):サンプルデータから情報を取りだしその情報をstudents.txtとして出力するプログラムを組め
Students.txtの例は以下の通り
1 tanaka A
2 sano B
3 hori C

[3] 環境
 [3.1] OS:WindowsVista
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語:C++
[4] 期限: 2010年6月6日24:00
[5] その他の制限:
サンプルデータの形式はSqlite3、名前はstudents.sqlite3です。studentsテーブルを持ちそのテーブルはID(id)、学生の名前(name)、学生のクラス(class)を持っています。よろしくお願いします。
230 ◆/91kCCQXBo :2010/06/04(金) 13:20:49
231デフォルトの名無しさん:2010/06/04(金) 13:28:51
SQLite3 DataBase
232デフォルトの名無しさん:2010/06/04(金) 16:53:18
>>225
模範とならないものなら?
参考文例とでも読み替えておけばよいのかなー
233 ◆QZaw55cn4c :2010/06/04(金) 19:34:51
>>217
http://codepad.org/tSvtrgGL

>>225
そんなマナーがあるのですか?本当ですか?
間違っていたら、あるいは、間違っていなくても(>>143 に対する >>179, 結論は >>188)ネガティブな反応がありうることは覚悟しておくべきでしょう。
そのようなリスクが怖い弱虫なら回答しなければいいのです。
234デフォルトの名無しさん:2010/06/04(金) 19:43:18
リスクを気にせず間違えまくるアホはできれば回答しないで欲しいけどな
235デフォルトの名無しさん:2010/06/04(金) 19:45:09
>>214
返答できなくてすいませんでした。
おかげで完成させることができました。
ありがとうございます。
236デフォルトの名無しさん:2010/06/04(金) 19:49:10
間違った回答は叩けということでよろしいか
237デフォルトの名無しさん:2010/06/04(金) 19:52:31
>>236
いいと思います。

>>234
ほう、どこがまちがっているのですか?
238デフォルトの名無しさん:2010/06/04(金) 19:54:16
指摘が具体的ならいいんじゃないか
239デフォルトの名無しさん:2010/06/04(金) 19:54:24
>>234
あんたは一生解答でけへんくせに、口だけは達者やなあ
240デフォルトの名無しさん:2010/06/04(金) 20:23:47
>>237
お前は今まで何回間違えたか覚えてないの?
241デフォルトの名無しさん:2010/06/04(金) 20:28:20
>>235です。何度もすいません。

↓のように出力するにはどうすればいいでしょうか

 1 4 5 10
4 5 6 15
5 8 7 20
10 10 10 30

20 27 28 75
242デフォルトの名無しさん:2010/06/04(金) 20:30:07
歪んでしまったので、文章で書きます。
「行和、列和の前は少し空けるようにせよ」と書いてあります。
243デフォルトの名無しさん:2010/06/04(金) 20:33:03
>>241

for(i=0; i<5; ++i) {
if(i==4) printf("\n");
for(j=0; j<4; ++j) printf("%*d", j==3 ? 10 : 5, array[i][j]);
}
244デフォルトの名無しさん:2010/06/04(金) 20:36:19
ミスった
for(i=0; i<5; i++) {
if(i==4) printf("\n");
for(j=0; j<4; j++) printf("%*d", j==3 ? 10 : 5, array[i][j]);
printf("\n");
}
245デフォルトの名無しさん:2010/06/04(金) 20:40:55
>>233
一つ聞いていい?
もしかして>>44=>>46もあなた?
246デフォルトの名無しさん:2010/06/04(金) 20:47:20
>>240
何回宿題を解答したか覚えていないのと同じくらいに覚えていません。
247 ◆QZaw55cn4c :2010/06/04(金) 20:48:10
>>245
違います。
248デフォルトの名無しさん:2010/06/04(金) 21:00:56
そっか。
あんなバカな読み違いをする人間が他にも回答者面してんのか。
249デフォルトの名無しさん:2010/06/04(金) 21:10:47
>>244
すいません。早速入力したんですが、↓のようになってしまいます。
5
4
5
14
6
4
3
13
5
6
7
18
6
5
5
16

22
19
20
61
250デフォルトの名無しさん:2010/06/04(金) 21:12:29
if(i==4)
を間違えて
if(i=4)
にしてない?
251デフォルトの名無しさん:2010/06/04(金) 21:15:04
>>249
printf("%*d\n",...
ってしてない?
252デフォルトの名無しさん:2010/06/04(金) 21:16:28
>>250
アホか
253デフォルトの名無しさん:2010/06/04(金) 21:25:58
>>252
ごめん。よく見たら>>251の方があってそうだね。
254デフォルトの名無しさん:2010/06/04(金) 21:26:35
>>250-251
そのままコピペしたら出力できるんですが、{ で囲むとできなくなります。
255250:2010/06/04(金) 21:29:38
あー、そこだったかぁ。。。

for(j=0; j<4; j++) printf("%*d", j==3 ? 10 : 5, array[i][j]);
printf("\n");

?
for(j=0; j<4; j++) {
 printf("%*d", j==3 ? 10 : 5, array[i][j]);
 printf("\n");
}


for(j=0; j<4; j++) {
 printf("%*d", j==3 ? 10 : 5, array[i][j]);
}
printf("\n");

エスパーにはなかなかなれないもんだな
256デフォルトの名無しさん:2010/06/04(金) 21:34:34
>>255
ありがとうございます。
その通りでした。
257デフォルトの名無しさん:2010/06/04(金) 22:13:12
>>248
で、あなたが回答者になったのはどれですか?恥ずかしがらないで教えてくださいよ。
258デフォルトの名無しさん:2010/06/04(金) 22:35:02
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
任意の文字列を二つ入力し、一つ目の文字列から二つ目の文字列を「全て」検索するプログラムを実装しなさい。
検索結果は、一つ目の文字列を0文字目から数えて、何文字目にあるかを答えるようにしなさい。以下に実行例を示す。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10648.txt

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2010年6月7日まで
[5] その他の制限:特にありません。
よろしくお願いします。
259デフォルトの名無しさん:2010/06/04(金) 22:38:42
strstr
260デフォルトの名無しさん:2010/06/04(金) 22:38:52
>>256
>>223 にも作ったのあるよ。この辺で言っとかないと。
261デフォルトの名無しさん:2010/06/04(金) 22:47:57
>>223は空白じゃないからお気に召さなかったんじゃないかな
262デフォルトの名無しさん:2010/06/04(金) 22:52:31
263デフォルトの名無しさん:2010/06/04(金) 22:58:05
>>258
#include<stdio.h>
#include<string.h>

int main(void)
{
char buf[256], keyword[256], *p, *q;
int start, end;

printf("文字列を入力してください。\n");
fgets(buf, sizeof(buf), stdin);
if((p=strchr(buf, '\n'))) *p='\0';

printf("検索文字列を入力してください。\n");
fgets(keyword, sizeof(keyword), stdin);
if((p=strchr(keyword, '\n'))) *p='\0';

printf("文字列「%s」は", keyword);
for(p=buf;(q=strstr(p, keyword));p=q+1)
{
start=q-buf;
end=start+strlen(keyword)-1;
printf("%d文字目から%d文字目に存在します。\n", start, end);
}
if(p==buf) printf("存在しません。\n");

return 0;
}
264デフォルトの名無しさん:2010/06/04(金) 22:58:55
ま、ここの「回答」で期待されるのは
問題文の意味(文法寄りか応用寄りかとかでも区別)を極力
的確に汲み取りその意図に出来るだけ沿った正しいC文を
模範作文として上げること だろなw
265デフォルトの名無しさん:2010/06/04(金) 22:59:06
266265:2010/06/04(金) 23:00:56
ごめん、これ無し。
「全て検索」に対応してない。
267デフォルトの名無しさん:2010/06/04(金) 23:03:25
>>264
つまり、こういうのは期待してない
268 ◆QZaw55cn4c :2010/06/04(金) 23:04:09
>>258
http://codepad.org/7Eo4s7F6

>>262
がんばって中篇にも挑戦しましょう。
269デフォルトの名無しさん:2010/06/04(金) 23:09:32
>>268
お前が読みそこなったのを一例に挙げただけだぞw
270デフォルトの名無しさん:2010/06/04(金) 23:11:33
>>268
forの条件判断部に関数置くとか、最悪w
271デフォルトの名無しさん:2010/06/04(金) 23:12:15
>>270
へ?なぜ?
272デフォルトの名無しさん:2010/06/04(金) 23:14:17
なぜならループごとに同じ返り値が帰ってくることを分かってるものを呼び出すのは無駄だから。
273デフォルトの名無しさん:2010/06/04(金) 23:17:09
>>272
それもそうですねえ。
strlen() をそのまま書いたほうがよみやすくないですか?
274デフォルトの名無しさん:2010/06/04(金) 23:18:38
こんなバカが他人に
>がんばって中篇にも挑戦しましょう。
こんなこと言ってると思うと笑えない
275デフォルトの名無しさん:2010/06/04(金) 23:24:32
>>274
ま、批判するのは簡単ですから。
276デフォルトの名無しさん:2010/06/04(金) 23:28:01
>>275
素直に
「for文の前に
len_p=strlen(p);
len_q=strlen(q);
とあらかじめ代入しておけばよかった。」と言えばいいじゃないか。
277デフォルトの名無しさん:2010/06/04(金) 23:38:13
>>276
その程度の基礎さえできてないアホが逆ギレするからウザいんだよw
278 ◆QZaw55cn4c :2010/06/04(金) 23:39:23
指摘された部分を反映しました。また、空文字列(strlen() == 0) の場合にも対応いたしました。
http://codepad.org/n5bSwqxj

>>276
たしかに。大変失礼いたしました。
279デフォルトの名無しさん:2010/06/04(金) 23:43:20
結局、問題の根本を理解してないから言われたところを直せばいいとしか思わないんだろうなw
280デフォルトの名無しさん:2010/06/04(金) 23:46:43
>>278
いや、それなおさなくていいよ。
他は見てないけど、少なくともそこの部分に関しては修正しなくていい。
心配なら速度を測ればよいよ。もしくはアセンブリを参照。

>>272は基礎はできてるのかもしれないけど、そこから先の知識をまだ持ってないみたい。
281デフォルトの名無しさん:2010/06/04(金) 23:47:41
最近のコンパイラって最適化でstrlen()が消えるの?
282280:2010/06/04(金) 23:48:07
ごめん、誤解を招くレスをした。

修正するかどうかはその後判断すればいいので、今そこを直すべきじゃないということ。
283デフォルトの名無しさん:2010/06/04(金) 23:49:23
>>281
横レスすまん。
strlenは消えないが、ループの外に出すことは十分期待していいんじゃないかな
284デフォルトの名無しさん:2010/06/04(金) 23:50:29
[1] 授業単元:プログラム演習A
[2] 問題文:全30件の成績(0〜100点)をキーボードから
読み込み、0〜9点, 10〜19点,・・・, 90〜99点, 100点 の
11通りの区間にそれぞれ何人が入るかを調べなさい。
ただし、各区間に入る人数を溜めておく入れ物として
配列を利用すること。更に調べた人数に従って、各区間を
ヒストグラムで表しなさい。

0点:***
10点:*****
20点:****


100点:*

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C++
[4] 期限:2010年6月7日まで
285デフォルトの名無しさん:2010/06/04(金) 23:57:48
訂正

[3.2] コンパイラ名とバージョン: Visual C++


286デフォルトの名無しさん:2010/06/05(土) 00:02:48
>>284

#include <iostream>

void main() {
int histogram[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int score;
for (int i = 0; i < 30; ++i) {
score = 0;
do {
std::cout << "成績を入力しろ(0〜100)" << std::endl;
std::cin >> score;
} while (score < 0 || 100 < score);
++histogram[score / 10];
}

for (int i = 0; i < 11; ++i) {
std::cout << i * 10 << "点:";
for (int j = 0; j < histogram[i]; ++j) {
std::cout << "*";
}
std::cout << std::endl;
}
}
287デフォルトの名無しさん:2010/06/05(土) 00:11:56
>>286
void main() (笑)
288デフォルトの名無しさん:2010/06/05(土) 00:15:29
int main() でも return 0; は省略できるのにねえ
289デフォルトの名無しさん:2010/06/05(土) 00:16:32
それなりにC++っぽいコード書いといてそこ落としたら突っ込まれるのしょうがない。
290デフォルトの名無しさん:2010/06/05(土) 00:18:52
>>280, 283
もっといいコンパイラなら strlen() を外にだしてくれるかもしれませんが、私の gcc 3.3.4 や bcc 5.5.1 では -O2 にしても
アセンブラリストを見る限りは、strlen() はループの中のままのようです。
そこから先の知識をもっていないのは私も一緒でしょう。
とにかく、しばらくこちらで今までのように鍛えていただくことにしました。
フォローありがとうございました。
291デフォルトの名無しさん:2010/06/05(土) 00:22:23
そう思うんなら>>278の残りのstrlenもなんとかしろよw
292デフォルトの名無しさん:2010/06/05(土) 00:24:27
>>291
strlen くらい残しても問題ないだろうに
余計なことするのが好きなんだな
293デフォルトの名無しさん:2010/06/05(土) 00:27:08
すでにstrlen()で長さを求めて専用の変数に格納してるのに、
その長さをまたstrlen()で求めるのは無意味で無駄。

そんな無駄を許せる人間がプログラムをしてることが驚きだよw
294 ◆QZaw55cn4c :2010/06/05(土) 00:35:35
>>258
http://codepad.org/IiGMyIU6
指摘を受けた部分を改良いたしました。
295デフォルトの名無しさん:2010/06/05(土) 01:14:00
>>284
  0点:***
 10点:*****
 20点:****


100点:*

296デフォルトの名無しさん:2010/06/05(土) 03:05:02
>>293
なんでメモリリークの可能性は許しちゃうの?
速度よりもそっちの方が大事だろ普通。

メモリリークを許せる人間がプログラムをしてるなんて心配になるよw
297デフォルトの名無しさん:2010/06/05(土) 03:21:38
どこでメモリリークするのか◆QZaw55cn4cのために懇切丁寧に説明してあげてくれw
298デフォルトの名無しさん:2010/06/05(土) 04:43:15
>>297みたいに自分の意見を言わない人は嫌いだが、メモリリークする箇所あるか?
299デフォルトの名無しさん:2010/06/05(土) 11:32:53
模範例文として推敲がどの程度行われるべきかは
状況依存としか言いようが無いです
推敲され過ぎてバグも無駄や文書としての矛盾も無い
状態が教育上好ましいかどうかは一概に言い切れま
せん
ただしその逆が問題になるのは、ネット環境でそれが
容易に複製され大量流布になり得るという観点からの
みです。
300デフォルトの名無しさん:2010/06/05(土) 11:46:10
バカの長文ほど邪魔なものはないな
301デフォルトの名無しさん:2010/06/05(土) 11:55:55
短文を書けるのが賢いんだと思い込む人よりかアホやバカかも知れないが
ナルシスティは小さいかもな
302デフォルトの名無しさん:2010/06/05(土) 12:29:36
宿題丸投げするようなバカへの回答なんて何だって良いだろうが
どうせこのスレでいい例を見せたって理解できるはずないだろ
303デフォルトの名無しさん:2010/06/05(土) 12:46:11
segmentation fault
core dumped.
304 ◆QZaw55cn4c :2010/06/05(土) 17:03:20
>>298
malloc()/realloc()/free() のラッパを書いて確認してみました。
http://codepad.org/5lqkATcO
ただ、ラッパ自身も malloc() / free() を使っているので、これが正しいかどうかを検証する方法がわからない。
ラッパのラッパを書くしかないのか‥‥‥。
305デフォルトの名無しさん:2010/06/05(土) 18:10:54
>>302
宿題を丸投げする人は、このスレのお客様。
むしろコード書く人、そのコードを読む人が主人公かなあ。
さらしたコードを叩くな、という人がいますが、むしろコードを読んで叩いてくれる人がいるからこそ、書きがいがあるというものです。
306デフォルトの名無しさん:2010/06/05(土) 18:19:29
ただで駄目なところ指摘してくれたり、より効率的な方法教えてくれるんだから
ありがたいもんだよな。
変にプライドの高い人は逆ギレしちゃうけど。
307デフォルトの名無しさん:2010/06/05(土) 18:29:51
>>306
コードさらす人は、意識していないかもしれませんが、そのプライドを自分で潰しに来ている、といっていいわけですから、コードをかかない人よりよっぽどましかと。
308デフォルトの名無しさん:2010/06/05(土) 18:42:20
そうそう。ここでコード晒す側も
所詮、暇つぶしなんで、波風立たない方が嬉しいにこしたことはない。

ここ100レス余りの流れで宿題がこないから、
mixiの宿題コミュまで覗っちゃったじゃないか!
309デフォルトの名無しさん:2010/06/05(土) 18:45:23
310デフォルトの名無しさん:2010/06/05(土) 18:55:13
>>308
mixiのあのコミュはなにかしら投稿するとsock(ryとかいう人に叩かれるw
311デフォルトの名無しさん:2010/06/05(土) 18:55:52
>>307
いいからお前はトリップを全部の発言につけろw
312デフォルトの名無しさん:2010/06/05(土) 19:23:23
>>304
ラッパがバグってるっぽい
313デフォルトの名無しさん:2010/06/05(土) 19:25:49
最近は嫌がらせ半分のふざけたコードに突っ込む人いなくなったなぁ。
そのまま提出した学生がその後どうなったのか気になるところだが。
314デフォルトの名無しさん:2010/06/05(土) 19:28:52
>>313
他人をむやみに信用することの愚かさを痛感し、
自分で判断できる力を身につけようと努力し、偉人になったとか。
315デフォルトの名無しさん:2010/06/05(土) 19:39:53
>>284ですが、型が違うみたいでエラーがでます。
そこで少し変えたんですが、なんか違うようです。
316デフォルトの名無しさん:2010/06/05(土) 19:40:36
#include<stdio.h>

main(void)
{
int test[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int i,j;
int score;

for (i=0;i<30;i++) {

score = 0;

do {

printf("成績を入力しろ");
scanf("%d",&score);

} while (score < 0 || 100 < score);

test[score / 10]++;

}
317デフォルトの名無しさん:2010/06/05(土) 19:42:10
for (i=0; i < 11;i++) {
printf("点:");
for (j=0; j<test[i];j++) {
printf("*");
}
}

return 0;
}
318デフォルトの名無しさん:2010/06/05(土) 19:57:10
>>315
#pragma warning(disable:4996) // これを追加する 
#include<stdio.h>
main(void)
{
319デフォルトの名無しさん:2010/06/05(土) 20:05:19
早くお客様こないかなー
320デフォルトの名無しさん:2010/06/05(土) 20:07:14
>>318
ありがとうございます。
321デフォルトの名無しさん:2010/06/05(土) 20:17:04
すいません>>320です。
問題文に「0〜9点, ・・・, 90〜99点, 100点」と書いてありました。
大変申し訳ないです。
0〜9点:***



100点:** とするには、どう手を加えればいいのですか?
322デフォルトの名無しさん:2010/06/05(土) 20:19:11
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10649.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 無期限
323デフォルトの名無しさん:2010/06/05(土) 20:21:51
>>321
for(i=0; i<11; i++) {
if(i==10) printf("100点:");
else printf("%d〜%d点:", i * 10 + i * 10 + 9);
324デフォルトの名無しさん:2010/06/05(土) 20:25:11
>>321
「printf("点:");」→「if (i == 10) { printf("100点:"); } else {printf("%d〜%d", i*10, i*10+9);}」
325デフォルトの名無しさん:2010/06/05(土) 20:28:09
>>322
2-A:char**
2-B:char[][MAXLENGTH]
2-C:char**day
2-D:char day[][MAXLENGTH]
326デフォルトの名無しさん:2010/06/05(土) 20:31:07
>>323-324
ありがとうございます。
何度もすいませんでした。
327 ◆QZaw55cn4c :2010/06/05(土) 21:50:30
>>312
ご指摘感謝。free() のラッパがバグっていました。最後のひとつを開放するときにリンクをはずせていなかった。
http://codepad.org/91IVlXJH
328デフォルトの名無しさん:2010/06/05(土) 22:26:34
>>325
ありがとうございます。
329デフォルトの名無しさん:2010/06/05(土) 22:33:28
文字と演算子を入力して四則計算するプログラムってどうやります?
例えば
3←入力
+←入力
4←入力
−←入力
・←入力



(計算結果)
330329:2010/06/05(土) 22:36:29
#include<stdio.h>
int main(void){
int a,b;
char c;
while(a != '='){
scanf("%d",&a);
scanf("%c",&c);
if (c = '+')b += a;
else b -= a;
}
}

うまくいきません。
331デフォルトの名無しさん:2010/06/05(土) 22:56:11
>>329
http://ideone.com/PMcBO
逆ポーランド 電卓とかでググってみてくれ
332329:2010/06/05(土) 22:58:00
>>331
そんな難しいのじゃなくていいです・・
とりあえずwhileとか使って
数字入力 演算子入力 数字入力・・・・=答え
みたいなのが作りたい。
333デフォルトの名無しさん:2010/06/05(土) 23:51:35
>>258です。ポインタを用いないバージョンもできないでしょうか。
334デフォルトの名無しさん:2010/06/05(土) 23:55:00
>>332
こんなんでどう?
http://codepad.org/b68KtrqB
335デフォルトの名無しさん:2010/06/06(日) 00:04:36
scanf()はエラーも返すんだよね。
336 ◆/91kCCQXBo :2010/06/06(日) 00:14:15
#include<stdio.h>
int main(void){
  int a=0, b=0, plus=1;
  char buf[80];

  while(buf[0] != '='){
  //  fgets(buf,100,stdin);
    gets(buf);
    if(buf[0] == '+'){
      plus = 1;
      b = a;
    }
    else if(buf[0] == '-'){
      plus = -1;
      b = a;
    }
    else
      sscanf(buf, "%d", &a);
  }
  b = b + plus * a;
  printf("ans=%d\n", b);
}
/*
3
-
6
=
ans=-3
*/
337デフォルトの名無しさん:2010/06/06(日) 01:34:19
こんなソフト作ってください(お代は払います)ってな感じのスレどっかにあったかなぁ?
アイデアはあるけどオツムがないからどうしようもなく放置したまま早1年。
発注するから誰か受注して って頼みたいんだけど?
338デフォルトの名無しさん:2010/06/06(日) 01:53:31
339デフォルトの名無しさん:2010/06/06(日) 02:09:42
サンクス
340 ◆QZaw55cn4c :2010/06/06(日) 02:37:30
341デフォルトの名無しさん:2010/06/06(日) 10:39:09
>>333
#include <stdio.h>

int main(void)
{
char a[256], b[256];
int i, j, flg = 0;

printf("文字列を入力してください。");
scanf("%s", a);
printf("検索文字列を入力してください。");
scanf("%s", b);

printf("文字列「%s」は", b);
for(i=0; a[i]; i++) {
for(j=0; b[j]; j++) if(a[i+j]!=b[j]) break;
if(b[j]=='\0') {
if(flg++) printf(",");
printf("%d文字目から%d文字目", i, i + j - 1);
}}

printf("%s\n", flg ? "に存在します" : "は存在しません");

return 0;
}
342デフォルトの名無しさん:2010/06/06(日) 10:45:21
>>333
折角書いたけど>>341の方がスマートでくやしい
#include <stdio.h>

int main()
{
    char str[256], search[256];
    int strIdx = 0, searchIdx = 0, found = 0;
    printf("文字列を入力してください。\n");
    scanf("%s", str);
    printf("検索文字列を入力してください。\n");
    scanf("%s", search);
    while(str[strIdx]){
        if(str[strIdx] == search[searchIdx]){
            found = strIdx + 1;
            while(search[++searchIdx]){
                if(str[++strIdx] != search[searchIdx]){
                    found = 0;
                    break;
                }
            }
            if(found) break;
        }
        ++strIdx;
    }
    if(found == 0) printf("文字列「%s」は存在しません。\n",search);
    else printf("文字列「%s」は%d文字目から%d文字目に存在します。\n",search, (found - 2), (found - 2) + (searchIdx-1));
}
343デフォルトの名無しさん:2010/06/06(日) 10:47:15
しかもバグ入りという...
344 ◆QZaw55cn4c :2010/06/06(日) 12:03:14
>>329
ちゃんとつくると難しいです。たとえばこんな感じになります。
http://codepad.org/ODg132aP
345デフォルトの名無しさん:2010/06/06(日) 16:10:45
何故>>330
はダメなのでしょうか?

>>344
ちゃんとつくらなくても>>336のプログラムの中身がすでに
理解できないんですが・・・>>336より簡単にできないんですか?
どんなプログラムも付け足せば何とかなるんですよね。

buf[]とstdin, fgetsなど全く意味がわかりません。
一応プログラム自体実行したら正しくいきます。
ただ宿題なので、今まで習ったことでやるしかないんです。

一応C言語です。
346デフォルトの名無しさん:2010/06/06(日) 16:15:25
>>345
そういうのは最初に全部テンプレ使って言え
347デフォルトの名無しさん:2010/06/06(日) 16:23:51
>>345

#include<stdio.h>
int main(void){
int a,b = 0;
char c=' ';
while(c != '='){
scanf("%d",&a);
scanf("%c",&c);
if (c == '+')b += a;
else b -= a;
}
}
これでどうだ
348デフォルトの名無しさん:2010/06/06(日) 16:25:40
>>345
ちがった
#include<stdio.h>
int main(void){
int a,b = 0;
char c=' ';
while(c != '='){
scanf("%d",&a);
scanf("%c",&c);
if (c == '+')b += a;
else if(c == '-')b -= a;
}
printf("%d\n", b);
}

こうかな。
349デフォルトの名無しさん:2010/06/06(日) 16:41:12
>>345なぜダメかという理由を書くと

1.while(a != '=')となっている点。
aは数字だろ?演算子はcに入れたいんだろ?だからwhile(c!='=')が正しい。

2.if(c='-')となっている点。
=は代入。比較なら==を使う。たまに見かけるバグだな。

3.int a,b;となっていて、bを初期化していない点。
bに結果を入れたいのだろうが、最初に0で初期化していない。
初期化しないと値は不定。何が入ってるか分からないというわけ。
つまりコンパイラとしてはbに最初から0xCDCDCDCDを入れておいても仕様違反ではないというわけだ。
vc++のデバッグビルドならそうなる。
そこにプラスマイナスしても正しくならないよな。

4.else b-=a;となっている点。
これだと'='が来たときも引き算してしまう。だからese if(c=='-')にしないといけない。

5.whileに最初に入った時点でcは不定。
だから万が一cが'='だったらすぐ抜けてしまう。ここでは' 'を入れておけば絶対に問題が起きないのでおk。
現実問題として、滅多に起きないが、社会にでたらこれは立派なバグとして扱われるぞ。
350デフォルトの名無しさん:2010/06/06(日) 16:42:02
こいつに理解させるのはまず無理だと思うけどな
351デフォルトの名無しさん:2010/06/06(日) 16:53:45
俺に聞けスレで諦めた一人ですな
352デフォルトの名無しさん:2010/06/06(日) 16:55:49
>>348
12+12=0…
353デフォルトの名無しさん:2010/06/06(日) 16:58:45
だからscanf()で文字を読むときは改行文字に気をつけろって言っただろ
354デフォルトの名無しさん:2010/06/06(日) 17:01:25
int a=0 ,b=0;
char c=0;
scanf("%d%*c",&b);
while(scanf("%c%*c",&c) && c != '='){
scanf("%d%*c",&a);
if (c == '+')b += a;
else if(c == '-') b -= a;
else ;
}
printf("%d\n",b);
それを修正してとなると↑のようになる(scanf削って縮めたいんだが、俺には限界)
355349:2010/06/06(日) 17:03:34
ああ、ごめん。
実際に動かしてみたら色々問題がまだあるね

scanf("%c", &c);は改行コードを拾ってしまうな。
3564:2010/06/06(日) 18:52:56
>>350
>>351
ひどすぎワロタww
命かけて頑張ってんだよ、茶化さんで。
357デフォルトの名無しさん:2010/06/06(日) 18:56:00
>>356
命がけ、というのであれば、それを見せてほしいですね。現状では伝わってこないんです。
3584:2010/06/06(日) 18:58:23
>>354
優しすぎ、ありす。
まじで感謝してる。プログラミングの単位たぶん落とすと思うけど
2学期には間に合うようにするわ。
359デフォルトの名無しさん:2010/06/06(日) 19:02:36
熟練のマである>>355でもエラー出すC言語ってどんだけむずいんだよ。
もっと簡単で寛容なC言語はないんかね。
360デフォルトの名無しさん:2010/06/06(日) 19:03:51
いろいろと突っ込みどころがあるな
361 ◆QZaw55cn4c :2010/06/06(日) 19:44:23
>>359
ちょっと上の方でコテが散々やっつけられていたのを見ましたか?
簡単で寛容な、というのは期待しないほうがいいかと。
362デフォルトの名無しさん:2010/06/06(日) 20:20:28
宿題というか、既存のプログラムのバグ消しのお願いです
AviUtlという画像編集・エンコソフトを使っているですが、
そのソフト用にNL-Means Filterというものが出ています。
ですがそのフィルターを使うとソフトがフリーズしてしまいます。なんとか解決できませんか?
症状としては、そのフィルターをオンにすると、AviUtlを終了しようとした時にフリーズします。
GPU支援を使う、計算モード3のときのみ起こります。お願い致します

http://kishibe.dyndns.tv/index.php?%E3%83%95%E3%83%AA%E3%83%BC%E3%82%BD%E3%83%95%E3%83%88%2FNL-Means%20filter
からダウンロードするとソースらしきものもついてきます
363デフォルトの名無しさん:2010/06/06(日) 20:56:36
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10650.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2010年6/8まで
[5] その他の制限:なし
2問ありますが、よろしくお願いします。
364デフォルトの名無しさん:2010/06/06(日) 21:06:03
>>363
<課題2>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int i, j, k, n;
double *x, temp;

scanf("%d", &n);

x = malloc(n * sizeof(double));

for(i=0; i<n; i++) scanf("%lf", x + i);

for(i=n-1; i; i=k) {
for(j=k=0; j<i; j++) {
if(x[j] > x[j+1]) {
temp = x[j];
x[j] = x[j+1];
x[j+1] = temp;
k = j;
}}}

for(i=0; i<n; i++) printf("%f\n", x[i]);

free(x);

return 0;
}
365デフォルトの名無しさん:2010/06/06(日) 21:30:33
366 ◆QZaw55cn4c :2010/06/06(日) 21:36:06
367デフォルトの名無しさん:2010/06/06(日) 21:44:36
ぐだぐだ言い訳されるのわかってても突っ込みたくなるなw
368デフォルトの名無しさん:2010/06/06(日) 21:45:38
>>367
どうぞどうぞ突っ込んでくださいな。楽しみにしています。
369デフォルトの名無しさん:2010/06/06(日) 21:48:51
実数と整数の区別もつかないアホ
ソート部分がクソ
370デフォルトの名無しさん:2010/06/06(日) 21:55:59
>>363です
ありがとうございます
371デフォルトの名無しさん:2010/06/06(日) 21:56:08
>>363
2番目の課題を訂正します。
http://codepad.org/qgboBPOZ
>>369
普通のバブルソートですが、何か問題でも?
372デフォルトの名無しさん:2010/06/06(日) 21:57:51
だからそれはバブルソートじゃないって言っただろw
373デフォルトの名無しさん:2010/06/06(日) 22:02:21
>>372
あれ?私は http://en.wikipedia.org/wiki/Bubble_sort を参照したんですけれどもね。
374デフォルトの名無しさん:2010/06/06(日) 22:09:35
それが言いたくてわざわざ効率の悪いほう使ったのかw
375デフォルトの名無しさん:2010/06/06(日) 22:10:08
>>373
バブルソートは

for(j=0;j<n-1;j++){
for (i = 0; i < n - 1; i++) {
if (x[i] > x[i + 1]) {
t = x[i];
x[i] = x[i + 1];
x[i + 1] = t;
}
}
}
だろ。わざわざdo{} while()にしても比較回数が減ることはない。
376デフォルトの名無しさん:2010/06/06(日) 22:16:38
>>373
だから全部読めって前も言ったよな?
Optimizing bubble sortのところで何でn := newn + 1ってなってると思ってるんだ?
377デフォルトの名無しさん:2010/06/06(日) 22:17:08
>>375
そうですよね。>>375 であげていただいたやり方もバブルソートといいますよね。
でも >>372 はお気に召さないようなんですよ。
確かに日本語版 wiki やドイツ語 wiki では、幾分効率をあげたものが採用されているようですが、
どうオプティマイズしても計算オーダーはΟ(n^2) で変わらないのですけれども、>>372 は計算オーダーの概念がよくわかっていないらしい。
http://pc12.2ch.net/test/read.cgi/tech/1269438098/706 のように、ある一種のバブルソートの実装にこだわっているんです。
378デフォルトの名無しさん:2010/06/06(日) 22:18:14
>>376
Optimizing のところでは、長さを縮めていますが、そうでない実装も、やっぱり bubble sort でしょう?
379デフォルトの名無しさん:2010/06/06(日) 22:21:35
計算オーダーが同じでも明らかに効率悪い方に拘る意味が分からんw
380デフォルトの名無しさん:2010/06/06(日) 22:24:12
こだわっているんではなくて、計算効率がちょびっとよくなるか悪くなるかの差で、バブルソートとよんだりよばなかったりするのはおかしいといっているのです。
英語版 wiki にのっている実装もバブルソート、 >>375 のやりかたもバブルソートなんですよ。無論私のもバブルソート。
381デフォルトの名無しさん:2010/06/06(日) 22:42:15
ん、バブルソートですね
382デフォルトの名無しさん:2010/06/06(日) 22:48:20
知識とコードのアンバランスさから見て、どっかの大学講師かな。
実務経験があるようには見えないし、頭堅いのにプライドだけは高いし。
383 ◆QZaw55cn4c :2010/06/06(日) 23:20:44
>>382
今は助教というのですよ。現在の大学教員の序列を知らないところから見ると、高校生かな?
384デフォルトの名無しさん:2010/06/06(日) 23:21:28
高校生に負ける助教って・・・
385デフォルトの名無しさん:2010/06/06(日) 23:29:08
どうりで高校生なら計算オーダーの話は理解できなくてもしかたありませんね。でも重要ですからよく勉強しておくように。
386デフォルトの名無しさん:2010/06/06(日) 23:29:24
日本語まともに読めないクズの分際で、
なんで自分より下しか想像できないんだろうw
387デフォルトの名無しさん:2010/06/06(日) 23:31:46
バブルソートでも色々あるんですよ。ひとつのパターンだけ決め付けてこれはバブルソート、あれは違う、などと見識の狭いことをいってはいけません。
もっと広い感覚で物事を理解することです。
388デフォルトの名無しさん:2010/06/06(日) 23:32:52
実数と整数の区別もつかない盲が何言ってんだw
389デフォルトの名無しさん:2010/06/06(日) 23:35:12
というか本当に助教なの?せいぜい院生くらいかと思ってたんだけど。
日本語の読めなさはやばいってレベルじゃねーだろw
390デフォルトの名無しさん:2010/06/06(日) 23:35:43
小さなミスはその都度修正すれば済むこと。でもバブルソートがなにかを理解していなければ、ヒープソート、シェルソート、クィックソート、マージソート
その他いろいろなソートでもつまづきますよ。これらの理論では計算オーダーが重要ですからよく勉強しておくことです。
391デフォルトの名無しさん:2010/06/06(日) 23:39:51
なんで相手がそれらのソートを知らないことになってんだよw
392デフォルトの名無しさん:2010/06/06(日) 23:40:02
>>382
で講師だろうといっていたくせに、
>>389
で院生くらいだとおもっていた、
とは随分とおっしゃることがころころかわるのですね。日本語が読める読めないというより、日本語を使って思考できないのではないですか?
393デフォルトの名無しさん:2010/06/06(日) 23:40:32
ちょ、同一人物認定されたw
394デフォルトの名無しさん:2010/06/06(日) 23:40:43
>>391
計算オーダーを理解していないようですからね。
395デフォルトの名無しさん:2010/06/06(日) 23:54:27
すいません、できたら>>362お願い致します
流石に無理ですかね・・・
396デフォルトの名無しさん:2010/06/06(日) 23:55:50
>>395
スレ違いな上に、金取るぞってレベルの話なんだがw
397デフォルトの名無しさん:2010/06/06(日) 23:57:10
>>395
無理に決まってるだろw
398デフォルトの名無しさん:2010/06/06(日) 23:57:21
やっぱり無理ですよねw
じゃあだめもとで他当たってきます
ありがとうございました
399デフォルトの名無しさん:2010/06/06(日) 23:58:06
>>395
作者に直接言ってみれば
もちろん、単にエラーが出るとだけ。
ttp://twitter.com/_kenkun
400デフォルトの名無しさん:2010/06/06(日) 23:59:34
大体フィルタだろ?
フィルタのソースはAviUtilの作者とは違うだろ。
401デフォルトの名無しさん:2010/06/07(月) 00:00:30
>>399
いや、AviUtlに問題があるわけではなくて
このフィルタに問題があるんですよね
フィルタの作者はAviUtlの作者ではないんで・・
でももしかしたらAviUtl側でなんとかできるかもしれませんね
ありがとうございます。
402デフォルトの名無しさん:2010/06/07(月) 00:01:58
関係ないフィルタの不具合を報告されても困るだろw
403デフォルトの名無しさん:2010/06/07(月) 00:18:46
まぁここはご覧の通り高校生レベルの議論なんで・・
404デフォルトの名無しさん:2010/06/07(月) 00:19:12
高校生以下のおじさんもいるけどね
405デフォルトの名無しさん:2010/06/07(月) 02:09:08
高校生だったころに戻りたいな
406デフォルトの名無しさん:2010/06/07(月) 04:04:49
中学レベルの英語力すらない人が多いみたいだけどね
407デフォルトの名無しさん:2010/06/07(月) 06:55:32
that's too mad.
408デフォルトの名無しさん:2010/06/07(月) 12:38:44
>>395
せっかちだなぁ
409デフォルトの名無しさん:2010/06/07(月) 19:02:23
>>406
んじゃ、そのあんたのレスを英語で頼む
410デフォルトの名無しさん:2010/06/07(月) 19:09:19
all your base are belong to us
411デフォルトの名無しさん:2010/06/07(月) 20:02:34
ポインタを使い1〜12までの数字を入力すると英語で月の名前が出力され、
そうでない場合はunknown month と出力されるプログラム作りで困ってます。
入力例
3
5
13
11
出力例
March
May
unknown month
November

ヒントでは、
char *month_name(int n)を書き入れる事
month_name(6)はJuneである事
static char *months[] = { "January","February","March",
"April","May","June",
"July","August","September",
"October","November","December"};
を用いる事が書かれてます。

暇な人が居たらお願いします。
412デフォルトの名無しさん:2010/06/07(月) 20:16:30
>>411
char *month_name(int n)
{
if (n < 1 || 12 < n) {
return "unknown month";
}
return months[n-1];
}
413デフォルトの名無しさん:2010/06/07(月) 20:20:27
staticだから関数内にmonths[]置くんじゃないの?
414デフォルトの名無しさん:2010/06/07(月) 20:24:16
じゃあそれで
415デフォルトの名無しさん:2010/06/07(月) 21:12:44
途中経過を…プログラミングは下手ですがっ
#include <stdio.h>

static char *months[] = { "January","February","March",
"April","May","June",
"July","August","September",
"October","November","December"};
int main(void)
{
int n;
char *month_name(int n)
{if (n < 1 || 12 < n) {
return "unknown month";
}return months[n-1];
}
scanf("&lf",&n);
printf("%s",*months);
return(0);
}
これでやるとどんな数字入れても出力がJanuaryになってしまうのですが、
どこらへんを変えればいいでしょうか?
416デフォルトの名無しさん:2010/06/07(月) 21:14:17
>>415
&lf ってなんだよ
417デフォルトの名無しさん:2010/06/07(月) 21:15:40
scanf("%d", &n);
418デフォルトの名無しさん:2010/06/07(月) 21:18:19
つーか関数内に関数置くな
419デフォルトの名無しさん:2010/06/07(月) 21:21:46
>>415
なんという残念な使い方w
420デフォルトの名無しさん:2010/06/07(月) 21:24:05
>>415
http://ideone.com/kEyhc

scanf("&lf",&n);
printf("%s",*months); の一連の流れをおかしいと思わなかったのはまずい
421デフォルトの名無しさん:2010/06/07(月) 21:31:08
残念な頭なのでmonth_nameの中に
*months入れるのは思いつきませんでした…orz
422デフォルトの名無しさん:2010/06/07(月) 21:37:19
>>421
慣れ、馴れ。数書くうちに体にしみこむ。
423デフォルトの名無しさん:2010/06/07(月) 22:08:57
ケチ付けるわけではないけどif文はmainの中のほうがunkownのとき
関数を呼ばなくていいんじゃなかろうか。
424:2010/06/07(月) 22:11:27
【質問テンプレ】
[1] 授業単元:C言語課題
[2] 問題文(含コード&リンク):2つの正の整数(aとb)の最大公約数をユークリッドの互除法を用いて表示するプログラムを作成せよ。ただし、0<b≦a≦32767とする。
               ≪ユークリッドの互除法≫
               ユークリッドの互除法による最大公約数(GREATEST COMMON DIVISOR:GCD)は、次のように求める。
               @2数(aとb)の中で大きい値をl、小さい値をmとする。
               Alをmで割り、あまりをrとする。
                      r=0ならば、mが最大公約数となる。
                      r≠0(0<r<m)ならばl←m、m←r として再びAの処理を行う。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:main.c Visual Studio 2008
 [3.3] 言語:C++
[4] 期限:2010年6月18日17:00まで
[5] その他の制限:(まだ本当に初心者なので)do文やif文、for文まで習いました。


期限までは時間がありますが…宜しくお願いしますm(_ _)m
425デフォルトの名無しさん:2010/06/07(月) 22:29:12
#include <iostream>

int main()
{
int a, b, r;

std::cin >> a >> b;

while(r = a % b) a = b, b = r;

std::cout << b;
}
426デフォルトの名無しさん:2010/06/07(月) 23:09:24
>>423
逆にその関数として、不正な値が渡された時はどういう挙動にしようか
427デフォルトの名無しさん:2010/06/07(月) 23:10:21
for(i = 0 ; i < 5 ; i++){
printf("%d,", i );
}
これで出力したら
1,2,3,4,5,
みたいに最後にもカンマがついちゃうんでfor文の外側に
printf("\b\n");
を付け加えたんだけどうまく最後のカンマが消えません
その理由とどうすればいいのか教えてください
428デフォルトの名無しさん:2010/06/07(月) 23:21:48
\bは書き込む位置が1文字分戻るだけだから
スペースで上書きする必要がある
printf("\b \n");
429デフォルトの名無しさん:2010/06/07(月) 23:23:30
なるほど
d
430デフォルトの名無しさん:2010/06/07(月) 23:25:03
>>427
端末側がバックスペースをサポートしていない、と思われる。
仕方がないから、
#include <stdio.h>
#define N 5
int main()
{
int i;
for (i = 1; i <= N - 1; i++)
printf("%d, ", i);
printf("%d\n", i);
return 0;
}
でごまかすしかない。
431430:2010/06/07(月) 23:29:20
>>428
そのような手があったんですね。これでうまくいきました。(cygwin)
#include <stdio.h>
#define N 5
int main()
{
int i;
for (i = 0; i < N; i++)
printf("%d, ", i);
printf("\b\b \n");
return 0;
}
432デフォルトの名無しさん:2010/06/07(月) 23:32:36
>>424
#pragma warning(disable:4996)
#include <stdio.h>
int main(void){
  int a, b, l, m, r;

  printf("整数 a と b を入力して下さい > ");
  scanf("%d %d", &a, &b);
  if(a>b) l=a, m=b; else l=b, m=a;
  while(r = l % m) l=m, m=r;
  printf("GCD = %d", m);
}
433デフォルトの名無しさん:2010/06/07(月) 23:46:04
>>426
#include <stdio.h>
char *month_name(int n){
static char *months[]={"January","February","March",
"April","May","June","July","August","Septmber",
"October","November","December"};
return months[n-1];}
int main(void)
{
int n;
scanf("%d",&n);
if (n<1||n>12)printf("unkown month\n");
else printf("%s\n",month_name(n));
return 0;
}
不正な値が行く場合がわかりませんので教えて下さい。
434430:2010/06/07(月) 23:53:41
>>433
できている、と思うのですが。
435デフォルトの名無しさん:2010/06/07(月) 23:55:12
しっかし無駄なstaticだ
436デフォルトの名無しさん:2010/06/07(月) 23:55:25
>>433
関数をライブラリとして提供した場合に、使う側に対して値チェックを強制するべきか、
それとも不正な値を渡された場合にunknown monthを返却する仕様とするのかという話。

で、使用者に対して値チェックを強制した場合、使用者の不手際により
不正な値が渡されることを考慮しなければならない。
その際、メモリアクセス違反で落ちるライブラリでよしとするのか?ということ。

例外機構があれば例外を投げるのも手だけれど、Cではどうするのか。
型をboolにし、out引数を追加するのもありだよね。
でも今回はプロトタイプが指定されている。

その上での考えを教えてほしい。
437デフォルトの名無しさん:2010/06/07(月) 23:57:16
NULLを返却するのは?
結局関数の中で範囲チェックすることになるけど。
438デフォルトの名無しさん:2010/06/07(月) 23:58:00
>>435
これstatic消したら関数抜けた時に戻り値のアドレスが破棄されるんじゃないの?
439デフォルトの名無しさん:2010/06/08(火) 00:00:30
>>438
リテラルのアドレスが返るから問題ない
440デフォルトの名無しさん:2010/06/08(火) 00:11:50
>>438
sizeof(months) == sizeof(char *) * 12
441デフォルトの名無しさん:2010/06/08(火) 00:16:14
[1] 授業単元: 情報数学
[2] 問題文(含コード&リンク):
次の連立一次方程式をガウスザイデル法とSOR法で解け
{2 , -1 , 0} {x1} {-1}
{-1 , 2 , -1} * {x2} = {2}
{0 , -1 , 2} {x3} {1}
なお、反復回数を20、x1-3の初期値x1-3^0を0、SOR法の・をそれぞれ1.2と1.5で計算せよ。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 本日中、出来ればお昼までにお願いします。
442デフォルトの名無しさん:2010/06/08(火) 00:20:40
>>440
要するに、予約語staticをつけなくとも、
monthsはその各々の要素が文字列リテラルの先頭へのポインタであるから
静的領域に確保されると。
443デフォルトの名無しさん:2010/06/08(火) 00:27:51
それって規格で決まってたっけ?
そうでなくても、いちいち呼ばれるたびに確保するような処理系なさそうだけどさ。
444デフォルトの名無しさん:2010/06/08(火) 00:35:16
>>436
いろいろとありがとうございました。
今回は不正な値を渡された場合にunknown monthを返却する仕様のつもりです。
使用者に対しての値チェックのやり方はどれがいいかまだよくわかりません。
難しいですね。
445デフォルトの名無しさん:2010/06/08(火) 00:58:11
>>442-443
文字列リテラルがstatic const char[]か?ならYes 6.4.5 文字列リテラル
文字列リテラルを指すポインタ非可変長配列がstaticか?ならchar const * const []であってもNo 6.2.4 オブジェクトの記憶域期間
446デフォルトの名無しさん:2010/06/08(火) 01:03:04
>442>443
横レスだけど
months自体は自動変数だから、スタックに置かれるよ。関数が返しているのは
スタック変数を指すポインタではなく、静的領域に置かれている文字列リテラルの
ポインタ。
447443:2010/06/08(火) 01:34:03
>>445
d
448デフォルトの名無しさん:2010/06/08(火) 08:57:28
[1] 授業単元:プログラミング演習2
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10651.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月9日12時まで
[5] その他の制限:

libstation.aが無いのでやりずらいかもしれませんが、形だけでもお願いします。

449デフォルトの名無しさん:2010/06/08(火) 10:20:42
>>441をお願いします。
450デフォルトの名無しさん:2010/06/08(火) 10:44:00
451デフォルトの名無しさん:2010/06/08(火) 11:08:42
452デフォルトの名無しさん:2010/06/08(火) 12:04:27
>>451
ありがとうございます。
453デフォルトの名無しさん:2010/06/08(火) 13:17:45

[1] 授業単元: 上級プログラミング
[2] 問題文(含コード&リンク):

1、VisualC++2008のWindowsフォームアプリケーションのプロジェクトを作成し、DataGridViewを作成なさい。列は
A,B,C の3列とする。
2、列Aに入力された4桁の数値を日付形式に変換し表示する様にしなさい(○月○日)。
3、sample.txtの内容を読み取り、その内容を使って列Bにオートコンプリートを実装しなさい。

sample.txtの内容は
あいうえお
abcde
12345
と言う様に、1行に1単語とする。

[3] 環境
[3.1] OS: Windows
[3.2] VC++2008
[3.3] 言語: C/C++
[4] 期限: 6/12
[5] その他の制限:とくに制限はありません

1はできますが2以降がよくわかりません。
2はプロパティでCellStyleを設定しましたが動いてくれませんでした。
3は調べてみたのですが、C++での実装はのっていなかったので・・・
よろしくお願いします。

454デフォルトの名無しさん:2010/06/08(火) 13:21:57
C++/CLIの宿題スレってないの?
455デフォルトの名無しさん:2010/06/08(火) 13:43:20
>>448
適当に見繕ってttp://codepad.org/Hzoa3JtQ
456デフォルトの名無しさん:2010/06/08(火) 14:00:14
(1) 【main 関数のみ】
int型配列 x[101] を定義し、キーボードから人数 N と N 人分の点数を入力し、平均点と
偏差値を計算し、結果を画面に出力するプログラムを作成せよ。
◆ 条件
 人数 N に負の値や101以上の値が入力されたときには、再入力するものとす
る。
 点数 x[i] に負の値や100点を超える値が入力されたときには、再入力する
ものとする。
◆ 偏差値 Ti の計算式
10( xi   )
Ti   50

ただし
N
1
x
 i
N i 1
N
1
 (x
  )2
i
N i 1
ここに、N :データの数 xi :個々の点数 μ:平均 σx:標準偏差
457デフォルトの名無しさん:2010/06/08(火) 14:01:04
実行例
Input N (0<N<101):0 ← 入力エラー
Input N (0<N<101):5
Input x[1] (0<=x<=100):200 ← 入力エラー
Input x[1] (0<=x<=100):30
Input x[2] (0<=x<=100):50
Input x[3] (0<=x<=100):-1 ← 入力エラー
Input x[3] (0<=x<=100):60
Input x[4] (0<=x<=100):80
Input x[5] (0<=x<=100):90
平均点 62.0
No. 1 点数 30 偏差値 35.0
No. 2 点数 50 偏差値 44.4
No. 3 点数 60 偏差値 49.1
No. 4 点数 80 偏差値 58.4
No. 5 点数 90 偏差値 63.1
458デフォルトの名無しさん:2010/06/08(火) 14:02:48
(2) 【平均点と偏差値を計算する関数の作成】
(1)のプログラムにおいて、平均点と学力偏差値を計算する部分を関数 seiseki に改
めたプログラムを作成せよ
◆ 条件
 データの入力と結果の出力はmain関数で行う。
 人数 N に負の値や101以上の値が入力されたときには、再入力するものと
する。
 点数 x[i] に負の値や100点を超える値が入力されたときには、再入力す
るものとする。
 main関数から関数seisekiに
データの数 N
N人分の点数 x[]
を渡し、関数seisekiからmain関数に
平均点 μ
偏差値 T[]
を受け渡す。
ただし、平均点は戻り値を用いて返す。

459デフォルトの名無しさん:2010/06/08(火) 14:06:09
3)【ポインタを用いた平均点と偏差値の計算】
(2)で作成したプログラムの関数 seiseki の中
次のプログラム例を参考にして、
の配列要素をポインタを用いて表すプログラムを作成せよ。
#include <stdio.h>
float average( int N, float *h);
int main(void){
float ave, height[101];
int i,N;
printf("Input N:");
scanf("%d",&N);
for(i=1; i<=N; i++){
printf("身長 ");
scanf("%f",&height[i]);
}
ave = average(N,height);
printf("平均 %6.1f \n",ave);
return 0;
}
float average( int N, float *h){
int i;
float av, total=0.0;
for(i=1; i<=N; i++){
total = total + *(h+i);
}
av = total/N;
return av;
}

460デフォルトの名無しさん:2010/06/08(火) 14:35:27
>>456
wakaran
461デフォルトの名無しさん:2010/06/08(火) 14:42:29
>>459
問題文が日本語になっていない
コードも直接貼ってるから読みにくい
462デフォルトの名無しさん:2010/06/08(火) 14:51:41
>>448
ありがとうございます。
セグメンテーション違反になりましたが、ここからは自分で頑張ってみます。
463デフォルトの名無しさん:2010/06/08(火) 15:31:47
>>456-458
http://codepad.org/JjTL3Zwl

(1)は input と main_q1関数だけ。
実行するときは、main_q1はmainに関数名を直すのが必要です。

(2)は コピペでも動く。main_q1関数は不要なので、消しても良い。

・偏差値はわからないから、wikipediaのを参考に。
・stdevの求め方は、2乗の平均 - 平均の2乗にした。
・データ入力の際に、avgも求められるが、題意から分けた。
464デフォルトの名無しさん:2010/06/08(火) 15:38:36
配列サイズが101だから、iは1からなんじゃね?
465デフォルトの名無しさん:2010/06/08(火) 15:50:30
>>463
Fortranな先生かな。
ttp://codepad.org/wUR2oqj6
466デフォルトの名無しさん:2010/06/08(火) 16:10:08
勝手に例の表記や条件を変えるヤツってなんなの?
467デフォルトの名無しさん:2010/06/08(火) 17:23:12
>>354
すげぇ、てか制御式の中にscanf入れることできるのかー。
>>348
の人は何故だめなのかな。
468デフォルトの名無しさん:2010/06/08(火) 17:30:20
>>348
scanf("%c",&c);
で改行をよみこんでしまうから
後の条件式を総スルーしちゃう。
よってbは0で初期化されたまま

あと実際に動かすと
1
+
1
=
1
となってしまう。
これは
1
+
は計算するように書かれているけど
1
=
は計算するように書かれてないから。
469デフォルトの名無しさん:2010/06/08(火) 17:44:47
>>348を書き直すと
#include<stdio.h>
int main(void){
int a=0,b = 0;
char c=' ';
char prevc=' ';
while(c != '='){
scanf("%d%*c",&a);
scanf("%c",&c);
if (c == '+'){b += a; prevc='+';}
else if(c == '-'){b -= a; prevc='-';}
else if (c == '=')
{
if(prevc == '+' || prevc == ' ') b+=a;
else if(prevc == '-' || prevc == ' ') b-=a;
}

}
printf("%d\n", b);
}
470デフォルトの名無しさん:2010/06/08(火) 18:00:42
>>468
頭良すぎワロタww
何故そのような分析ができるんだ。
C言語難しすぎ、どんだけ繊細なんだよ。
471デフォルトの名無しさん:2010/06/08(火) 18:18:23
お前がバカすぎるだけだってまだわからないのかw
472デフォルトの名無しさん:2010/06/08(火) 18:19:08
それほどでもないけどね
473デフォルトの名無しさん:2010/06/08(火) 18:25:51
>>468はいろいろ間違ってるぞw
474デフォルトの名無しさん:2010/06/08(火) 18:28:05
prevcってなんだ?見たことも聞いたこともない。
苦し紛れの技巧か?

あと='';

''の中は空白だな。
475デフォルトの名無しさん:2010/06/08(火) 18:36:20
>>454
C#宿題スレに書きこんでみるか?
476デフォルトの名無しさん:2010/06/08(火) 18:39:34
#include <stdio.h>

int main(void)
{
int sum = 0, temp;
char ch = '+';

do {
scanf("%d", &temp);
if(ch == '+') sum += temp;
else if(ch == '-') sum -= temp;
scanf(" %c", &ch);
}while(ch != '=');

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

return 0;
}
477デフォルトの名無しさん:2010/06/08(火) 18:46:02
あげて古いの蒸し返してるのは:4 ◆nNHcoCEvyoだろ
こいつに何かを理解させるのは無理だって
478デフォルトの名無しさん:2010/06/08(火) 19:03:06
>>474
一個前のを取っておきたかったんだと思うよ。技巧ってほどじゃない
479デフォルトの名無しさん:2010/06/08(火) 19:03:07
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):オイラーの定理の仮証明
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:visual c++
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:初心者なので。。。

互いに素なnとaについてオイラーの定理が成り立つか確かめる。
とりあえずnは1以上5以下の数とし、aは1以上n以下とする。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10654.txt
これを実行すると何故か一部でエラーが出るんですが(プログラミング的な意味ではなく)
その理由と解決方法を教えてください
480デフォルトの名無しさん:2010/06/08(火) 19:17:35
>>479
count = 1;の位置がおかしい
481デフォルトの名無しさん:2010/06/08(火) 19:19:22
>>480
なにがココまではおkなんだか・・・
ありがとうございます
482デフォルトの名無しさん:2010/06/08(火) 19:21:07
関係ないけどそのままだと数が大きくなるとオーバーフローしてしまう。
oira *= a;
oira %= n;
ってすれば数が大きくなっても対応可能。
483デフォルトの名無しさん:2010/06/08(火) 19:23:02
>>482
まじでそこを聞こうと思ってたところです
ありがとうございます
484デフォルトの名無しさん:2010/06/08(火) 19:46:03
>>482
度々悪いんですけど
なぜそうすればいいのか教えてもらえませんか?
自分で考えてもわかりませんでした

わからないのは
なぜ数が大きくなっても対応出来るのかではなく
なぜこの計算方法でも正しい結果が得られるのかです
485デフォルトの名無しさん:2010/06/08(火) 20:00:30
めんどくさいからパス
486デフォルトの名無しさん:2010/06/08(火) 20:08:13
そか(’・ω・`)
oiraにnで割った余りを入れちゃったら
次a倍すると意図しない値になっちゃいそうなんだ
少なくとも俺のない頭はそう思っちゃうorz

一回一回a倍とnで割った余りをいれようとした根拠とか考え方とかをご教授願いたかった(’;ω;`)
487デフォルトの名無しさん:2010/06/08(火) 20:19:18
これって高校数学の範囲じゃねーの?
488デフォルトの名無しさん:2010/06/08(火) 20:22:42
もしかして俺の勘違いかもしれん

>>482って
if(i == a){
printf("n = %2d, a = %2d", n, a);
oira = 1;
for(j = 0 ; j < count ; j++){
oira *= a;
oira %= n;
}
if((oira - 1) % n == 0){
printf(": verified\n");
}
else{
printf(": error\n");
}
}
みたいに直せって事だよな?
489デフォルトの名無しさん:2010/06/08(火) 20:33:16
もしかして俺のバカさ加減に呆れてますか?(;ω;`)
490デフォルトの名無しさん:2010/06/08(火) 20:55:42
少なくとも処理結果は正しいの?
491デフォルトの名無しさん:2010/06/08(火) 20:58:49
a = n * b + cの形に変形してかけて見ればわからない?

a * a = (n * b + c) * (n * b + c)
=(n*b)^2 + 2 * n * b + c^2

(n*b)^2と2*n*bは明らかにnで割り切れるから、
a*aをnで割った余りはc^2をnで割った余りになる
492デフォルトの名無しさん:2010/06/08(火) 21:07:13
それがoira-1をnで割ったあまりにどう応用できるのか、俺もわからないので>>489は一人で泣かなくていい
493デフォルトの名無しさん:2010/06/08(火) 21:09:19
>>491
解説ありがとう
なんとなく考え方はわかったがまだしっくりこないのでもうちょい粘ってみる

>>492
気が楽になった
494デフォルトの名無しさん:2010/06/08(火) 21:09:30
oira-1がnで割り切れる=oiraをnで割った余りが1
495デフォルトの名無しさん:2010/06/08(火) 21:35:01
#include <stdio.h>

#define NUMBER 5

int gcd(int a, int b) { return a % b ? gcd(b, a%b) : b; }

int main(void)
{
int i, j, c, n, a, oira;

for(n=1; n<=NUMBER; n++) {
for(a=1; a<n; a++) {
if(gcd(n, a)==1) {
printf("n=%2d,a=%2d:", n, a);
for(i=1,c=0; i<n; i++) if(gcd(n, i)==1) c++;
for(i=0,oira=1; i<c; i++) {
oira *= a;
oira %= n;
}
if(oira == 1) printf("verified\n");
else printf("error\n");
}}}

return 0;
}
496デフォルトの名無しさん:2010/06/08(火) 21:37:49
まだ関数と{? : }は習ってないから使っちゃいけないんだ
あくまで標準入出力とfor, while, if だけで
497デフォルトの名無しさん:2010/06/08(火) 21:39:35
使っちゃいけないという思い込み。
本当に使うなといわれた?
498デフォルトの名無しさん:2010/06/08(火) 21:43:13
思い込みだな
使っちゃいけないことは無いだろうが使わないでできるならそれに越したことはないかと
499デフォルトの名無しさん:2010/06/08(火) 21:49:33
そんなことしてる間に
>>491>>494のおかげで理解できました
理解できただけで次似たようなコード書くとき思いつくかどうかは別だけど
500デフォルトの名無しさん:2010/06/08(火) 21:52:52
countを求めるのはnとaが互いに素であることがわかってからの方がいい。
501デフォルトの名無しさん:2010/06/08(火) 21:58:04
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
int plot(int x,int y,int c);は座標(x,y)に色cを設定する関数である。
これが与えられているものとして
コマンドラインから(x,y)の形で座標値が何個か与えられた時
(0<=x,y<=10000)これらに異なる色(選択は自由)を与える。
0<=x,y<=10000を満たす座標の各点についてその点から
最も近い点の色をその点に設定する(2つ以上の点から等距離
にある場合は、これらの点の中でコマンドラインで最初に指定
された点の色を設定)
この処理を行うプログラムを記述する

[3] 環境
 [3.1] OS:Windows XP(Service pack 3)
 [3.2] コンパイラ名とバージョン:visual c++.net 2005
 [3.3] 言語:C++
[4] 期限:6/11迄
[5] その他の制限:
 ヘッダファイルは使わない。extern宣言でplot関数を宣言した
のちにpaint関数のコードを記述すること。
0<=x,y<=10000と仮定して良い。
plot関数を適当な名前の整数ファイルの1024*y+(x % 1024)番目
のレコードに値を設定する実装としたドライバコードを使って
テストするとよい。
502デフォルトの名無しさん:2010/06/08(火) 22:00:43
#include<stdio.h>
#define NUMBER 5
int main(void)
{
int n, a, oira, c, i, j, k;

for(n=1; n<=NUMBER; n++) {
for(a=1; a<n; a++) {
for(i=n, j=a; k=i%j; i=j, j=k);
if(j!=1) continue;
printf("n = %2d a = %2d :", n, a);
for(c=oira=1; c<n; c++) {
for(i=n, j=c; k=i%j; i=j, j=k);
if(j!=1) continue;
oira *= a;
oira %= n;
}
if(oira==1) printf("verified\n");
else printf("error\n");
}}

return 0;
}
503501:2010/06/08(火) 22:00:45
問題文がちょっと抜けてました。訂正させてください。

○この処理を行うプログラムのメイン処理を行う関数
void paint( int argc,char **argv);
を記述する

×この処理を行うプログラムを記述する
504デフォルトの名無しさん:2010/06/08(火) 22:01:35
>>500
助言d
それはその方が無駄にφ(n)(=count)を求めなくて済むからか?
だとしたらその通りかもしれないから今後の参考にするわ
505デフォルトの名無しさん:2010/06/08(火) 22:11:30
あくまで好みだからそんなの自分の好きにしろとか言われるかもだが
プログラム書くときスペースとか改行ってどのタイミングで入れてる?

学校では a = a + 1 って書く奴がいれば a=a+1 って書く奴もいるし
for(i=0;i<5;i++)って書く奴がいれば
for(i = 0 ; i < 5 ; i++)って書く奴もいるし

こうしたほうが効率がいいとか後で見やすいってのがあるなら参考にしたい
今なら癖とかないから変えられるし
506デフォルトの名無しさん:2010/06/08(火) 22:12:55
>>504
そう。
できるだけ必要のない無駄な処理はしないってのが大事。
507デフォルトの名無しさん:2010/06/08(火) 22:14:02
508デフォルトの名無しさん:2010/06/08(火) 22:14:50
何のIDE使ってるか知らないけど
vs2008使ってる俺は適当に書いてから「編集→詳細→選択範囲のフォーマット」で整形してる
509デフォルトの名無しさん:2010/06/08(火) 22:20:58
http://www.textdrop.net/google-styleguide-ja/cppguide.xml
あえてこっちを載せないことに悪意を感じる
510デフォルトの名無しさん:2010/06/08(火) 22:25:31
>>509
知らなかったんだごめんよ
511デフォルトの名無しさん:2010/06/08(火) 22:39:58
>>502が理解できない
てか発想が秀逸すぎて手に負えない
512デフォルトの名無しさん:2010/06/08(火) 22:43:14
最大公約数をループで求めてるだけ
513デフォルトの名無しさん:2010/06/08(火) 22:50:13
とりあえず褒めとけばいいと思ってない?
514デフォルトの名無しさん:2010/06/08(火) 22:52:00
>>501
0<=x,y<=10000を満たす座標の各点についてその点から
最も近い点の色をその点に設定する
ってあるけど

各々の座標の色はどう初期化するべきなの?
なにかしら初期化しておかないと最も近い点の色もなにもないと思うんだけど。
515デフォルトの名無しさん:2010/06/08(火) 23:09:33
引数で与えられた点の色はこっちで好きに決めていいんだろ
516430:2010/06/08(火) 23:12:01
>>505
K&R にしておけば後ろ指をさされることはないかと。
ただし私は

int main() {
...
}

とかえている。
emacs(xyzzy) ではこのほうが便利だから。
517デフォルトの名無しさん:2010/06/08(火) 23:54:47
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10656.txt
  プログラムと問題文が書いてあります
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 2010年6月9日中に提出
[5] その他の制限: 特にありません

よろしくお願いします。
518デフォルトの名無しさん:2010/06/09(水) 03:13:20
[1] 授業単元:プログラミング演習
[2] 問題文:整数nを入力し、以下のようにサイズnの“N型の図形”を、奇数目入力では”*”、偶数目入力では”+”で表示で表示されるプログラムを作成しなさい。なお、処理の終了はnが0以下の時とする。複合条件やスイッチを用いて作製なさい。
実行例
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10658.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4]期限:6/9日PM10:00
[5]その他制限: printf int while scanf float for のみの使用
なお、||、break、return,は使用禁止
プログラム形式はサンプル風にお願いします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10660.txt
519デフォルトの名無しさん:2010/06/09(水) 03:19:59
520デフォルトの名無しさん:2010/06/09(水) 03:41:51
#include <stdio.h>

int main(void)
{
int i, j, n;

while(scanf("%d", &n)==1 && n > 0) {
printf("n=%d\n", n);
for(i=0; i<n; i++) for(j=0; j<=n; j++) printf("%c", j!=n ? j==0||j==n-1||j==i ? n & 1 ? '*' : '+' : ' ' : '\n');
}

return 0;
}
521:2010/06/09(水) 10:07:40
>>432
すごいです!!…学校で習った感じに少し、
書き直させて頂きました(>_<)
こんなに早く出来ると思ってなかったので
びっくりしました。
本当に助かりました!有難う御座いました☆
522デフォルトの名無しさん:2010/06/09(水) 10:43:14
シルエット
カーディガン
レントゲン
サンドイッチ
523デフォルトの名無しさん:2010/06/09(水) 11:01:34
>>501
http://ideone.com/EtsT0
作ってみたけどなんか違うから、だれか直してくれ
524デフォルトの名無しさん:2010/06/09(水) 16:11:42
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10662.txt
[3] 環境
 [3.1] OS:特に指定なし
 [3.2] gcc 3.2
 [3.3] 言語: (C)
[4] 期限: ([2010年6月10日15:00まで] )
[5] その他の制限: なし

よろしくお願いします。
525デフォルトの名無しさん:2010/06/09(水) 16:45:36
>>524

おまえ、5つの数字の列の取りうる範囲は0~99999の100,000個だぞ。
だから入れるバケツの大きさは100,000の配列にしてそこへ2000個のデータを
5桁の数字に対応するバケツに次々入れて、終わったら番号の小さいバケツから順番に
数字を取り出すようにしないとダメだぞ。
526デフォルトの名無しさん:2010/06/09(水) 16:47:15
void sort(char data[][LENGTH+1], int size)
{
int *p = calloc(100000, sizeof(int));
int i, j, k;
for(i=0; i<size; i++) p[atoi(data[i])]++;
for(i=j=0; i<100000; i++) for(k=0; k<p[i]; k++) sprintf(data[j++], "%05d", i);
free(p);
}
527デフォルトの名無しさん:2010/06/09(水) 17:46:55
void sort(char data[][SLENGTH+1], int size) {
  int i, j=0, k;
  char p5[6];
  int *p = calloc(100000, sizeof(int));

  for(i=0; i<size; i++)
    p[atoi(data[i])]++;
  for(i=0; i<100000; i++) {
    if(p[i]) {
      sprintf(p5, "%05d", i);
      for(k=0; k<p[i]; k++)
        strncpy(data[j++], p5, 5);
    }
  }
  free(p);
}
528デフォルトの名無しさん:2010/06/09(水) 18:23:29
>>522
申し訳ないですが、
||と条件文の中にさらに条件文は使用禁止なんです。
説明足りなくてスミマセン。
[printf("%c", j!=n ? j==0||j==n-1||j==i ? n & 1 ? '*' : '+' : ' ' : '\n'); ココと]
[while(scanf("%d", &n)==1 && n > 0)ココの部分です]
529デフォルトの名無しさん:2010/06/09(水) 19:11:45
>>528
これなら大丈夫だろw
http://ideone.com/lGet1
530デフォルトの名無しさん:2010/06/09(水) 19:27:49

5つの数字が全部0って可能性はないのかな?
もし0が入る可能性があるのならallocateされた領域の初期値が0じゃまずいかも。
531デフォルトの名無しさん:2010/06/09(水) 19:28:55
data[000000]++;
532デフォルトの名無しさん:2010/06/09(水) 19:39:49
>>530
お前は何をいってるんだ
533デフォルトの名無しさん:2010/06/09(水) 20:07:46
>>529
何度もすみません
さっきの説明が分かりにくかったですね;
forの中にscanfとかを入れるのがダメなんです。
1行に付きscanf、forなどは1つです。
printf
int
while
scanf
float
for
のみの使用です。

それ以外は使用禁止です。
return
||
else
if
は使用禁止です。


534デフォルトの名無しさん:2010/06/09(水) 20:09:59
>>528
誰が禁止って言ったの?
535デフォルトの名無しさん:2010/06/09(水) 20:21:51
>>531-532

わはははは、javaやりながらここ見てたから勘違いだ。笑えwwwww
536デフォルトの名無しさん:2010/06/09(水) 20:33:58
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
次の仕様を満たすプログラムを作成せよ
「xy 平面内に任意の電荷量の点電荷を複数個配置する.xy 平面内の原点Oを中心とする4 m 四方(±2 m)の領域内において,位置r(x, y)に形成される電界Erや電位Φrを計
算する.」複数個の点電荷で形成される電界Erや電位Φrを,任意の位置r で計算する際は,重ね合わせの原理を用います
電界ベクトルの計算は, x 成分とy 成分に分けて行います
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:6月11日
[5] その他の制限: 特になし
537デフォルトの名無しさん:2010/06/09(水) 20:54:43
学校でやってないところは使うなと
先生に言われました;;
538デフォルトの名無しさん:2010/06/09(水) 21:01:58
エスパー無理
539デフォルトの名無しさん:2010/06/09(水) 21:03:14
>>537
学校と先生を教えてくれるかな?w
540デフォルトの名無しさん:2010/06/09(水) 21:04:30
>>537
誰だお前は
541デフォルトの名無しさん:2010/06/09(水) 21:11:04
学校でやってないこと 使うなと
講師の先生(せんせ)に 言われたよ
――痴楽 綴り方教室
542デフォルトの名無しさん:2010/06/09(水) 21:13:19
≫538
例ですと
前回の課題の
問題文:整数nを入力し、以下のようになサイズnの”Z型の図形”を”*”で表示するプログラムを作成しなさい。
ただし、図形を表示するためのnの値は3以上とし、2以下の値が入力された場合は処理を終了する様にしなさい。
[実行例]
3      <-n入力
n=3
***
 *
***
4 <-n入力
n=4
****
   *
  *
****  
8 <-n入力
n=8
********
         *
        *
       *
     *
   *
  *
********
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10660.txt
はこうなりました。
543デフォルトの名無しさん:2010/06/09(水) 21:21:14
エスパーできないって言ってるんだが
544537 542:2010/06/09(水) 21:27:23
≫534
すみません!!
番号うつの忘れてました。
ホントすみません;;
545デフォルトの名無しさん:2010/06/09(水) 21:35:42
546デフォルトの名無しさん:2010/06/09(水) 22:00:30
<iostream>とか<studio.h>って何が違うんですか?
547デフォルトの名無しさん:2010/06/09(水) 22:03:59
>>546
STanDard InputOutput Headerな
定義されてる関数群がちがう。
548デフォルトの名無しさん:2010/06/10(木) 00:33:37
もう本当に挫折しそうです。
関数を二つ pen()とqen()として作って
int main()の中に呼びたいんですが
この時pen()の実引数をqen()にしたいんですが
これがうまくいきません、どうしたらいいですか?
レス代行なので長いプログラムは書けません・すいません。
int main(void)
a=pen();
qen(a);
としてもpen()とqen()が別個に呼び出されるだけで一つの作業と
なりません。
549デフォルトの名無しさん:2010/06/10(木) 02:48:35
>>548
penの引数をqenの引数にしようとしているようには見えないので、いろいろおっちょこちょいな人なのかな。
関数ポインタをキーワードにいろいろ調べてみてください。
550デフォルトの名無しさん:2010/06/10(木) 06:07:31
pen()の実引数をqen()にするなら
pen(qen);
だろ。
551デフォルトの名無しさん:2010/06/10(木) 06:46:15
pen(void (*p)(void)); かなシグネチャは

pen()の中で (*p)(); もしくは p(); として呼び出す
552デフォルトの名無しさん:2010/06/10(木) 07:52:36
>>550
double a;
qen(a);
pen(qen);
ですか?普通に無理でしたが・・
pen(qen);だけでもまぁ無理でした。
>>551
pen((*p)(qen(a));ってことですか?これも無理でした。
553デフォルトの名無しさん:2010/06/10(木) 07:55:25
関数ポインタってのあるんですが、馬鹿でした。で
int mainの中で
p= pen;
qen((*p)pen());とかごちゃごちゃ色々なとこ変えて、
付け足して
90回くらい思考錯誤したけど全部だめした......
ちなみにpen()、qen()自体はそれぞれsin関数とcos関数
です。ポインタ関数理解したいのでこのままの構造でい
きたいと思ってます。
554デフォルトの名無しさん:2010/06/10(木) 07:59:47
何がしたいのかさっぱり伝わってこない
555430:2010/06/10(木) 08:09:29
>>553
#include <stdio.h>
#include <math.h>
double p(double (*f)(double), double a)
{
return sin((*f)(a));
}

double q(double a)
{
return cos(a);
}

int main()
{
double a, b;
a = 3.1415926;
b = p(q, a);
printf("%f\n", b);
return 0;
}
/* end */
556デフォルトの名無しさん:2010/06/10(木) 08:12:37
cos()の返り値をsin()の引数にするってw
557デフォルトの名無しさん:2010/06/10(木) 08:21:43
関数を関数の引数にするってことを理解できてないようにみえる
558デフォルトの名無しさん:2010/06/10(木) 08:23:28
>>554
関数を2つ呼び出して、一つの関数をもうひとつの関数の
引数にしたいんです。ただそれだけです。
559デフォルトの名無しさん:2010/06/10(木) 08:23:50
>>555
わざわざありがとうございます、doubleじゃなくてfloatでした。
この時も関数ポインタはfですね?
あとretrunっているのですか?どういう役割なのかなぁ....
それとa=3.1415926..とは?
色々ややこしいなぁ、簡単なプログラムなのにこんな複雑だとは....
560デフォルトの名無しさん:2010/06/10(木) 08:25:31
>>558
もしかして
sin(cos(a));
か?この式に何の意味があるのかは不明だが
561デフォルトの名無しさん:2010/06/10(木) 08:27:38
>>559
問題を適切に抜き出す能力が足りないだけ
少なくとも俺は>>558読んでもさっぱりわからん
562デフォルトの名無しさん:2010/06/10(木) 08:28:07
>>560
それでオッケーなら>548でもオッケーだろ
563デフォルトの名無しさん:2010/06/10(木) 08:30:26
こういう自分の勝手な解釈で嵌ってくアホ見ると、
余計なことしないで教科書のサンプルでも打ち込んでろって思うな
564デフォルトの名無しさん:2010/06/10(木) 08:38:27
マゾなんだろ
簡単な事をわざわざ複雑怪奇に書いて苦しみ悶える事に快感を覚えるタイプ
565デフォルトの名無しさん:2010/06/10(木) 08:39:27
>>561
いやめちゃくちゃ単純なんですが・・
合成関数のプログラムですよ。
sin(cos(a))ですよ。
関数が二つあるんだから、二つの関数呼び出す必要ありますよね。
全然意味不明じゃないですが・・・
566デフォルトの名無しさん:2010/06/10(木) 08:44:22
x=cos(a);
y=sin(x);
変数と代入から勉強だな。
567デフォルトの名無しさん:2010/06/10(木) 08:47:18
>>565
それはcos(a)の返り値をsin()の実引数にするといい、
cos()をsin()の実引数にするとは言わない。
正しく用語を使えてないから、他人に正しく伝わらない。
568デフォルトの名無しさん:2010/06/10(木) 08:47:37
>>565
まだわからない。
double sincos(double a)
{ return sin(cos(a)); }
ではどうだめなのか。
569デフォルトの名無しさん:2010/06/10(木) 08:51:53
>>567
すいません。その通りです。返却値をsin()の実引数の実引数にしたいんです。

>>568
あぁ絶対言うかと思いました。
別に合成関数のプログラム作りたいわけじゃなくて、関数の呼び出しという
構造を学びたいだけで。それなら僕も考えてました。複雑なプログラムはそれ
じゃ無理です。

570デフォルトの名無しさん:2010/06/10(木) 08:55:31
お前に複雑なプログラムの何がわかるってんだよw
571デフォルトの名無しさん:2010/06/10(木) 08:58:56
っと、>>569はなりすましか
572553:2010/06/10(木) 09:00:44
このスレにいる人は全員低脳ばっかりですね。
573デフォルトの名無しさん:2010/06/10(木) 09:01:44
・質問者はなりすましを防ぐため、トリップを使ってください。
名前欄に、「好きな数字#...」に続けて任意の文字列
574デフォルトの名無しさん:2010/06/10(木) 09:02:36
>>567
以後気をつけますんで、お願いします、どうしたらいいでしょう....
>>570
少し複雑になったら関数が必要だから。別にプログラムの何もわからないが。
575デフォルトの名無しさん:2010/06/10(木) 09:03:29
>>574
日本語でおk
576 ◆mDrzcbRHP2 :2010/06/10(木) 09:04:48
>>573
すいません。

>>569>訂正
実引数の実引数にしたい。→実引数にしたい。
577デフォルトの名無しさん:2010/06/10(木) 09:06:22
>>576
おまい誰だよ
578:2010/06/10(木) 09:09:20
再び、お願いします(_ )

【質問テンプレ】
[1] 授業単元:C言語 演習問題4-14
[2] 問題文(含コード&リンク):身長と標準体重を表示するプログラムを作成せよ。
               なお、表示する身長の範囲(開始値、終了値、増分)は、整数値として読み込み、
               標準体重は小数点以下2桁だけ表示すること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: main.c Visual Studio 2008
 [3.3] 言語: C++
[4] 期限: 22年6月18日17:00まで
[5] その他の制限: do文やif文、for文までです

file:///C:/Users/aika/Desktop/%E3%83%9E%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E8%A8%80%E8%AA%9E/c.html

一応上記まで作り、実行も出来たのですが
実行時エラーで問題のように上手くいきません。
多分、水色で示したところが間違っているのだと
思うのですが…(p‥`)

手直し(?)という形で宜しくお願いします、
579デフォルトの名無しさん:2010/06/10(木) 09:10:47
>>578

>file:///C:/Users/aika/Desktop/%E3%83%9E%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E8%A8%80%E8%AA%9E/c.html

ふざけてんの?
580デフォルトの名無しさん:2010/06/10(木) 09:15:44
aikaって名前?
581デフォルトの名無しさん:2010/06/10(木) 09:25:42
>>580
>file:///C:/Users/aika/Desktop/マークアップ言語/c.html
http://pc12.2ch.net/test/read.cgi/tech/1274827528/424
582デフォルトの名無しさん:2010/06/10(木) 09:29:11
スーパーハカーでもなきゃ、あんたのPCの中身はわからんよw
583デフォルトの名無しさん:2010/06/10(木) 09:33:03
>>581
それはわかってんよ
実行時エラーとか水色で示した部分がこちらは知りたいわけ
584566 ◆/91kCCQXBo :2010/06/10(木) 10:23:24
>>548 >>552 >>559
#include <stdio.h>
#include <math.h>
/*  double sin( double x ); */
/*  double sin( double x ); */
float r(double (*p)(double), double (*q)(double), float a)
{
  return (*p)((*q)(a));
}

int main()
{
  printf("%f\n", r(sin, cos, 1.0));
  return 0;
}
585デフォルトの名無しさん:2010/06/10(木) 10:29:07
>578 は、AKBオタ。
586デフォルトの名無しさん:2010/06/10(木) 10:34:42
仲間が見つかってよかったねw
587デフォルトの名無しさん:2010/06/10(木) 10:53:59
>>616
% Prolog (その一)

バケツソート(_整列されたならび) :-
    abolish('$temp'/2),
    findall(S,(for(1,_,2000),ランダムな文字列の発生(S)),L),
    バケツソート(L,_整列されたならび),!.

バケツソート(L,_整列されたならび) :-
    バケツに吐き出す(L),
    findall(X,(鍵候補値を昇順に発生させる(S),バケツから拾い上げる(S,X)),_整列されたならび).

数値文字候補ならび(['0','1','2','3','4','5','6','7','8','9']).

鍵候補値を昇順に発生させる(S) :-
    数値文字候補ならび(L),
    member(A,L),member(B,L),member(C,L),member(D,L),member(E,L),
    concat_atom([A,B,C,D,E],S).

ランダムな文字列の発生(S) :-
    数値文字候補ならび(L),
    findall(A,(for(1,_,5),M is (random mod 10) + 1,list_nth(M,L,A)),L2),
    concat_atom(L2,S),!.
588デフォルトの名無しさん:2010/06/10(木) 11:02:44
>>587
なるほど、よくわかりました
589:2010/06/10(木) 11:13:51



すみません…どう書いたらいいのか
よく分からなかったもので。

#include <stdio.h>

int main(void)
{
int i;
int low, high, step;

printf( "何cmから:" ); scanf( "%d", &low );
printf( "何cmまで:" ); scanf( "%d", &high);
printf( "何cmごと:" ); scanf( "%d", &step);

for(i=low; i<=high; i+=step) {
printf( "%dcm %.2fkg\n", low, ((low += step <= high) - 100) * 0.9);
printf( "%dcm\n", low += step);
}

return( 0 );
}

上記のfor{文}のところです。。。


本当にすみませんでした、
また宜しくお願いします。
590デフォルトの名無しさん:2010/06/10(木) 11:23:54
589 の for 内 printf 1発目
副作用関連で鼻から悪魔コード じゃない? (関数引数での , は副作用完了点じゃないよな?)
591587:2010/06/10(木) 11:33:47
ごめんなさい。誤爆です。行方不明だと思ったらこんなところに書き込んでいたか。
592デフォルトの名無しさん:2010/06/10(木) 11:42:47
>>590
本当やね

low2 = ((low += step <= high) - 100) * 0.9;
printf( "%dcm %.2fkg\n", low, low2);

とすればうまくいくはず
593デフォルトの名無しさん:2010/06/10(木) 11:44:26
あ、だめだ

low2 = ((low + step <= high) - 100) * 0.9;
printf( "%dcm %.2fkg\n", low, low2);
low += step <= high;

か?
594581 ◆/91kCCQXBo :2010/06/10(木) 11:51:26
#include <stdio.h>

int main(void)
{
  int i;
  int low, high, step;

  printf( "何cmから:" ); scanf( "%d", &low );
  printf( "何cmまで:" ); scanf( "%d", &high);
  printf( "何cmごと:" ); scanf( "%d", &step);

  for(i=low; i<=high; i+=step) {
    printf( "%dcm 標準体重=%.2fkg BMI(22)=%.2fkg\n", i, (i - 100) * 0.9, 22.0*i/100*i/100);
  }
  return 0;
}
595デフォルトの名無しさん:2010/06/10(木) 18:59:06
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
以下のようにmain関数を定義し、mainの引数を合計するプログラムsumを作成せよ。ただし、引数の数は未定であり、実行時に決定されるものとする。
int main(int argc, char *argv[])
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2010年6月15日まで
[5] その他の制限:
端末上で
./sum 3.2 1.9 2.3
と入力すると
7.4000
と出力されるようにする。
596デフォルトの名無しさん:2010/06/10(木) 19:27:07
#include <stdio.h>
int main(int argc, char *argv[])
{
  int i;
  float tmp, sum=0;

  for(i=1; i<argc; i++){
    sscanf(argv[i], "%f", &tmp);
    sum += tmp;
  }
  printf("%g\n", sum);
}
597デフォルトの名無しさん:2010/06/10(木) 19:56:13
#include <stdio.h>
int main(int argc, char *argv[])
{
printf(argv[1])
printf(argv[2])
}
のようにするとき,コマンドからargv[]にデータを入れないとエラーがでます。
配列argv[]の初期値はどのように設定すればよいのでしょうか?
598デフォルトの名無しさん:2010/06/10(木) 20:08:21
if(argc<=1) exit(1);
599デフォルトの名無しさん:2010/06/10(木) 21:00:42
2つの自然数aとbの最大公約数gcd(a, b)を求め、それを出力するプログラムを作成せよ。
なお、m = a % b としたとき、gcd(a, b) は m≠0 の場合 gcd(b, m) に等しく、 m=0 の場合 b に等しい。


2つの自然数aとbを入力させ、a 人から b 人を選ぶ組み合わせ comb(a, b)を求め、それを出力するプログラムを作成せよ。
なお、comb(a, b) = comb( a-1, b) + comb( a-1, b-1) であり、 b==0 もしくは b==a のとき comb(a, b) = 1 である。


今週は2つありますが。。。よろしくお願いしますorz
600デフォルトの名無しさん:2010/06/10(木) 21:16:32
>>597
argc == 1 の時はargvを調べないようにする
601デフォルトの名無しさん:2010/06/10(木) 22:50:26
>>599

なお~~。の部分はプログラムのテストに使うくらいで、実際の問題とはなんの関連もないわな。
602デフォルトの名無しさん:2010/06/10(木) 23:41:09
【質問テンプレ】
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10665.txt
[3] 環境
 [3.1] OS: (特になし)
 [3.2] gcc
 [3.3] 言語: (C)
[4] 期限: ([2010年6月14日00:00まで])

よろしくお願いします。
603デフォルトの名無しさん:2010/06/10(木) 23:42:17
すいません。書き忘れましたが、・・・・の部分がわからないので教えていただけないでしょうか?
604デフォルトの名無しさん:2010/06/10(木) 23:46:28
>>501,523
ボロノイ図の問題かな?
AREA_SIZEを必要に応じて(10000などに)書き換えて下さい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10666.cpp
605デフォルトの名無しさん:2010/06/11(金) 00:22:35
606デフォルトの名無しさん:2010/06/11(金) 12:44:03
統計学で言うモードに相当するプログラムを書いてます
まだ途中ですが次のように書いていました
ですが書いている途中にエラーがででコンパイルできません
Visual C++ でやってます

エラーの理由とその解決方法を教えてください
#include<stdio.h>

int main(void)
{
int score[101], score, number;

printf("input of number is ");
scanf("%d", &number);

for (int j = 0; j < 101; j++) {
score[j] = 0;
}
for (int i = 0; i < number; i++) {
scanf("%d", &score);
if (0 <= score && score <= 100) {
score[score]++;
}else {
break;
}
}
return 0;
}
607デフォルトの名無しさん:2010/06/11(金) 12:52:35
score って変数を二つ宣言してるからじゃ?
608デフォルトの名無しさん:2010/06/11(金) 12:52:39
エラーメッセージ書いておいてくれないと回答面倒だよ
609デフォルトの名無しさん:2010/06/11(金) 12:56:24
scoreはscore[0]を表すってことを忘れてました
すみません
610デフォルトの名無しさん:2010/06/11(金) 13:28:28
(゚Д゚ )ハァ?
611デフォルトの名無しさん:2010/06/11(金) 13:30:46
違うの?
配列名は配列の先頭要素のアドレスを表すってあるけど
ポインタを詳しく理解してないからアドレスとはなんぞやって聞かれてもクエスチョンマークだけど
612デフォルトの名無しさん:2010/06/11(金) 13:38:11
「配列名は配列の先頭要素のアドレスを表す」を
「配列名は配列の先頭要素を表す」こう解釈したんだろうけど
知らない言葉を無視して前後をくっつけて理解した気になってたら
しょっちゅうトラブル起こるよ
613:2010/06/11(金) 13:44:44
>>594

そうですね!!ありがとうございます!
理解出来ましたm(_ _)m

本当にありがとうございます!!!

614デフォルトの名無しさん:2010/06/11(金) 13:49:40
BASIC上がりか
615デフォルトの名無しさん:2010/06/11(金) 17:02:14
[1] 授業単元: scanf
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10668.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 6月12日 午後9:00 まで
[5] その他の制限:for文まで習ってます。問1、2両方お願いします。


よろしくお願いします。

616501:2010/06/11(金) 17:13:24
>>604,501,523
どうもありがとうございました。参考にさせて頂きます。
ボロノイ図でググってみましたが関連が深そうです。
課題は「データベース構造設計、更新効率性と正規性のバランス」
がテーマの講座で出たものでした。
617デフォルトの名無しさん:2010/06/11(金) 17:38:05
>>615
#include <stdio.h>
問一
int main(void)
{
int i,num[3]={0},t,j,k;
for(i=0;i<3;i++)
scanf("%d", num+i);

j=num[0]/num[2];
k=num[1]/num[2];
for(i=j;i<=k;i++){
t=num[2]*i;
if(num[0]<=t && t<=num[1] )
printf("%d*%d=%d\n",num[2],i,num[2]*i);
}
}
618デフォルトの名無しさん:2010/06/11(金) 17:46:46
619デフォルトの名無しさん:2010/06/11(金) 17:58:02
void q1() {
int a, b, c, t, i;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
t = a % c;
if (t != 0)
a += c - t;
for (i = a; i <= b; i += c) {
printf("%d, ", i);
}
}
>>617
初期値をループで求めるのはどうなのと思わなくもない
620619:2010/06/11(金) 18:00:00
ごめん >>618 に対してだった
621デフォルトの名無しさん:2010/06/11(金) 18:38:41
【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文 :関数ポインタの配列を使い、入力文字列によって各関数へ分岐させるプログラムを作りなさい。
[3] 環境  :C言語
[4] 期限  :2010/06/12

よろしくお願いします。
622デフォルトの名無しさん:2010/06/11(金) 19:20:13
>>621
#include <stdio.h>
void foo() { printf("foo"); }
void bar() { printf("bar"); }
void buzz() { printf("buzz"); }
int main() {
char input[100];
void (*function_table[])() = {
foo, bar, buzz,
};
char* function_names[] = {
"foo", "bar", "buzz", 0,
};
int i = 0;
scanf("%s", input);
while (function_names[i]) {
if (strcmp(function_names[i], input) == 0) {
function_table[i]();
break;
}
i++;
}
return 0;
}
こんなん?
623デフォルトの名無しさん:2010/06/11(金) 19:32:15
>>622
ありがとうございます。参考にさせていただきます。
624デフォルトの名無しさん:2010/06/11(金) 19:39:27
>>622
function_table
function_names
↑この配列を一つにまとめるにはどうしたらよいですか?
625622:2010/06/11(金) 19:56:00
struct function {
char name[100];
void (*call)();
};

int main() {
char input[100];
struct function table[] = {
{ "foo", foo }, { "bar", bar }, { "buzz", buzz }, { "", 0 }
};
struct function *p_table = table;
scanf("%s", input);
while (p_table->call != 0) {
if (strcmp(p_table->name, input) == 0) {
p_table->call();
break;
}
p_table++;
}
return 0;
}
こんなのしか思い浮かばなかった、参考程度に
626デフォルトの名無しさん:2010/06/11(金) 21:09:03
>>595です。
>>596だと、出力結果が7.4となってしまうのですが、7.4000となるようにしたいです。
627デフォルトの名無しさん:2010/06/11(金) 21:12:10
%g ではなく、%.4gに修正
628596:2010/06/11(金) 21:12:23
勢いで書いた
printf("%g\n", sum);
 ↓
printf("%.4f\n", sum);
629デフォルトの名無しさん:2010/06/11(金) 21:27:01
[1] 授業単元: プログラム演習
[2] バブルソートは、 配列がすでに適正な順序, あるいはそれに近い順序で並んでいても
n-1回の走査をしなければならない。すなわち、 n*(n-1)/2回の比較が行われなければならない.。そこで、各回の走査の終わりに
 交換が行われたか否かをチェックするようにし、交換が行われていなければそれ以上走査をしないのでソートを完了するようなプログラムを作成せよ

[3]
 [3.1] Windows
 [3.2] Visual Studio 2008
 [3.3] C++
[4] 期限:2010年6月15日
630デフォルトの名無しさん:2010/06/11(金) 21:33:13
631 ◆QZaw55cn4c :2010/06/11(金) 21:42:57
632デフォルトの名無しさん:2010/06/11(金) 21:43:55
>>630
ありがとうございます。参考にします。
633631:2010/06/11(金) 21:46:15
>>632
ごめんなさい、そちらは C 言語なんです。>>631 を使ってください。
634デフォルトの名無しさん:2010/06/11(金) 22:02:03
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
任意の要素数のint型の配列を作成し、その配列の中にキーボードから数値を入力する関数 make_ary、総和を求める関数 sum_ary、配列からある要素を探す関数 search_ary、配列を表示する関数 printf_ary を実装しなさい。
その際、要素数もキーボードから入力するように設計し、配列はちょうどその要素分だけを作成するようにしなさい。
各関数では添字演算子([])を用いずに、ポインタ操作で実装しなさい。
返り値と引数をどのようにしたら良いか考えて実装すること。
以下のmain関数を参考にする。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10672.txt
また、実行例は以下のようにすること。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10670.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2010年6月14日まで
[5] その他の制限:特にないです。
よろしくお願いいたします。


635デフォルトの名無しさん:2010/06/11(金) 22:07:10
>>628出力結果が0.0000になってしまいますが…
636596:2010/06/11(金) 22:10:17
もいちど a.exe
637デフォルトの名無しさん:2010/06/11(金) 22:18:12
>>635です。すみません、できました。
638デフォルトの名無しさん:2010/06/11(金) 22:25:04
#include <stdio.h>

int main(void)
{
char str[100];
char a;
int i;

printf("文字列を入力してください:");
scanf("%s",str);

for(i=1;str[i]!='\0';i++){
a=str[i];
str[i-1]=str[i];
str[i]=a;
str[i-1]--;
}

printf("%s",str);

return 0;
}

1行入力しその文の正順と逆順を出力するようなプログラムにしたいです。
ここまでできました。神様助けて
639デフォルトの名無しさん:2010/06/11(金) 22:53:35
以前質問させていただきましたが再度お願いします。
【質問テンプレ】
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10665.txt
[3] 環境
 [3.1] OS: (特になし)
 [3.2] gcc
 [3.3] 言語: (C)
[4] 期限: ([2010年6月14日00:00まで])

<bmp.h>のヘッダファイルはこれです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10669.txt

・・・・の部分がわからないので教えていただきたいです。よろしくお願いします。
640 ◆QZaw55cn4c :2010/06/11(金) 23:03:19
641 ◆/91kCCQXBo :2010/06/11(金) 23:04:20
>>638
#include <stdio.h>
#include <string.h>
int main(void){
  char str[100];
  char a;
  int i, len, len2;

  printf("文字列を入力してください:");
  scanf("%s", str); /* 改行は含めない */
  len = strlen(str);
  len2 = len / 2;
  for(i = 0; i < len2; i++){
    a = str[i];
    str[i] = str[len - i - 1];
    str[len - i - 1] = a;
  }
  printf("%s\n",str);
  for(i = len2-1; i >= 0; i--){
    a = str[i];
    str[i] = str[len - i - 1];
    str[len - i - 1] = a;
  }
  printf("%s\n",str);
  for(i = len2; i > 0; i--){
    a = str[i-1];
    str[i-1] = str[len - i];
    str[len - i] = a;
  }
  printf("%s\n",str);
  return 0;
}
642デフォルトの名無しさん:2010/06/11(金) 23:21:22
>>640-641

すいません。出力しましたが、できません。

Today is Thursday..yadsruhT si yadoT ←のようになりません。

input string: Today is Thursday.
yadoT                ←になってしまいます。
643デフォルトの名無しさん:2010/06/11(金) 23:22:47
#include <stdio.h> だけでできるようにしたいんですが・・。
644デフォルトの名無しさん:2010/06/11(金) 23:47:27
>>643
#include <stdio.h>

#define MAX_LENGTH 100

int main(void){
char str[MAX_LENGTH],*rev;
int i,len;
rev = str+MAX_LENGTH/2;

puts("文字列を入力して下さい。");
scanf("%s",str);
for(len=0;str[len]!='\0';++len) ;
for(i=len-1;i>=0;--i) rev[len-i-1] = str[i];
rev[len+1] = '\0';

printf("正順:%s, 逆順:%s\n",str,rev);

return 0;
}
645デフォルトの名無しさん:2010/06/12(土) 00:00:24
>>644

文字列を入力して下さい。
oday is Thursday.
正順:Today, 逆順:yadoTフ
続行するには何かキーを押してください . . .

と出力されるんですが…
646デフォルトの名無しさん:2010/06/12(土) 00:05:14
>>639
サンプル画像って、ある?
647デフォルトの名無しさん:2010/06/12(土) 00:06:55
648デフォルトの名無しさん:2010/06/12(土) 00:07:10
zipで
649デフォルトの名無しさん:2010/06/12(土) 00:10:07
>>645
fgetsは使っていいのか、scanfだと厳しいと思うんだが
650デフォルトの名無しさん:2010/06/12(土) 00:10:58
>>647
ありがとうございます。
651デフォルトの名無しさん:2010/06/12(土) 00:11:54
>>643
#include <stdio.h>

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

fgets(str, 256, stdin);

for(p = str; *p; p++) if(*p == '\n') { *p = '\0'; break; }

for(q = str, p--; p > q; p--, q++) {
char temp = *p;
*p = *q;
*q = temp;
}

puts(str);

return 0;
}
652デフォルトの名無しさん:2010/06/12(土) 00:14:09
printf("%s", str);をループの前に追加で
653デフォルトの名無しさん:2010/06/12(土) 00:16:12
654デフォルトの名無しさん:2010/06/12(土) 00:28:05
>>639
#include<stdio.h>
#include"bmp.h"

int main(void) {
unsigned char image[256][256];
long hist[32] = {0};
char* filename = "gray.bmp";
int x, y, i, k;
LoadBMP(filename, image[0], 256, 256);
for (y = 0; y < 256; y++) {
for (x = 0; x < 256; x++) {
hist[image[y][x] / 8]++;
}
}
for (i = 0; i < 32; i++) {
printf("%02d | ", i);
for (k = 0; k <= hist[i] / 100; k++)
printf("*");
printf("\n");
}
}
655デフォルトの名無しさん:2010/06/12(土) 00:32:24
13日にはやぶさが帰ってくるようです
褒めてあげよう

以下の動画は事実をもとにしています

http://www.youtube.com/watch?v=6kZbeAK-vBE&feature=related
http://www.youtube.com/watch?v=CZhjJlMn2hM&NR=1
656デフォルトの名無しさん:2010/06/12(土) 00:51:47
>>634
http://codepad.org/LGxZYbGJ
だれか採点お願い
657デフォルトの名無しさん:2010/06/12(土) 01:42:44
Visual C++使ってるんだけど
Tabキー押したときスペース2つ分入力されるような設定って出来ない?
658デフォルトの名無しさん:2010/06/12(土) 01:45:36
>656
make_ary
戻り値が-1,-2になることに違和感がある。
int *make_ary(int size);
プロトタイプを↑にして、エラー発生したら、NULLを返すようにする方がすっきり。

print_ary
配列の全要素に対して操作するような場合、常に
for(i = 0;i < size;i++) {
printf("%d, ", ary[i]);

}
のように書く方がよい。
get_numsはそのように書いてある。そろえること。
659デフォルトの名無しさん:2010/06/12(土) 01:49:09
>>657
VC++ Express 2008だけど、
ツール>オプション>テキストエディタ>C/C++で
タブサイズ、インデントサイズが決められる。
660デフォルトの名無しさん:2010/06/12(土) 01:56:22
>>656
表示形式が実行例と異なっている。
scanf()でnumに読み込んでからary[i]に代入するのは無駄。
661デフォルトの名無しさん:2010/06/12(土) 01:58:55
>>659
できたできた
トンクス
662 ◆/91kCCQXBo :2010/06/12(土) 09:37:14
>>651 を勝手に参考にさせていただきました。
#include <stdio.h>
int main(void)
{
  char str[100], a_temp;
  int i, j, len;

  printf("文字列を入力してください:");
  fgets(str, 100, stdin);
  len = strlen(str);
  if(str[len-1] == '\n')
    str[--len] = '\0';
  printf("%s", str);

  if(len%2 != 0) j=len/2; else j=len/2-1;
  for(i=len/2; str[i] != '\0'; i++, j--) {
  /*  printf("%d,%d\n",i,j); */
    a_temp = str[i];
    str[i] = str[j];
    str[j] = a_temp;
  }
  printf("%s", str);
  return 0;
}
663デフォルトの名無しさん:2010/06/12(土) 11:36:37
>>617 >>618 >>619
ありがとうございます!
664デフォルトの名無しさん:2010/06/12(土) 12:25:51
プログラム自体じゃなく書き方の方針を教えて欲しいんだが

[問題] 2次元以上の配列
画面上に基盤を書くプログラムを書け。基盤とは縦横19本ずつの線が等間隔に並んだ図形である。
18×18個の正方形あるいは長方形をぴったり詰め合わせた図形と言っても良い。

まだint型しか習ってないからcharとか使えないし
a[18][18]とか置いてもその後の方針がわからん
プログラム自体は書かなくていいんでヒントだけ誰か教えてください
665デフォルトの名無しさん:2010/06/12(土) 12:32:33
2次元配列の使用例

int a[18][18];
int i, j;

for (i = 0; i < 18; ++i) {
  for (j = 0; j < 18; ++j) {
    a[i][j] = 0;
  }
}
666デフォルトの名無しさん:2010/06/12(土) 12:34:19
それはわかすんです
でもそれじゃ出力されるのは楕円だから基盤ぽくならないじゃないですか
でも四角い数字なんてないし

printfで縦線と横線を書いていくんだったら配列要らないし

もうわけわかめです
667デフォルトの名無しさん:2010/06/12(土) 12:35:44
こんな奴か

┏━┳━┳━┳━┳━┳━┳━┳━┓
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃  ┃  ┃  ┃○┃●┃  ┃  ┃  ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃  ┃  ┃  ┃●┃○┃  ┃  ┃  ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃
┗━┻━┻━┻━┻━┻━┻━┻━┛
668デフォルトの名無しさん:2010/06/12(土) 12:35:52
楕円?
669デフォルトの名無しさん:2010/06/12(土) 12:39:48
>>667
たぶんそんな感じに出力されればおkです

>>668
配列の全要素に0を代入してそれを出力しても
00000
00000
00000
みたいな感じにしかならないじゃないですか
楕円です
670デフォルトの名無しさん:2010/06/12(土) 12:42:52
要素が 0 ってのは何もない「状態」を表してるだけであって、そのまま 0 を表示
しなきゃいけないって決まりはないよ
671デフォルトの名無しさん:2010/06/12(土) 12:50:25
ではないも無い状態を使ってどのように書けば四角形を出力できますか?
if (a[i][j] == 0) printf("□");
ってやると配列が無駄な気がして
そもそもこの方法じゃ四角と四角の間に隙間ができて基盤ぽくならないですよね
672デフォルトの名無しさん:2010/06/12(土) 12:51:59
>>664
"基盤"か"碁盤"か。
もし碁盤のつもりなら、交点を中心に円を描くから、
int a[19][19];
にして置かないと。
673デフォルトの名無しさん:2010/06/12(土) 12:53:45
碁盤でした
すいません
674デフォルトの名無しさん:2010/06/12(土) 13:32:07
だれか>>664お願いします
675デフォルトの名無しさん:2010/06/12(土) 13:35:31
>>674
switch文は使っていいの?
676デフォルトの名無しさん:2010/06/12(土) 13:37:13
配列が無駄の意味がわからない
677デフォルトの名無しさん:2010/06/12(土) 13:41:40
>>675
まだ習ってないんでfor, while, ifのみでお願いします

>>676
if (a[i][j] == 0) printf("□");
みたいにやるくらいなら
for(i = 0; i < 18; i++) {
for (j = 0; j < 18; j++) {
printf("□");
}
printf("\n");
}
で十分な気がするんです

配列を有効活用出来ないっていうか
使おうと思えば使えますけど無駄になるような気がして
678デフォルトの名無しさん:2010/06/12(土) 13:44:55
' ' == 0
━ ==1
┃ ==2
┣ ==3
┫==4
┻ ==5
┳ ==6
┏━ ==7
━┓==8
┗━ ==9
━┛==10
座標ごとにみたいな感じで配列に数字入れといて初期化して

出力のための関数で
if(a[i][j]==1) printf("━");

みたいなのを作っていけばおk
679デフォルトの名無しさん:2010/06/12(土) 13:45:39
座標ごとにみたいな→座標ごとに上記の表みたいな
680デフォルトの名無しさん:2010/06/12(土) 13:49:24
なるほど
それでやってみます
681デフォルトの名無しさん:2010/06/12(土) 13:55:28
>>677
データと表示部分は分けるべき
enum{NONE,WHITE,BLACK}として
枠を書きつつ
if (a[i][j] == NONE) printf(" ");
else if(a[i][j] == WHITE) printf("○");
else if(a[i][j] == BLACK) printf("●");
else printf("?");
みたいに配列の内容によって表示を変えるようにした方がいい
682デフォルトの名無しさん:2010/06/12(土) 13:58:36
>>681
ありがとうございます
でもenumってやつはまだ習ってなくてよくわからないです(´;ω;`)
683デフォルトの名無しさん:2010/06/12(土) 14:04:53
>>682
#define NONE 0
#define WHITE 1
#define BLACK 2
でもいいよ
間違っても>>678みたいに配列に表示部分の数字を持たせるなよ
あとで石をいじるときに苦労するぞ
684デフォルトの名無しさん:2010/06/12(土) 14:07:13
なるほど
685デフォルトの名無しさん:2010/06/12(土) 19:42:30
#include <stdio.h>

int main(void)
{
int i, j;
char board[19][19] = {0};
char *mark[] = {"+", "○", "●"};

for(i=0; ;i++) {
for(j=0; j<19; j++) printf(" |");
printf("\n");
if(i==19) break;
for(j=0; j<19; j++) printf("―%s", mark[board[i][j]]);
printf("―\n");
}

return 0;
}
686デフォルトの名無しさん:2010/06/12(土) 20:05:40
【質問テンプレ】
[1] 授業単元: プログラム実験
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10676.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: Cです
[4] 期限: ([2010年06月14日22:59まで] または [無期限] のいずれか)
[5] その他の制限: よろしくお願いします!!
687デフォルトの名無しさん:2010/06/12(土) 20:30:31

[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):フィボナッチ数列に出現する数字を順に並べた時(「1,1,2,3,5,8,13,21、・・・」を
「1,1,2,3,5,8,1,3,2,1、・・・」とみなす)
非常にランダムな動きをする。50番目の数字が何であるかを求めるプログラムをかけ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:よくわかんないですけどcentOSのGNOME端末でのコンパイル
 [3.3] 言語:C
[4] 期限:できるだけ早くお願いします><
[5] その他の制限:#include<math.h>をつかわずに#include<stdio.h>のみのプログラムでお願いします。
688デフォルトの名無しさん:2010/06/12(土) 20:31:03
void arr_rev1(int arr[], int n1, int n2)
{
while(n1 < n2) {
int temp = arr[n1];
arr[n1++] = arr[n2];
arr[n2--] = temp;
}}

void arr_rev2(int *p1, int *p2)
{
while(p1 < p2) {
int temp = *p1;
*p1++ = *p2;
*p2-- = temp;
}}
689デフォルトの名無しさん:2010/06/12(土) 20:46:37
>>687
#include <stdio.h>

int main(void)
{
int f1 = 1, f2 = 1, c = 2, i, j;

while(1) {
f1 += f2;
f2 = f1 - f2;
for(i = 0,j = 1; j < f1; i++, j*=10);
c += i;
if(c >= 50) {
for(i = c; i > 50; i--) f1 /= 10;
printf("%d\n", f1 % 10);
break;
}}

return 0;
}
690デフォルトの名無しさん:2010/06/12(土) 20:49:35
>>688さんありがとうございます >>686です
main文はどうなりますか?
計算時間を測定しなければならないんですが、よくわからないのでお願いします!
691デフォルトの名無しさん:2010/06/12(土) 20:57:26
>>690
stdio.hに時間の測定をする関数は含まれてない
time.hが必要
692デフォルトの名無しさん:2010/06/12(土) 21:17:03
#include <stdio.h>
#include <time.h>
void arr_rev1(int arr[], int n1, int n2)
{
while(n1 < n2) {
int temp = arr[n1];
arr[n1++] = arr[n2];
arr[n2--] = temp;
}
}
void arr_rev2(int *p1, int *p2)
{
while(p1 < p2) {
int temp = *p1;
*p1++ = *p2;
*p2-- = temp;
}
}

int main (void){
int t1 ,t2;
double t0;

t1 = clock();

ここがわかりません よろしくお願いします!

t2 = clock();
t0 = (t2 - t1 + 0.0) / CLOCKS_PER_SEC;
printf("%d %f\n",c,t0);
return 0;
}
693デフォルトの名無しさん:2010/06/12(土) 21:26:20
すみません>>686です↑
694デフォルトの名無しさん:2010/06/12(土) 21:33:13
>>689さんありがとうございます!!
695デフォルトの名無しさん:2010/06/12(土) 23:01:41
[1] 授業単元:プログラム実習
[2] 問題文(含コード&リンク):2次元配列を使って2点を結ぶ線分を引くプログラムを書く
[3] 環境
 [3.1] OS:Windows vista
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語: C
[4] 期限: 無期限
[5] その他の制限:if, for, while, マクロ, 配列のみでお願いします
関数, ポインタ, swich, stdio.h以外のヘッダは使用不可です。
696デフォルトの名無しさん:2010/06/13(日) 00:12:42
>>695
その"線"とやらは
*********
こんなアスタリスクの集合みたいなのでいいの?
697デフォルトの名無しさん:2010/06/13(日) 00:15:02
問題文を満たせば何でもいいんでしょ。その発想力も試されてる。
698デフォルトの名無しさん:2010/06/13(日) 00:15:18
もちろんデバイスコンテキストを使って良いんだよな?
699デフォルトの名無しさん:2010/06/13(日) 00:20:54
>>696
たぶんそうです

>>698
デバイス・・・?
ごめんなさい
たぶん使わない方がいいと思います
700デフォルトの名無しさん:2010/06/13(日) 00:26:08
>>699
windowsなら線はデバイスコンテキスト使ってウインドに描画するモノだ。
C言語自体に描画する標準手法はない。そういうものは言語の外の話だからな。
なんか教材で絵が描けるライブラリとか使ってないのか?
701デフォルトの名無しさん:2010/06/13(日) 00:42:19
>>700
使ってないです
てか>>697の言うとおり正確な図を書くのではなく
その発送やら配列の使い方やらを学ぶための問題なので
問題文を満たすなんちゃってのプログラムが書ければそれでいいと思います
702デフォルトの名無しさん:2010/06/13(日) 01:02:14
>>701
ふーん。じゃあこんなんでどう?
http://codepad.org/tuBrtADI
703デフォルトの名無しさん:2010/06/13(日) 01:06:56
ごめんちょっとまちがえた。
×canvas[y][i] = 1;
○canvas[i][y] = 1;
704デフォルトの名無しさん:2010/06/13(日) 01:19:03
>>701
やっぱまちがえてた。こっちが最後。
点(x1,y1)と点(x2,y2)を色々変えてみればいろいろ引けるよ。

http://codepad.org/cI0oiouq
705デフォルトの名無しさん:2010/06/13(日) 01:33:25
[1] 授業単元:オブジェクト指向プログラミング
[2] 問題文(含コード&リンク):四則演算の記号の個数を入力すると、その個数に合わせた
               文字列を表示するようにしなさい。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2010年6月14日まで
実行例:
記号の個数を入力
+: 4
-: 2
*: 3
/: 2   <===入力した文字列中に/記号は2個

結果
++++--***//   <===四則演算の記号のみで出力する
706デフォルトの名無しさん:2010/06/13(日) 01:44:55
>>705
こんなかんじ?
int main(int argc, char ** argv)
{
int i, a, b, c, d;
printf("記号の個数を入力\n");
printf("+:");
scanf("%d", &a);

printf("-:");
scanf("%d", &b);

printf("*:");
scanf("%d", &c);

printf("/:");
scanf("%d", &d);

for(i = 0 ; i < a ; i++) putchar('+');
for(i = 0 ; i < b ; i++) putchar('-');
for(i = 0 ; i < c ; i++) putchar('*');
for(i = 0 ; i < d ; i++) putchar('/');
return 0;
}
707デフォルトの名無しさん:2010/06/13(日) 01:53:40
>>695
ブレセンハムの直線を引くアルゴリズムでくぐれ
708デフォルトの名無しさん:2010/06/13(日) 01:59:48
709デフォルトの名無しさん:2010/06/13(日) 02:49:49
きもちわりーw
710デフォルトの名無しさん:2010/06/13(日) 04:34:25
>>704
縦線が引けねーぞw
711デフォルトの名無しさん:2010/06/13(日) 09:05:06
>>686
int mpow1(int a, int e, int m) {
int r = 1;
while(e--) r = (r * a) % m;
return r;
}

int mpow2(int a, int e, int m) {
int r = 1, p = a % m;
while(1) {
if(e & 1) r = (r * p) % m;
if(!(e >>= 1)) break;
p = (p * p) % m;
}
return r;
}
712デフォルトの名無しさん:2010/06/13(日) 09:39:25
>>692
こんなんでいいかな?うちの環境では全部1秒未満で終了するので全部0になるけど。

int main(void)
{
int data[] = {1000000, 10000000, 100000000};
int i, *buf;
clock_t t0, t1, t2;

for (i = 0; i < (int)(sizeof(data) / sizeof(data[0])); i++) {
if ((buf = (int *)malloc(sizeof(int) * data[i])) == NULL) {
printf("メモリが足りません。\n");
exit(1);
}

t1 = clock();
arr_rev1(buf, 0, data[i] - 1);
t2 = clock();
t0 = (clock_t)((t2 - t1 + 0.0) / CLOCKS_PER_SEC);
printf("arr_rev1(n = %d): %f\n", data[i], t0);

t1 = clock();
arr_rev2(buf, &buf[data[i] - 1]);
t2 = clock();
t0 = (clock_t)((t2 - t1 + 0.0) / CLOCKS_PER_SEC);
printf("arr_rev2(n = %d): %f\n\n", data[i], t0);

free(buf);
}

return 0;
}
713デフォルトの名無しさん:2010/06/13(日) 09:44:53
>>712
それからこうしないとnが偶数の時に実行時エラーになるか暴走する。

void arr_rev1(int arr[], int n1, int n2)
{
while (n1 <= n2) {
int temp = arr[n1];

arr[n1++] = arr[n2];
arr[n2--] = temp;
}
}

void arr_rev2(int *p1, int *p2)
{
while (p1 <= p2) {
int temp = *p1;

*p1++ = *p2;
*p2-- = temp;
}
}
714デフォルトの名無しさん:2010/06/13(日) 09:54:18
何を言ってるんだ?
715デフォルトの名無しさん:2010/06/13(日) 10:17:27
>>714
<=じゃなくて<でやってみろよ
Windowsだとエラーダイアログを吐いて落ちる
716デフォルトの名無しさん:2010/06/13(日) 10:19:01
悪い俺の勘違いだった
>>713は取り消して下さい(汗
717デフォルトの名無しさん:2010/06/13(日) 10:20:41
何をどう勘違いしたんだ?
718デフォルトの名無しさん:2010/06/13(日) 10:47:50
いや、

if ((buf = (int *)malloc(sizeof(int) * data[i])) == NULL) {



if ((buf = (int *)malloc(data[i])) == NULL) {

と書いていて落ちたのを勘違いしてただけ
忘れてくれ
719デフォルトの名無しさん:2010/06/13(日) 10:57:52
関数を全く理解してないってのは理解できた
720デフォルトの名無しさん:2010/06/13(日) 11:45:09
は?何言ってんの?
721デフォルトの名無しさん:2010/06/13(日) 11:53:27
なんだただの煽り屋の馬鹿か
722デフォルトの名無しさん:2010/06/13(日) 11:55:17
[1] 授業単元: ハフマン符号
[2] 問題文(含コード&リンク): 文字とその確率を入力しそれに対するハフマン符号を文字に割当て
表示する
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: (2010年6月14日
[5]
723デフォルトの名無しさん:2010/06/13(日) 12:22:08
関数の内容を理解してたら>>713>>715みたいな恥ずかしい書き込みはしないで済んだのにねw
724デフォルトの名無しさん:2010/06/13(日) 12:31:28
typedef struct {
char b;
int i;
short s;
double d;
char c;
} test;

とあるプログラム文の一部で、
struct内のみいじって出来るだけ少ないメモリを使用するようにする。
という問題なのですが良く分かりません。
上から順にchar,char,short,int,doubleと並び替えても違いました。
文の中でchar bを使ってなかったので、そもそもchar b;は必要なのか?と思い消しても駄目でした。
725デフォルトの名無しさん:2010/06/13(日) 12:32:11
>>724の続き
int main() {
test a;
test many[10000];

printf("Address of char member: %p\n", &a.c);
printf("Address of int member: %p\n", &a.i);
printf("Address of short member: %p\n", &a.s);
printf("Address of double member: %p\n", &a.d);
printf("Difference between addresses of int and char: %d\n",
(int)&a.i - (int)&a.c);
printf("Difference between addresses of short and int: %d\n",
(int)&a.s - (int)&a.i);
printf("Size of char: %d\n", sizeof(char));
printf("Size of short: %d\n", sizeof(short));
printf("Size of int: %d\n", sizeof(int));
printf("Size of double: %d\n", sizeof(double));
printf("Size of test structure: %d\n", sizeof(test));
printf("Size of array of test structures: %d\n", sizeof(many));

return 0;
}
726デフォルトの名無しさん:2010/06/13(日) 12:35:25
ヒント:test内の宣言の順番を入れ替える
727デフォルトの名無しさん:2010/06/13(日) 12:40:29
並び替えたって書いてあるし。
もとの順番では32tyeで、char,char,short,int,doubleに並び替えたら16byteになるからOKでは?
728デフォルトの名無しさん:2010/06/13(日) 12:45:06
>>723
関数の内容を吟味する前に実行してエラーが出たから勘違いしたんだよカス
その上で後から内容は見るつもりだったわ
お前みたいなヴォケに言われなくてもな
729デフォルトの名無しさん:2010/06/13(日) 12:47:00
うわw
730デフォルトの名無しさん:2010/06/13(日) 12:48:42
吟味しないで他人様のコードにケチつけるのは人としてどうかと思う
731デフォルトの名無しさん:2010/06/13(日) 12:49:47
>>722
http://codepad.org/n8gRbiTl

>>724
並べ替えても最小になるのは環境依存だしあまり意味がない気がするのだが組み込みの実習とかなのか?
ただそのプログラムならunion使っても問題ないからunion使えばいい
732デフォルトの名無しさん:2010/06/13(日) 12:53:41
>>730
人としてまで言うか
関係ないだろカス
733デフォルトの名無しさん:2010/06/13(日) 12:54:21
テッテレー
734デフォルトの名無しさん:2010/06/13(日) 12:56:56
人のコードをろくに読まずに偉そうな口調でケチつけたあげくに逆ギレってw
735デフォルトの名無しさん:2010/06/13(日) 12:57:25
>727
Byte数は分からないが
C++ならcharは1、C言語ならcharは1 Byteで1 <= sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(double)は保証されているので、小さい順に(char, char, short, int, doubleの順に)並べれば少なくとも大きくはならない
つまり、等しくなるか小さくなるかのどちらかである

union使おうとしたのは内緒ね
736デフォルトの名無しさん:2010/06/13(日) 12:58:33
構造体のアラインメントの問題じゃねーの?
737デフォルトの名無しさん:2010/06/13(日) 13:00:19
小さい順でも大きい順でも、整列できてればいいような気もするが
738デフォルトの名無しさん:2010/06/13(日) 13:01:55
>>735
パディングというものがあってだな・・・決め打ちはデータの送受信で死ぬ
739デフォルトの名無しさん:2010/06/13(日) 13:05:40
>>734
注意をするなら言い方ってものがあるだろうが
お前らわざと逆ギレを誘うような言い方しやがって
740デフォルトの名無しさん:2010/06/13(日) 13:07:06
分かってない馬鹿に馬鹿にされるのはものすごく腹が立つからしょうがない
741デフォルトの名無しさん:2010/06/13(日) 13:07:12
やってみろよ、なんて偉そうに言っといて間違ってるから煽られるんだよw
742デフォルトの名無しさん:2010/06/13(日) 13:08:22
注意するのに言い方とかw
会社で怒られたら出社拒否しそうだなw
743デフォルトの名無しさん:2010/06/13(日) 13:11:26
>>731
それはハフマン符号ではなくてコンマ符号ではないのか
744デフォルトの名無しさん:2010/06/13(日) 13:12:25
>>741
俺は言ってねえよ
馬鹿か

>>742
当たりめえだろ
物には言い方があるんだよ
覚えとけ
下手な注意はかえって相手の怒りを買うだけだ
745デフォルトの名無しさん:2010/06/13(日) 13:15:46
小学生かw
746デフォルトの名無しさん:2010/06/13(日) 13:19:38
だめでした… <<= 小学生か?
747デフォルトの名無しさん:2010/06/13(日) 13:20:14
恥ずかしい間違いをした>>713,715じゃないなら、なんでそんなに顔真っ赤なの?
748デフォルトの名無しさん:2010/06/13(日) 13:27:31
>>743
コンマ符号ではなくハフマン符号のつもりだがどこか間違ってる?
749デフォルトの名無しさん:2010/06/13(日) 13:29:32
俺は朝鮮人だ 文句あっか
火病を起こすのがデフォなんだよわかったか
750デフォルトの名無しさん:2010/06/13(日) 13:31:44
>>731
ごめんコンマ符号ではないわ

一意に復元可能な符号で瞬時符号でもあるがハフマン符号ではない
751デフォルトの名無しさん:2010/06/13(日) 13:35:16
<♯`Д´>ドッカーン !!
752デフォルトの名無しさん:2010/06/13(日) 13:41:03
【質問テンプレ】
[1] 授業単元: プログラミング実験
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10678.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C言語
[4] 期限: ([2010年06月14日00:00まで]
[5] その他の制限:よろしくお願いします
753デフォルトの名無しさん:2010/06/13(日) 13:42:03
うわぁ朝鮮人だぁ
754デフォルトの名無しさん:2010/06/13(日) 13:49:07
[1] 授業単元:オブジェクト指向プログラミング
[2] 問題文(含コード&リンク):四則演算の記号を連続し入力すると、各々の文字列を入れると、
文字の個数を結果として表示するようにしなさい。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:2010年6月14日
[5] int main(void){からスタート

実行例:
文字列を入力
***-++/+-+/     <===四則演算の記号のみを入力する。
結果
+: 4
-: 2
*: 3
/: 2     <===入力した文字列中に/記号は2個
755デフォルトの名無しさん:2010/06/13(日) 13:52:06
>>724 >>725の問題文です。
The example program below defines a structure with several members of different types. Copy and run the program, and find out how much memory the test structure uses.

Change the order of the members in the test structure. Observe the changes in memory layout and memory usage.

Try to find the program version where the test structure uses as little memory as possible. Change only the structure definition, not the program itself.
756デフォルトの名無しさん:2010/06/13(日) 13:54:08
>>748 どこが間違えかと言われると説明しにくいんだが
例えば、cat data2
8
A
50
B
20
C
10
D
8
E
5
F
4
G
2
H
1
が与えられたとき
「2元符号語で最小の確率を持つ葉から最も確率が近い葉同士を区別するのに1ビット使っていく」と
A:0
B:10
C:1100
D:1101
E:1110
F:11110
G:111110
H:111111
になるべきではないかと、木の作り方によって符号語は変わるけど、平均符号長は最小になるはず
この場合だと平均符号長L = 2.2で、試しにソースプログラムで符号化した符号ではL = 2.22になった
よって、ハフマン符号とは言えない
757デフォルトの名無しさん:2010/06/13(日) 13:59:41
>>754
#include <stdio.h>

int main(void)
{
char str[256], *p, sign[] = "+-*/";
int i, cnt[256] = {0};

printf("文字列を入力\n");
scanf("%s", str);
for(p = str; *p; p++) cnt[*p]++;

printf("結果\n");
for(i = 0; i < 4; i++) printf("%c:%d\n", sign[i], cnt[sign[i]]);

return 0;
}
758デフォルトの名無しさん:2010/06/13(日) 14:30:38
>>756
なるほど手抜きせずにちゃんと木構造作らないとダメってことか
759デフォルトの名無しさん:2010/06/13(日) 14:36:29
木構造か

C++が使えるならstd::mapを使って簡単に組めるんだが
760デフォルトの名無しさん:2010/06/13(日) 14:36:54
>>755
typedef struct { char b; int i; short s; double d; char c; } test;
http://codepad.org/sVj5d2d2
Size of test structure: 24

typedef struct { char b; char c; short s; int i; double d; } test;
http://codepad.org/I3j79dFU
Size of test structure: 16

typedef struct { double d; int i; short s; char b; char c; } test;
http://codepad.org/IQ3Iscby
Size of test structure: 16

# 何をどう勘違いしたんだ?
761デフォルトの名無しさん:2010/06/13(日) 15:26:39
In C, arrays and pointers are almost equivalent.
This means that a program written with array[index] can be converted to using (almost) no [ and ].

Convert the program below. The only place where you need [ and ] is
for the declaration of the data structure (student marks[10]).

Before starting, save the output of the program for later checking.
Then work in very small steps. After each step, recompile your program and check (using diff)
that it is still working correctly (i.e. still produces the same output).

#include <stdio.h>

typedef struct {
int english;
int math;
} student;
762デフォルトの名無しさん:2010/06/13(日) 15:28:06
>>761続き
int main(void) {
int i, english_total=0, math_total=0;
student marks[10] = {
{45, 69},
{68, 80},
{57, 75},
{35, 50},
{60, 71},
{80, 74},
{78, 80},
{32, 46},
{48, 56},
{100, 100}
};

printf("英語\t数学\t平均\n");

for (i=0; i<10; i++) {
printf("%3d\t%3d\t%5.1f\n",
marks[i].english, marks[i].math,
(marks[i].english+marks[i].math)/2.0 );
}

for (i=0; i<10; i++) {
english_total += marks[i].english;
math_total += marks[i].math;
}
763デフォルトの名無しさん:2010/06/13(日) 15:30:52
>>762続き
printf("%5.1f\t%5.1f\t%5.1f\n",
english_total/10.0, math_total/10.0,
(english_total+math_total) / 20.0);

return 0;
}

Hint:
For various parts of your program, use the following steps:
Step 0) Compile and run the above program, and save the output for later tests using diff.
Step 1) Change array[i] to *(array+i). If necessary, add some more parentheses.
Step 2) Define variables p and endp, both pointers to the student structure.
Initialize endp so that it points to the location after the marks array.
Step 3) In each for loop, initialize p to point to the start of the marks array.
To do two initializations, link them with a comma (e.g. i=0, j=0).
Step 4) In each for loop, increment p in addition to incrementing i.
To do two increments, you can again use a comma (e.g. i++, j++).
Step 5) Change (marks+i) to p.
Step 6) Change (*pointer).member to pointer->member .
Step 7) Use the endp variable in the end condition of the for loop, comparing p and endp.
Step 8) Remove the integer loop variable i.
Remove unnecessary parentheses.
764デフォルトの名無しさん:2010/06/13(日) 16:03:32
英語で問題だしてくるなんておハイソな学校に通ってらっしゃるのね。
[ ] 使わずにポインタにしろって問題?
765デフォルトの名無しさん:2010/06/13(日) 16:07:29
>>764
そんな感じです。
先生がGAIJINさんなもので、どうしても英語になります。
766デフォルトの名無しさん:2010/06/13(日) 16:07:49
とりあえず書き換えたところだけ。ヒントは読んでない。

student *p;

for (p=marks; p<marks+10; ++p) {
printf("%3d\t%3d\t%5.1f\n",
p->english, p->math,
(p->english+p->math)/2.0 );
}

for (p=marks; p<marks+10; ++p) {
english_total += p->english;
math_total += p->math;
}
767デフォルトの名無しさん:2010/06/13(日) 16:09:30
訳すと


C言語ではポインタと配列はほぼ同じである。
これは配列array[index]を使用したプログラムは[と]を使わないプログラムに書き換えられるという事である。

下のプログラムを書き換えよ。
[と]を使って良いのは構造体データ(student marks[10])の宣言だけとする。

始める前に後で比較するために最初のバージョンを保存しておけ。
そして少しずつ変更を加えよ。
変更を加える度にdiffで比較し、再コンパイルしてまだ動作することを確認しながら進めろ。


だな。
768デフォルトの名無しさん:2010/06/13(日) 16:24:09
>>766
p < marks+10
 ↓
student *endp = marks+10;
p != endp
769デフォルトの名無しさん:2010/06/13(日) 16:52:37
[1] 授業単元:オブジェクト指向プログラミング
[2] 問題文(含コード&リンク):実行例のように入力した文字列を文字型配列に代入し、
規則に従った文字列を出力するようにしなさい。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:2010年6月14日
[5] int main(void){からスタート
実行例:
文字列を入力
*3-2*4n+5    <===「*3」は*を3回表示するということ、
結果         「n」は改行ということ。
***--****      *3-2*4n+5は、*を3回表示した後、-を2回、*を4回
+++++        表示し、改行した後、+を5回するという意味
770デフォルトの名無しさん:2010/06/13(日) 16:56:34
>>767
大体そんな感じでいいと思うがdiffでの比較対象が明らかになってないので
動作確認は変更後の出力結果が変更前のそれとdiffで一致するかどうかね

>>767を読んだとき、diffの対象がソースコードに思えたので一応言っておく
771デフォルトの名無しさん:2010/06/13(日) 17:06:04
>>770
それにしても、出来上がったのを提出しろとか、だれかにやらせろとか、
または途中経過も、とかは英語では言ってないの?
772デフォルトの名無しさん:2010/06/13(日) 17:07:48
722です

ハフマン符号お願いします
773デフォルトの名無しさん:2010/06/13(日) 17:37:59
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10680.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C言語
[4] 期限: 2010年06月15日8:50まで

/*??  文章  */ がある所にプログラムを書き込む方式です
よろしくお願いします
774デフォルトの名無しさん:2010/06/13(日) 18:01:29
[1]Cプログラミング(中級者コース)
[2]
f(1)=1
f(2)=12-34=-22
f(3)=123-894+765=-6
f(4)=1234-1213145+1116156-10987=-106742
f(5)=12345-161718196+152425207-142322218+131211109
......
規則性を見いだしてf(n)を計算するプログラム(n<=1000迄は最小限対応)
全桁正確に計算すること
[3] WIndows XP sp3/Visual C++2008/C言語
[4] 6/30迄
[5] stdio.hのみ#include。stdio.hで定義されている関数や定数
を利用出来る。それ以外は自分で定義して使うこと
775デフォルトの名無しさん:2010/06/13(日) 18:12:45
>>774 ここまで分かった
f(1)=1
f(2)=12
  -34=-22
f(3)=123
  -894
  +765=-6
f(4)= 1 2 3 4
  -121314 5
  +111615 6
  -10 9 8 7=-106742
f(5)= 1 2 3 4 5
  -16171819 6
  +15242520 7
  -14232221 8
  +13121110 9
776デフォルトの名無しさん:2010/06/13(日) 18:19:01
>>761->>763
やりかけです。エラーが…
#include <stdio.h>
typedef struct {
int english;
int math;
} student;
int main(void) {
english_total=0, math_total=0;
student *p = {
{45, 69},
(略)
{100, 100}
};
student *endp=p;
p!=endp;
printf("英語\t数学\t平均\n");
for (p=marks; p<endp; p++) {
printf("%3d\t%3d\t%5.1f\n",
*p.english, *p.math,
(*p.english+*p.math)/2.0 );
}
for (p=marks; p<endp; p++) {
english_total += *p.english;
math_total += *p.math;
}
printf("%5.1f\t%5.1f\t%5.1f\n",
english_total/10.0, math_total/10.0,
(english_total+math_total) / 20.0);
return 0;
}
777デフォルトの名無しさん:2010/06/13(日) 18:19:02
時計回りに回ってるな
778デフォルトの名無しさん:2010/06/13(日) 18:20:23
>>776
演算子の優先順位
*p.english
(*p).english
779デフォルトの名無しさん:2010/06/13(日) 18:22:24
f(n)の第一項は1,12,123,1234って増え続ける
そのほかわからん。
780デフォルトの名無しさん:2010/06/13(日) 18:22:28
2項目の先頭文字のルールは 4*(n-1) かな?

f(n) = 1 2 ... n-1
 -[4*(n-1)] ?
 +[4*(n-1)-1] ?
 -[4*(n-1)-2] ?
  :
781デフォルトの名無しさん:2010/06/13(日) 18:24:12
>>775
あー。なるほど。渦巻き状いにまわるのか
782デフォルトの名無しさん:2010/06/13(日) 18:28:00
f(2)=12-43 じゃないのが謎
783デフォルトの名無しさん:2010/06/13(日) 18:29:28
n<=1000 まで対応 となると 1000x1000 の空間用意して
渦巻き状に埋めてから 筆算のように演算しないと厳しいか?
784デフォルトの名無しさん:2010/06/13(日) 18:41:10
>>752
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10682.c

/* 実行結果
a e m=40000 16000000 30001
計算回数:15999999
0.940000秒かかりました
計算回数:29
0.000000秒かかりました
*/
785デフォルトの名無しさん:2010/06/13(日) 18:42:57
>>774
f(2)=12-43=-31
の間違いじゃね?
786デフォルトの名無しさん:2010/06/13(日) 18:56:32
>>783
筆算しようとすると1000 x 4000いらないか?
n=1000のときは最底辺は29982997...1999だぜ。
787デフォルトの名無しさん:2010/06/13(日) 18:57:04
>>761-->>763途中
#include <stdio.h>
typedef struct {
int english;
int math;
} student;
int main(void) {
int p,endp,english_total=0, math_total=0;
student *p{
{45, 69},
(略)
{100, 100}
};
printf("英語\t数学\t平均\n");
for (p=marks; p<endp; p++) {
printf("%3d\t%3d\t%5.1f\n",
p->english, p->math,
(p->english+p->math)/2.0 );
}
for (p=marks; p<endp; p++) {
english_total += p->english;
math_total += p->math;
}
printf("%5.1f\t%5.1f\t%5.1f\n",
english_total/10.0, math_total/10.0,
(english_total+math_total) / 20.0);
return 0;
}
あと少しで完成しそうですが…
pとendpをどのように定義するかで悩んでます。
788デフォルトの名無しさん:2010/06/13(日) 19:15:47
Step どこまでできた?(diffで結果を比較して)
789デフォルトの名無しさん:2010/06/13(日) 20:14:41
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10683.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C言語
[4] 期限: 2010年06月16日
よろしくお願いします
790458:2010/06/13(日) 20:21:14
>>774
とりあえず渦は巻けたぞ
http://ideone.com/W7KtS
791デフォルトの名無しさん:2010/06/13(日) 20:29:15
>>787
Step 2) Define variables p and endp, both pointers to the student structure.
>>766みたいにすればいいよ
792デフォルトの名無しさん:2010/06/13(日) 20:35:28
>>769
お願いします。
793デフォルトの名無しさん:2010/06/13(日) 20:41:08
>>789
- #define s 10
+ #define s 8
794デフォルトの名無しさん:2010/06/13(日) 20:43:05
何ここってもしかして教師がアルバイトで回答者やってんの?
795デフォルトの名無しさん:2010/06/13(日) 20:46:14
>>774
とんでもない桁の計算になる気がするんだが
796デフォルトの名無しさん:2010/06/13(日) 20:49:15
797デフォルトの名無しさん:2010/06/13(日) 20:53:45
>>794
金がもらえるんならありがたいけどな。
ちなみに俺はコーディングがしたくてIT企業に入ったのにできないからここで欲求不満を解消してるだけ
798デフォルトの名無しさん:2010/06/13(日) 20:55:01
N=1000までだから、多倍長演算が必要だと思う。
Nが1000の場合、どんだけ桁数になるんだろ。
799デフォルトの名無しさん:2010/06/13(日) 21:02:52
>>798
行ごとに交互に減算と加算をするから対して大きな数にならないはず
800デフォルトの名無しさん:2010/06/13(日) 21:05:16
行ごとに2893〜4000桁になるから計算できなくない?
801799:2010/06/13(日) 21:08:17
>>800
そうだな、むりだなw
802デフォルトの名無しさん:2010/06/13(日) 21:08:21
5000〜6000桁くらいじゃね?
803デフォルトの名無しさん:2010/06/13(日) 21:08:25
>>798
stdio.h 以外は include 不可だから、f("1234","-5678") -> "-4444"みたいな関数が必要?
804デフォルトの名無しさん:2010/06/13(日) 21:14:47
805デフォルトの名無しさん:2010/06/13(日) 21:16:13
みんなお目々キラキラ
806デフォルトの名無しさん:2010/06/13(日) 21:17:53
>>774
数値列を生成することろまで作った。 あとは誰か頼む。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10685.c

/* 実行結果
n=6
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
*/
807デフォルトの名無しさん:2010/06/13(日) 21:19:55
808デフォルトの名無しさん:2010/06/13(日) 21:27:13
>>761 >>762 >>763で相変わらず悩んでます
#include <stdio.h>
typedef struct {
int english;
int math;
} student;
int main(void) {
int english_total=0, math_total=0;
student marks[10]{
{45, 69},
(略)
{100, 100}
};
student *p;
student *endp;
p!=endp;
printf("英語\t数学\t平均\n");
for (p=marks; p<endp; p++) {
printf("%3d\t%3d\t%5.1f\n",
p->english, p->math,
(p->english+p->math)/2.0 );
}
for (p=marks; p<endp; p++) {
english_total += p->english;
math_total += p->math;
}
printf("%5.1f\t%5.1f\t%5.1f\n",
english_total/10.0, math_total/10.0,
(english_total+math_total) / 20.0);
return 0;
}
>>766>>768を参考にしましたがうまくいかないです。
809デフォルトの名無しさん:2010/06/13(日) 21:30:14
810デフォルトの名無しさん:2010/06/13(日) 21:45:11
>>774
とりあえずN=7で動くことは確認できたからうp

http://codepad.org/GLVHk36x

多倍長演算は作ったこと無いのでごり押しです。
多分すごいダサイからこの部分を直してくれる人期待。

Nを1000にすると配列を壊すらしく動かなかった。
だから多分すごい桁数になるのではないか?
811デフォルトの名無しさん:2010/06/13(日) 21:57:57
>>809
ハフマン記号がわからないからパスw
812デフォルトの名無しさん:2010/06/13(日) 22:06:57
>>808
15行目の「p!=endp;」は、書く場所が違うというかいらない。ifとかforじゃないのに変数の比較してて変だって思わなかった?
>>768>>761の「for (p=marks; p<marks+10; ++p) {」の「p < marks+10」を書き換えろって意味。
それはもうやってるけど、比較する前にendpに何らかの値を代入しなければいけないよね?それがmarks+10。

813810:2010/06/13(日) 22:36:56
>>774
N=4でやったら多倍長演算で失敗してたので修正したよ。
2行ほどだけど。

一応N=1000で動作するのは確認したが、結果が正しいか自分でテストしてね。
環境によってはスタックが大きすぎてコンパイルできないかも。

http://codepad.org/JHBwazY1
814デフォルトの名無しさん:2010/06/13(日) 23:01:48
>>769
誰かお願いします。
815デフォルトの名無しさん:2010/06/13(日) 23:05:01
>>774
1000までのリスト作ったぞ
http://eload.run.buttobi.net/cgi-bin/img/e_304.zip

N=1000のとき>>813と比較すると最初の4桁が違ってるから正しいかは保障はしない
816デフォルトの名無しさん:2010/06/13(日) 23:19:16
>>769
#include <stdio.h>
int main(void) {
char buffer[100], c, *buffer_pos, pattern = 0;
int i;
buffer_pos = buffer;
printf("input string:");
scanf("%s", buffer);
while (c = *(buffer_pos++)) {
if (c == 'n') {
printf("\n");
pattern = 0;
continue;
}
if (!pattern)
pattern = c;
else {
for (i = 0; i < c - '0'; i++)
printf("%c", pattern);
pattern = 0;
}
}
return 0;
}
エラーチェックとかは一切考慮してない
817デフォルトの名無しさん:2010/06/13(日) 23:25:39
>>816
ありがとうございます。
818 ◆/91kCCQXBo :2010/06/13(日) 23:37:04
>>769
#include <stdio.h>
int main(void){
  int i=0, j, rep;
  char buf[100], c;

  printf("Command > ");
  fgets(buf, 100, stdin);
  while((c = buf[i++]) != '\0') {
  /*  printf("in=%c\n",c); */
    switch(c){
    case '*':
    case '-':
    case '+':
      rep = atoi(&buf[i]);
      for(j=0; j<rep; j++) putchar(c);
    /*  printf("rep=%d\n",rep); */
      break;
    case 'n':
      putchar('\n');
      c = '\0';
      break;
    default:
      c = '\0';
    }
  }
}
819デフォルトの名無しさん:2010/06/13(日) 23:43:06
俺も結果は>>815と同じだ
820デフォルトの名無しさん:2010/06/13(日) 23:51:59
>>813
N=11以降違うっぽいから3桁以上の数字の扱いがおかしいのかも
821デフォルトの名無しさん:2010/06/13(日) 23:54:34
>>774 勝手に>>806を利用
#include <stdio.h>
int main(void){
int n, i, j, k, t, ns[1000] = {0}, tmp, digit[2] = {0}, f, d;
char a[2][6000] = {0}, temp[6000] = {0};
printf("n=");
scanf("%d", &n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) ns[j] += ((j < n / 2) ? 1 : -1);
tmp = (n - 2 * i);
tmp *= tmp;
for (j = i - 1; j < n - i; j++, tmp--) if (j >= 0) ns[j] = tmp;
tmp = ns[n - i - 1];
for (j = n - i - 1; j <= i; j++) ns[j] = tmp++;
tmp = n * n;
for(j = n - 1, k = 0; j >= 0; j--) for(t = tmp - ns[j]; t; t /= 10) temp[k++] = t % 10;
for(j = 0; j < k || a[i&1][j]; j++) {
a[i&1][j] += temp[j];
if(a[i&1][j] >= 10) { a[i&1][j+1]++; a[i&1][j] -= 10;}}
if(digit[i&1] < j) digit[i & 1] = j;
for(j = 0; j < k; j++) temp[j] = 0;}
d = digit[0] > digit[1] ? digit[0] : digit[1];
for(i = d - 1; i >= 0; i--) {
if(a[0][i] > a[1][i]) { f = 0; break;}
if(a[0][i] < a[1][i]) { f = 1; break;}}
for(i = 0; i < d; i++) {
a[f][i] -= a[1-f][i];
if(a[f][i] < 0) { a[f][i+1]--; a[f][i] += 10;}}
while(a[f][d]==0) d--;
if(f) putchar('-');
while(d >= 0) printf("%d", a[f][d--]);
return 0;}
822デフォルトの名無しさん:2010/06/14(月) 00:32:26
>>773
よかったらこれお願いします
823810:2010/06/14(月) 00:48:21
>>820
指摘ありがとうございます。
間違ってmyaddsubの中のp1++,p2++していました。
どっちかが先に終わったら++しちゃいけないですよね。

修正しました。
http://codepad.org/eO9N9Mw4

N=1000も>>815と一致したので多分おk。。

>>821
こちらはすごい簡素なのにイケてますね。
824デフォルトの名無しさん:2010/06/14(月) 01:30:54
連携プレイに泣いた
すごいなこのスレの住人…
825デフォルトの名無しさん:2010/06/14(月) 02:03:10
>>824
ほんとスゴイよね。
スゴイC使いも時々はBASICとか他のプログラミング言語も
勉強してるって良く聞くけど効果あるのかな?
826デフォルトの名無しさん:2010/06/14(月) 03:34:49
C言語初心者です。ポインタの問題で詰まっています。

以下のプログラムの実行結果を記述せよ。
また、”//重要ポイント”とした行の動作について説明せよ。

main(){
int j;
short *ip;
short ii[6];
ip=ii;
*ii=128; *ip++;     //重要ポイント
*ip++=256;
ii[2]=512; *ip++;
*ip++=1024;       //重要ポイント
ii[4]=2048; *ip++;
*ip=4096;
(*ip)++; //重要ポイント
for(j=0;j<6;j++)
printf("ii[%d] = %d ",j,ii[j]);
printf(" Adress of ii[0] is %04x.",ii);
printf(" Adress of ip is %04x.",ip);}

ただし、short型は2バイト。ii[0]のアドレスを0x00010000。
主記憶の1アドレスに対する単位を1バイトとする。処理系によっては警告が出る可能性もある。

とりあえずプログラムを書いて実行してみたのですが、「ii[0]のアドレスを0x00010000」とあるので間違っている気もします。
一応以下が実行結果です。

ii[0] = 128 ii[1] = 256 ii[2] = 512 ii[3] = 1024 ii[4] = 2048 ii[5] = 4097 Adress of ii[0] is 12ff3c. Adress of ip is 12ff46.

実行結果を見て、iiのアドレスをipに入れてii[奇数]に関してはipに入っているアドレスに値を代入、というふうに解釈しています。
827デフォルトの名無しさん:2010/06/14(月) 03:45:41
混乱させるためだけに必要のないところ*をつけるような問題はゴミだな
828デフォルトの名無しさん:2010/06/14(月) 04:12:31
本当に意味のない問題だな……

詰まってるとこに関してだが
「ii[0]のアドレスを0x00010000」と仮定してprintfで何が出力されるか予想しなさいということだろう。
プログラム上で実行しても合うはずがない。
829デフォルトの名無しさん:2010/06/14(月) 05:04:38
>>827-828
ありがとうございます。ただ、必要のないところ、というのが見極められないですね。


printf(" Adress of ii[0] is %04x.",ii);
printf(" Adress of ip is %04x.",ip);

ここに関してですが、たぶんipのアドレスはii[0]のアドレスに対して10増えていると思うので、

Adress of ii[0] is 10000. Adress of ip is 1000A.

でいいのでしょうか?“%04x”の“04”を考慮した書き方が分からないです。
4桁で書くということだと思うのですが、そもそも5桁目まであるので。
830デフォルトの名無しさん:2010/06/14(月) 05:11:05
libsamplerate-0.1.7 win32をコンパイルして頂けませんか?
831デフォルトの名無しさん:2010/06/14(月) 05:16:03
>“%04x”の“04”を考慮した書き方が分からないです。
ちゃんとリファレンス読め
832デフォルトの名無しさん:2010/06/14(月) 05:57:13
>>831
すみません。
ググッてみましたがリファレンスというものがなんなのかわからないです。
833デフォルトの名無しさん:2010/06/14(月) 09:08:49
これ、リファレンス
http://msdn.microsoft.com/ja-jp/library/cc440165(VS.71).aspx
834デフォルトの名無しさん:2010/06/14(月) 09:33:09
>>833
ありがとうございます。
仕様というかそういうのをもっとよく理解しろということでしょうか。
まあ、なんとか自分で実験しておそらく「少なくとも4桁で足りないところには0を入れる」という意味ではないかと納得しました。
ヒントを与えてくれた方々ありがとうございました。
835デフォルトの名無しさん:2010/06/14(月) 13:52:56
Details
When using fgets, the client program has to prepare a buffer for input.
Create a wrapper function (call it getline) for fgets that allocates a buffer using malloc and returns a pointer to the buffer.
Return NULL when there is no more data to read (end-of-file reached).

Assume that lines are at most 100 bytes long (including a terminating null byte).
Also, assume that input is always from stdin.

Create a main program that reads in up to 100 lines.
Output the lines in reverse order.
Use an array of pointers to store the pointers to each line.
You do not have to free the memory used.

Test Data
Test input: 09C1_in.txt ; test output: 09C1_out.txt .

Submit your program to the Programm Checking System.
Hint:
To use malloc, you need to include stdlib.h.

Hint:
Because the length of the buffer and stdin are constant,
and you do not need to pass the buffer to the function,
the signature of your function should be char *getline(void).

Hint:
A wrapper function is a function that wraps another function to make it easier to use.
836デフォルトの名無しさん:2010/06/14(月) 13:56:57
837 ◆QZaw55cn4c :2010/06/14(月) 16:41:34
838デフォルトの名無しさん:2010/06/14(月) 18:10:39
[1] 授業単元:プログラミング言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10688.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:2010 6/16まで
[5] その他:(1)〜(8)の指示のようにお願いします
839デフォルトの名無しさん:2010/06/14(月) 18:35:07
840デフォルトの名無しさん:2010/06/14(月) 19:32:57
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10691.txt

[3] 環境
 [3.1] OS:unix
 [3.2] コンパイラ名とバージョン:gcc 3.4 emacsで作成して、k-termでコンパイルするやつです
 [3.3] 言語:c
[4] 期限: 6月15日

どうぞよろしくお願いします。

問題が見にくいと思われますのでpdfがあります。ここからダウンロードお願いします。
841デフォルトの名無しさん:2010/06/14(月) 19:33:50
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10691.txt

[3] 環境
 [3.1] OS:unix
 [3.2] コンパイラ名とバージョン:gcc 3.4 emacsで作成して、k-termでコンパイルするやつです
 [3.3] 言語:c
[4] 期限: 6月15日

どうぞよろしくお願いします。

問題が見にくいと思われますのでpdfがあります。ここからダウンロードお願いします。http://www.dotup.org/uploda/www.dotup.org964291.pdf.html

連投すみません。。
842デフォルトの名無しさん:2010/06/14(月) 19:47:02
>>841
pdf大丈夫?教官名でてるけど
843デフォルトの名無しさん:2010/06/14(月) 20:00:11
>>835
#include <stdio.h>
#include <stdlib.h>

char *getline(void)
{
char *p = malloc(100);

return fgets(p, 100, stdin);
}

int main(void)
{
int i;
char *p[100];
FILE *fp;

for(i = 0; i < 100; i++) if((p[i] = getline()) == NULL) break;

fp = fopen("09C1_out.txt", "w");

while(i--) fprintf(fp, "%s", p[i]);

fclose(fp);

return 0;
}
844デフォルトの名無しさん:2010/06/14(月) 20:16:24
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):西暦を年号に変換するプログラムを作成する。
ただし、入力できるのは、1868年以降からであり、2008年以降も平成とする。
明治元年、大正元年、昭和元年、平成元年は、各々、1868年,1912年,1926年,1989年である。
下記を参考にプログラムを作成しなさい。
int gannen[]={1989, 1926, 1912, 1868};
char nengou[][8]={"heisei", "syouwa", "taisyou", "meiji"};
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2010年6月14日
[5] その他の制限:int main(void){から始まる
845 ◆/91kCCQXBo :2010/06/14(月) 20:34:30
#include <stdio.h>
#include <stdlib.h>
int gannen[]={1989, 1926, 1912, 1868};
char nengou[][8]={"heisei", "syouwa", "taisyou", "meiji"};
int main(void){
  int i, nen;
  char buf[20];
  do {
    printf("seireki>=1867 > ");
    fgets(buf, 20, stdin);
    nen = atoi(buf);
  } while (nen < 1868);
  for(i=0; ;i++) {
    if(nen >= gannen[i]) {
      printf("%s %d nen\n", nengou[i], nen-gannen[i]+1 );
      break;
    }
  }
}
846デフォルトの名無しさん:2010/06/14(月) 20:39:45
1867になってるとこがあるぞw
847デフォルトの名無しさん:2010/06/14(月) 20:49:58
[1] 授業単元:繰り返し処理
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10694.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月16日まで
[5] その他の制限:初心者です。なるべく簡単でお願いします。

よろしくお願いします。
848デフォルトの名無しさん:2010/06/14(月) 21:02:44
#include <stdio.h>

int main(){
int num,sum=0;
while(1){
scanf("%d",&num);
if(num==0) break;
sum+=num;
}
printf("%d",sum);
return 0;
}
849838:2010/06/14(月) 21:10:11
>>839
VC2008で実行してみたところ
(47) : error C2440: '=' : 'void *' から 'student_t *' に変換できません。
となってしまったのですがどうすればいいでしょうか

わかる方はよければ次のこともお願いします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10695.txt
上記テキスト内の student_t st[STUDENT_NO] = 0
これの 0 の部分はどう書き換えればよいでしょうか
850デフォルトの名無しさん:2010/06/14(月) 21:12:10
>>847
この程度の問題が分からないってどんな授業受けてんの?
851デフォルトの名無しさん:2010/06/14(月) 21:13:55
昔先輩から聞いた話だが、
情報系の専門学校出たヤツをPGとして雇ったら
「コンパイルって何ですか?」って聞かれたそうな。
852デフォルトの名無しさん:2010/06/14(月) 21:16:18
ぷよぷよだろ
853デフォルトの名無しさん:2010/06/14(月) 21:20:01
>>849
{0}
854デフォルトの名無しさん:2010/06/14(月) 21:32:04
>>852
その発想はなかった
855デフォルトの名無しさん:2010/06/14(月) 21:45:17
[1] プログラミング言語
[2] if (head == NULL) head = stup;//一個目を入力
else if (head->st_id >= stup->st_id) {
               /*?? (5) リストのhead側(先頭)にstupを追加する処理を記述する */
/*?? (6) headの中身を現在の先頭のものに入れ替える */
} else {
spt = head;
while (spt->next != NULL ) {
if (spt->next->st_id >= stup->st_id){
break;
}
/*?? (7) sptを次に操作するデータ用に更新する処理を記述する*/
}
stup->next = spt->next;
spt->next = stup;
}
[3] 環境
 [3.1] Windows
 [3.2] Visual Studio 2008
 [3.3] C++


106 taka 65 80 90 100
101 kubo 50 85 70 65
103 hanako 70 75 65 80
104 akane 60 95 80 75
102 tarou 90 80 85 65
105 nara 80 70 50 95
↑これが 左端の番号順になるように(5)〜(7)になんてプログラム書き込めばいいんでしょうか

856デフォルトの名無しさん:2010/06/14(月) 21:48:18
さりげなく>>840と同じ大学か
857デフォルトの名無しさん:2010/06/14(月) 21:51:51
[1] 授業単元:プログラミング実習U
[2] 問題文(含コード&リンク):図と同じASCII文字を表示するプログラムを作成しなさい。

ただし、プログラム中にちゃんと改行を行うこと。<==改行をしなくても勝手に改行されて表示されるため。


[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2010年6月15日
[5] その他の制限:int main(void){から始まる





0x30; 0 0x31; 1 0x32; 2 0x33; 3

0x34; 4 0x35; 5 0x36; 6 0x37; 7

              (省略)

0x78; x 0x79; y 0x7a; z 0x7b; {



858デフォルトの名無しさん:2010/06/14(月) 21:51:58
>>838だった
859 ◆/91kCCQXBo :2010/06/14(月) 22:16:25
#include <stdio.h>
int main(void){
  int i, j;
//  for(i=0x20; i<0x80; i++)
  for(i=0x30; i<0x7c; i++)
  {
    printf("0x%2x; %c ", i, i);
    if(i%4 == 3) printf("\n\n");
  }
}
860 ◆/91kCCQXBo :2010/06/14(月) 22:26:01
(47) : error C2440: '=' : 'void *' から 'student_t *' に変換できません。
>>849
.cpp ⇒ .c
861デフォルトの名無しさん:2010/06/14(月) 23:36:13
#include<stdio.h>
#include<math.h>
#define MAXITER 50
#define EPSILON 1e-10


#define X0 3.0
#define Y0 2.0
double f (double x, double y) { return x*x+x*y*y*y-9; }
double fx(double x, double y) { return 2.0*x; }
double fy(double x, double y) { return -1.0; }
double g (double x, double y) { return 3*x*x*y-y*y*y-4; }
double gx(double x, double y) { return 2.0*x; }
double gy(double x, double y) { return 2.0*y; }
/*--- Iteration method ---*/ void iteration(void)
{ int k;
double x0, y0;
double x1, y1;
double af, ag;
x0=X0; y0=Y0;
af=fabs(f(x0,y0));
ag=fabs(g(x0,y0));
printf("%-2s %-16s %-16s %-10s %-10s %-10s\n", "#k", "x", "y", "|f(x,y)|", "|g(x,y)|", "|f|+|g|"); printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", 0, x0, y0, af, ag, af+ag);
for(k=1; k<=MAXITER; k++){ x1=x0-f(x0,y0)/fx(x0,y0); y1=y0-g(x0,y0)/gy(x0,y0);
x0=x1; y0=y1; af=fabs(f(x0,y0)); ag=fabs(g(x0,y0)); printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", k, x0, y0, af, ag, af+ag);
if(af+ag<EPSILON) break; } }
862デフォルトの名無しさん:2010/06/14(月) 23:40:50
/*--- Method of Successive displacement ---*/
void displacement(void) { int k; double x0, y0; double af, ag; x0=X0; y0=Y0;
af=fabs(f(x0,y0));
ag=fabs(g(x0,y0));
printf("%-2s %-16s %-16s %-10s %-10s %-10s\n", "#k", "x", "y", "|f(x,y)|", "|g(x,y)|", "|f|+|g|");
printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", 0, x0, y0, af, ag, af+ag);
for(k=1; k<=MAXITER; k++){ x0=x0-f(x0,y0)/fx(x0,y0);
y0=y0-g(x0,y0)/gy(x0,y0);
af=fabs(f(x0,y0));
ag=fabs(g(x0,y0));
printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", k, x0, y0, af, ag, af+ag); i
f(af+ag<EPSILON) break; } }
/*--- Newton's method (NEWTON HOU) ---*/
void newton2(void)
{ int k; double x0, y0, x1, y1; double f0, fx0, fy0, g0, gx0, gy0;
double af, ag, dj; x0=X0; y0=Y0; af=fabs(f(x0,y0));ag=fabs(g(x0,y0));
printf("%-2s %-16s %-16s %-10s %-10s %-10s\n", "#k", "x", "y", "|f(x,y)|", "|g(x,y)|", "|f|+|g|");
printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", 0, x0, y0, af, ag, af+ag);
for(k=1; k<=MAXITER; k++){ f0 =f (x0,y0); fx0=fx(x0,y0);
fy0=fy(x0,y0);
g0 =g (x0,y0);
gx0=gx(x0,y0);
gy0=gy(x0,y0);
dj =fx0*gy0-gx0*fy0;
x1=x0+(-f0*gy0+g0*fy0)/dj;
y1=y0+(-g0*fx0+f0*gx0)/dj;
x0=x1;
y0=y1;
af=fabs(f(x0,y0));
ag=fabs(g(x0,y0));
printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", k, x0, y0, af, ag, af+ag);
if(af+ag<EPSILON) break; } }
863/wqtvsAeqI:2010/06/14(月) 23:43:14
[1]授業単元:プログラミング演習
[2]問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10697.txt
[3]
[3.1]OS:windows7 pro 64bit
[3.2] 環境:visualstudio 2010 express c++、ver10,0です
[3.3] 言語はCです
[4]18日が期限です
[5]その他制限:実行例が見やすいように一の位を揃えてください
自分は三教科の点数を表示するところまではなんとか書けましたが、一の位が揃えられてないです。
できれば自分のソースに付け足す形でお願いできればうれしいです

自分は多元的配列まで習いました

よろしくお願いします。
864838:2010/06/14(月) 23:48:34
>>839
>>853
>>860
ありがとうございました。
865デフォルトの名無しさん:2010/06/14(月) 23:50:54
>>863

//ここで表示
for(j=0;j<M;j++){
printf("%2d人目:",j+1);
for(i=0;i<N;i++){
printf("%4d ",data[j][i]);
}
printf("\n");
}
866デフォルトの名無しさん:2010/06/14(月) 23:52:54
int main(void) { puts("# Iteration method:");
iteration(); putchar('\n');
puts("# Method of Successive displacement:");
displacement(); putchar('\n');
puts("# Newton's method:"); newton2(); return 0; }


[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2010年6月15日
[5] その他の制限:長々と申し訳ございません。861,862です。
PCの調子が悪いせいかアップロータにアップできませんでした。
それで問題なのですが、反復法、順次置換法、Newton法の収束
を求めるもなのですがfx,fy,gx,gyの数値がどのように定義すれば
よいかわからず質問させていただきました。
ぜひよろしくお願いいたします。
867/wqtvsAeqI:2010/06/15(火) 00:09:59
>>865
ありがとうございました
なるほど桁をとってやればいいんですね!
ありがとうございます

後、できればソート前の合計点とソート後の合計点もお願いしてもいいでしょうか
868/wqtvsAeqI:2010/06/15(火) 00:16:14
>>867

失礼しました自分は863です
869 ◆/91kCCQXBo :2010/06/15(火) 00:49:05
>>868
int main(){
  int i,j,temp,data[M][N],goukei[M]={0};
  unsigned int seed;

  seed=time(0); /* <-- 任意の正整数を入力 ここでは97を入力 */
  srand(seed);
  /* 1〜100の乱数を、M×N個作成 */
  for(j=0;j<M;j++)
    for(i=0;i<N;i++){
      data[j][i]=1+rand()/(RAND_MAX/100);
      goukei[j]+=data[j][i];
    }

  printf("\n\n合計点(ソート前):");
  for(j=0;j<M;j++)
    printf("%4d",goukei[j]);
  /* バブルソート */
  for(j=1;j<M;j++)
    for(i=1;i<=M-j;i++)
      if(goukei[j] < goukei[j-1]){
        temp = goukei[j-1];
        goukei[j-1] = goukei[j];
        goukei[j] = temp;
      }
  printf("\n合計点(ソート後):");
  for(j=0;j<M;j++)
    printf("%4d",goukei[j]);
}
870 ◆/91kCCQXBo :2010/06/15(火) 00:53:17
バブルソートなし
871 ◆/91kCCQXBo :2010/06/15(火) 00:56:02
/* バブルソート */
for(j=1;j<M;j++)
  for(i=1;i<=M-j;i++)
    if(goukei[i] < goukei[i-1]){
      temp = goukei[i-1];
      goukei[i-1] = goukei[i];
      goukei[i] = temp;
    }
872/wqtvsAeqI:2010/06/15(火) 01:20:51
>>869
>>870
>>871

ありがとうございます
ただ自分の環境ではコンパイルできませんでした・・・・
エラーメッセージ通りにやっても解消はされません・・・・
どうかよろしくお願いします
ここにhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10698.txtそのソースをのせました
エラーメッセージは

1>c:\project\kadai01\kadai01\kadai05.cpp(62): error C2059: 構文エラー : '}'
1>c:\project\kadai01\kadai01\kadai05.cpp(62): error C2143: 構文エラー : ';' が '}' の前にありません。
1>c:\project\kadai01\kadai01\kadai05.cpp(62): error C2059: 構文エラー : '}
となっています・・・・
873 ◆/91kCCQXBo :2010/06/15(火) 01:27:48
a(){}[EOF]
874デフォルトの名無しさん:2010/06/15(火) 01:42:17
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク):モンテカルロ法で円周率を求めるプログラムを作れ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 本日の昼
[5] その他の制限: 使いそうな関数としてsrandom(unsigned long seed),random(),aq
rt(double x),pow(double x, double y)が挙げられている
コンパイル時には-lmオプションをつける


お願いします。
875デフォルトの名無しさん:2010/06/15(火) 01:52:22
>>872
いまさら突っ込むべきかどうか悩むがその名前欄はトリップのミスなの?
876デフォルトの名無しさん:2010/06/15(火) 01:52:32
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
double x, y;
int i, c;

srand(time(NULL));

for(i = c = 0; i < 1000000000; i++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if(x * x + y * y <= 1) c++;
}

printf("%f\n", c * 4.0 / 1000000000);

return 0;
}
877/wqtvsAeqI:2010/06/15(火) 02:16:33
>>873
えっと・・すいませんちょっと意味がわかりません・・・・・・
あの初心者なもので・・・
できればもっとかみ砕いて教えてもらえるとうれしいです

>>875
普通に?つけるの忘れてました・・・
なんか適当にキーボード叩いてみたらこうなったです・・
878デフォルトの名無しさん:2010/06/15(火) 04:04:28
>>872
62行目ってどこだよ
ソースそのままじゃないだろ
最後に } が多いんだとは思うが
879 ◆/91kCCQXBo :2010/06/15(火) 09:28:59
噛み砕くも何も。エラー読めよ。
880デフォルトの名無しさん:2010/06/15(火) 10:18:04
[1] 授業単元:計算機とアルゴリズム
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10699.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限: 2010年6月16日
[5] その他の制限:if文を習っただけです。


よろしくお願いします。
881/wqtvsAeqI:2010/06/15(火) 10:54:36
>>878
ほんとでした最後の中カッコが余計でした
ありがとうございます!

>>879
絶対おかしいとは思ったのですが、試しに}の前に;付けてみたのですがやっぱ無理でした・・・・
てかよく考えれば一番上のエラーを読めばいいんですね!
ちゃんと構文エラーって書いてました・・・
ありがとうございました
助かりましたー
882デフォルトの名無しさん:2010/06/15(火) 12:13:31
>>840もお願いいたします。。
883デフォルトの名無しさん:2010/06/15(火) 13:43:27
[1] 授業単元:C++
[2] 問題文(含コード&リンク):http://www.bohyoh.com/Books/MeikaiCPP/download.html
  9章クラス=17章までのの全演習です
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++
[4] 期限: 2010年6月16日
[5] その他の制限:初心者です

著者がホームページ持ってるし、後で写しておこうと思ってたんですが
別の著書のみでこの本の解説はありませんでした
出来る限りググったりしてみたんですが見つけられず

厳しいかと思いますが、どうかよろしくお願いします・・・orz
884883:2010/06/15(火) 13:51:26
追記です
11-3までの演習はどうにかキャッシュなどに残っている模様です
11-4以降でお力を貸して頂けないでしょうか
885デフォルトの名無しさん:2010/06/15(火) 16:21:08
>>883-884
URLみたけど、そこに演習問題は載ってないし、
1章, 9章以外PDFへのリンクが見えないのだが……。
886883:2010/06/15(火) 16:54:28
すみません、参考書がPDF形式になっておりまして・・・
9章以降のPDFに演習問題というのがある形です・・・
887デフォルトの名無しさん:2010/06/15(火) 17:00:31
>>886
横着しないで問題文書いてよ。どれやるのか探させる時点で見る気がなくなる
長いならテキストに起こしてアップローダにあげればいい
888883:2010/06/15(火) 17:01:36
分かりました
少々時間かかりますがいいでしょうか?
あと・・・恥ずかしながらアップローダの使い方が分からないのです
ご教授いただけませんか?
889デフォルトの名無しさん:2010/06/15(火) 17:15:02
別にあなたを待っているわけじゃないから時間がかかろうがなんだろうが関係ない。
後者はスレ違い。
890デフォルトの名無しさん:2010/06/15(火) 17:43:16
>>821
無理に1レスにおさめる為に詰め込んだみたいだなw
しかしそれをやる価値のある問題とはとても思えない件w
891883:2010/06/15(火) 19:56:51
ttp://www.dotup.org/uploda/www.dotup.org966022.txt.html
とりあえずこんな感じで大丈夫でしょうか・・・
ちゃんと上げれてるか自信ないですけど
892デフォルトの名無しさん:2010/06/15(火) 20:21:52
[1] 授業単元:オブジェクトプログラミング
[2] 問題文(含コード&リンク):入力した文字列を文字型配列に代入し、アルファベットの大文字、

小文字、四則演算を回数分表示できるようにしなさい。尚、改行記号を\nとし、四則演算、アルファベット、

改行記号以外の文字を含む場合と、アルファベットまたは記号の後に数字が来ない場合、各々、エラーを表示するようにしなさい。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2010年6月15日
[5] その他の制限:int main(void){から始まる

実行例1:
文字列を入力
a3-2*4\n+5B2
結果
aaa---****
+++++BB

実行例2:
文字列を入力
a3-2*4\n+5ba2
結果
順番間違いエラー

実行例3
文字列を入力
a3-@*4\n+5b2
結果
記号間違いエラー
893デフォルトの名無しさん:2010/06/15(火) 21:29:00
最近見た気がする・・・
894デフォルトの名無しさん:2010/06/15(火) 21:38:40
895デフォルトの名無しさん:2010/06/15(火) 23:07:46
>>894
実行例と違う
896883:2010/06/16(水) 00:33:22
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
ttp://www.dotup.org/uploda/www.dotup.org966022.txt.html
ttp://www.dotup.org/uploda/www.dotup.org966632.txt.html
ttp://www.dotup.org/uploda/www.dotup.org966665.txt.html

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++
[4] 期限: 2010年6月16日
[5] その他の制限:初心者です

テンプレートを使用してませんでした、申し訳ありません
897デフォルトの名無しさん:2010/06/16(水) 08:43:07
898デフォルトの名無しさん:2010/06/16(水) 10:47:40
899デフォルトの名無しさん:2010/06/16(水) 10:55:44
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10706.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10708.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C++
[4] 期限: 6月17日まで
[5] その他の制限: とくに指定は無いです。

本当に困っています。よろしくお願いします。
900880:2010/06/16(水) 14:41:34
>>897
ありがとうございます。
901デフォルトの名無しさん:2010/06/16(水) 15:38:23
>>896
13-2
Type& Peek() {
if (ptr <= 0)
throw EmptyErr(this);
return stk[ptr];
}

int Capacity() {
return size;
}

bool IsFull() {
return (ptr == size);
}

bool IsEmpty() {
return (ptr == 0);
}
902デフォルトの名無しさん:2010/06/16(水) 15:54:31
903デフォルトの名無しさん:2010/06/16(水) 20:05:59
>>892です
ありがとうございました
904 ◆Jo8oQAGh3M :2010/06/16(水) 20:19:27
期限6月21日18時
よろしくお願いします。

3次元の実数ベクトルを、要素がfloat型で要素数3の配列を用いて表すものとする。
二つの3次元ベクトルに対して、それらの和、差、内積、外積を求める関数を定義する。
和、差、内積、外積を計算する関数はそれぞれaddvec、subvec、innervec、outervecとし、
それぞれの関数定義の頭部は
void addvec(const float x[3], const float y[3], float z[3])
void subvec(const float x[3], const float y[3], float z[3])
float innervec(const float x[3], const float y[3])
void outervec(const float x[3], const float y[3], float z[3])
とする。
プログラムの動作は、二つの3次元ベクトルaとbの各成分をじゅんじに入力して、それらの和、差、内積、外積を求めて出力する。
以上の説明に沿ったプログラムをC言語を用いて書け。
905デフォルトの名無しさん:2010/06/16(水) 20:34:11
void addvec(void addvec(const float x[3], const float y[3], float z[3])
{
int i;
for(i = 0; i < 3; i++) z[i] = x[i] + y[i];
}
void subvec(const float x[3], const float y[3], float z[3])
{
int i;
for(i = 0; i < 3; i++) z[i] = x[i] - y[i];
}
float innervec(const float x[3], const float y[3])
{
int i;
float ip = 0;
for(i = 0; i < 3; i++) ip += x[i] * y[i];
return ip;
}
void outervec(const float x[3], const float y[3], float z[3])
{
int i;
for(i = 0; i < 3; i++) z[i] = x[(i + 1) % 3] * y[(i + 2) % 3] - x[(i + 2) % 3] * y[(i + 1) % 3];
}
906デフォルトの名無しさん:2010/06/16(水) 20:35:53
これベクトルの要素数完全に決め打ちなんだなw
907デフォルトの名無しさん:2010/06/16(水) 20:41:52
wをつける要素が見つからない
908デフォルトの名無しさん:2010/06/16(水) 20:46:43
そんなことより配列名の方が気になる。
909デフォルトの名無しさん:2010/06/16(水) 20:51:31
見た目のよい局所関数名?をつけるにはやっぱり英語勉強しないとだめですかね?
910デフォルトの名無しさん:2010/06/16(水) 20:52:06
スレチ
911デフォルトの名無しさん:2010/06/16(水) 20:53:27
見た目の良いフォントを使えばいいだけじゃないかな。
912 ◆Jo8oQAGh3M :2010/06/16(水) 21:42:14
>>905
ありがとうございます。
実行すると2行目にエラーがでてしまいます。

自分で直そうとしてもわからなかったので、よかったらどう直すのか教えてください。
913デフォルトの名無しさん:2010/06/16(水) 21:45:00
>>912
void addvec(
914デフォルトの名無しさん:2010/06/16(水) 21:45:18
void addvec(void addvec(const float x[3], const float y[3], float z[3])
これくらいわかるだろ。
915デフォルトの名無しさん:2010/06/16(水) 21:59:47
わかるわけないじゃん。
ここに依頼するやつが構文を理解しているわけがない。
構文はおろか、全角スペースなんてどうやって見つけるんだよ!とか切れてるやつもいたろ?
916デフォルトの名無しさん:2010/06/16(水) 22:00:59
>>915
全角スペースは使ってるエディタによっては見つけるのは面倒
917デフォルトの名無しさん:2010/06/16(水) 22:16:26
検索機能のついていないエディタを探す方が難しくね?
918デフォルトの名無しさん:2010/06/16(水) 22:39:04
[1] 授業単元:Cプログラミング演習
[2] 問題文(含コード&リンク):
問題1:文字列"Computer1Programing2Communication3Electro4"を、"test.txt"に書き込むプログラムを作成せよ。
問題2:ファイル"test.txt"から文字列も読み込み、並びを逆にしてファイル"sample.txt"に出力するプログラムを作成せよ。("test.txt"は問題1で作成したものを使用すること。)
問題3:ファイル"sample.txt"から大文字だけを画面に表示させるプログラムを作成せよ。("sample.txt"は問題2で作成したものを使用すること。)
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:VB 2008
 [3.3] 言語:C
[4] 期限:2010年6月17日中
[5] その他の制限:無し

よろしくお願いします
919デフォルトの名無しさん:2010/06/16(水) 22:52:37
その条件だと作るのは無理なので、もう一度見直してくだされ。
920デフォルトの名無しさん:2010/06/16(水) 22:58:34
>>918
1:
#include <stdio.h>
int main(void) {
FILE *fp = fopen("test.txt", "w");
fprintf(fp, "%s", "Computer1Programing2Communication3Electro4");
fclose(fp);
return 0;
}

2:
#include <stdio.h>
void f(FILE *fin, FILE *fout) {
int ch = fgetc(fin);
if(ch == EOF) return;
fputc(ch, fout); }
int main(void) {
FILE *fin = fopen("test.txt", "r"), *fout = fopen("sample.txt", "w");
f(fin, fout);
fclose(fin);
fclose(fout); }

3:
#include <stdio.h>
#include <ctype.h>
int main(void) {
FILE *fp = fopen("sample.txt", "r");
int ch;
while((ch = fgetc(fp))!=EOF) if(isupper(ch)) putchar(ch);
fclose(fp);
return 0;
}
921デフォルトの名無しさん:2010/06/16(水) 23:01:09
2:
void f(FILE *fin, FILE *fout) {
int ch = fgetc(fin);
if(ch == EOF) return;
f(fin, fout);
fputc(ch, fout); }
だった
922 ◆QZaw55cn4c :2010/06/16(水) 23:12:23
923 ◆Jo8oQAGh3M :2010/06/17(木) 00:36:26
>>913>>914
流石にvoid addvec( が余分についてるのはわかります
それをとってソースファイルをつくってもコンパイルしようとするとエラーがでます
924デフォルトの名無しさん:2010/06/17(木) 00:38:05
>>923
コンパイラはなんて言ってるのか書かないと分からん。
925 ◆Jo8oQAGh3M :2010/06/17(木) 00:46:57
error LNK:未解決の外部シンボル _main が関数_tmainCRTStartupで参照されました。

fatal error LNK1120:外部参照1が未解決です。
926デフォルトの名無しさん:2010/06/17(木) 00:47:46
main文ねーだろ
927 ◆Jo8oQAGh3M :2010/06/17(木) 00:48:20
In function `_start':
undefined reference to `main'
928デフォルトの名無しさん:2010/06/17(木) 00:48:38
それはコンパイルエラーじゃなくてリンクエラーという。
main関数が書かれていないから発生する。
ちゃんとmain関数かいたか?
929デフォルトの名無しさん:2010/06/17(木) 00:49:53
3. 答える人間のことを考えないこと
「教えてクン」は、孤高の戦士である。
相手のことを考えるようでは教えてクン失格というものだ。
以下のような行動が、望ましい。
初心者であることを高らかに宣言し、初心者向けの丁寧で分かりやすい説明を強要する。
専門用語の使用を禁じておくとさらに効果的である。
簡潔な説明を禁じられたヲタクどもは、同じ内容を説明するのに、何倍もの労力を強いられる。
自分は努力せず、相手には多大な努力をさせることこそが「教えてクン」の真骨頂である。マルチポストも有効である。
そのBBSを信用していないことを明確に示せる。
「どうせ、お前らじゃ分からんだろう。」という意志表示として高く評価できる。
もちろんマルチポストの非礼をあらかじめ詫びてはならない。
それでは、単なる「急いでいる人」になってしまう。
それは、教えてクンではない。質問のタイトルは、「教えてください。」で良い。
タイトルを読んだだけでは「何に関する質問」か全く分からない。
そういう努力は、答える人間にさせれば良いのだ。
とにかく、答える人間が答えやすいように気を使って質問してはならない。
傲慢で不遜な態度が必須である。「聞きたいことがあります。」など、プロの仕事であろう。

最後に、言うまでも無いことだとは思うが、答えてくれた人達に礼の言葉を返すなど言語道断である。
せっかく「教えてクン」を貫いてきたのに、最後にお礼を言っているようでは、画竜点睛を欠いていると言わざるを得ない。
質問だけしておいて、後はシカトが基本である。
上級テクニックとして、「そんなことはもう試しました。」とか、「そこまで初心者じゃありません。」などと言って、回答者の神経を逆なでしておけば完璧である。

以上のことを踏まえて質問すれば、君も立派な「教えてクン」である。
ビバ!教えてクン! 教えてクンに栄光あれ!!
930デフォルトの名無しさん:2010/06/17(木) 01:08:21
>>929
ここには上級者が一杯居るな。
931デフォルトの名無しさん:2010/06/17(木) 01:47:44
#include<stdio.h>
int main(void)
{ int kion[12] = {4,6,11,15,18,30,28,30,24,19,10,3};
int i,ave,max,min;
max = -1000;
min = 1000;
ave = (kion[0]+kion[1]+kion[2]+kion[3]+kion[4]+kion[5]+kion[6]+kion[7]+kion[8]+kion[9]+kion[10]+kion[11])/12;

  (省略 max,minはfor関数を使って参照)

printf("2000年の月平均気温(摂氏、括弧内は華氏)\n");
for(i=0;i<12;i++)
{
printf("%d月:%d(%d)\n",i+1,kion[i],9*kion[i]/5+32);
}
printf("-----------------\n");
printf("平均:%d(%d)\n最高:%d(%d)\n最低:%d(%d)\n",ave,9*ave/5+32,max,9*max/5+ 32,min,9*min/5+32);
return 0;
}

上のような年間平均気温を配列に格納して表示するプログラムで、
華氏の表示を自作関数を定義してそれを用いよという課題が出たんですが、
自作関数の計算式でmaxやmin,ave,kion[i]をまとめて扱う方法が分かりません。
よろしくお願いします
932デフォルトの名無しさん:2010/06/17(木) 02:05:08
>>931
ひとつずつ扱えばいい
933デフォルトの名無しさん:2010/06/17(木) 02:59:24
934デフォルトの名無しさん:2010/06/17(木) 04:49:44
>>933
>max = kion[1], min = kion[1];
0にしてループを1からにするのが普通なのに、わざわざこうする意味がわからないw
935デフォルトの名無しさん:2010/06/17(木) 12:08:57
>>841をどなたかお願いします。。

期限過ぎてしまってやばいんです・・
936デフォルトの名無しさん:2010/06/17(木) 13:54:50
これはファイルからデータを読み込むの?
それともキーボードからデータを入力?
937デフォルトの名無しさん:2010/06/17(木) 13:56:42
>>936キーボードからデータを入力だと思います。
よろしくお願いいします。
938デフォルトの名無しさん:2010/06/17(木) 17:07:23
>>937
VCで作った。gccでも動くとおもうけど未検証。ダメだったらスマソ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10711.txt
939デフォルトの名無しさん:2010/06/17(木) 17:15:20
/* C言語 線形リスト2
http://www.hrtdotnet.jp/pro/c/step4/step4_2.html */
940デフォルトの名無しさん:2010/06/17(木) 19:53:41
>>939
問題が解けないのでなんら関係のないURLを貼ってみる香具師乙
941デフォルトの名無しさん:2010/06/17(木) 21:11:34
ベクトルを規格化する関数 normal

2つのベクトルの差の大きさを返す関数 dist を作成せよ。

よろしくお願いします
942デフォルトの名無しさん:2010/06/17(木) 21:18:24
#include <stdio.h>

int main(void)
{
static int a[] = { 31, 41, 59, 26, 53, 58, 97, 93, 23, 84, 62 };
int flag;
do {
flag = 0;
for (int i = 0; i < sizeof(a)/sizeof(a[0]) - 1; i++) {
if (a[i] > a[i + 1]) {
swap(a[i], a[i + 1]);
flag = 1;
}
}
} while (flag > 0);

for (int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
cout << a[i] << ", ";
cout << endl;
return 0;
}
943デフォルトの名無しさん:2010/06/17(木) 21:21:13
配列のデータがすでに適正な順序,それに近い順序で並んでいてもn-1回の走査をしなければならない。
すなわち、n(n-1)/2回の比較が行われなければならない。 そこで, 各回の走査の終わりに、
交換が行われたか否かをチェックするようにし、交換が行われていなければそれ以上走査の必要はないので
ソートを完了するようなプログラムにしなさい。

「バブルソート」の問題なんですが、いい解答例がありません。
解答例をもらえないでしょうか?
944デフォルトの名無しさん:2010/06/17(木) 21:22:24



各回の走査の中で行われたの交換の様子が分かるよう1回の交換が行われる度に、そのとき配列に入っているすべての値を出力させるようにもしなさい。
945 ◆QZaw55cn4c :2010/06/17(木) 21:44:10
946デフォルトの名無しさん:2010/06/17(木) 22:00:02
>>941
normalを呼ぶ側で宣言及び初期化された,長さ n の配列 a と宣言のみされた長さ n の配列 b の先頭アドレスを受け取り,1次元配列(ベクトル) a の大きさを1に規格化し、それを配列 b に格納する。
947デフォルトの名無しさん:2010/06/17(木) 22:03:18
>>946
問題が解けないので、それらしき日本語を書いてみる香具師乙
948デフォルトの名無しさん:2010/06/17(木) 22:56:12
scanfを使用してキーボード入力した文字列を、fgets(buffer,sizeof(buffer),stdin)で読み込みこれを繰り返したい。
#include <stdio.h>
#include <stdlib.h>
int main(void){
char buffer[80],txt[80];
FILE * fp;//←stdinは標準入力ストリームであるのでファイル型へのポインタにする必要がない。
int i;
for(i=0;i<5;i++){
fp = fopen("./text.txt","w");//相対パス
scanf("%s",txt);
fprintf(fp,"%s",txt);//配列には&をつけない
fclose(fp);
stdin = fopen("./text.txt","r");//相対パス
fgets(buffer,sizeof(buffer),stdin);//指定したファイルの一行を読み込んでbufferに格納する。
fclose(stdin);
printf("%s\n",buffer);
printf("end of loading\n");
}
}
としたところ、scanfがfor文の最後から戻る度に実行されると思ったのですが実際には、
ssss ssss end of loading ssss end of loading ssss end of loading ssss end of loading ssss
となってしまいました。どのようにしたらscanf()が繰り返し呼び出されるのでしょう?
949デフォルトの名無しさん:2010/06/17(木) 22:57:39
>>947
そうじゃなくて多分コード書くのがめんどいだけじゃないかね。
俺もたまにそうする
950デフォルトの名無しさん:2010/06/17(木) 22:58:16
>>948
stdin に代入しちゃダメだ
951デフォルトの名無しさん:2010/06/17(木) 23:06:10
>>946
お願いしますよ。。。
952デフォルトの名無しさん:2010/06/17(木) 23:07:58
>>950
例えば,どのようにすればよいのでしょうか?
953デフォルトの名無しさん:2010/06/17(木) 23:10:44
>>948
>scanfを使用してキーボード入力した文字列を、fgets(buffer,sizeof(buffer),stdin)で読み込みこれを繰り返したい。

これって何をしたいの?
tee コマンドもどき?
954デフォルトの名無しさん:2010/06/17(木) 23:27:57
>>948
#include <stdio.h>
#include <stdlib.h>
int main(void){
  char buffer[80], txt[80];
  FILE *fp;
  int i;

  for(i=0; i < 5; i++){
    fp = fopen("text.txt", "w");
    scanf("%s", txt);
    fprintf(fp, "%s", txt);
    fclose(fp);

    fp = fopen("text.txt", "r");
    fgets(buffer, sizeof(buffer), fp);
    fclose(fp);
    printf("%s ", buffer);
  }
}
955デフォルトの名無しさん:2010/06/17(木) 23:34:06
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
以下のプログラムで、pointを昇順に並び替えるプログラムを作る。ソートの部分のみを書き換え、プログラムを作りなさい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10713.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2010年6月22日まで
[5] その他の制限:特にありません。よろしくお願いします。
956デフォルトの名無しさん:2010/06/17(木) 23:40:05
>>954

ありがとうございます。
scanfを使わずにfgetsとstdinを使用して同様なことはできないでしょうか?
957デフォルトの名無しさん:2010/06/17(木) 23:46:54
>>956
スレタイを読んでくれ。
それでもどうしてもここでやりたいのなら何度もやり取りしなくていいように伝える努力をしてくれ。
958デフォルトの名無しさん:2010/06/17(木) 23:47:26
>>955
void sort2(struct data *d1, struct data *d2)
{
//ここのプログラムを作成
if(d1->point > d2->point){
struct data tmp = *d1;
*d1 = *d2;
*d2 = tmp;
}
}
959デフォルトの名無しさん:2010/06/17(木) 23:51:51
>>956
scanf("%s", txt);

fgets(txt, sizeof(txt), stdin);
960デフォルトの名無しさん:2010/06/17(木) 23:53:48
>>956
fgets(txt, sizeof(txt), stdin);
ijo
961デフォルトの名無しさん:2010/06/18(金) 01:29:00
[1]授業単元:暗号理論(大学専門コース)
[2]問題文(含コード&リンク)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10714.lzh
[3]環境
[3-1] OS:C/C++処理系があれば何でも可
[3-2] コンパイラ:gccに近い処理系が理想
[3-3] 言語:C/C++どちらでも可
[4] 9/15迄(夏休み終了まで)
[5] 難しいそうです。無理しないほうがいいそうです。ただ出来たら
テストの点に無関係に単位をくれるそうです
962デフォルトの名無しさん:2010/06/18(金) 01:36:28
何をするの?
963デフォルトの名無しさん:2010/06/18(金) 01:59:26
暗号化されているプログラムを読んで、暗号化の規則を見いだし、
符号化・符号解除するプログラムをつくれってことだろ

・#,<,.など記号は暗号化されない。
・最初のincludeが暗号化されていないので、
 単語単位で暗号化される、と推測できる。
・暗号化を進めていく過程で符号化の情報が変化してゆくと推測できる。
 (例えばxorを取る値が+1されていくとか。)
・数字は符号化されない?または符号化されてもアルファベットには置換されない
・文字数は増減しない。

このヘンはガチ?
964デフォルトの名無しさん:2010/06/18(金) 02:03:40
文字数ふえてそうに見えるよ。
増えてないところもあるみたいだけど。
965デフォルトの名無しさん:2010/06/18(金) 02:14:39
・2353,4行目をみると、
mwb n;
fYv (o = 2; p < xw; q++) {
となっているので、
一文字の変数がn->o->p->qとなっていることから
多分変数名は登場する度に+1されていくんだろうか?
966デフォルトの名無しさん:2010/06/18(金) 02:15:26
>>961
こんな問題出す講師なんて全国でも片手で数えられるほども居ない筈
なんで、どこの誰だかわかってしまう件
当然ここで正解が出てそれを提出しても、額面通り無条件に単位を
くれるのかどうかもアヤスイ件
967デフォルトの名無しさん:2010/06/18(金) 02:19:13
久しぶりに面白そうな問題きた
968デフォルトの名無しさん:2010/06/18(金) 02:22:14
>>965
たしかに、zX AY BZと出現するたびに各文字が1ずつ増えてるんだが
intと思しき、luY→mwbは各文字ごとに123と増えている
先頭行はinclude <stdio.h>とみなして予想をいろいろしているんだけど、実はmain関数が見つかっていない
969デフォルトの名無しさん:2010/06/18(金) 02:45:48
暗号化はわかったけど、複合化どう書いていいものやら
970デフォルトの名無しさん:2010/06/18(金) 02:52:02
すげえなあ。さっぱりだわ。
971デフォルトの名無しさん:2010/06/18(金) 02:52:19
最初の行は、#include <linuxkernel.h>だと思うんだが、暗号化間違ってないか?
972デフォルトの名無しさん:2010/06/18(金) 02:57:22
linux/kernel.h
973デフォルトの名無しさん:2010/06/18(金) 02:59:16
てか、期限がかなり先だから急がなくてもいいんじゃね?
974デフォルトの名無しさん:2010/06/18(金) 03:00:34
>>972
なるほど。
次の問題は、基本ルールはiiii --> ijk なんだろうけど
元がijkだった場合との区別かな。
975デフォルトの名無しさん:2010/06/18(金) 03:00:49
飽きたら忘れそうだからな
976デフォルトの名無しさん:2010/06/18(金) 03:14:37
iii -> jkl と
jjj -> jkl の区別が付かない気がする。
977デフォルトの名無しさん:2010/06/18(金) 03:16:10
>>976
間違い。
ijk -> jkl と
iii -> jkl との区別、だった。
978デフォルトの名無しさん:2010/06/18(金) 03:19:39
文字chが最初に現れたらテーブルtbl[ch-'A']=ch
それ以降は++tbl[ch-'A']で置き換える、でおk?

でも層だとすると、linux/kernel.hで、なぜ/がlになるのかわからんな。
979デフォルトの名無しさん:2010/06/18(金) 03:25:23
そこは普通のkとiのkとの区別でklになってるのかと思った
980デフォルトの名無しさん:2010/06/18(金) 03:37:57
#include <linux/kernel.h>
#include <linux/
↓いまわかってるアルゴリズムで暗号化
#include <mjovx/kfrpgn.h>
#kqdoweh <plrxy/

なるべき結果
#include <mjovxklfrpgn.h>
#kqdoweh <plrxys

/の扱いが分かればどうにかなるのかもね。
981デフォルトの名無しさん:2010/06/18(金) 03:38:04
難しすぎなのかアホ過ぎなのかはよくわからんかったけど
眠いんで寝るぽ
982デフォルトの名無しさん:2010/06/18(金) 03:43:22
でもこれ、確かに復号化が難しいような。
なんか思いつくかなぁー
983デフォルトの名無しさん:2010/06/18(金) 03:46:13
>>980
/k -> kl
のように、次の桁の文字をcopyだと思う。
16行目以降にも、mn,pq,xyという連続文字部分がある。
984デフォルトの名無しさん:2010/06/18(金) 03:51:58
>>981ガガガ
985デフォルトの名無しさん:2010/06/18(金) 04:00:14
まあ多分複合にはハフマンテーブルみたいな情報をくっつける必要がある。。
だからそこは勝手に仕様決めてつくれば課題達成だろう。
ただし問題で与えられたソースは複合できないけど。。
986デフォルトの名無しさん:2010/06/18(金) 04:02:00
2個目のヘッダファイルなにorz
987デフォルトの名無しさん:2010/06/18(金) 04:18:43
考古学者のロゼッタ石暗号解読みたいだなw
988デフォルトの名無しさん:2010/06/18(金) 04:23:33
自分ではさっぱり解けなかったが暗号化はできるようになった
989985:2010/06/18(金) 04:24:49
出来そうな気がしてきた。
一文字ずつ暗号化してゆき、一文字毎に置換表を更新し、
それをつかって、次の文字を復号し、複合化した文字でまた置換表を更新し、・・・
ってすすめば可能かな?
990デフォルトの名無しさん:2010/06/18(金) 05:11:00
>>983
うーん。
991デフォルトの名無しさん:2010/06/18(金) 05:34:56
>>986
<linux/syscalls.h>かな
992デフォルトの名無しさん:2010/06/18(金) 05:44:15
>>991
むはー。8文字だったのね!ずっと7文字と勘違いしてた俺のばかー
#include <linux/kernel.h>
#include <linux/syscalls.h>

#include <mjovx/kfrpgn.h>
#kqdoweh <plrxy/syteaqru.i>

[ターゲット]
#include <mjovxklfrpgn.h>
#kqdoweh <plrxystyueaqrv.i>

ちょっぴり違うのは/の影響かなぁ
993デフォルトの名無しさん:2010/06/18(金) 06:13:47
#include <linux/kernel.h>
#include <linux/syscalls.h>
#include <linux/fs.h>
#include <linux/

#include <mjovxklfrpgn.h>
#kqdoweh <plrxystyueaqrv.i>
#msfsyfi <tntzzfgw.j>
#ouguagj <vpvba

になった。小文字の次は大文字になるっぽい。けど、これまた次のヘッダがわからないという。
kk.hなんてないよねぇ

役に立つかどうか分からないけど、今のコードを貼って寝ます。
http://codepad.org/btlbxg97
994デフォルトの名無しさん:2010/06/18(金) 06:15:06
#include<linux/kernel.h>
#include<linux/syscalls.h>
#include<linux/fw.h>
#include<linux/mo.h>
#include<linux/percpu.h>

合ってる?
995デフォルトの名無しさん:2010/06/18(金) 06:15:19
ああ、すごく汚いコードです。ごめんなさい。
996デフォルトの名無しさん:2010/06/18(金) 06:16:10
>>994
#include<linux/fw.h>

#include<linux/fs.h>
997デフォルトの名無しさん:2010/06/18(金) 06:19:44
percpu.hってなんじゃろうとおもったら
/usr/src/kernels/2.6.18-164.15.1.el5-x86_64/include/linux
なんてところががが。初めてのぞきました
mo.hは同じところにあるmm.hかもです。
998デフォルトの名無しさん:2010/06/18(金) 06:21:27
>>993
<linux/io.h>
999デフォルトの名無しさん:2010/06/18(金) 06:25:44
#include <linux/kernel.h>
#include <linux/syscalls.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/percpu.h>
#include <linux/slab.h>
#include <linux/
1000デフォルトの名無しさん:2010/06/18(金) 06:26:08
>>998
iはincludeで使われてるから違うだろ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。