C/C++の宿題を片付け ..
[2ch|▼Menu]
273:デフォルトの名無しさん
07/05/17 18:15:20
>>267
void rp(char *s){
if(*++s)rp(s);
putchar(*--s);
}
int main(){
char s[256];
fgets(s,256,stdin);
rp(s);
return 0;
}
携帯だから遅い上に未確認 orz

274:デフォルトの名無しさん
07/05/17 18:50:27
プログラミングの授業で課題が出されたのですが、
コンパイルできても自分の思ってるとおりに動いてくれません。
何処が違うのか、また、どのように直せばいいのか指摘をお願いいたします。

【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
連結リストの挿入・削除・表示を行う。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] Borland C++ と BCC Developer
 [3.3] 言語:C言語
[4] 期限:[2006年05月25日17時まで]
[5] その他の制限:なし


よろしくお願いします。

275:デフォルトの名無しさん
07/05/17 18:53:27
ソースうぷすれ

276:デフォルトの名無しさん
07/05/17 18:53:47
>>274
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct CELL{
struct CELL *next;
int value;
}

main(void){
int or,banti,mval,y,z;
struct CELL *header,*p,*q,*new,b,c,d;

header->next = &b;
header->value = 130;
b.next = &c;
b.value = 90;
c.next = &d;
c.value = 55;
d.next = NULL;
d.value = 160;

for(;;){

/*qを現在、pを次のポインタに設定*/
p = header->next;
q = header;

277:デフォルトの名無しさん
07/05/17 18:55:04
printf("[0]=挿入、[0以外]=削除\n");
scanf("%d",&or);
printf("何番目の要素[0〜]?\n");
scanf("%d",&banti);


if(or == 0){
printf("値を入力してください\n");
scanf("%d",&mval);
if(banti == 0){
/*リストの先頭に新しいセルを挿入する場合*/
if((q = malloc(sizeof(struct CELL))) == NULL){
printf("メモリーが足りない\n");
exit(0);
}
new->value = mval;
new->next = header;
header = new;
}else{
/*ポインタqで記されたセルの直後に新しいセルを挿入する*/
for(y = 1;y <= banti;y++){
q = p;
p = p->next;
}
if((p = malloc(sizeof(struct CELL))) == NULL){
printf("メモリーが足りない\n");
exit(0);
}
new->value = mval;
new->next = p;
q->next = new;
}

278:デフォルトの名無しさん
07/05/17 18:55:12
>276
headerは何を指してるの?

279:デフォルトの名無しさん
07/05/17 18:56:03
}else{
/*連結リストからの削除*/
if(banti == 0){
/*リストの先頭の削除*/
if(header == NULL){
printf("リストが空なので削除できない\n");
exit(0);
}
q = header;
header = q->next;
free(q);
}else{
/*ポインタqで記されたセルの直後のセルを削除する*/
z=1;
while(z < banti){
q = p;
p = p->next;
z++;
}
if(q->next == NULL){
printf("セルが無いから削除できない\n");
exit(0);
}
q->next=p->next;
free(p);
}
}
printf("表示\n");
for(p=header;p!=NULL;p=p->next){
printf("%3d\n",p->value);}}}

280:デフォルトの名無しさん
07/05/17 18:59:05
>>278
14行目のことなら、仮の連結リストをつくって、そこから挿入や削除をしていこうかと。
普通に変数とか構造体のポインタの使い方を間違えてるかもしれないので…

281:デフォルトの名無しさん
07/05/17 19:04:51
>header->next = &b;
>header->value = 130;
このときのheaderは何を指してるの?

282:デフォルトの名無しさん
07/05/17 19:06:32 BE:52408139-2BP(222)
>>280
>仮の連結リストをつくって

つくってないじゃん。

283:デフォルトの名無しさん
07/05/17 19:07:35
>>281
何かを指しているわけではなく単独でヘッダーという変数を作っただけです。

header > b > c > d という感じの連結リストになっているのですが…

あ、確かにこれは変な挙動起こしそう…直してきます。

284:デフォルトの名無しさん
07/05/17 19:09:16
>>283
>何かを指しているわけではなく単独でヘッダーという変数を作っただけです。
初期化してないポインタに代入しちゃ鼻から悪魔だお

285:デフォルトの名無しさん
07/05/17 19:09:49
どなたかおしえてください。
typedef double fp(double)
これどういうこと?

286:デフォルトの名無しさん
07/05/17 19:13:25
>>284
headerがポインタであることを忘れてました。
何でこれでコンパイルできたんだろうなぁ…

main(void){
int or,banti,mval,y,z;
struct CELL *header,*p,*q,*new,a,b,c,d;

header = &a;

a.next = &b;
a.value = 130;
b.next = &c;
b.value = 90;
c.next = &d;
c.value = 55;
d.next = NULL;
d.value = 160;

これでここのところは大丈夫でしょうか?

287:デフォルトの名無しさん
07/05/17 19:19:56
>>251
お願いしますm(_ _)m

288:デフォルトの名無しさん
07/05/17 19:26:19
>277
for(y = 1;y <= banti;y++){ → for(y = 1;y < banti;y++){
if((p = malloc(sizeof(struct CELL))) == NULL){
→ if((new = malloc(sizeof(struct CELL))) == NULL){
>279
free(p) → free(q)
これで多分大丈夫

289:デフォルトの名無しさん
07/05/17 19:33:06
>>285
識別子 fp を、double を引数とし double を返す関数の型として宣言

290:デフォルトの名無しさん
07/05/17 19:53:29 BE:54348847-2BP(222)
>>283
>何かを指しているわけではなく

何かを指さないと連結できないだろが。

291:デフォルトの名無しさん
07/05/17 19:54:06 BE:38820454-2BP(222)
>>287
今やってる。思いの外大変だ。

292:267
07/05/17 19:56:19
>>268
>>269
>>270
>>271
>>272
>>273

ご回答ありがとうございました。

いろんな答えは、今後の勉強になります!!
ありがとうございました。

293:デフォルトの名無しさん
07/05/17 20:17:11
>>291
ありがとうございます!!
待ってますm(_ _)m

294:デフォルトの名無しさん
07/05/17 20:25:33
入力した文章中の単語を1行に一つずつ印字するプログラムを書け。
(ここでの単語とは、ブランク,タブ,改行文字で区切られた文字)
例えば、
This is a book.
と入力すると、
This
is
a
book.
と表示される。

while((c=getchar()) != EOF)
という文を使って文章を入力し、while文終了後に一気に表示させたいのですが、どうやって表示させればいいのかわかりません。
教えてください。

295:274
07/05/17 20:32:55
>>281
>>283
>>288

etc…様


ご回答ありがとうございます!

でも、まだ実際に動かしてみると
部分部分で可笑しな挙動をしてたりしてますが、
初期の状態よりは随分とマシになったような気がいたします。

しばし、自分の力で頑張ってみようと思いますが、
しばらくこのスレを見ながらプログラムをうってますので
どこか変な場所が見つかればご指摘お願いいたします。

またわからなくなった時は聞きにきますので
その時は宜しくお願いします。ありがとうございました。

296:デフォルトの名無しさん
07/05/17 20:34:40
>>294
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c;
printf("Input strings > ");
while((c=getchar()) != EOF) {
if( isspace(c) ) putchar('\n');
else putchar(c);
}
return 0;
}

297:デフォルトの名無しさん
07/05/17 20:43:25
>>296でwhileを抜けるには最後に Ctrl+Z とかでEOFを入力しておいてね

298:デフォルトの名無しさん
07/05/17 20:46:45 BE:46584364-2BP(222)
>>251>>287 できた。
#include<stdio.h>
#include<stdlib.h>
char* reading4(int d, char* add){
char* result = NULL;char* restmp;
char* places[]={"SEN","HYAKU","JU",""};
char* digits[]={NULL,"","NI","SAN","YON","GO","ROKU","NANA","HACHI","KYU",};
char* reed[4]={NULL,NULL,NULL,NULL};char tmp[256];int i,len;size_t total=0;
sprintf(tmp,"%i",d);len=(int)strlen(tmp);for(i=0;i<len&&i<4;i++){
if(tmp[len-i-1]-'0'){reed[3-i]=digits[tmp[len-i-1]-'0'];
total+=strlen(reed[3-i])+strlen(places[3-i])+1;}}
if(len>3&&tmp[len-4]=='1'){reed[0]="IS";total+=2;}if(len&&tmp[len-1]=='1'){
if(add&&add[0]){char ls[1024];sprintf(ls,"I%c%s",add[0],add);reed[3]=ls;
total+=strlen(ls);}else{reed[3]="ICHI";total+=4;}}
result=(char*)malloc(total+1);restmp=result;for(i=0;i<4;i++){if(reed[i]){
restmp+=sprintf(restmp,"%s%s ",reed[i],(tmp[i]-'0')?places[i]:"");}}
return result;}
int main(void){char tmp[256];char* places[]={"CHO ","OKU ","MAN ",""};
char* reed[4]={NULL,NULL,NULL,NULL};int data,i;fgets(tmp,256,stdin);
data=atoi(tmp);if(data){for(i=0; data>0 && i<4; i++){if(data%10000){
reed[3-i]=reading4(data%10000,(i==0)?places[3-i]:"");data/=10000;}}
for(i=0;i<4;i++){if(reed[i]){fputs(reed[i],stdout);fputs(places[i],stdout);
free(reed[i]);}}}else{fputs("ZERO",stdout);}putchar('\n');return 0;}

299:294
07/05/17 20:47:38
>>296
これだと、Enterを押したときにひょうじされませんか

300:デフォルトの名無しさん
07/05/17 20:56:00
>>299
標準入力にて EOF を検出したら while ループ終了でしょ?
ちゃんと最後のEOFを入力してちょうだいな。

301:294
07/05/17 20:58:42
>>300
できれば、whileループ終了後にまとめて表示したいのですが

302:デフォルトの名無しさん
07/05/17 21:00:06
>>301
だからその終了の条件が EOF が入力されたという条件でしょ?
EOFを入力してくれよ

303:デフォルトの名無しさん
07/05/17 21:01:24
>>301
入力された文字を格納する文字配列でも必要ってこと?

304:294
07/05/17 21:02:48
>>302
EOFを入力したらプログラムが終わってしまいます。
Enterを押したときに表示するのでなく、EOFを入力したときに表示したいのです

305:デフォルトの名無しさん
07/05/17 21:03:08
>>298
ありがとうございます!!
でも100とか1000とか表示されません…
あと、1300とかはISSEN SANHYAKUではなくてISSEN SANBYAKUのように表示しないと
いけないんですorz

306:デフォルトの名無しさん
07/05/17 21:10:06
>>304 んなこたぁ〜ねぇべ、ちゃんと入力した文字は空白ごとに改行されて表示すっぺ。
まぁ、こんな漢字で文字配列に格納してやってみるがや
#include <stdio.h>
#include <ctype.h>
int main(void) {
char c,buf[1024],i;
printf("Input strings > ");
while((c=getchar()) != EOF) {
if( isspace(c) ) buf[i++]='\n';
else buf[i++]=c;
}
buf[i]='\0';
puts(buf);
return 0;
}

307:デフォルトの名無しさん
07/05/17 21:13:08
>>306の最初の i=0; を忘れてたがや。まぁ、while以外の条件もちゃんと書いてやぁ。
あと>>1のフォームさ忘れるでねぇ

308:294
07/05/17 21:19:10
>>307
ありがとうございます。
質問用のテンプレ忘れてすみません

309:デフォルトの名無しさん
07/05/17 21:24:39
>>306
ちょっとダサイけど、こんな風にしたら改行が続かずに済むよ。

int flag = 0;
while ((c=getchar()) != EOF) {
    if (isspace(c))
        flag = 1;
    else {
        if (flag == 1) {
            buf[i] = '\n';
            ++i;
        }
        flag = 0;
        buf[i] = c;
        ++i;
    }
}

310:デフォルトの名無しさん
07/05/17 21:24:46
>>251
#include "stdio.h"
#include "stdlib.h"
char *num[] = {
0, "", "ni", "san", "yon", "go", "roku", "nana", "hachi", "kyuu"
};
char *po10[] = {"", "juu", "hyaku", "sen"};
char *po10_4[] = {"", "man", "oku", "chou"};
char *get_kurai(int n)
{
if (n % 4) return po10[n % 4];
else return po10_4[n / 4];
}
続く


311:310
07/05/17 21:26:05
char *do_yome(int x, int n)
{
char *yomi, *tmp, *xnum, *kurai;
int l;
if (x < 10) {
kurai = get_kurai(n); xnum = num[x];
if (!*xnum && n >= 4) xnum = "ichi";
yomi = malloc(strlen(xnum) + strlen(kurai) + 1);
strcat(strcpy(yomi, xnum), kurai);
return yomi;
}
yomi = do_yome(x / 10, n + 1); xnum = num[x % 10];
if (xnum) {
if (n == 0 && !*xnum) xnum = "ichi";
kurai = get_kurai(n);
tmp = malloc(strlen(xnum) + strlen(kurai) + strlen(yomi) + 2);
strcat(strcat(strcat(strcpy(tmp, yomi), " "), xnum), kurai); free(yomi);
yomi = tmp;
}
return yomi;
}

312:311
07/05/17 21:27:14
char *yome(x)
{
char *yomi, *minus;
if (x == 0) return strdup("zero");
if (x < 0) yomi = do_yome(-x, 0);
else yomi = do_yome(x, 0);
if (x < 0) {
minus = malloc(strlen("mainasu ") + strlen(yomi) + 1);
strcat(strcpy(minus, "mainasu "), yomi); free(yomi);
yomi = minus;
}
return yomi;
}
int main(int ac, char **av)
{
int x;
char *yomi;
x = atoi(av[1]);
yomi = yome(x);
printf("%s\n", yomi);
free(yomi);
}


313:デフォルトの名無しさん
07/05/17 22:12:29
何遍も言うとろうが!
読みの例外処理せんといかんて!
お前らアホか!

314:デフォルトの名無しさん
07/05/17 22:13:45
宿題で例外処理とか・・・

315:デフォルトの名無しさん
07/05/17 22:15:28
こんなところで宿題を○投げすることそのものが例外であります!

316:デフォルトの名無しさん
07/05/17 22:24:46
じゃあ、例外処理をしないとな

317:デフォルトの名無しさん
07/05/17 22:25:32
>>294
#include <stdio.h>
#include <ctype.h>

int main()
{
    int c;
    FILE *fp = tmpfile();
    while ((c = getchar()) != EOF) {
        if (isspace(c)) {
            while (isspace(c = getchar()))
                ;
            ungetc(c, stdin);
            putc('\n', fp);
        } else
            putc(c, fp);
    }
    rewind(fp);
    while ((c = getc(fp)) != EOF)
        putchar(c);
    fclose(fp);
    return 0;
}

318:デフォルトの名無しさん
07/05/17 22:27:51
>>317
さぁ、ティムポ、もとい、テムポファイルの詳細を書いて頂こうではないか
> tmpfile();

319:デフォルトの名無しさん
07/05/17 22:28:48
>>318
処理系依存です。

320:デフォルトの名無しさん
07/05/17 22:30:58
そぉ〜かそうかぁ、大きさや形は人それぞれ、個人依存ってやつか。ほぉ〜れ、俺のは○×いぞぉ〜
はっはっは(ダイバスターの博士風に

321:デフォルトの名無しさん
07/05/17 22:31:02
>>318
tmpfile()がANSI/ISO C標準関数であることを知らないのではあるまいな

322:デフォルトの名無しさん
07/05/17 22:32:38
>>321
URLリンク(www.bohyoh.com)
知っとるぞ。さぁ、次のお題だが・・・

323:デフォルトの名無しさん
07/05/17 22:34:33
>>317
> int main()
括弧の中がANSI、ISO準拠でない点について。

324:デフォルトの名無しさん
07/05/17 22:38:28
>>264-265
dクスです!><

325:デフォルトの名無しさん
07/05/17 22:38:31
>>323
C89はK&Rスタイルを許してるんでなかったっけか?

326:デフォルトの名無しさん
07/05/17 22:44:13
gcc -Wallで-ansiとか-std=c99とかつけても何も言われないみたいだな
>>317のソース

327:デフォルトの名無しさん
07/05/17 22:47:20
>>321
> tmpfile()がANSI/ISO C標準関数
っとANSI / ISOの話を持ち出すならなおさらパラメーターがなければ
int main(void) 、あれば int main(int argc, char * argv[])というのは過去スレで既出が
もう議論はせんぞぉ〜。では、次の問題だが・・・ANSI、ISO準拠を無視したら動かないコンパイラは何か?
ダイバスター出動!

328:デフォルトの名無しさん
07/05/17 22:48:35
>>327
いやだから、K&Rスタイルは別に規格無視ではないのでは?
C++なら明白に違法だけど。

329:デフォルトの名無しさん
07/05/17 22:49:26
ていうか>>318は結局何が聞きたかったのやら。
意図が分からない。

330:デフォルトの名無しさん
07/05/17 22:56:01
>>328
C++でプロトタイプ無しは違法だが、
int main()に関しては、Cのint main(void)と同じだから、
C++でも違法ではないわな。

331:デフォルトの名無しさん
07/05/17 22:58:12
ただの宿題で泥沼になったわな

332:デフォルトの名無しさん
07/05/17 23:01:00
またmainの規格議論か!

333:デフォルトの名無しさん
07/05/17 23:01:38
ANSI Cでプロタイプを必須にしていれば、
voidなどという引数宣言を作らずに、C++同様にする
こともできたはず。
Denis Ritchieもそれを醜いと認めていたようだしね。

334:デフォルトの名無しさん
07/05/17 23:05:02
>>328
ANSI、ISO標準の話を持ち出す場合はint mainについてもそれ準拠が望ましいという話だが?
これ以上は議論せんぞ。自分で言っていて墓穴を掘るくらいならしゃべらない方が良いぞ。
では次の問題だが・・・ANSI、ISO準拠で書かれていないソースをウェブサイトや書物で公開しちゃっている
のは、いったい何者か?ダイバスター出動!

335:デフォルトの名無しさん
07/05/17 23:06:54
>>332
残念、mainの規格ではなくANSI、ISO準拠(それに応じて従って)で記述するソースなら
なおさらという話だ。tmpfile()がANSI/ISO C標準関数といっておきながら、プログラムの主体となる
main関数がANSI、ISO準拠でないのはこれいかに?

336:デフォルトの名無しさん
07/05/17 23:07:02
>>334
> ANSI、ISO標準の話を持ち出す場合はint mainについても
> それ準拠が望ましいという話だが?

んな脳内ルールを押し付けられてもな。
そんな話にこだわってんの、あんた一人みたいだし。
で、あんたは>>318で結局何を言いたかったの?

337:デフォルトの名無しさん
07/05/17 23:08:05
>>334
カーニハンとリッチー。
知ってる?とっても有名な人ですが。

ANSI C準拠のK&R第二版の先頭のサンプルは
main()
ではじまります。

338:デフォルトの名無しさん
07/05/17 23:08:16
もはや、ここは宿題を片付けてくれるようなスレではない

339:デフォルトの名無しさん
07/05/17 23:09:40
そう、詰まる話が、自分でANSI、ISO C標準関数の話を持ち出したのに
mainがANSI、ISO C標準関数の形式で書かれていないのが引っかかったわけだ。
だがこれ以上それについては議論せんぞ。ANSI、ISO準拠のmain関数の記述は
ISOのページにもしっかりと引数があるかないかで
int main(void) または int main(int argc, char * argv[]) と記されておったからな。
では次の問題だ。このスレはいったい何のスレか?ダイバスター出動!

340:デフォルトの名無しさん
07/05/17 23:10:10
まぁ明日の昼頃には収まってるだろうから、
丸投げしたい人はそれまで自分で努力してみるんだ

無駄だと思うけど。

341:デフォルトの名無しさん
07/05/17 23:11:10
>>339
で、>>318は何だったわけ?
なんか君、自分がものすごーく的外れなこと言ったからって
誤魔化しに走ってるだけじゃないの?
いつもの下らないmain()議論でお茶濁そうとして。

342:デフォルトの名無しさん
07/05/17 23:13:39
ANSI、ISO標準の話を持ち出したのにint main()必死だなw

343:デフォルトの名無しさん
07/05/17 23:16:40
>>342
> ANSI、ISO標準の話を持ち出したのにint main()必死だな
tmpfile()の説明をするんなら、標準関数だと説明するのが手っ取り早いでしょ。

で、K&Rスタイルでmain()を記述することは違法ではないし、
そんなのはかのカーニハンとリッチーが、ANSI C対応版と謳ってる
K&R第二版でやっとるわけです。
こんなところで下らない議論を続けるのなら、彼らに文句を言ったらどうかな?

344:デフォルトの名無しさん
07/05/17 23:18:30
JIS X3010:2003では、関数定義で括弧の中が空なら、
引数がないものとして扱うというような規定があり、
このことから俺は、関数定義時なら()と(void)は同じでは、と思うのだがどうだろう?

345:デフォルトの名無しさん
07/05/17 23:20:39
>>344
つまり
C89ではK&Rスタイルが許されているので合法である。
C99ならvoidと解釈されるのでC++と同じ意味で合法になる、ということですか?

さっきから暴れているいつもの人は、なんなんでしょう。

346:デフォルトの名無しさん
07/05/17 23:21:10
321 名前:デフォルトの名無しさん 投稿日:2007/05/17(木) 22:31:02
>>318
tmpfile()がANSI/ISO C標準関数であることを知らないのではあるまいな

ANSI、ISO標準関数を持ち出すならなおさらプログラムの開始のmain関数が
int main(必要に応じた引数)というのを知らないではあるまいな

347:デフォルトの名無しさん
07/05/17 23:22:23
>>339
宿題スレだ
だから帰れ

348:デフォルトの名無しさん
07/05/17 23:25:05
ANSI、ISO準拠の話にC89ではK&Rスタイルの話を持ち込んでくる奴わろすwwwwwwww
お前のスタイルをはっきりしろよw

349:デフォルトの名無しさん
07/05/17 23:25:43
こりゃ明日の朝まで放置、だな……

350:デフォルトの名無しさん
07/05/17 23:26:36
328 名前:デフォルトの名無しさん 投稿日:2007/05/17(木) 22:48:35
>>327
いやだから、K&Rスタイルは別に規格無視ではないのでは?
C++なら明白に違法だけど。

C++なら明白に int main()の過去の中がなくてもOKなんすけど?
こいつわかってねーわ、話にならねーから仕様書に目を通してないなら黙ってろ。

351:デフォルトの名無しさん
07/05/17 23:26:45
>>348
規格/言語仕様とスタイルの区別がついてない厨房って以前もいたなぁ
確かボコボコに突っ込まれてたけど

352:デフォルトの名無しさん
07/05/17 23:27:40
>>350
その
> C++なら明白に違法だけど
は、
> K&Rスタイル
にかかっているのです。

353:デフォルトの名無しさん
07/05/17 23:40:27
この流れ秋田

354:デフォルトの名無しさん
07/05/17 23:51:21
いまだ!ANSI、ISO標準とか言っておきながら肝心のmain関数がANSI、ISO準拠になっていない奴
ぬるぽ!

355:デフォルトの名無しさん
07/05/17 23:51:46
こまち

356:デフォルトの名無しさん
07/05/17 23:56:43
職場でいじめられたストレスを解消しにきたんだろ。
きっとまた同じハゲの犯行。

357:デフォルトの名無しさん
07/05/18 00:38:08
[1] 授業単元:構文解析
[2] 問題文(含コード&リンク):
次のプログラムを書き換えて、自然数の足し算を行うプログラムを作成せよ。
また、自然数の足し算、引き算そして掛け算を行えるよう拡張せよ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007/05/18
[5] その他の制限: スタックやキューまで

358:デフォルトの名無しさん
07/05/18 00:45:32
【質問テンプレ】
[1] 情報基礎論演習
[2] 課題1:2つの正方行列の和・差・積を求め、計算結果を見やすく画面に表示するプログラムを作成せよ。
      ただし、両行列の要素はプログラム実行時にキー入力するものとする。(scanf)また、行列のサイズは4×4とする。
  課題2:1で作成したプログラムを以下のように修正せよ。
      ・行列の要素はキー入力ではなくファイルから読み込む。(入力ファイルは自分で作成)
      ・計算結果は画面でなくファイルに出力すること。
[3] 環境
 [3.1] Windows
 [3.2] cygwin
 [3.3] C
[4] 期限:5月18日
[5] 特になし

231で書いたのですが、課題2を1つのmain関数内に入れてできないでしょうか?できるだけわかりやすくポインタを使わずに作って欲しいです。どうかよろしくお願いします。

359:デフォルトの名無しさん
07/05/18 00:49:06
わかりやすくして欲しいのにmain関数だけで書けとは・・・

360:358
07/05/18 01:03:32
すいません。
課題1をmain関数だけで書いてしまったもので・・・
矛盾してるかもしれないけどよろしくお願いします。


361:>358
07/05/18 01:15:12
コマンドラインで
 も前の作ったプログラム.exe < 入力ファイル > 出力ファイル

ではいかんのか?

362:デフォルトの名無しさん
07/05/18 01:23:29
プログラムを修正しろという制限があるから厳しいのでは?

363:デフォルトの名無しさん
07/05/18 01:25:33
>>358
main()の先頭をこんな感じに汁。
その後は、課題1と全く同じでOKのはずだ。

int main(int argc, char **argv)
{
    if (argc < 3 || !freopen(argv[1], "r", stdin)
                 || !freopen(argv[2], "w", stdout))
        return 1;

364:358
07/05/18 01:30:03
まず、入力ファイルの作り方がわかりません。
後、ファイルを読み込む時のプログラムと書き込む時のプログラムがどのように書けばいいのか分かりません。

C言語初心者なんですみません。
なにかわかりやすい例やサイトなどでもあったら紹介してください。よろしくお願いします。


365:357
07/05/18 01:30:14
>>357
よろしくお願いします。

366:>364
07/05/18 01:34:16
>363 試したか?

367:デフォルトの名無しさん
07/05/18 01:43:58
>>364
cygwinということだが
cygwinのbash(シェル)だとかgcc(コンパイラ)だとかの使い方は分かるのか?

> まず、入力ファイルの作り方がわかりません
ということは、それ以前の問題のようだが

368:デフォルトの名無しさん
07/05/18 01:51:07
>>360
> 課題1をmain関数だけで書いてしまったもので・・・
えーと、つまり、漏れがやった課題1はガン無視っつう事でゴザルですか?

369:デフォルトの名無しさん
07/05/18 01:58:45
無視とは最低な奴だな
スルーでいこ

370:364
07/05/18 02:07:46
すみません学校から帰ってたもので書き込み遅くなってしまいました

371:364
07/05/18 02:09:49
368さん
void関数やforループを参考にさせていただきました。ありがとうございます。
ただ自分には高度なやり方だったのですべてを理解することができませんでした。すみません。

今から363さんのをやってみたいと思います。

372:364
07/05/18 02:14:01
367さん
コンパイルなどの仕方は分かります。

ただ要素の入ったファイルはどのように書けばいいのか分からないのです。

373:デフォルトの名無しさん
07/05/18 02:17:26
>>251
やっとできた。これだけ共通化すれば文句ないだろう・・・

int ct[] = {
    6166,1803,30,32,37,34,39,36,43,35,25,1155,1157,1162,1159,1164,
    1161,1168,1160,27,1245,49307,1252,1249,2008,1251,2009,1250,1848,
    1200,43322,1207,1204,1209,1206,1874,1205,1008,910,29901303,
};
int pt[][2] = {
    {0,0},{0,82},{0,69},{0,73},{0,67},{0,72},{0,78},{0,83},{0,65},
    {0,89},{0,79},{0,71},{0,75},{0,85},{0,74},{0,66},{0,80},
    {0,90},{0,77},{9,13},{12,13},{2,6},{8,6},{8,20},{9,23},
    {14,19},{7,21},{5,24},{1,10},{5,8},{6,3},{6,22},{7,22},
    {9,10},{11,10},{12,19},{31,8},{33,6},{4,5},{28,20},{38,3},
    {7,26},{16,16},{29,40},{42,24},
};

void Print(int n, unsigned char **b)
{
    int *p;

    for (  ; n; n /= 45)
        if (*(p = pt[n % 45])) Print(p[0], b), Print(p[1], b);
        else *(*b)++ = p[1];
}

void PrintTok(int n, unsigned char **b)
{
    Print(n, b); *(*b)++ = ' ';
}


374:デフォルトの名無しさん
07/05/18 02:18:40
>>372
っつーか、要素の入ったファイルの形式は?どのようにファイルに書き出せば良いのか
こっちがわからん。4行4列って指定があるから、単純に上から4行4列ずつ
8行4列に空白なりで区切られた値のファイルを読み込めば良いノカー

375:373
07/05/18 02:20:13
void Yomiage1000(int num, unsigned char **buf)
{
    int i, n, d;

    for (i = 27, n = 1000; n; i -= 9, num %= n, n /= 10)
        if((d = num / n) != 0) PrintTok(ct[i + d], buf);
}


unsigned char *Yomiage(int num, unsigned char *buf)
{
    int i, n, d;
    unsigned char *b = buf;

    if (num == 0) Print(ct[0], &b);
    else {
        if(num < 0) PrintTok(ct[39], &b), num = -num;
        for (i = 38, n = 100000000; n; i --, num %= n, n /= 10000)
            if ((d = num / n) != 0) {
                Yomiage1000(d, &b);
                if (1 < n) PrintTok(ct[i], &b);
            }
    }
    *b = '\0';
    return buf;
}


376:373
07/05/18 02:20:59
int main(void)
{
    unsigned char buf[1000];

    printf("%s\n", Yomiage(123456789, buf));
    return 0;
}


377:デフォルトの名無しさん
07/05/18 02:23:00
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
  課題1:4行4列の行列Aの各要素を入力して、その転置行列A’を計算して出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:わかりません
 [3.3] 言語: C++
[4] 期限: 2007年5月18日10:00まで

課題あること忘れててヤバイです。お願いします。m(__)m


378:372
07/05/18 02:26:18
ファイルの中身は自分でテキトーに決めていいらしいので上から4行4列ずつ
8行4列に空白などで区切られた値のファイルを読み込めるようにしていただければ大丈夫だと思います。

363を試したのですがエラーがたくさん出てしまいよくわからない状態になってしましました。

379:デフォルトの名無しさん
07/05/18 02:26:54
書き込みエラー。なぜ。。。

380:デフォルトの名無しさん
07/05/18 02:27:59
行多すぎか。めんどい。
>> 357

最初の?

        {
            char hoge[]={
                '+',
                '-',
                '*'
            };

            char IsOperation=0;
            while(i < sizeof(hoge)/sizeof(hoge[0])) {
                if(hoge[i] == c) {
                    IsOperation=1;
                    break;
                }
                ++i;
            }
            if(!IsOperation) {
                continue;
            }
        }

381:372
07/05/18 02:28:43
学校のはCなんですが家ではC++なんですが影響ありますかね?

382:デフォルトの名無しさん
07/05/18 03:14:06
>>358
っつーか5月18日までって、今日までやん。。。きんもぉ〜★な俺のソースでも提出するか?
今やってるけどw

383:372
07/05/18 03:16:19
とりあえず助けて欲しいです!よろしくおねがいします。

384:デフォルトの名無しさん
07/05/18 04:02:33
>>358
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
こっ、こぉ〜〜れでええんか?課題1のプログラムを実行して入力した行列を
save1.txtに書き出して、課題2で使うプログラムを実行するとsave1.txtに書かれた
2つの4x4の行列の結果をsave2.txtに出力。読込んだ行列を表示するようにしてあるんで
不要なら消しておくべし。にしても、自分でもきんもぉ〜〜★なソースになっちまったぜい!w

385:デフォルトの名無しさん
07/05/18 04:14:22
あっ、入力の際に 1: ってゴミが残っているから消しておいて orz

386:デフォルトの名無しさん
07/05/18 04:31:19
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: (Windows/Linux/等々)Windows
 [3.2] コンパイラ名とバージョン: VC++6.0
 [3.3] 言語: C
[4] 期限: 5/23
[5] その他の制限: 配列までです、初心者ですどうかよろしくおねがいします。

387:デフォルトの名無しさん
07/05/18 05:33:12
>>344 >>345なやつっていつもの屁理屈反論厨だよね?w
いっていることを見ると、やっぱこいつらANSI、ISO準拠すら理解してなさそうだし
話の論点がまったく理解できていないみたいだし。誰かさんがANSI、ISOの
標準の話を持ち出したにもかかわらず、そういう関数があるよと言っているのは分かるが
標準的なmain関数の記述がされていないのが ぶふふふぅ〜〜(吹いてまうぅ〜って)
って話なのよw

388:デフォルトの名無しさん
07/05/18 05:39:50
321 名前:デフォルトの名無しさん 投稿日:2007/05/17(木) 22:31:02
>>318
tmpfile()がANSI/ISO C標準関数であることを知らないのではあるまいな
>>317
> int main()

(ダイバスターの隊員が驚く時の音を4回鳴らしながら)
ANSI/ISO C標準関数 int main() ANSI/ISO C標準関数 int main()
ANSI/ISO C標準関数 int main() ANSI/ISO C標準関数 int main()
mainも当然関数ですから〜〜!残念(ジャカジャンッ!
これだとANSI、ISOの標準スタイルではない 斬り!

拙者、こんなことを言っても、稼業でプログラマーなんてやっていない
趣味でやっているだけのただの一般人ですから、切腹!

389:デフォルトの名無しさん
07/05/18 05:42:36
ぶふふふぅ〜〜(吹いてまうぅ〜)

390:デフォルトの名無しさん
07/05/18 05:53:12
自分が理解していなかったことを指摘されると、無関係なことを持ち出して
お前これ分かってねーみたいな揺さぶりは通用しない。第一、まず先に
標準関数って言っておきながら、mainそのものの記述が標準スタイルではないという
なんとも頭かくして尻隠さずな発言がワロスなのさ

391:デフォルトの名無しさん
07/05/18 05:59:21
どう見てもtmpfile()が標準なことを知らなかったのをごまかすために、
int main()に話をすり替えてるだけにしか見えん。

392:デフォルトの名無しさん
07/05/18 06:11:18
>>386
URLリンク(kansai2channeler.hp.infoseek.co.jp)
fも0又は1で表現される画像なら、問題自体(というか式(1))がおかしい。

393:デフォルトの名無しさん
07/05/18 06:37:43
>>377
ごめん。4行4列の行列の転置行列を表示するのに計算要るのか?
どういう計算するん?

394:デフォルトの名無しさん
07/05/18 06:47:51
添字の付け替えじゃないの?

395:デフォルトの名無しさん
07/05/18 06:51:17
それ計算言うて良いのか?>添え字の付け替え

396:デフォルトの名無しさん
07/05/18 06:56:53
tmpfile()って便利だな

397:デフォルトの名無しさん
07/05/18 07:25:11
>>391
どうみても標準って言葉と実装を理解しておらず、墓穴を掘ったことを
int mainの指摘をした相手がtmpfileを知らなかったことにしたいらしいw
っつーか、知っている知っていないはともかく、int mainの括弧の中は
敢えてANSI、ISOを持ち出した標準を謳うんであれば、なおさら準拠した
記述をすべきであって、していないからといって別に悔やむことはないぞw

398:デフォルトの名無しさん
07/05/18 09:42:32
>>392
fはこんな感じだったと思います。原因が入力画像の端も対象にしてました。
迅速に答えていただきありがとうございました。

399:デフォルトの名無しさん
07/05/18 10:18:05
まだやってるのか。

400:357
07/05/18 11:34:36
>>357
よろしくお願いします。

401:247
07/05/18 11:41:38
#include<stdio.h>
void chg(int *cnt){
*cnt *= *cnt%2 ? 5 : 10;
}
int main(){
int cnt;
printf("Cnt =>");
scanf("%d",&cnt);
if(cnt<0 && 9<cnt) return 1;
chg(&cnt);
printf("cnt(chg後)  :%d\n",cnt);
return 0;
}
mainでscanfを使わずにgetcharでかく方法を教えてください。

402:デフォルトの名無しさん
07/05/18 11:47:43
>>401
- scanf("%d",&cnt);
+ cnt = getchar() - '0';
とでも汁

403:デフォルトの名無しさん
07/05/18 11:48:46
>>400
>>380でレスがついてないか

404:デフォルトの名無しさん
07/05/18 11:49:45 BE:34938836-2BP(222)
>>400
入力が定義されてないのでこれで。
URLリンク(c-kadai.sakura.ne.jp)

405:357
07/05/18 13:30:51
>>380
ありがとうございます。
でも何か上手く動かないです…。
二つ目の???に何か入れないとダメなんですかね?

>>403
ありがとうございました。

>>404
どういうことでしょうか?

406:デフォルトの名無しさん
07/05/18 15:59:48
【質問テンプレ】
[1] 前進オイラー法
[2] 熱伝導方程式の初期値協会値問題を陽的差分法で解くためのプログラムを作成せよ。
  初期値(δu/δt)=(δ^2 u/δx^2)
u(0,t)=u(1,t)=0 (t>0)
u(x,0)=f(x) (0≦x≦1)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名 cc
 [3.3] 言語: C++
[4] 期限: 2007年5月18日17時

お願いします。


407:デフォルトの名無しさん
07/05/18 16:08:10
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] 不明
 [3.3] 言語: C言語
[4] 期限: ([2007年05月18日18:00
[5] プログラム全く分かりません。

以下になります。

(1)配列を使ってキューを実装したい。キューの先頭を管理する変数を
head、末尾を管理する変数をtail、データを格納すr配列をentry[]と
して、データ構造を考えなさい。ただし、格納するデータは文字(char)
のみとし、格納する最大個数はMAXSIZEとしてとしてdefineされているも
のとする。

(2)上記のデータ構造を用いてキューを実現しなさい。

(3)連結リストを使ってキューを実現しなさい。(教科書無いんで無視)

(4)(2)の配列による実装と(3)の連結リストによる実装を比較的考察し、
各々の特徴を整理しなさい。

以上です。よろしくお願いいたします。

408:デフォルトの名無しさん
07/05/18 16:22:57
3はやるのか

409:デフォルトの名無しさん
07/05/18 16:43:03 BE:48525555-2BP(222)
ていうか3をやらないと課題の意味が無い気が。

410:デフォルトの名無しさん
07/05/18 17:11:49
[1] 授業単元:
[2] 問題文(含コード&リンク):
以下のように10個のますに3つの白いコインと3つの黒いコインが配置されている。
・・□・
・・●・
・・●・
□○●□
・○・・
・○・・
・□・・
※「□」は空白を表す。「・」は完全に無視して下さい。
各コインは隣のますが空白であれば一度に一つずつ動かすことができる。
例えば、一番下の●は、右のますが空白であるので、
・・□・
・・●・
・・●・
□○□●
・○・・
・○・・
・□・・
のように動かすことができる。この手順を繰返し、
以下の最終状態の配置にする最短の手順を求めよ。

・・○・
・・○・
□●○□
・●・・
・●・・
・□・・



411:デフォルトの名無しさん
07/05/18 17:12:35
また、ますは
・・F・
・・G・
・・H・
ABIJ
・C・・
・D・・
・E・・
のようなラベルを用い、例の移動であったら、
「IJ」と表示すること。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ:gcc
 [3.3] 言語:C
[4] 期限: 5月20日まで
[5] 制限はとくにありません。
幅優先探索が適していると思うのですが、コードを書くとなると混乱
してしまいます。自分なりに頑張ったつもりですがお手上げです↓
どうかよろしくお願いします。


412: ◆kqWkheFZ3g
07/05/18 17:22:57
1授業単元:プログラミング実習
2問題文:配列を用いてn個までの値を入力し、その最大値、最小値、及び
全体の平均点を出すプログラムを作成せよ。
3環境:Linux3.2
gcc
C
4 2007年5月22日17時
5 ifやwhile、そして今日配列まで習いました。

よろしくお願いします!!


413:デフォルトの名無しさん
07/05/18 17:52:16
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
こうですか?>>407


414:デフォルトの名無しさん
07/05/18 18:09:49
C言語の入門らしいですがさっぱりです…
何らかの10進数を入力するとそれに1を加えた数を表示するプログラムをお願いします

Cygwin?を使ってます

415:デフォルトの名無しさん
07/05/18 19:07:55
めちゃくちゃ入門じゃん
とりあえずテンプレで書け

416:デフォルトの名無しさん
07/05/18 19:26:12 BE:54348847-2BP(222)
>>414
#include<stdio.h>
#include<stdlib.h>
int main(void){char tmp[256];fgets(tmp,256,stdin);printf("%d\n",atoi(tmp)+1);return 0;}

417:デフォルトの名無しさん
07/05/18 20:21:19
>>410
それ、取りうる状態の数が結構限られているだろ?
全ての状態をメモリ上に書き出せるんじゃないの?


418:デフォルトの名無しさん
07/05/18 21:40:35
>>417
最短の手順を求めるのが目的だから、
状態全部書き出せるかどうかはあんま関係ない気もするけど

ループ検出のハッシュでコリジョンを防ぎ易い、とかその辺の話?

419:デフォルトの名無しさん
07/05/18 21:42:40
最終状態からの距離を求めるのが
簡単ということでしょ

420:デフォルトの名無しさん
07/05/18 21:56:41
>>410
URLリンク(kansai2channeler.hp.infoseek.co.jp)
パフォーマンスのことは全然考えてないけど、一応答えは出る。

421:デフォルトの名無しさん
07/05/18 22:37:16
いきなりなんですけど

 if(0 < x > 60)

ってありですか?

422:デフォルトの名無しさん
07/05/18 22:38:59
>>421
ありだが、つねに偽になる

423:デフォルトの名無しさん
07/05/18 22:42:07
>>422
ありがとうございます!

424:デフォルトの名無しさん
07/05/18 22:46:58
>>423
if(0 < x < 60)
なら常に真になる

理由
【1】.まず 0 < x が評価されて 0 または 1 になる
【2】.次に (【1】の評価結果) < 60 が評価されいずれの場合でも真になる

誤解の無いように!

425:デフォルトの名無しさん
07/05/18 22:50:35
>>424
ありがとうございますッ><
これでこの部分は完璧!!!!!!!!!!!!!!!!1111

426:デフォルトの名無しさん
07/05/18 23:18:20
>>424
スゲー
なんかCの罠って感じだな

427:デフォルトの名無しさん
07/05/18 23:20:37
Cに限ったことじゃないんだけどね

428:デフォルトの名無しさん
07/05/18 23:27:23
それをどの部分で使うのか?>>425

429:デフォルトの名無しさん
07/05/19 00:14:34
バグを仕込む時

430:デフォルトの名無しさん
07/05/19 00:20:05
>>429
納得

431:デフォルトの名無しさん
07/05/19 01:34:54
URLリンク(www.youtube.com)
C言語怖いんか〜

432:デフォルトの名無しさん
07/05/19 02:26:06
>>431
大きくスレ違い!

433:デフォルトの名無しさん
07/05/19 08:21:08
[1] 授業単元:入力2
[2] 問題文(含コード&リンク):文字列を10回入力して、最も大きな文字列を表示する。
[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ名とバージョン: LSI C-86
 [3.3] 言語:C言語
[4] 期限: (2007年5月20日まで)
[5] その他の制限:入力はscanf関数ではなく、getchar関数を使用する。
文字列の比較はstrcmp関数を使用する。


434:デフォルトの名無しさん
07/05/19 08:35:27
> 最も大きな文字列
何のこっちゃ?文字の大きさの基準は?

435:デフォルトの名無しさん
07/05/19 08:39:21
>>433
VC++6でしか確認してねーけど。こういうこと?

#include <stdio.h>
#include <string.h>
void main(void) {
int i=0, c=0;
char max;
while ( i<10 ) {
c = getchar();
if ( (c>='a' && c<='z') || (c>='A' && c<='Z') ) {
if ( strcmp( &max, &((char)c) )>0 ) max=c;
++i;
}
}
printf( "MAX: %c\n", max );
}


436:デフォルトの名無しさん
07/05/19 09:08:10
>>434
文字の大きさの基準は、課題にそれ以上のことが書かれていなかったので
正直なところよくわかりません。
想像だとstrcmp関数の戻り値で判断、文字コード順で比較して
最も大きな文字列を表示ではないかと……。

>>435
ありがとうございます。
1度LSI C-86で動かしてみます。


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

4183日前に更新/299 KB
担当:undef