C言語なら俺に聞け( ..
[2ch|▼Menu]
348:デフォルトの名無しさん
08/06/17 21:19:43
>>345
できたよ

int main()
{
char s[] = "              合計\n  50 49 48 47 46 ***\n  45 44 43 42 41\
 ***\n  40 39 38 37 36 ***\n   35 34 33 32 31 :\n  30 29 28 27 26 :\n   25 24 23 22 21 :\n\
  20 19 18 17 16 :\n   15 14 13 12 11 :\n   10 9 8 7 6 :\n   5 4 3 2 1\n合計 *** *** *** *** ***";
printf("%s", s);
return 0;
}

349:デフォルトの名無しさん
08/06/17 21:22:25
>>348
ちょっwwww カルーアミルクを噴出しちまったじゃねーかYO!

350:デフォルトの名無しさん
08/06/17 21:27:53
>>338
スイッチの入力です。

>>343さん
試してみました。
スイッチを押す回数     LED
1回           ○●○○
2回           ○●●○
3回           ○●○○
4回           ●○○○

リセットしてやり直すと、また点き方が変わったりしてしまいます。
マイコンがダメなんですかね。
理想は
スイッチを押す回数     LED
1回           ○○○●
2回           ○○●●
3回           ○●●●
4回           ●●●●
なんですけど

351:343
08/06/17 21:30:04
あーLEDってP1.DR.BYTEのどのビットに接続されてるかわかる?
それ確認してなかったよ

352:デフォルトの名無しさん
08/06/17 21:36:31
>>348
ああ驚いた


>>348 の前がどこかわからんけど
const char table[] = {0x00, 0x01, 0x03, 0x07, 0x0f}:

count = 0;

count = (++count % 5);
P1.DR.BYTES = outtable[count];

テーブルがシンプルだったりして・・・

353:デフォルトの名無しさん
08/06/17 21:43:23
>>351
○○○● P1.DR.BYTE=0x01;
○○●● P1.DR.BYTE=0x03;
○●●● P1.DR.BYTE=0x07;
●●●● P1.DR.BYTE=0xf;

こういうことですか?

354:デフォルトの名無しさん
08/06/17 21:45:36
>>353
あー
まあそれでOKです。

シフト演算が思惑通りに動いてない気がする(私の勘違いの可能性大)
ので>>352のような配列で持ってたほうがいいかも

355:デフォルトの名無しさん
08/06/17 21:47:13
<<345
できたお
#include <stdio.h>
int main(){
int a,b,z,i,d;
int c=50;
//1行目から10行目
printf("\t\t\t\t\t\t合計\n");
for(a=0; a<10; a++){
for(b=0; b<5; b++){
i += c;
printf("\t%d",c);
c--;
}
printf("\t%d",i);
printf("\n");
d += i;
}
//11行目
printf("合計");
for(a=0; a<5; a++){
for(b=1; b<11; b++){
c += 5*b;
}
printf("\t%d",c);
}
printf("\t%d",d);
scanf("%d",z);
}

356:デフォルトの名無しさん
08/06/17 21:48:48
間違った>>345

357:355
08/06/17 22:21:10
配列使ってないうえに合計がめちゃくちゃだった
スマソ


358:355
08/06/17 22:28:05
書き込むスレ間違えた
>>355-358 はスルーしてくれ

359:デフォルトの名無しさん
08/06/17 22:59:31
>>354
{
char outdata = 0;
int sw_cur = 1;
int sw_prev = 1;

while(1){
sw_cur = P2.DR.BIT.B0;
if( !(sw_cur ^ sw_prev) ) continue;
sw_prev = sw_cur;

if( sw_cur == 0 ){
P1.DR.BYTE = outdata << 1;
outdata++;
if(outdata > 4) outdata = 0;
}
}
}


360:デフォルトの名無しさん
08/06/17 23:16:21
>>359
ああ、すまん。こうだな。
if( sw_cur == 0 ){
P1.DR.BYTE = (1 << outdata);
outdata++;
if(outdata > 4) outdata = 0;
}

>>353のようにしたいなら、たしかH8はI/Oにバッファが
あったような気がするから

P1.DR.BYTE |= (1 << outdata);

すりゃいいんないかな?
できなったら、もうひとつ変数用意すりゃいい。

361:デフォルトの名無しさん
08/06/17 23:32:25
>>345
#include <stdio.h>
#define TOTAL_NUM 50
#define COL 5

int main(void){
int i, c=TOTAL_NUM, tmpsum=0, colsum[COL]={0};

for(i=0; i<COL; i++){printf("\t");}
printf("\t合計\n");
for(; c>0; c--){
printf("\t%4d", c);
colsum[(TOTAL_NUM - c) % COL] += c;
tmpsum += c;
if((c % COL) == 1){
printf("\t%4d\n", tmpsum);
tmpsum = 0;
}
}
/*最終行*/
printf("合計");
tmpsum = 0;
for(i=0; i<COL; i++){
printf("\t%4d", colsum[i]);
tmpsum += colsum[i];
}
printf("\t%4d\n", tmpsum);

return 0;
}

362:デフォルトの名無しさん
08/06/18 00:15:45
昨日相談したものですが、今日会社からほかのメンバーは皆開発に
行くけどわたしだけテスト要員として来月から配属されることに
決まったそうです。

多分、辞めろっていうことなんでしょうね。

なんで自分だけわかんないのか悔しいけど、頭の構造が違うんで
しょうね、こういうのがわかる人は。


363:デフォルトの名無しさん
08/06/18 00:17:58
>>362
おめでとう、死ねばいい富もうよ

364:デフォルトの名無しさん
08/06/18 00:20:35
お前を採用したのは会社なんだからお前を活用する責任も会社にある
黙って居座ってればいいのだ

365:デフォルトの名無しさん
08/06/18 00:21:40
給料くれるなら別に良いよ
気にスンナ

366:デフォルトの名無しさん
08/06/18 00:22:14
自信がないっていってたんだし、そのままいきなり開発に
放りこまれるよりは親切なほうだと思うけどなあ。

テストの間に勉強すればいい。


367:デフォルトの名無しさん
08/06/18 00:26:02
テストってデバッグ要員のことだったのか
資格試験でも受けてるのかと思った

テスト要員でも雇ってもらえるならいいじゃないか
辞めろって言われるまで居座ってやれ

368:デフォルトの名無しさん
08/06/18 00:26:08
>>362
>>312

369:デフォルトの名無しさん
08/06/18 00:33:55
会社に行ったらテスト要員になった 辞めろってか

370:デフォルトの名無しさん
08/06/18 00:38:53
辞めろよ

371:デフォルトの名無しさん
08/06/18 00:39:20
多分、若干おかしくなりかけていたから講師から人事に相談されてたっぽい
ですね。スレ違いなのでもう終わります。

教えてくれた人、ありがとうございます。
プログラムがちゃんと書ける人って自分のやってることを説明できて親切で
すね。ほうんとうにありがとうございました。

372:デフォルトの名無しさん
08/06/18 00:46:01
しかし開発要員に採っておいて使えないのにクビ宣告しないなんて
世の中良心的な会社もあったもんだね
つまり当たりを引いたわけだ

373:デフォルトの名無しさん
08/06/18 01:10:48
ワシは単にコネでねじこまれたという説を推すよ

374:デフォルトの名無しさん
08/06/18 01:28:24
俺が新人の頃は同期に全然できない奴がいて、そのうちのひとりは研修中に辞めたよ

375:デフォルトの名無しさん
08/06/18 02:32:03
まあ開発部隊に入りたいならゆっくりでもいいから勉強することだねー

376:デフォルトの名無しさん
08/06/18 02:32:40
入らないほうが幸せにはなれるかもな

377:デフォルトの名無しさん
08/06/18 02:55:38
ゆっくりしていってね(AA略)

378:デフォルトの名無しさん
08/06/18 11:38:52
公務員はプログラミングできるのか?
医者はプログラミングできるのか?
弁護士はプログラミングできるのか?


379:デフォルトの名無しさん
08/06/18 11:42:39
趣味でプログラムできる人もいるんじゃね?

380:デフォルトの名無しさん
08/06/18 11:47:56
仕事でそういう二足のわらじを履いてる人は結構いるよ
有名どころだとLZHの作者はお医者さんだったっけ

381:デフォルトの名無しさん
08/06/18 13:09:26
森田将棋の人も医学部だったね
医師免許はとってないのかな

382:デフォルトの名無しさん
08/06/18 20:40:56
文字列の入力を促し、入力。
その文字列の先頭の文字と同じ文字が文字列の中にいくつふくまれるかを求めるプログラム。
先頭の文字も数のうちに入れる。
(ポインタを用いる)

お願いします

383:デフォルトの名無しさん
08/06/18 20:41:56
>>382
>>1を100回読め

384:デフォルトの名無しさん
08/06/18 20:43:33
>>381
時間がないのです。



385:デフォルトの名無しさん
08/06/18 20:45:16
ここはC言語を学ぼうとしている人のためのスレです
情報処理の単位が欲しいだけの人はお帰りください

386:デフォルトの名無しさん
08/06/18 20:46:55
>>382
答えてあげてくださいな



387:デフォルトの名無しさん
08/06/18 20:48:35
ばればれの自演は逆効果w

388:デフォルトの名無しさん
08/06/18 20:49:45
文字列の入力を促し、入力。
その文字列の先頭の文字と同じ文字が文字列の中にいくつふくまれるかを求めるプログラム。
先頭の文字も数のうちに入れる。
(ポインタを用いる)

389:デフォルトの名無しさん
08/06/18 20:54:20
大学で資格の関係でどうしてもC言語をやらなければなりません
どうしてもわからない問題があるのでどなたか教えてください

問題1
三角形の底辺の幅、あるいは段数(どちらか一つ)を入力すると、逆三角形を表示する。例えば、底辺5あるいは段数3を入力すると
*****
***
*
となる。

2
下記のように横と縦の累計を計算して表示する。
配列は使わないこと。

3
10個以下の任意のn個(データ数は入力)のデータを入力し、逆順に出力する。
実行結果は奇数と偶数個の例を示すこと。

4
下記のように横と縦の累計を計算して表示する。
ただし、1次元配列を使うこと。

どの問題でもかまいません
本当に困っているので教えてください




390:デフォルトの名無しさん
08/06/18 20:55:57
>>382

#include <stdio.h>
int main(void)
{
  /* 入力された文字列を収めるためのcharの配列を宣言 */
  /* その他の必要な変数を宣言 */

  fputs("please input a string : ", stdout);

  /* fgets()を使ってcharの配列に入力された文字列を格納 */

  /* 文字の数を数えるint変数を0に初期化する */

  /* charへのポインタにcharの配列の先頭の文字を指させ、
    chraへのポインタが指している先の文字が'\0'でない間、
    charへのポインタを1ずつ文字列の先へずらしながら、
    以下の処理を繰り返す */;
    /* もしchraへのポインタが指している先の文字が
       charの配列の先頭の文字と等しければ */
      /* 文字の数を数えるint変数を1増やす */

  /* printf()を使って文字の数を数えたint変数の値を表示する */

  return 0;
}

391:デフォルトの名無しさん
08/06/18 20:55:59
C言語始めて2ヶ月でこんなもんだいだされました。
文字列の入力を促し、入力。
その文字列の先頭の文字と同じ文字が文字列の中にいくつふくまれるかを求めるプログラム。
先頭の文字も数のうちに入れる。
(ポインタを用いる)



392:デフォルトの名無しさん
08/06/18 20:58:04
>>1を読んでください
それでわからないようならあなたの日本語力と知性は壊滅的なのでおとなしく退学することを勧めます

393:デフォルトの名無しさん
08/06/18 20:58:10
>>389
自分でできないなら資格はありません

394:デフォルトの名無しさん
08/06/18 20:58:13
ああそうですか。
マルチ視ね

395:デフォルトの名無しさん
08/06/18 21:06:28
>>382
#include<stdio.h>
#include <stdlib.h>
int main()
{
 int *c, count = 1, i;
 c = (char *)malloc(1);
 puts("入力どうぞ");
 if ((i = getchar()) == EOF) {
  printf("ちゃんと入力しろ\n");
  exit(1);
 }
 while ((*c = getchar()) != EOF) {
  if (i == *c) count++;
 }
 printf("%d\n", count);
 return 0;
}
できました

396:デフォルトの名無しさん
08/06/18 21:08:14
これはひどい(笑

397:デフォルトの名無しさん
08/06/18 21:10:26
>>382
#include<stdio.h>
#include <stdlib.h>
int main(void)
{
int *c, count = 1, i;
c = (int *)malloc(1);
puts("入力どうぞ");
if ((i = getchar()) == EOF) {
printf("ちゃんと入力しろ\n");
exit(1);
}
while ((*c = getchar()) != EOF) {
if (i == *c) count++;
}
printf("%d こです\n", count);
return 0;
}
すいませんこっちでした

398:デフォルトの名無しさん
08/06/18 21:11:32
どっちも微妙にまちがってんじゃねえか

399:デフォルトの名無しさん
08/06/18 21:14:07
だめだこりゃ

400:デフォルトの名無しさん
08/06/18 21:28:26
故意だろ

401:デフォルトの名無しさん
08/06/18 21:33:36
>>382
有限長の文字列を総当りで生成して、それをコンパイルしていくプログラムを作れば
そのうち自分が作りたかったプログラムが自動生成されるんじゃね?

402:デフォルトの名無しさん
08/06/18 21:35:19
>>401
すっげぇ頭いいなおまえw

403:デフォルトの名無しさん
08/06/18 21:36:59
そして自分が作りたかったプログラムかどうかを
判定するプログラムが要るという話になるんですね分かります

404:デフォルトの名無しさん
08/06/18 21:44:13
故意はかんべん

405:デフォルトの名無しさん
08/06/18 21:44:54
なんだこのviper的なノリはwww

406:デフォルトの名無しさん
08/06/18 22:28:54
>>389
どうしても分からないなら資格取れるわけないじゃん
なんかおかしくね?

407:デフォルトの名無しさん
08/06/18 22:30:56
またこの流れかよw
>>60へどうぞww

408:デフォルトの名無しさん
08/06/18 22:31:54
恋はかんべん

409:デフォルトの名無しさん
08/06/18 23:28:46

関数を呼び出す時って他の文字に置き換えてから使えたほうがいいんですか?

例えばadd関数を呼び出してif文に入れるときの場合
x=add(n);
if(x==1)
みたいな感じか
if(add(n)==1)
どちらがいいんでしょうか?
下のほうでやっていたら友達にそのやり方は見にくくてありえないしプロがそんなことやったら確実に怒られるといわれたんですがどうなんでしょうか?

410:デフォルトの名無しさん
08/06/18 23:31:17
場面にもよるが、ステップによるデバッグがしづらいかもしれない。>後者

411:デフォルトの名無しさん
08/06/18 23:31:44
いや好きにすればいいと思うよ
ただ、関数の結果を他にも使う予定があるなら上の方が良いんじゃない?

412:デフォルトの名無しさん
08/06/18 23:36:20
できる限り前者でやったほうがいいんですか?
習ってる途中で後者の方がわかりやすいと思ったのですがプログラムできる友達に言われたので…


413:デフォルトの名無しさん
08/06/18 23:39:07
>>409
その関数が非常に高コストで、その判定部がループの中にあるなら
よくないなあとは思うけど、そうでないなら別に気にしない。

その友達がプロで怒られた経験があるのであれば、もう少し細かい
理由を教えてもらえばいいんでない?

414:デフォルトの名無しさん
08/06/18 23:40:21
ほかにも使うというのは
x=add(n);
if(x==1)
if(x==2)
みたいな感じですか?
あとプログラマーみたいな人たちの間ではどちらが主流なんでしょうか?


415:デフォルトの名無しさん
08/06/18 23:40:54
ちなみに、プロになれば周りのコードにあわせるということのほうが大事。
優劣をつけられない記法の差において、俺はこうすべき!って一人で
走ってるなら怒る。

416:デフォルトの名無しさん
08/06/18 23:40:58
>>409
その友達がどの程度のプロなのかはこの際置いておくとして、どちらがいいとか悪いとか言うことはない。
明確なことは、前者は変数を一つ使用し、後者は使用しないということである。
add() の返す値をただ一回しか評価しないのなら、後者のように書いて何の問題もない。
値を何度も評価するのなら、前者のように一時変数に格納する必要があるか、なくても効率がいいかもしれない。
後は単なる好みの問題である。

417:デフォルトの名無しさん
08/06/18 23:41:32
文脈によるがこの場合はどちらでもいい。
ところでこのお題はホントはこうじゃなかった?
x = add(n) ; if (x == 1) 

if ((x = add(n)) == 1) 
の比較。

418:デフォルトの名無しさん
08/06/18 23:42:40
>>413
友達はプロではありません 
普通に大学生なので…
多分趣味でやってる程度だと思います。
どこで習ったかはわかりませんが

419:デフォルトの名無しさん
08/06/18 23:43:35
値を使い回したい場合に変数に入れるのは当然として、
そうでない場合はメリットとデメリットがあるので好きにすればいいと思うよ。

○ メリット
・ 関数呼び出しが長い場合、読みやすくなる
・ デバッグ時に戻り値が何だったか分かりやすい

○ デメリット
・ その場でしか使わないような無駄な変数が広いスコープ上に現れてしまう場合もある

420:デフォルトの名無しさん
08/06/18 23:44:20
慣用句的なもの
 if ((fp = fopen(〜)) == NULL)
Is系のメソッドに代表される真偽返却メソッド
 if (isalnum(〜))

これ以外は大抵分けて書くようにしてるね。
多少冗長に思えても、他の人が読みやすいか、また、
誤解を与えにくい書き方になっているか、それを重視してる。

421:デフォルトの名無しさん
08/06/18 23:55:16
誤解を与えにくいように、というのはあまりメジャーではない二項演算子を
使う時などに、冗長ではあるが、括弧をつけて明示するようなことね。

ちゃんと知ってればその括弧が無くても正しく動作する事は理解できるが、
うろ覚えの人でも勘違いを起こさない。

もしかしたら研修明けの新人がメンテするかもしれないし。


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

5383日前に更新/94 KB
担当:undef