C/C++の宿題片付けます 136代目at TECH
C/C++の宿題片付けます 136代目 - 暇つぶし2ch331:デフォルトの名無しさん
10/06/05 22:56:11
>>329
URLリンク(ideone.com)
逆ポーランド 電卓とかでググってみてくれ

332:329
10/06/05 22:58:00
>>331
そんな難しいのじゃなくていいです・・
とりあえずwhileとか使って
数字入力 演算子入力 数字入力・・・・=答え
みたいなのが作りたい。

333:デフォルトの名無しさん
10/06/05 23:51:35
>>258です。ポインタを用いないバージョンもできないでしょうか。

334:デフォルトの名無しさん
10/06/05 23:55:00
>>332
こんなんでどう?
URLリンク(codepad.org)

335:デフォルトの名無しさん
10/06/06 00:04:36
scanf()はエラーも返すんだよね。

336: ◆/91kCCQXBo
10/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:デフォルトの名無しさん
10/06/06 01:34:19
こんなソフト作ってください(お代は払います)ってな感じのスレどっかにあったかなぁ?
アイデアはあるけどオツムがないからどうしようもなく放置したまま早1年。
発注するから誰か受注して って頼みたいんだけど?

338:デフォルトの名無しさん
10/06/06 01:53:31
>>337
スレリンク(software板)l50
なんてどう?

339:デフォルトの名無しさん
10/06/06 02:09:42
サンクス

340: ◆QZaw55cn4c
10/06/06 02:37:30
>>258
>>333
URLリンク(codepad.org)

341:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/06 10:47:15
しかもバグ入りという...

344: ◆QZaw55cn4c
10/06/06 12:03:14
>>329
ちゃんとつくると難しいです。たとえばこんな感じになります。
URLリンク(codepad.org)

345:デフォルトの名無しさん
10/06/06 16:10:45
何故>>330
はダメなのでしょうか?

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

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

一応C言語です。

346:デフォルトの名無しさん
10/06/06 16:15:25
>>345
そういうのは最初に全部テンプレ使って言え

347:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/06 16:42:02
こいつに理解させるのはまず無理だと思うけどな

351:デフォルトの名無しさん
10/06/06 16:53:45
俺に聞けスレで諦めた一人ですな

352:デフォルトの名無しさん
10/06/06 16:55:49
>>348
12+12=0…

353:デフォルトの名無しさん
10/06/06 16:58:45
だからscanf()で文字を読むときは改行文字に気をつけろって言っただろ

354:デフォルトの名無しさん
10/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削って縮めたいんだが、俺には限界)

355:349
10/06/06 17:03:34
ああ、ごめん。
実際に動かしてみたら色々問題がまだあるね

scanf("%c", &c);は改行コードを拾ってしまうな。

356:4
10/06/06 18:52:56
>>350
>>351
ひどすぎワロタww
命かけて頑張ってんだよ、茶化さんで。

357:デフォルトの名無しさん
10/06/06 18:56:00
>>356
命がけ、というのであれば、それを見せてほしいですね。現状では伝わってこないんです。

358:4
10/06/06 18:58:23
>>354
優しすぎ、ありす。
まじで感謝してる。プログラミングの単位たぶん落とすと思うけど
2学期には間に合うようにするわ。


359:デフォルトの名無しさん
10/06/06 19:02:36
熟練のマである>>355でもエラー出すC言語ってどんだけむずいんだよ。
もっと簡単で寛容なC言語はないんかね。

360:デフォルトの名無しさん
10/06/06 19:03:51
いろいろと突っ込みどころがあるな

361: ◆QZaw55cn4c
10/06/06 19:44:23
>>359
ちょっと上の方でコテが散々やっつけられていたのを見ましたか?
簡単で寛容な、というのは期待しないほうがいいかと。

362:デフォルトの名無しさん
10/06/06 20:20:28
宿題というか、既存のプログラムのバグ消しのお願いです
AviUtlという画像編集・エンコソフトを使っているですが、
そのソフト用にNL-Means Filterというものが出ています。
ですがそのフィルターを使うとソフトがフリーズしてしまいます。なんとか解決できませんか?
症状としては、そのフィルターをオンにすると、AviUtlを終了しようとした時にフリーズします。
GPU支援を使う、計算モード3のときのみ起こります。お願い致します

URLリンク(kishibe.dyndns.tv)
からダウンロードするとソースらしきものもついてきます

363:デフォルトの名無しさん
10/06/06 20:56:36
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2010年6/8まで
[5] その他の制限:なし
2問ありますが、よろしくお願いします。

364:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/06 21:30:33
>>363
<課題1>
URLリンク(codepad.org)

366: ◆QZaw55cn4c
10/06/06 21:36:06
>>363
URLリンク(codepad.org)
URLリンク(codepad.org)

367:デフォルトの名無しさん
10/06/06 21:44:36
ぐだぐだ言い訳されるのわかってても突っ込みたくなるなw

368:デフォルトの名無しさん
10/06/06 21:45:38
>>367
どうぞどうぞ突っ込んでくださいな。楽しみにしています。

369:デフォルトの名無しさん
10/06/06 21:48:51
実数と整数の区別もつかないアホ
ソート部分がクソ

370:デフォルトの名無しさん
10/06/06 21:55:59
>>363です
ありがとうございます

371:デフォルトの名無しさん
10/06/06 21:56:08
>>363
2番目の課題を訂正します。
URLリンク(codepad.org)
>>369
普通のバブルソートですが、何か問題でも?

372:デフォルトの名無しさん
10/06/06 21:57:51
だからそれはバブルソートじゃないって言っただろw

373:デフォルトの名無しさん
10/06/06 22:02:21
>>372
あれ?私は URLリンク(en.wikipedia.org) を参照したんですけれどもね。

374:デフォルトの名無しさん
10/06/06 22:09:35
それが言いたくてわざわざ効率の悪いほう使ったのかw

375:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/06 22:16:38
>>373
だから全部読めって前も言ったよな?
Optimizing bubble sortのところで何でn := newn + 1ってなってると思ってるんだ?

377:デフォルトの名無しさん
10/06/06 22:17:08
>>375
そうですよね。>>375 であげていただいたやり方もバブルソートといいますよね。
でも >>372 はお気に召さないようなんですよ。
確かに日本語版 wiki やドイツ語 wiki では、幾分効率をあげたものが採用されているようですが、
どうオプティマイズしても計算オーダーはΟ(n^2) で変わらないのですけれども、>>372 は計算オーダーの概念がよくわかっていないらしい。
スレリンク(tech板:706番) のように、ある一種のバブルソートの実装にこだわっているんです。

378:デフォルトの名無しさん
10/06/06 22:18:14
>>376
Optimizing のところでは、長さを縮めていますが、そうでない実装も、やっぱり bubble sort でしょう?

379:デフォルトの名無しさん
10/06/06 22:21:35
計算オーダーが同じでも明らかに効率悪い方に拘る意味が分からんw

380:デフォルトの名無しさん
10/06/06 22:24:12
こだわっているんではなくて、計算効率がちょびっとよくなるか悪くなるかの差で、バブルソートとよんだりよばなかったりするのはおかしいといっているのです。
英語版 wiki にのっている実装もバブルソート、 >>375 のやりかたもバブルソートなんですよ。無論私のもバブルソート。

381:デフォルトの名無しさん
10/06/06 22:42:15
ん、バブルソートですね

382:デフォルトの名無しさん
10/06/06 22:48:20
知識とコードのアンバランスさから見て、どっかの大学講師かな。
実務経験があるようには見えないし、頭堅いのにプライドだけは高いし。

383: ◆QZaw55cn4c
10/06/06 23:20:44
>>382
今は助教というのですよ。現在の大学教員の序列を知らないところから見ると、高校生かな?

384:デフォルトの名無しさん
10/06/06 23:21:28
高校生に負ける助教って・・・

385:デフォルトの名無しさん
10/06/06 23:29:08
どうりで高校生なら計算オーダーの話は理解できなくてもしかたありませんね。でも重要ですからよく勉強しておくように。

386:デフォルトの名無しさん
10/06/06 23:29:24
日本語まともに読めないクズの分際で、
なんで自分より下しか想像できないんだろうw


387:デフォルトの名無しさん
10/06/06 23:31:46
バブルソートでも色々あるんですよ。ひとつのパターンだけ決め付けてこれはバブルソート、あれは違う、などと見識の狭いことをいってはいけません。
もっと広い感覚で物事を理解することです。

388:デフォルトの名無しさん
10/06/06 23:32:52
実数と整数の区別もつかない盲が何言ってんだw

389:デフォルトの名無しさん
10/06/06 23:35:12
というか本当に助教なの?せいぜい院生くらいかと思ってたんだけど。
日本語の読めなさはやばいってレベルじゃねーだろw

390:デフォルトの名無しさん
10/06/06 23:35:43
小さなミスはその都度修正すれば済むこと。でもバブルソートがなにかを理解していなければ、ヒープソート、シェルソート、クィックソート、マージソート
その他いろいろなソートでもつまづきますよ。これらの理論では計算オーダーが重要ですからよく勉強しておくことです。

391:デフォルトの名無しさん
10/06/06 23:39:51
なんで相手がそれらのソートを知らないことになってんだよw

392:デフォルトの名無しさん
10/06/06 23:40:02
>>382
で講師だろうといっていたくせに、
>>389
で院生くらいだとおもっていた、
とは随分とおっしゃることがころころかわるのですね。日本語が読める読めないというより、日本語を使って思考できないのではないですか?

393:デフォルトの名無しさん
10/06/06 23:40:32
ちょ、同一人物認定されたw

394:デフォルトの名無しさん
10/06/06 23:40:43
>>391
計算オーダーを理解していないようですからね。

395:デフォルトの名無しさん
10/06/06 23:54:27
すいません、できたら>>362お願い致します
流石に無理ですかね・・・

396:デフォルトの名無しさん
10/06/06 23:55:50
>>395
スレ違いな上に、金取るぞってレベルの話なんだがw

397:デフォルトの名無しさん
10/06/06 23:57:10
>>395
無理に決まってるだろw

398:デフォルトの名無しさん
10/06/06 23:57:21
やっぱり無理ですよねw
じゃあだめもとで他当たってきます
ありがとうございました

399:デフォルトの名無しさん
10/06/06 23:58:06
>>395
作者に直接言ってみれば
もちろん、単にエラーが出るとだけ。
URLリンク(twitter.com)

400:デフォルトの名無しさん
10/06/06 23:59:34
大体フィルタだろ?
フィルタのソースはAviUtilの作者とは違うだろ。

401:デフォルトの名無しさん
10/06/07 00:00:30
>>399
いや、AviUtlに問題があるわけではなくて
このフィルタに問題があるんですよね
フィルタの作者はAviUtlの作者ではないんで・・
でももしかしたらAviUtl側でなんとかできるかもしれませんね
ありがとうございます。


402:デフォルトの名無しさん
10/06/07 00:01:58
関係ないフィルタの不具合を報告されても困るだろw

403:デフォルトの名無しさん
10/06/07 00:18:46
まぁここはご覧の通り高校生レベルの議論なんで・・

404:デフォルトの名無しさん
10/06/07 00:19:12
高校生以下のおじさんもいるけどね

405:デフォルトの名無しさん
10/06/07 02:09:08
高校生だったころに戻りたいな

406:デフォルトの名無しさん
10/06/07 04:04:49
中学レベルの英語力すらない人が多いみたいだけどね

407:デフォルトの名無しさん
10/06/07 06:55:32
that's too mad.

408:デフォルトの名無しさん
10/06/07 12:38:44
>>395
せっかちだなぁ

409:デフォルトの名無しさん
10/06/07 19:02:23
>>406
んじゃ、そのあんたのレスを英語で頼む

410:デフォルトの名無しさん
10/06/07 19:09:19
all your base are belong to us

411:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/07 20:16:30
>>411
char *month_name(int n)
{
if (n < 1 || 12 < n) {
return "unknown month";
}
return months[n-1];
}

413:デフォルトの名無しさん
10/06/07 20:20:27
staticだから関数内にmonths[]置くんじゃないの?

414:デフォルトの名無しさん
10/06/07 20:24:16
じゃあそれで

415:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/07 21:14:17
>>415
&lf ってなんだよ

417:デフォルトの名無しさん
10/06/07 21:15:40
scanf("%d", &n);


418:デフォルトの名無しさん
10/06/07 21:18:19
つーか関数内に関数置くな

419:デフォルトの名無しさん
10/06/07 21:21:46
>>415
なんという残念な使い方w

420:デフォルトの名無しさん
10/06/07 21:24:05
>>415
URLリンク(ideone.com)

scanf("&lf",&n);
printf("%s",*months); の一連の流れをおかしいと思わなかったのはまずい

421:デフォルトの名無しさん
10/06/07 21:31:08
残念な頭なのでmonth_nameの中に
*months入れるのは思いつきませんでした…orz

422:デフォルトの名無しさん
10/06/07 21:37:19
>>421
慣れ、馴れ。数書くうちに体にしみこむ。

423:デフォルトの名無しさん
10/06/07 22:08:57
ケチ付けるわけではないけどif文はmainの中のほうがunkownのとき
関数を呼ばなくていいんじゃなかろうか。

424:9
10/06/07 22:11:27
【質問テンプレ】
[1] 授業単元:C言語課題
[2] 問題文(含コード&リンク):2つの正の整数(aとb)の最大公約数をユークリッドの互除法を用いて表示するプログラムを作成せよ。ただし、0<b≦a≦32767とする。
               ≪ユークリッドの互除法≫
               ユークリッドの互除法による最大公約数(GREATEST COMMON DIVISOR:GCD)は、次のように求める。
               ①2数(aとb)の中で大きい値をl、小さい値をmとする。
               ②lをmで割り、あまりをrとする。
                      r=0ならば、mが最大公約数となる。
                      r≠0(0<r<m)ならばl←m、m←r として再び②の処理を行う。
[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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/07 23:09:24
>>423
逆にその関数として、不正な値が渡された時はどういう挙動にしようか

427:デフォルトの名無しさん
10/06/07 23:10:21
for(i = 0 ; i < 5 ; i++){
printf("%d,", i );
}
これで出力したら
1,2,3,4,5,
みたいに最後にもカンマがついちゃうんでfor文の外側に
printf("\b\n");
を付け加えたんだけどうまく最後のカンマが消えません
その理由とどうすればいいのか教えてください

428:デフォルトの名無しさん
10/06/07 23:21:48
\bは書き込む位置が1文字分戻るだけだから
スペースで上書きする必要がある
printf("\b \n");

429:デフォルトの名無しさん
10/06/07 23:23:30
なるほど


430:デフォルトの名無しさん
10/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;
}
でごまかすしかない。

431:430
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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;
}
不正な値が行く場合がわかりませんので教えて下さい。

434:430
10/06/07 23:53:41
>>433
できている、と思うのですが。

435:デフォルトの名無しさん
10/06/07 23:55:12
しっかし無駄なstaticだ

436:デフォルトの名無しさん
10/06/07 23:55:25
>>433
関数をライブラリとして提供した場合に、使う側に対して値チェックを強制するべきか、
それとも不正な値を渡された場合にunknown monthを返却する仕様とするのかという話。

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

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

その上での考えを教えてほしい。

437:デフォルトの名無しさん
10/06/07 23:57:16
NULLを返却するのは?
結局関数の中で範囲チェックすることになるけど。

438:デフォルトの名無しさん
10/06/07 23:58:00
>>435
これstatic消したら関数抜けた時に戻り値のアドレスが破棄されるんじゃないの?

439:デフォルトの名無しさん
10/06/08 00:00:30
>>438
リテラルのアドレスが返るから問題ない

440:デフォルトの名無しさん
10/06/08 00:11:50
>>438
sizeof(months) == sizeof(char *) * 12

441:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/08 00:20:40
>>440
要するに、予約語staticをつけなくとも、
monthsはその各々の要素が文字列リテラルの先頭へのポインタであるから
静的領域に確保されると。


443:デフォルトの名無しさん
10/06/08 00:27:51
それって規格で決まってたっけ?
そうでなくても、いちいち呼ばれるたびに確保するような処理系なさそうだけどさ。

444:デフォルトの名無しさん
10/06/08 00:35:16
>>436
いろいろとありがとうございました。
今回は不正な値を渡された場合にunknown monthを返却する仕様のつもりです。
使用者に対しての値チェックのやり方はどれがいいかまだよくわかりません。
難しいですね。

445:デフォルトの名無しさん
10/06/08 00:58:11
>>442-443
文字列リテラルがstatic const char[]か?ならYes 6.4.5 文字列リテラル
文字列リテラルを指すポインタ非可変長配列がstaticか?ならchar const * const []であってもNo 6.2.4 オブジェクトの記憶域期間

446:デフォルトの名無しさん
10/06/08 01:03:04
>442>443
横レスだけど
months自体は自動変数だから、スタックに置かれるよ。関数が返しているのは
スタック変数を指すポインタではなく、静的領域に置かれている文字列リテラルの
ポインタ。

447:443
10/06/08 01:34:03
>>445



448:デフォルトの名無しさん
10/06/08 08:57:28
[1] 授業単元:プログラミング演習2
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月9日12時まで
[5] その他の制限:

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



449:デフォルトの名無しさん
10/06/08 10:20:42
>>441をお願いします。

450:デフォルトの名無しさん
10/06/08 10:44:00
>>449
とりあえずガウスザイデル法のみ

URLリンク(kansai2channeler.hp.infoseek.co.jp)

451:デフォルトの名無しさん
10/06/08 11:08:42
>>449
SOR法

URLリンク(kansai2channeler.hp.infoseek.co.jp)

452:デフォルトの名無しさん
10/06/08 12:04:27
>>451
ありがとうございます。

453:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/08 13:21:57
C++/CLIの宿題スレってないの?

455:デフォルトの名無しさん
10/06/08 13:43:20
>>448
適当に見繕ってURLリンク(codepad.org)

456:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/08 14:02:48
(2) 【平均点と偏差値を計算する関数の作成】
(1)のプログラムにおいて、平均点と学力偏差値を計算する部分を関数 seiseki に改
めたプログラムを作成せよ
◆ 条件
 データの入力と結果の出力はmain関数で行う。
 人数 N に負の値や101以上の値が入力されたときには、再入力するものと
する。
 点数 x[i] に負の値や100点を超える値が入力されたときには、再入力す
るものとする。
 main関数から関数seisekiに
データの数 N
N人分の点数 x[]
を渡し、関数seisekiからmain関数に
平均点 μ
偏差値 T[]
を受け渡す。
ただし、平均点は戻り値を用いて返す。



459:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/08 14:35:27
>>456
wakaran

461:デフォルトの名無しさん
10/06/08 14:42:29
>>459
問題文が日本語になっていない
コードも直接貼ってるから読みにくい

462:デフォルトの名無しさん
10/06/08 14:51:41
>>448
ありがとうございます。
セグメンテーション違反になりましたが、ここからは自分で頑張ってみます。

463:デフォルトの名無しさん
10/06/08 15:31:47
>>456-458
URLリンク(codepad.org)

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

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

・偏差値はわからないから、wikipediaのを参考に。
・stdevの求め方は、2乗の平均 - 平均の2乗にした。
・データ入力の際に、avgも求められるが、題意から分けた。

464:デフォルトの名無しさん
10/06/08 15:38:36
配列サイズが101だから、iは1からなんじゃね?

465:デフォルトの名無しさん
10/06/08 15:50:30
>>463
Fortranな先生かな。
URLリンク(codepad.org)

466:デフォルトの名無しさん
10/06/08 16:10:08
勝手に例の表記や条件を変えるヤツってなんなの?

467:デフォルトの名無しさん
10/06/08 17:23:12
>>354
すげぇ、てか制御式の中にscanf入れることできるのかー。
>>348
の人は何故だめなのかな。

468:デフォルトの名無しさん
10/06/08 17:30:20
>>348
scanf("%c",&c);
で改行をよみこんでしまうから
後の条件式を総スルーしちゃう。
よってbは0で初期化されたまま

あと実際に動かすと
1
+
1
=
1
となってしまう。
これは
1
+
は計算するように書かれているけど
1
=
は計算するように書かれてないから。

469:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/08 18:00:42
>>468
頭良すぎワロタww
何故そのような分析ができるんだ。
C言語難しすぎ、どんだけ繊細なんだよ。

471:デフォルトの名無しさん
10/06/08 18:18:23
お前がバカすぎるだけだってまだわからないのかw

472:デフォルトの名無しさん
10/06/08 18:19:08
それほどでもないけどね

473:デフォルトの名無しさん
10/06/08 18:25:51
>>468はいろいろ間違ってるぞw

474:デフォルトの名無しさん
10/06/08 18:28:05
prevcってなんだ?見たことも聞いたこともない。
苦し紛れの技巧か?

あと='';

''の中は空白だな。

475:デフォルトの名無しさん
10/06/08 18:36:20
>>454
C#宿題スレに書きこんでみるか?

476:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/08 18:46:02
あげて古いの蒸し返してるのは:4 ◆nNHcoCEvyoだろ
こいつに何かを理解させるのは無理だって

478:デフォルトの名無しさん
10/06/08 19:03:06
>>474
一個前のを取っておきたかったんだと思うよ。技巧ってほどじゃない

479:デフォルトの名無しさん
10/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以下とする。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
これを実行すると何故か一部でエラーが出るんですが(プログラミング的な意味ではなく)
その理由と解決方法を教えてください

480:デフォルトの名無しさん
10/06/08 19:17:35
>>479
count = 1;の位置がおかしい

481:デフォルトの名無しさん
10/06/08 19:19:22
>>480
なにがココまではおkなんだか・・・
ありがとうございます

482:デフォルトの名無しさん
10/06/08 19:21:07
関係ないけどそのままだと数が大きくなるとオーバーフローしてしまう。
oira *= a;
oira %= n;
ってすれば数が大きくなっても対応可能。

483:デフォルトの名無しさん
10/06/08 19:23:02
>>482
まじでそこを聞こうと思ってたところです
ありがとうございます

484:デフォルトの名無しさん
10/06/08 19:46:03
>>482
度々悪いんですけど
なぜそうすればいいのか教えてもらえませんか?
自分で考えてもわかりませんでした

わからないのは
なぜ数が大きくなっても対応出来るのかではなく
なぜこの計算方法でも正しい結果が得られるのかです

485:デフォルトの名無しさん
10/06/08 20:00:30
めんどくさいからパス

486:デフォルトの名無しさん
10/06/08 20:08:13
そか(’・ω・`)
oiraにnで割った余りを入れちゃったら
次a倍すると意図しない値になっちゃいそうなんだ
少なくとも俺のない頭はそう思っちゃうorz

一回一回a倍とnで割った余りをいれようとした根拠とか考え方とかをご教授願いたかった(’;ω;`)

487:デフォルトの名無しさん
10/06/08 20:19:18
これって高校数学の範囲じゃねーの?

488:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/08 20:33:16
もしかして俺のバカさ加減に呆れてますか?(;ω;`)

490:デフォルトの名無しさん
10/06/08 20:55:42
少なくとも処理結果は正しいの?

491:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/08 21:07:13
それがoira-1をnで割ったあまりにどう応用できるのか、俺もわからないので>>489は一人で泣かなくていい

493:デフォルトの名無しさん
10/06/08 21:09:19
>>491
解説ありがとう
なんとなく考え方はわかったがまだしっくりこないのでもうちょい粘ってみる

>>492
気が楽になった

494:デフォルトの名無しさん
10/06/08 21:09:30
oira-1がnで割り切れる=oiraをnで割った余りが1

495:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/08 21:37:49
まだ関数と{? : }は習ってないから使っちゃいけないんだ
あくまで標準入出力とfor, while, if だけで

497:デフォルトの名無しさん
10/06/08 21:39:35
使っちゃいけないという思い込み。
本当に使うなといわれた?

498:デフォルトの名無しさん
10/06/08 21:43:13
思い込みだな
使っちゃいけないことは無いだろうが使わないでできるならそれに越したことはないかと

499:デフォルトの名無しさん
10/06/08 21:49:33
そんなことしてる間に
>>491>>494のおかげで理解できました
理解できただけで次似たようなコード書くとき思いつくかどうかは別だけど

500:デフォルトの名無しさん
10/06/08 21:52:52
countを求めるのはnとaが互いに素であることがわかってからの方がいい。

501:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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;
}

503:501
10/06/08 22:00:45
問題文がちょっと抜けてました。訂正させてください。

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

×この処理を行うプログラムを記述する

504:デフォルトの名無しさん
10/06/08 22:01:35
>>500
助言㌧
それはその方が無駄にφ(n)(=count)を求めなくて済むからか?
だとしたらその通りかもしれないから今後の参考にするわ

505:デフォルトの名無しさん
10/06/08 22:11:30
あくまで好みだからそんなの自分の好きにしろとか言われるかもだが
プログラム書くときスペースとか改行ってどのタイミングで入れてる?

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

こうしたほうが効率がいいとか後で見やすいってのがあるなら参考にしたい
今なら癖とかないから変えられるし

506:デフォルトの名無しさん
10/06/08 22:12:55
>>504
そう。
できるだけ必要のない無駄な処理はしないってのが大事。

507:デフォルトの名無しさん
10/06/08 22:14:02
>>505
どうぞ
URLリンク(google-styleguide.googlecode.com)


508:デフォルトの名無しさん
10/06/08 22:14:50
何のIDE使ってるか知らないけど
vs2008使ってる俺は適当に書いてから「編集→詳細→選択範囲のフォーマット」で整形してる

509:デフォルトの名無しさん
10/06/08 22:20:58
URLリンク(www.textdrop.net)
あえてこっちを載せないことに悪意を感じる

510:デフォルトの名無しさん
10/06/08 22:25:31
>>509
知らなかったんだごめんよ

511:デフォルトの名無しさん
10/06/08 22:39:58
>>502が理解できない
てか発想が秀逸すぎて手に負えない

512:デフォルトの名無しさん
10/06/08 22:43:14
最大公約数をループで求めてるだけ

513:デフォルトの名無しさん
10/06/08 22:50:13
とりあえず褒めとけばいいと思ってない?

514:デフォルトの名無しさん
10/06/08 22:52:00
>>501
0<=x,y<=10000を満たす座標の各点についてその点から
最も近い点の色をその点に設定する
ってあるけど

各々の座標の色はどう初期化するべきなの?
なにかしら初期化しておかないと最も近い点の色もなにもないと思うんだけど。

515:デフォルトの名無しさん
10/06/08 23:09:33
引数で与えられた点の色はこっちで好きに決めていいんだろ

516:430
10/06/08 23:12:01
>>505
K&R にしておけば後ろ指をさされることはないかと。
ただし私は

int main() {
...
}

とかえている。
emacs(xyzzy) ではこのほうが便利だから。

517:デフォルトの名無しさん
10/06/08 23:54:47
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  URLリンク(kansai2channeler.hp.infoseek.co.jp)
  プログラムと問題文が書いてあります
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 2010年6月9日中に提出
[5] その他の制限: 特にありません

よろしくお願いします。


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

519:デフォルトの名無しさん
10/06/09 03:19:59
上の実行例の訂正です
URLリンク(kansai2channeler.hp.infoseek.co.jp)

520:デフォルトの名無しさん
10/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:9
10/06/09 10:07:40
>>432
すごいです!!…学校で習った感じに少し、
書き直させて頂きました(>_<)
こんなに早く出来ると思ってなかったので
びっくりしました。
本当に助かりました!有難う御座いました☆


522:デフォルトの名無しさん
10/06/09 10:43:14
シルエット
カーディガン
レントゲン
サンドイッチ

523:デフォルトの名無しさん
10/06/09 11:01:34
>>501
URLリンク(ideone.com)
作ってみたけどなんか違うから、だれか直してくれ

524:デフォルトの名無しさん
10/06/09 16:11:42
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:特に指定なし
 [3.2] gcc 3.2
 [3.3] 言語: (C)
[4] 期限: ([2010年6月10日15:00まで] )
[5] その他の制限: なし

よろしくお願いします。

525:デフォルトの名無しさん
10/06/09 16:45:36
>>524

おまえ、5つの数字の列の取りうる範囲は0~99999の100,000個だぞ。
だから入れるバケツの大きさは100,000の配列にしてそこへ2000個のデータを
5桁の数字に対応するバケツに次々入れて、終わったら番号の小さいバケツから順番に
数字を取り出すようにしないとダメだぞ。


526:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/09 19:11:45
>>528
これなら大丈夫だろw
URLリンク(ideone.com)

530:デフォルトの名無しさん
10/06/09 19:27:49

5つの数字が全部0って可能性はないのかな?
もし0が入る可能性があるのならallocateされた領域の初期値が0じゃまずいかも。

531:デフォルトの名無しさん
10/06/09 19:28:55
data[000000]++;

532:デフォルトの名無しさん
10/06/09 19:39:49
>>530
お前は何をいってるんだ

533:デフォルトの名無しさん
10/06/09 20:07:46
>>529
何度もすみません
さっきの説明が分かりにくかったですね;
forの中にscanfとかを入れるのがダメなんです。
1行に付きscanf、forなどは1つです。
printf
int
while
scanf
float
for
のみの使用です。

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




534:デフォルトの名無しさん
10/06/09 20:09:59
>>528
誰が禁止って言ったの?

535:デフォルトの名無しさん
10/06/09 20:21:51
>>531-532

わはははは、javaやりながらここ見てたから勘違いだ。笑えwwwww


536:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/09 20:54:43
学校でやってないところは使うなと
先生に言われました;;

538:デフォルトの名無しさん
10/06/09 21:01:58
エスパー無理

539:デフォルトの名無しさん
10/06/09 21:03:14
>>537
学校と先生を教えてくれるかな?w

540:デフォルトの名無しさん
10/06/09 21:04:30
>>537
誰だお前は

541:デフォルトの名無しさん
10/06/09 21:11:04
学校でやってないこと 使うなと
講師の先生(せんせ)に 言われたよ
―痴楽 綴り方教室

542:デフォルトの名無しさん
10/06/09 21:13:19
≫538
例ですと
前回の課題の
問題文:整数nを入力し、以下のようになサイズnの”Z型の図形”を”*”で表示するプログラムを作成しなさい。
ただし、図形を表示するためのnの値は3以上とし、2以下の値が入力された場合は処理を終了する様にしなさい。
[実行例]
3      <-n入力
n=3
***
 *
***
4 <-n入力
n=4
****
   *
  *
****  
8 <-n入力
n=8
********
         *
        *
       *
     *
   *
  *
********
URLリンク(kansai2channeler.hp.infoseek.co.jp)
はこうなりました。

543:デフォルトの名無しさん
10/06/09 21:21:14
エスパーできないって言ってるんだが

544:537 542
10/06/09 21:27:23
≫534
すみません!!
番号うつの忘れてました。
ホントすみません;;

545:デフォルトの名無しさん
10/06/09 21:35:42
>>536
URLリンク(kansai2channeler.hp.infoseek.co.jp)
詰めは自分でやってくれ

546:デフォルトの名無しさん
10/06/09 22:00:30
<iostream>とか<studio.h>って何が違うんですか?

547:デフォルトの名無しさん
10/06/09 22:03:59
>>546
STanDard InputOutput Headerな
定義されてる関数群がちがう。

548:デフォルトの名無しさん
10/06/10 00:33:37
もう本当に挫折しそうです。
関数を二つ pen()とqen()として作って
int main()の中に呼びたいんですが
この時pen()の実引数をqen()にしたいんですが
これがうまくいきません、どうしたらいいですか?
レス代行なので長いプログラムは書けません・すいません。
int main(void)
a=pen();
qen(a);
としてもpen()とqen()が別個に呼び出されるだけで一つの作業と
なりません。

549:デフォルトの名無しさん
10/06/10 02:48:35
>>548
penの引数をqenの引数にしようとしているようには見えないので、いろいろおっちょこちょいな人なのかな。
関数ポインタをキーワードにいろいろ調べてみてください。

550:デフォルトの名無しさん
10/06/10 06:07:31
pen()の実引数をqen()にするなら
pen(qen);
だろ。

551:デフォルトの名無しさん
10/06/10 06:46:15
pen(void (*p)(void)); かなシグネチャは

pen()の中で (*p)(); もしくは p(); として呼び出す

552:デフォルトの名無しさん
10/06/10 07:52:36
>>550
double a;
qen(a);
pen(qen);
ですか?普通に無理でしたが・・
pen(qen);だけでもまぁ無理でした。
>>551
pen((*p)(qen(a));ってことですか?これも無理でした。

553:デフォルトの名無しさん
10/06/10 07:55:25
関数ポインタってのあるんですが、馬鹿でした。で
int mainの中で
p= pen;
qen((*p)pen());とかごちゃごちゃ色々なとこ変えて、
付け足して
90回くらい思考錯誤したけど全部だめした......
ちなみにpen()、qen()自体はそれぞれsin関数とcos関数
です。ポインタ関数理解したいのでこのままの構造でい
きたいと思ってます。

554:デフォルトの名無しさん
10/06/10 07:59:47
何がしたいのかさっぱり伝わってこない

555:430
10/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:デフォルトの名無しさん
10/06/10 08:12:37
cos()の返り値をsin()の引数にするってw

557:デフォルトの名無しさん
10/06/10 08:21:43
関数を関数の引数にするってことを理解できてないようにみえる

558:デフォルトの名無しさん
10/06/10 08:23:28
>>554
関数を2つ呼び出して、一つの関数をもうひとつの関数の
引数にしたいんです。ただそれだけです。

559:デフォルトの名無しさん
10/06/10 08:23:50
>>555
わざわざありがとうございます、doubleじゃなくてfloatでした。
この時も関数ポインタはfですね?
あとretrunっているのですか?どういう役割なのかなぁ....
それとa=3.1415926..とは?
色々ややこしいなぁ、簡単なプログラムなのにこんな複雑だとは....


560:デフォルトの名無しさん
10/06/10 08:25:31
>>558
もしかして
sin(cos(a));
か?この式に何の意味があるのかは不明だが

561:デフォルトの名無しさん
10/06/10 08:27:38
>>559
問題を適切に抜き出す能力が足りないだけ
少なくとも俺は>>558読んでもさっぱりわからん

562:デフォルトの名無しさん
10/06/10 08:28:07
>>560
それでオッケーなら>548でもオッケーだろ

563:デフォルトの名無しさん
10/06/10 08:30:26
こういう自分の勝手な解釈で嵌ってくアホ見ると、
余計なことしないで教科書のサンプルでも打ち込んでろって思うな

564:デフォルトの名無しさん
10/06/10 08:38:27
マゾなんだろ
簡単な事をわざわざ複雑怪奇に書いて苦しみ悶える事に快感を覚えるタイプ

565:デフォルトの名無しさん
10/06/10 08:39:27
>>561
いやめちゃくちゃ単純なんですが・・
合成関数のプログラムですよ。
sin(cos(a))ですよ。
関数が二つあるんだから、二つの関数呼び出す必要ありますよね。
全然意味不明じゃないですが・・・

566:デフォルトの名無しさん
10/06/10 08:44:22
x=cos(a);
y=sin(x);
変数と代入から勉強だな。

567:デフォルトの名無しさん
10/06/10 08:47:18
>>565
それはcos(a)の返り値をsin()の実引数にするといい、
cos()をsin()の実引数にするとは言わない。
正しく用語を使えてないから、他人に正しく伝わらない。

568:デフォルトの名無しさん
10/06/10 08:47:37
>>565
まだわからない。
double sincos(double a)
{ return sin(cos(a)); }
ではどうだめなのか。

569:デフォルトの名無しさん
10/06/10 08:51:53
>>567
すいません。その通りです。返却値をsin()の実引数の実引数にしたいんです。

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



570:デフォルトの名無しさん
10/06/10 08:55:31
お前に複雑なプログラムの何がわかるってんだよw

571:デフォルトの名無しさん
10/06/10 08:58:56
っと、>>569はなりすましか

572:553
10/06/10 09:00:44
このスレにいる人は全員低脳ばっかりですね。

573:デフォルトの名無しさん
10/06/10 09:01:44
・質問者はなりすましを防ぐため、トリップを使ってください。
名前欄に、「好きな数字#...」に続けて任意の文字列

574:デフォルトの名無しさん
10/06/10 09:02:36
>>567
以後気をつけますんで、お願いします、どうしたらいいでしょう....
>>570
少し複雑になったら関数が必要だから。別にプログラムの何もわからないが。


575:デフォルトの名無しさん
10/06/10 09:03:29
>>574
日本語でおk

576: ◆mDrzcbRHP2
10/06/10 09:04:48
>>573
すいません。

>>569>訂正
実引数の実引数にしたい。→実引数にしたい。

577:デフォルトの名無しさん
10/06/10 09:06:22
>>576
おまい誰だよ

578:9
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/10 09:15:44
aikaって名前?

581:デフォルトの名無しさん
10/06/10 09:25:42
>>580
>file:///C:/Users/aika/Desktop/マークアップ言語/c.html
スレリンク(tech板:424番)


582:デフォルトの名無しさん
10/06/10 09:29:11
スーパーハカーでもなきゃ、あんたのPCの中身はわからんよw

583:デフォルトの名無しさん
10/06/10 09:33:03
>>581
それはわかってんよ
実行時エラーとか水色で示した部分がこちらは知りたいわけ

584:566 ◆/91kCCQXBo
10/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:デフォルトの名無しさん
10/06/10 10:29:07
>578 は、AKBオタ。

586:デフォルトの名無しさん
10/06/10 10:34:42
仲間が見つかってよかったねw

587:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/10 11:02:44
>>587
なるほど、よくわかりました

589:9
10/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:デフォルトの名無しさん
10/06/10 11:23:54
589 の for 内 printf 1発目
副作用関連で鼻から悪魔コード じゃない? (関数引数での , は副作用完了点じゃないよな?)

591:587
10/06/10 11:33:47
ごめんなさい。誤爆です。行方不明だと思ったらこんなところに書き込んでいたか。

592:デフォルトの名無しさん
10/06/10 11:42:47
>>590
本当やね

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

とすればうまくいくはず

593:デフォルトの名無しさん
10/06/10 11:44:26
あ、だめだ

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

か?

594:581 ◆/91kCCQXBo
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/10 19:56:13
#include <stdio.h>
int main(int argc, char *argv[])
{
printf(argv[1])
printf(argv[2])
}
のようにするとき,コマンドからargv[]にデータを入れないとエラーがでます。
配列argv[]の初期値はどのように設定すればよいのでしょうか?

598:デフォルトの名無しさん
10/06/10 20:08:21
if(argc<=1) exit(1);

599:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/10 21:16:32
>>597
argc == 1 の時はargvを調べないようにする

601:デフォルトの名無しさん
10/06/10 22:50:26
>>599

なお~~。の部分はプログラムのテストに使うくらいで、実際の問題とはなんの関連もないわな。

602:デフォルトの名無しさん
10/06/10 23:41:09
【質問テンプレ】
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: (特になし)
 [3.2] gcc
 [3.3] 言語: (C)
[4] 期限: ([2010年6月14日00:00まで])

よろしくお願いします。

603:デフォルトの名無しさん
10/06/10 23:42:17
すいません。書き忘れましたが、・・・・の部分がわからないので教えていただけないでしょうか?

604:デフォルトの名無しさん
10/06/10 23:46:28
>>501,523
ボロノイ図の問題かな?
AREA_SIZEを必要に応じて(10000などに)書き換えて下さい。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

605:デフォルトの名無しさん
10/06/11 00:22:35
>>599
2番目だけ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

606:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/11 12:52:35
score って変数を二つ宣言してるからじゃ?

608:デフォルトの名無しさん
10/06/11 12:52:39
エラーメッセージ書いておいてくれないと回答面倒だよ

609:デフォルトの名無しさん
10/06/11 12:56:24
scoreはscore[0]を表すってことを忘れてました
すみません

610:デフォルトの名無しさん
10/06/11 13:28:28
(゚Д゚ )ハァ?

611:デフォルトの名無しさん
10/06/11 13:30:46
違うの?
配列名は配列の先頭要素のアドレスを表すってあるけど
ポインタを詳しく理解してないからアドレスとはなんぞやって聞かれてもクエスチョンマークだけど

612:デフォルトの名無しさん
10/06/11 13:38:11
「配列名は配列の先頭要素のアドレスを表す」を
「配列名は配列の先頭要素を表す」こう解釈したんだろうけど
知らない言葉を無視して前後をくっつけて理解した気になってたら
しょっちゅうトラブル起こるよ

613:9
10/06/11 13:44:44
>>594

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

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



614:デフォルトの名無しさん
10/06/11 13:49:40
BASIC上がりか

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


よろしくお願いします。



616:501
10/06/11 17:13:24
>>604,501,523
どうもありがとうございました。参考にさせて頂きます。
ボロノイ図でググってみましたが関連が深そうです。
課題は「データベース構造設計、更新効率性と正規性のバランス」
がテーマの講座で出たものでした。

617:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/11 17:46:46
>>615
URLリンク(codepad.org)

619:デフォルトの名無しさん
10/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
初期値をループで求めるのはどうなのと思わなくもない

620:619
10/06/11 18:00:00
ごめん >>618 に対してだった


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch