トップページ⇒tech
1001コメント293KB

C/C++の宿題やらせてください。9代目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
私はC++房。
今まで1年*ヶ月、ほとんど毎日休まず一生懸命C++を勉強してきた。
わからない宿題若しくは処理があったら私にやらせてくださいm(_ _)m

8代目(前スレ): http://pc2.2ch.net/test/read.cgi/tech/1055056940/l50

7代目: http://pc2.2ch.net/test/read.cgi/tech/1053963794/l50
6代目: http://pc2.2ch.net/test/read.cgi/tech/1053045530/l50
5代目: http://pc2.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc2.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc2.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
宿題手伝いますYO!!: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html

ラウンジ:質問が長い時はココを使うと便利
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
0232デフォルトの名無しさんNGNG
atoi
0233デフォルトの名無しさんNGNG
>>231
"文字列"も変数やて
それに、>>206はコマンドラインから入力を受け取ると思うのだが
argc と argv が使えないから、俺の頭では不可能
0234デフォルトの名無しさんNGNG
最近の若い者は標準入力も知らんのか…

./a.out < input.txt
0235デフォルトの名無しさんNGNG
>>224
面倒やね…
0236デフォルトの名無しさんNGNG
argc, argvは使わないと出来ないだろう。
0237デフォルトの名無しさんNGNG
./tasizan 10 20
30
0238デフォルトの名無しさんNGNG
>>234
>>206には、こう書いてあるのだが
>./tasizan 10 20
>./tasizan 10 20 30
確かに、>>227に入力方法を変えてはいけないと言う条件は無いな…
0239デフォルトの名無しさんNGNG
int main(const int argc, const char **argv)
変数じゃなくて定数・・・
ダメ?
0240デフォルトの名無しさんNGNG
>>239
グッジョブ
そのネタ、今日一番おもろかった
0241206NGNG
自分も考えたのですが
…できませんTT
皆さんありがとうございました
0242デフォルトの名無しさんNGNG
>>206
ちょっと待て、
変数使用不可と言う条件が不可能なだけで
恐らく、この課題を出された時に、
無条件に全ての変数の使用不可とは言われてないはずだ
つーわけで、もう少し詳しい条件は無いのか?
0243デフォルトの名無しさんNGNG
>>229
http://www.ccg.leeds.ac.uk/james/aStar/
0244206NGNG
あ、、
引数以外に変数を使わないこと。
って書いてあります。
0245デフォルトの名無しさんNGNG
int main(int argc, char **argv){
if(!(argc==3)){
printf("二つにしてください\n");
return 0 ;
}
printf("%d\n",atoi(argv[1])+atoi(argv[2]));
return 0;
}
0246デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
if (argc != 3) {
fputs("2つにしてください\n", stderr);
return 1;
}
printf("%d\n", atoi(argv[1]) + atoi(argv[2]));
return 0;
}
0247デフォルトの名無しさんNGNG
>>246
stderrは微妙に変数のような…
0248デフォルトの名無しさんNGNG
じゃあ
puts("2つにしてください");
0249デフォルトの名無しさんNGNG
>>247
マクロかもしれない
0250206NGNG
みなさんありがとうございます
だんだん分かってきました
自分まだまだ勉強不足です。もっと勉強します
0251デフォルトの名無しさんNGNG
>>249
stdinもstdoutもstderrも
全部freopen()出来なかったっけ?
0252デフォルトの名無しさんNGNG
なあみんな、よく問題の条件について不毛なやり取りがあるが、次スレから>>1に

「問題文は出されたそのままを書きやがれ。
 てめえの足りねえ頭で解釈した内容を書くんじゃねえぞゴルァ」

ってかいといたほうがよくない? ま、それでも不毛なやり取りはなくならんだろうけど。
0253デフォルトの名無しさんNGNG
>>252
全文が長すぎる場合に、そのまま全て書かせるのもどうかと…
0254デフォルトの名無しさんNGNG
英文テキストファイルを読み込んで、
読み込んだ文章と、その文中にある、
単語数、行数、段落数を出力するプログラムの宿題ですが、
途中までやって行き詰まっています。
誰か助けてください。
条件は、文頭にあるvoidの5種類の関数と、whileを使うことです。
自分で途中まで書いた分へのリンクを貼っておきます。↓

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=96
0255デフォルトの名無しさんNGNG
>>251
スマン
話の流れは読んでいないんだ。>>247しか見ていない。
0256デフォルトの名無しさんNGNG
>>229
問題の意味がわからん。ファイアーエムブレムなどで移動できる位置が明青化する
けど、あれの事?
0257デフォルトの名無しさんNGNG
>>217
> if(!(argc==3))

なぜif(argc!=3)と書かないの?
0258デフォルトの名無しさんNGNG
>>256
A*アルゴリズムを使って、最短距離探索プログラムを
組んでくれって言ってるんじゃない?
0259デフォルトの名無しさんNGNG
正直、A*アゴリズムが分からないんです。グーグルだと、*が文字と識別
されないみたいだから、調べられないし。ファイアーエムブレムだと、
スタート:0,0 ゴール:4,0 コスト 草:1 森:2 山:4
\01234
0草草草草草
1山山山山草
2山草山森森
3山山森森草
4草草草草草
最短の道順は 0,1 1,1 2,1 3,1 4,1 4,0==12見たいにやるのですが。
惜しいのは、真下に行く==13、大きく回りこむ==13。
0260デフォルトの名無しさんNGNG
標準入力からEOFになるまでいくつか数字のデータを入力して、
そのデータを配列に格納したいのですが、
データがいくつ入力されるのか分からないので、
配列をどのくらいの大きさで宣言すればよいのか分かりません。
そこでmallocでまずメモリを動的に確保して、
データが入力されるたびにreallocでメモリを増やすことを考えたのですが、
1回1回データが入力されるたびにreallocを呼び出すので、
なんだか効率が悪そうで気分が良くありません。
これを解決する何かよいアルゴリズムはありませんでしょうか。
それとも諦めて、多少メモリの無駄遣いにはなりますが、
最初から大きめに配列の大きさを宣言しておくのが良いのでしょうか。
C言語でお願いします。
0261デフォルトの名無しさんNGNG
>>260
256バイトずつ確保する
0262261NGNG
配列でなくてもいいならリストにするとか。
0263デフォルトの名無しさんNGNG
>>259
「エースター」で検索。
0264デフォルトの名無しさんNGNG
>>260
よく使われるのは足りなくなった時に現在の2倍reallocする方法
128,256,512,1024,...などなど
0265217NGNG
>>257
最初argc==3の時の処理を書こうと思ってすぐ思い直したら
自然にそうなってた。そういうことない?
0266デフォルトの名無しさんNGNG
>>259
a-star で google
0267デフォルトの名無しさんNGNG
>>263>>266
ありがとうございます。ありました。
http://izariuo.s12.xrea.com/developing/findpath/
あらゆるパターンを調べていくという事だったので、ゲームで使っているのと
同じだった。遅くなるというのも同じだった。ただ、斜め移動とかどうなって
いるのかよく分からないのですが。
0268デフォルトの名無しさんNGNG
質問させてください。

問題自体はよくある西暦・月・日を入力し、
その日の曜日を出力しなさいというプログラムなのですが、
配列や関数などは使わずにif・for・swich-case(breakを使って抜けてはいけない)
と、言う制限がついています。

宜しければ、どなたかヒントをご教授いただけないでしょうか。
ちなみに言語はCです。
宜しくお願いします。
0269132のクラスメート(おそらく)NGNG
俺もわかりません。

関連ホームページみてもさっぱりです。

どなたか ば〜〜〜ん と答えお願いします。


0270デフォルトの名無しさんNGNG
> (breakを使って抜けてはいけない)
すごいな
0271デフォルトの名無しさんNGNG
>配列や関数などは使わず

文字列定数はarray of charだがどうするんだ。
printfもscanfも使えないぞ。あっそれ以前に関数が使えないんだった
0272デフォルトの名無しさんNGNG
>>271
関数が使えないのだからprintfは最初っからつかえないのでokとか。
入出力どーすんだろね。
0273デフォルトの名無しさんNGNG
はっ、しまった…関数はOKです…_| ̄|○
0274デフォルトの名無しさんNGNG
switch-caseでbreak使うなというのもすごいな
0275デフォルトの名無しさんNGNG
制限が厳しすぎて俺には難しい
オマエニマカセタ
0276デフォルトの名無しさんNGNG
break使うなとなると・・・・returnやgotoか?
0277デフォルトの名無しさんNGNG
関数の集まりのCで関数使うなってのは・・・
0278デフォルトの名無しさんNGNG
習ったif・for・swich-case-break文のみで出来るといわれたので…。
gotoは聞いた事がないので使ってはダメだと思います(^^;
0279デフォルトの名無しさんNGNG
>>278
ならswitchは使うな。
0280デフォルトの名無しさんNGNG
オレニマカセルナ!
0281デフォルトの名無しさんNGNG
>>268

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

int main(){
int c,y=0,m=0,d=0,day;
wchar_t wc=0;

setlocale(LC_ALL, "japanese");/*ここだけは駄目だった*/
for(;c=getchar(),isdigit(c);y*=10,y+=c-'0');
for(;c=getchar(),isdigit(c);m*=10,m+=c-'0');
for(;c=getchar(),isdigit(c);d*=10,d+=c-'0');
if(m<3) m+=12,y--;
day=(y+y/4-y/100+y/400+(13*m+8)/5+d)%7;

switch(day){
case 0: wc+=L'日'-L'月';
case 1: wc+=L'月'-L'火';
case 2: wc+=L'火'-L'水';
case 3: wc+=L'水'-L'木';
case 4: wc+=L'木'-L'金';
case 5: wc+=L'金'-L'土';
case 6: wc+=L'土';
}
putwchar(wc);
return 0;
}
0282デフォルトの名無しさんNGNG
ワイド文字まで持ち出してきたか・・・・
0283デフォルトの名無しさんNGNG
>>281さん

おぉ…ありがとうございますm(_ _)m
しかし、最初の#include部分はstidio.hまでしか使ったことがないのですが大丈夫でしょうか(汗

ちなみに教科書は
ttp://www.amazon.co.jp/exec/obidos/ASIN/4407023058/qid=1056272941/sr=1-11/ref=sr_1_0_11/250-3896315-5368237
を使っており、ここの3章までの内容で作れとの事でした…。
やはりこれだけで作るのはかなり面倒なんでしょうか?
0284デフォルトの名無しさんNGNG
変な条件つけてやる宿題がはやってんのか?
そんなことやったって意味無いだろうに。ご愁傷様。
0285デフォルトの名無しさんNGNG
>>268
main関数を「使って」いることにはならんのかな。
呼び出さなければ定義するのは問題ないのか?
0286デフォルトの名無しさんNGNG
>>285さん

今までやってきた問題では、最初は
#include<stdio.h>

int main (void)
{

}
return 0;
と、言った感じでした。
って、これが質問の答えになっているかどうかわからないですが(汗
0287デフォルトの名無しさんNGNG
なんでそんなところにreturnが
0288デフォルトの名無しさんNGNG
>>281
曜日を表示したあとにreturnじゃだめなの?
0289デフォルトの名無しさんNGNG
「学校の宿題」って色々だな
0290デフォルトの名無しさんNGNG
曜日は英語でもいいんだからsetlocaleやワイド文字は必要ないと思う。
0291デフォルトの名無しさんNGNG
#include<stdio.h>
#include<ctype.h>

int main(){
int c,y=0,m=0,d=0,day;

for(;c=getchar(),isdigit(c);y*=10,y+=c-'0');
for(;c=getchar(),isdigit(c);m*=10,m+=c-'0');
for(;c=getchar(),isdigit(c);d*=10,d+=c-'0');
if(m<3) m+=12,y--;
day=(y+y/4-y/100+y/400+(13*m+8)/5+d)%7;

switch(day){
case 0: putchar('S');putchar('U');putchar('N');return 0;
case 1: putchar('M');putchar('O');putchar('N');return 0;
case 2: putchar('T');putchar('U');putchar('E');return 0;
case 3: putchar('W');putchar('E');putchar('D');return 0;
case 4: putchar('T');putchar('H');putchar('U');return 0;
case 5: putchar('F');putchar('R');putchar('I');return 0;
case 6: putchar('S');putchar('A');putchar('T');return 0;
}
return 0;
}
0292デフォルトの名無しさんNGNG
puts、printfを使っちゃダメなのか?
swich-case-breakはOKなんだから、returnしなくてもいいし。
0293デフォルトの名無しさんNGNG
配列禁止
0294デフォルトの名無しさんNGNG
>>292
>>268 breakで抜けてはならない。

文字列定数は配列だから使用不可ということで。
0295デフォルトの名無しさんNGNG
あ、printfとscanfは勿論OKですー(汗
0296デフォルトの名無しさんNGNG
breakを使うなというのが、そもそもおかしな話だな。
0297デフォルトの名無しさんNGNG
>>296
同意。いくらなんでも〜の感が、おそらく釣りでしょう。
0298デフォルトの名無しさんNGNG
>>294>>296
>>278でswich-case-breakはOKと書いてある。
0299デフォルトの名無しさんNGNG
あ、すみません。
「絶対使うな」ではなく出来れば使うなでした…。

話をややこしくしてしまったすみませんでした(汗
0300デフォルトの名無しさんNGNG
むー…。
やはり無理でしょうか…。
0301デフォルトの名無しさんNGNG
だから問題は全文きちんと写せとあれほど・・・
0302デフォルトの名無しさんNGNG
>>300
おまいには >>281 や >>291 は見えないのか?
0303デフォルトの名無しさんNGNG
見えますが…でも、上記のプログラムはstidio.h以外を使っているので…。
スレ汚しすみませんでした。
0304デフォルトの名無しさんNGNG
>>303
アッタマワルイデスネー
0305デフォルトの名無しさんNGNG
問題は
「西暦・月・日を入力し、
その日の曜日を出力しなさいというプログラムを
配列を使わずに、組め。」
だろ?違うのか?だったら>291でいいじゃん。

気に入らなきゃ、さっさと問題を直せ。
0306デフォルトの名無しさんNGNG
まあまあ
#include <stdio.h>

int main(){
int y,m,d,day;
printf("year/month/date>");
scanf("%d/%d/%d",&y,&m,&d);
day=(y+y/4-y/100+y/400+(13*m+8)/5+d)%7;
switch(day){
case 0:printf("日曜日\n");
break;
case 1:printf("月曜日\n");
break;
case 2:printf("火曜日\n");
break;
case 3:printf("水曜日\n");
break;
case 4:printf("木曜日\n");
break;
case 5:printf("金曜日\n");
break;
case 6:printf("土曜日\n");
break;
}
return 0;
}
0307デフォルトの名無しさんNGNG
swichが嫌ならテーブル使えよ
0308デフォルトの名無しさんNGNG
>>307
がんばって、配列を使わずにテーブルを作ってね
0309デフォルトの名無しさんNGNG
前スレの316が見たいけどもう見れない。
名前とIDのやつね。
だれか教えてくれ。
0310デフォルトの名無しさんNGNG
typedef struct {
char* sun;
char* mon;
char* tue;
char* wed;
char* th;
char* fri;
char* sat;
}TABLE;

TABLE t = {"月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"};
/* dayに0-6が入ってる */

char* p;
p = (char*)&t + (day*sizeof(char*))
printf("%s"p);
0311310NGNG
日曜日入ってなかった
0312デフォルトの名無しさんNGNG
>>309
316 名前:デフォルトの名無しさん[sage] 投稿日:03/06/11 03:15
>>238
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=87
0313309NGNG
>>312
ありがとう!
0314デフォルトの名無しさんNGNG
>>310
アライメントの関係で動作は処理系依存
0315デフォルトの名無しさんNGNG
>>314
どこが?
0316デフォルトの名無しさんNGNG
アラインメント以前に間違っている。
0317デフォルトの名無しさんNGNG
>>268
使ってくれ
#include <stdio.h>

int main(void)
{
    int y,m,day,d;
    scanf("%d/%d/%d",&y,&m,&day);
    if (m == 1 || m == 2) {
        y--;
        m += 12;
    }
    d = (y + y/4 - y/100 + y/400 + (13*m+8)/5 + day) % 7;
    switch(d){
    case 0:
        puts("日");
    case 1:
        if(d) puts("月"); d = 0;
    case 2:
        if(d) puts("火"); d = 0;
    case 3:
        if(d) puts("水"); d = 0;
    case 4:
        if(d) puts("木"); d = 0;
    case 5:
        if(d) puts("金"); d = 0;
    case 6:
        if(d) puts("土"); d = 0;
    }
    return 0;
}
0318デフォルトの名無しさんNGNG
関数使いたいプログラムの典型です。
0319デフォルトの名無しさんNGNG
>>318
関数使いたいプログラムって何?
0320デフォルトの名無しさんNGNG
switch意味無いところにワラタ
0321デフォルトの名無しさんNGNG
「関数使いたいプログラム」って何だろう
0322デフォルトの名無しさんNGNG
文字列は文字配列でつよ
0323デフォルトの名無しさんNGNG
性格悪いな
0324デフォルトの名無しさんNGNG
問題が悪いんだよ
0325デフォルトの名無しさんNGNG
>>291,306,317さん

ありがとうございます。
とても助かりましたー。
これで課題1はなんとかなりそうです。
0326デフォルトの名無しさんNGNG
bmp画像を読み込む関数を作っているのですがうまく動きません。
↓なんですけど教えていただけませんか?

ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=97
0327デフォルトの名無しさんNGNG
それよりなんで低レベル関数を使うの?
0328デフォルトの名無しさんNGNG
与えられた文字列をコマンドラインを使って読み込み、
出力する宿題が出たのですが途中で改行が入っていて、うまく読み込むことができません。
どうすればいいのでしょうか?
どなたか教えてください。
0329デフォルトの名無しさんNGNG
>>328
>>252
0330デフォルトの名無しさんNGNG
コマンドラインから
0331デフォルトの名無しさんNGNG
>>328
「コマンドラインから与えられた文字列を読み込み」ならわかるんだが・・・
与えられた文字列ってどこから与えられた文字列?標準入力でいいの?
■ このスレッドは過去ログ倉庫に格納されています