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

このエントリーをはてなブックマークに追加
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++の宿題片付けます 126代目
http://pc12.2ch.net/test/read.cgi/tech/1242655611/
2デフォルトの名無しさん:2009/06/08(月) 17:46:04
・情報の後だしはやめましょう。
・解答をもらったら、反応してあげると解答者も大喜びです。人間だもの。
・テンプレは仕様書のようなもんで、フォーマットを守りましょう。しかし、必要な情報は漏らさないようにね。
>>1
3デフォルトの名無しさん:2009/06/08(月) 18:30:59
C言語
で特定の関数が返す値を表示させるには?

testpg() があり、これは、ファイルをスキャン(日付の更新を確認するプログラムです。)
コマンドライン上から、#testpg file
として、使用します。
このプログラムは、スキャンして日付の更新があれば、1を返し、なければ、7を返します。
さて、Cのプログラムで、この7という帰り値を表示させたいのですが、どういうプログラムを書いてやればいいでしょうか?
4デフォルトの名無しさん:2009/06/08(月) 18:45:21
>>3
テンプレ書いてくれ。
5デフォルトの名無しさん:2009/06/08(月) 19:15:01
cin、coutを使う使わないも、入れた方がいいかもね
6デフォルトの名無しさん:2009/06/08(月) 19:22:14
なんでC言語とC++を別々のスレッドにしないの。
7デフォルトの名無しさん:2009/06/08(月) 19:24:05
前スレ http://pc12.2ch.net/test/read.cgi/tech/1242655611/979 の解答

#include <stdio.h>

int main(void){
char str[256+1], c0, c1;
char *ptr;
scanf("%s %c %c", str, &c0, &c1);
for(ptr=str; *ptr!='\0'; ++ptr){
if(*ptr == c0) *ptr = c1;
}
puts(str);
return 0;
}
8デフォルトの名無しさん:2009/06/08(月) 19:34:17
[1] 授業単元:
[2] 問題文(含コード&リンク):
下記の実行結果になるプログラムを作成
abc + cba = 1333となるa,b,cを求めるプログラム
変数は下記を使用
int a ←ループカウンタ
int b ←ループカウンタ
int c ←ループカウンタ
【実行結果】
3桁の数字の2つの和が1333になるパターンを表示
419+914=1333
518+815=1333
617+716=1333
716+617=1333
815+518=1333
914+419=1333
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限: 今日中
[5] その他の制限: 三重for文を使用
よろしくお願いします
9 ◆gYINaOL2aE :2009/06/08(月) 19:38:50
[1] 授業単元:応用C
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9378.txt
[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン: 多分TeraTerm
 [3.3] 言語: C
[4] 期限: 2009年6月9日0時まで
[5] その他の制限: 関数を自分で定義しないで、ソースで使用している構造体、変数を使って解く

書き掛けのソースで申し訳ないですが、どこが間違っているのかが分かりません。
よろしくお願いします。
10デフォルトの名無しさん:2009/06/08(月) 19:44:26
軽く疑問なんだけど、>>8みたいなパズル性の高い問題(難易度が高いって意味じゃないよ)ができるからって、それって実際にプログラム関連の業務に役立つの?
11デフォルトの名無しさん:2009/06/08(月) 19:49:53
引き出しが多くなることはいいことだ
頭が柔軟なことはいいことだ
レベル
12デフォルトの名無しさん:2009/06/08(月) 19:51:48
>>10
立つ。
プログラミングにおいても重要な抽象化思考を鍛える役に立つからな。
以下も参照
http://www.mars.dti.ne.jp/~kshara/progmath.html
13デフォルトの名無しさん:2009/06/08(月) 19:53:31
>>8
#include<stdio.h>

int main(void){
int a=1,b=1,c=1,d,e;
for(a=1;a<=9;a++){
for(b=1;b<=9;b++){
for(c=1;c<=9;c++){
d=100*a+10*b+c;
e=a+10*b+100*c;
if(d+e==1333){
printf("%d+%d=%d\n",d,e,d+e);
}
}
}
}
return 0;
}
14デフォルトの名無しさん:2009/06/08(月) 19:55:38
>>12
やっぱりそうなんだ
ところで>>8くらいだと現役のプログラマの人なんかみんな一瞬でできちゃったりするもんなの?
15デフォルトの名無しさん:2009/06/08(月) 19:59:53
>>8はa,b,c以外の変数作っちゃいけないのかな
ならこれで

#include<stdio.h>

int main(void){
int a,b,c;
for(a=1;a<=9;a++){
for(b=1;b<=9;b++){
for(c=1;c<=9;c++){
if((100*a+10*b+c)+(a+10*b+100*c)==1333){
printf("%d%d%d+%d%d%d=1333\n",a,b,c,c,b,a);
}
}
}
}
return 0;
}
16デフォルトの名無しさん:2009/06/08(月) 20:03:06
>>13,>>15
分かりやすくありがとうございました。助かりました。
17デフォルトの名無しさん:2009/06/08(月) 20:04:35
>>前974
>>前980 nCnでオーバーフローするから。
int combination(int n,int r){
  int a;
  a=n-r, if(a==0) a=1;
18デフォルトの名無しさん:2009/06/08(月) 20:41:04
[1] 授業単元:C演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9380.txt
[3] 環境
 [3.1] OS: Windows XP

 [3.3] 言語: C言語
[4] 期限:6月9日12時まで
[5] 関数までは教わりました、よろしくお願いします
19デフォルトの名無しさん:2009/06/08(月) 20:45:58
>>17
オーバーフローじゃなくてゼロ除算だろ

直すべきはfactorial

int factorial(int x){
int i, f=1;
for(i=x; i>=1; --i) f *= i;
return f;
}
20デフォルトの名無しさん:2009/06/08(月) 20:57:40
>>7
ありがとうございました!
21デフォルトの名無しさん:2009/06/08(月) 21:07:54
>>18
#include <stdio.h>
int capital = 0;
int lower = 0;
int number = 0;
int other = 0;
void count(int c)
{
if ('A' <= c && c <= 'Z') capital++;
else if ('a' <= c && c <= 'z') lower++;
else if ('0' <= c && c <= '9') number++;
else other++;
}
void print(void)
{
int i;
printf("capital : "); for (i = 0; i < capital; i++) printf("*"); printf("\n");
printf("lower : "); for (i = 0; i < lower; i++) printf("*"); printf("\n");
printf("number : "); for (i = 0; i < number; i++) printf("*"); printf("\n");
printf("other symbol: "); for (i = 0; i < other; i++) printf("*"); printf("\n");
}
int main()
{
int c;
while ((c = getchar())!=EOF) count(c);
print();
return 0;
}
棒グラフにするなら、起点は揃えたいな
22デフォルトの名無しさん:2009/06/08(月) 21:08:57
[1] 授業単元:C
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9382.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.3] 言語:C言語
[4] 期限:6/9
[5] その他制限:do while文を使用
よろしくお願いします。
23デフォルトの名無しさん:2009/06/08(月) 21:26:51
>>22
こんな感じで。動作は保障しない。今回は読み違いしてないといいが。。。

#include <stdio.h>

int main(){
    int i=0,n=0,sum=0;
    puts("どんどん整数を入力してね♪(ただし、-9999で終了)");
    do{
        printf("%d回目:",i+1);
        scanf("%d",&n);
        if(n == -9999) break;
        sum+= n;
        i++;
    }while(1);
    printf("合計:%d\n",sum);
    printf("平均:%.2f",i==0 ? 0.0:sum/i);

    return 0;
}
24デフォルトの名無しさん:2009/06/08(月) 21:28:48
>>23
(double) がいるかも
25デフォルトの名無しさん:2009/06/08(月) 21:30:41
sum/iのところdoubleにキャストしなきゃだね
26デフォルトの名無しさん:2009/06/08(月) 21:41:38
>>22>>23>>24
ありがとうこざいます。
大変助かりました。
2723:2009/06/08(月) 22:00:00
あら、抜けがあったか。申し訳ない。
28デフォルトの名無しさん:2009/06/08(月) 22:20:33
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
クイックソート、バブルソート、選択ソートの三種のソート関数
それぞれ、void qusort(int[]), busort(int[]) sesort(int[]),を作れ。
  並び順は、降順。ソートした結果は引数配列と同じ配列に返してやる。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C (ただし、C++コンパイラ互換コード)
[4] 期限: ([2009年06月14日まで]
[5] その他の制限: qsort()などの常にあるソート関数は使わない
よろしくおねがいします。
29デフォルトの名無しさん:2009/06/08(月) 22:30:42
"組",
名前,数字,数字,
名前,数字,数字,
名前,数字,数字,

"組",
名前,数字,数字,
名前,数字,数字,
名前,数字,数字,
みたいな感じで一塊になってる部分が連続してるファイルを読み込んで処理したいのですが
fscanfで名前,数字,数字,の部分を処理するプログラムはできたのですが"組"の部分はどういう感じでやればよいのですか?
fscanfだと型が合ってないと無限ループになるので"組"の行を読み込んですんなりと下の行に行くやり方がわかりません
30デフォルトの名無しさん:2009/06/08(月) 22:32:53
>>29
fgets で一行読む
sscanf の返値でフォーマットチェックする
31デフォルトの名無しさん:2009/06/08(月) 22:34:59
こんな時に正規表現があれば・・・!
32デフォルトの名無しさん:2009/06/08(月) 22:35:50
>>30
ありがとうございました
33デフォルトの名無しさん:2009/06/08(月) 22:46:56
C/C++って文字列がどんどん足されていくみたいな感じでしたっけ?何か関数を使わないといけませんか?
34デフォルトの名無しさん:2009/06/08(月) 22:56:54
strcopyか
35デフォルトの名無しさん:2009/06/08(月) 22:57:38
>>33
string でも使ってろ
36デフォルトの名無しさん:2009/06/08(月) 23:01:39
>>30
この場合ってもし返り値が同じだったらどうすれば良いんですかね?
37デフォルトの名無しさん:2009/06/08(月) 23:04:49
38デフォルトの名無しさん:2009/06/08(月) 23:06:04
>>9
・while(EOF == iKara)をwhile(EOF != iKara)に修正
while(EOF == jKara)をwhile(EOF != jKara)に修正

・トランザクションに同じコードがある場合ループでi++をl++に修正

・&dを%dに修正
&sを%sに修正

・fprintfに改行"\n"をつける

・実行例のマスタで社員番号を全角→半角に修正、全角空白を半角に修正

でとりあえず出力はされる
39デフォルトの名無しさん:2009/06/08(月) 23:16:45
[1] 授業単元:Linux
[2] 問題文(含コード&リンク):
サンプルコード http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9385.txt
に手を加え、パス検索機能を追加する。
例えば、/bin/ls と入力することで動いていたが、lsだけで実行可能とする。
>ls
>ls?r
>date?I
>gcc-oexp1exp1.c
>./exp1
>./exp1 1   この6つのコマンドを実行し、実行結果を提出する。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 明日中にはお願いします。
[5] その他の制限: わかりやすい内容でお願いします。
40デフォルトの名無しさん:2009/06/08(月) 23:42:27
>>39
35行目を修正でいいんじゃない?
35c35
< if(execv(argv[0],argv[])==(-1)){
---
> if(execvp(argv[0],argv)==(-1)){

関数 execlp() と execvp() は、指定されたファイル名がスラッシュ (/) を含んでいない場合、シェルと同じ動
作 で実行可能なファイルを探索する。検索パスは環境変数 PATH で指定されたパスである。
41デフォルトの名無しさん:2009/06/08(月) 23:43:14
前スレ>>974の問題3、10000桁まで計算できるようにした。
ただし、えれぇ高速なマシンが必要。最適化とか皆無^^;
やりかたがアレだとかメモリがナニだとかはナシな方向で・・・

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9386.txt
42デフォルトの名無しさん:2009/06/09(火) 00:02:17
>>41
ウホッ!
約10KBの構造体をそのまま関数引数や戻り値にするところが豪気だねw
でもプログラムはすごくわかりやすくて性格のいい人が書いたのではという
印象を持った。
43デフォルトの名無しさん:2009/06/09(火) 00:04:10
>>39
whileの中の
p=(char *)&command;
がかなりヤバげに見えるんだが。
キャストもアンドもいらない。
44デフォルトの名無しさん:2009/06/09(火) 00:06:58
>>41
i[n]に0〜9でなく0〜99を割り当てたら、効率良くね?
45デフォルトの名無しさん:2009/06/09(火) 00:15:19
>>44
>>41が実装したのはBCD
それじゃただの多倍長
効率はいいが実装が面倒、特に除算

階乗を使う、とかいう糞縛りがなければnCrの答えはパスカルの三角形をDPで作った方が速い
46デフォルトの名無しさん:2009/06/09(火) 00:16:31
多倍長演算の肝は、自然数をどう表現するか。
自然数 10000を10進で表現するか、16進で表現するか。2進で表現するか。または1234進数とか
その解釈で色々と実装が変わってくる。

PCは2進が効率良いから2進がベーすで、人がわかりやすいようにバイトで数字を表記する。
4746:2009/06/09(火) 00:25:12
BCDぐぐってみた。
こういう表現もあるんだねぇ。
48デフォルトの名無しさん:2009/06/09(火) 00:46:42
BCDは通常、頻繁にそれを文字?(????表現)に直すニーズが
ありながらも、???な計算が必要な(もっぱら??関係)用途に
用いられる。桁数が?えるとそれを???に変換する処理コストは
バカにならない。???に直すのに便利な形式が取られるのが普通。
なんで殆どの場合??のベキ乗進法が取られる。
4939:2009/06/09(火) 01:15:05
>>40

execvpとしてみたのですが、
>gcc -o exp1 exp1.cでとても長いエラーが出力されます。
テストですので、hello worldで普通に実行できましたのでソースが悪い訳じゃないと思います。
50デフォルトの名無しさん:2009/06/09(火) 01:28:31
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
姓,名,年齢,郵便番号,電話番号の各データをメンバとする構造体配列を下記のように宣言し
その構造体配列にキーボードからデータを逐次入力して,最大100名のデータを格納できるようにしなさい。
但し,入力の終了は,姓入力の際にnullと入力することによって判定しなさい。
また,入力が終了した時点で,格納された複数名のデータをすべて出力するようにしなさい。
#define MAXREC 100

struct namelist {
char last_name[21], first_name[21];
int age;
char zip[9], tel[13];
} meibo[MAXREC];

また、入力が終了した時点で,格納された複数名のデータを郵便番号順に出力するようにプログラムを変更しなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月9日23:59
[5] その他の制限:特になし
51デフォルトの名無しさん:2009/06/09(火) 01:32:42
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
共用体を用いて、2バイト整数の上下バイトを入れ換えて暗号化する関数 short encode(short)を作り
キーボードから入力した整数を暗号化/復号化するプログラムを作りなさい

[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:6月10日
[5] その他の制限:
main関数の部分は次のコードを用いなさい。

short encode(short);

main()
{
int n, m, k;

while (1) {
printf("整数を入力して下さい(終了は0) = ");
scanf("%d", &n);
if (n == 0) break;
m = encode(n); /* 暗号化 */
printf("\n\t%d を暗号化すると %d になります。\n", n, m);
k = encode(m); /* 復号化 */
printf("\n\t%d を復号化すると %d になります。\n\n", m, k);
}
}
52デフォルトの名無しさん:2009/06/09(火) 01:50:27
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
整数係数の多項式について,その次数と係数をキーボードから入力して連結リストに格納し
次に格納された多項式を画面に出力する。
そして、xの実数値をキーボードから入力して多項式の値を求めるプログラムを作れ。

出力例
整数次数の多項式を入力します!
最大次数を入力してください:5↵

小さい次数から整数係数を順に入力してください

X^0の整数係数:-1↵
X^1の整数係数:2↵
X^2の整数係数:3↵
X^3の整数係数:0↵
X^4の整数係数:0↵
X^5の整数係数:-1↵

多項式は次の通り
-X^5+3X^2+2X-1

Xの値を入力してください:0.8↵
多項式の値は 2.192320 です


[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:6月10日
[5] その他の制限: なし
53デフォルトの名無しさん:2009/06/09(火) 01:50:44
54 ◆N8hH7z85ug :2009/06/09(火) 04:25:21
[1] 授業単元: 文字列とポインタ
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9388.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: ([09年6月10日10:00まで]
[5] その他の制限: 検索していてよく見かけた#include <string.h>というのは習っていません。
            #include<stdio.h>しか使ったことはありません。

よろしくお願いします。
55デフォルトの名無しさん:2009/06/09(火) 06:15:46
56デフォルトの名無しさん:2009/06/09(火) 09:35:13
>>49
何故かgcc固有のインクルードパスを無効と判定するみたい。
-vで出力みると違いがでるね。
原因とか回避方法はわからない。宿題テーマとは離れてしまうかも?
57デフォルトの名無しさん:2009/06/09(火) 11:14:25
>>54
#include <stdio.h>

int is_non_wordc(int c)
{
if (0x30 <= c && c <= 0x39) /* 数字 */
return 0;
if (0x40 <= c && c <= 0x5a) /* 大文字英字 */
return 0;
if (0x61 <= c && c <= 0x7a) /* 小文字英字 */
return 0;
return 1;
}

int main(void)
{
char word[100];
int i = 0, c;

while ((c = getchar()) != EOF) {
if (!is_non_wordc(c)) { word[i++] = c; }
else { word[i] = '\0'; if (i != 0) printf("%s\n", word); i = 0; }
}
return 0;
}
58デフォルトの名無しさん:2009/06/09(火) 11:29:51
fscanfの引数の場合分けがうまくいかないんだけどどうして?
引数がfloatとcharで20こあって"%d%f・・・・・",hairetu,&suuji・・・・とあるんだけど返り値=1にした時しかうまくいかない
switchにしてcase20はおkだけどcase 2とかdefaultにはcaseが正しくありませんってなる
59デフォルトの名無しさん:2009/06/09(火) 11:38:17
60デフォルトの名無しさん:2009/06/09(火) 11:41:22
>>59
すまん
61デフォルトの名無しさん:2009/06/09(火) 14:07:57
>>050 姓,名,年齢,郵便番号*,電話番号の各データをメンバとする構造体配列
>>028の選択ソート使ってます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9390.txt
62デフォルトの名無しさん:2009/06/09(火) 15:03:43
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9391.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 6月11日9:00
[5] その他の制限: 特になし
よろしくお願いします
63デフォルトの名無しさん:2009/06/09(火) 15:34:52
64デフォルトの名無しさん:2009/06/09(火) 15:39:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9394.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月12日24:00まで]
[5] その他の制限:特になし
よろしくお願いします
65デフォルトの名無しさん:2009/06/09(火) 15:50:26
>>63
ありがとうございました。助かりました
66デフォルトの名無しさん:2009/06/09(火) 15:51:25
>>62
#include <iostream>
using namespace std;

template<class T, int N> class Counting {
T* array_;
public:
Counting(T* Array) { array_ = Array; }
T sum()
{
T result = 0; for (int i = 0; i < N; ++i) result += array_[i];
return result;
}
T ave() { return sum() / N; }
void modify(int index, T value) { array_[index] = value; }
};
int main()
{
const int s1 = 5, s2 = 3;
int a[s1] = { 1, 2, 3, 4, 5 };
Counting<int, s1> ca(a);
cout << ca.sum() << " " << ca.ave() << "\n";
ca.modify(2, 10);
cout << ca.sum() << " " << ca.ave() << "\n";

double b[s2] = { 1.2, 2.5, 3.5 };
Counting<double, s2> cb(b);
cout << cb.sum() << " " << cb.ave() << "\n";
cb.modify(1, 4.8);
cout << cb.sum() << " " << cb.ave() << endl;
return 0;
}
6766:2009/06/09(火) 15:52:06
解決済みでしたね。ごめんなさい。
68デフォルトの名無しさん:2009/06/09(火) 16:25:57
>>051 unionを使った暗号化と複合化。
#include <stdio.h>
short encode(short);
main()
{
  int n, m, k;

  while (1) {
    printf("整数を入力して下さい(終了は0) = ");
    if(scanf("%d", &n) != 1) { scanf("%*s"); continue; }
    if (n == 0) break;
    m = encode(n); /* 暗号化 */
    printf("\n\t%d を暗号化すると %d になります。\n", n, m);
    printf("\n\t0x%04hx を暗号化すると 0x%04hx になります。\n", n, m);
    k = encode(m); /* 復号化 */
    printf("\n\t0x%04hx を復号化すると 0x%04hx になります。\n", m, k);
    printf("\n\t%d を復号化すると %d になります。\n\n", m, k);
  }
}
short encode(short data) {
  union {
    short sdata;
    struct {
      char cdata1, cdata2;
    } c;
  } u;
  char tmp;

  u.sdata = data;
  tmp = u.c.cdata1, u.c.cdata1 = u.c.cdata2, u.c.cdata2 = tmp;
  return u.sdata;
}
69デフォルトの名無しさん:2009/06/09(火) 16:59:14
[1] 授業単元: 情報処理
>[2] 問題文(含コード&リンク):
>http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9396.txt
>[3] 環境
> [3.1] OS: Windows
> [3.2] コンパイラ名とバージョン: gcc
> [3.3] 言語: C/C++
>[4] 期限: 2009年6月11日23:30まで
>[5] その他の制限: 問題文にもありますが、3問目以外規制があります。
>
>全三問です。 よろしくお願いいたします。
70デフォルトの名無しさん:2009/06/09(火) 18:18:19
1] 授業単元: c++
[2] 1次元配列a[1]〜a[10]の各要素に任意の数値を格納した後すべて加算した合計値を表示せよ。
[3] 環境
 [3.1] OS: XP
 [3.2] turbo c
 [3.3] c++
[4] 今週金曜日まで。
[5] まだ習いはじめて一年なのでそんなには進んでません。
7166:2009/06/09(火) 18:25:46
>>70
#include <iostream>
using namespace std;

int main()
{
double a[11];
a[0] = 0;
for (int i = 1; i <= 10; ++i) {
cout << "input a[" << i << "] > ";
cin >> a[i];
a[0] += a[i];
}

cout << "total: " << a[0] << endl;
return 0;
}
72デフォルトの名無しさん:2009/06/09(火) 18:27:21
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9398.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual C++
 [3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限: 特になし
よろしくお願いします
73デフォルトの名無しさん:2009/06/09(火) 18:29:51
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9399.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual C++
 [3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限:特になし
72共々よろしくお願いします
74デフォルトの名無しさん:2009/06/09(火) 19:43:45
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):最大256文字の文字列を入力し、単語数を出力しなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月11日 8:00
[5] その他の制限:最大256文字の文字列を引数とし、最初の単語の文字数を返す関数を作成し、それを用いる。
75デフォルトの名無しさん:2009/06/09(火) 19:47:00
[1] 授業単元:C
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9400.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.3] 言語: C言語
[4] 期限:6/10 午前7時
[5] その他の制限: switch文を使用
よろしくお願いします。
76デフォルトの名無しさん:2009/06/09(火) 20:05:34
>>75
#include <stdio.h>
#include <math.h>

int main(void)
{
int fst;
int scond;
int n;
long ans;

puts("2つの整数を入力してください。");
printf("1個目 : "); scanf("%d", &fst);
printf("2個目 : "); scanf("%d", &scond);
do {
printf("選択してください。【 加算 =>0,減算 =>1,乗算 =>2,余り =>3,除算 >=4,べき乗 =>5 】"); scanf("%d", &n);
switch (n) {
case 0: ans = fst + scond; break;
case 1: ans = fst - scond; break;
case 2: ans = fst * scond; break;
case 3: if (scond != 0) ans = fst % scond; else { puts("0で除算できません!"); return 1; } break;
case 4: if (scond != 0) ans = fst / scond; else { puts("0で除算できません!"); return 1; } break;
case 5: ans = (long)pow(fst, scond); break;
default: puts("入力値エラー 0〜5までの数字を入力してください。");
}
} while (n < 0 || n > 5);
printf("答えは%dです。", ans);
return 0;
}
77デフォルトの名無しさん:2009/06/09(火) 20:36:30
>>76
ありがとうございます。
助かりました。
78デフォルトの名無しさん:2009/06/09(火) 20:38:03
1] 授業単元: c++
[2] 1次元配列a[1]〜a[10]の各要素に任意の数値をキーボードから格納した後、偶数値のみ表示しろ
[3] 環境
 [3.1] OS: XP
 [3.2] turbo c
 [3.3] c++
[4] 今週金曜日まで。
79 ◆gYINaOL2aE :2009/06/09(火) 20:42:13
>>38
ありがとうございました。助かりました。
80デフォルトの名無しさん:2009/06/09(火) 20:46:18
>>78
#include <iostream>
int main()
{
int a[11];
for (int i = 1; i < 11; ++i) {
std::cout << "a[" << i << "]: "; std::cin >> a[i];
}
std::cout << "---- even number ----" << '\n';
for (int i = 1; i < 11; ++i) {
if (a[i] % 2 == 0) std::cout << "a[" << i << "]: " << a[i] << '\n';
}
std::cout << std::endl;
return 0;
}
8154 ◆N8hH7z85ug :2009/06/09(火) 20:57:11
>>57
ありがとうございます
ですがget_word()という関数を作り、関数ungetc()も使ってmain関数を

int main(void)
{
char word[100];
int c;

while( (c = getchar()) != EOF ) {
if( is_non_wordc(c) == 0 ) {  
ungetc(c, stdin);
get_word(word);
printf("%s\n", word);
}
}

return(0);
}

のようにしたいのですが
期限は少し遅れても大丈夫なので>>54を再度よろしくお願いします
82デフォルトの名無しさん:2009/06/09(火) 21:02:26
>>81
main()は絶対そうじゃないとダメなの?
それ絶対あってる?
83デフォルトの名無しさん:2009/06/09(火) 21:10:03
素人の俺も問題に挑戦しても良い?
間違ってる可能性大なんですが、可能なら答え合わせをして欲しい。
8454 ◆N8hH7z85ug :2009/06/09(火) 21:13:54
>>82
はい
指定されました
main関数はコピペしたのですがどこかおかしいでしょうか
私もis_non_wordcに渡すのは&cなのではないか?と思ったのですがここでしょうか
85デフォルトの名無しさん:2009/06/09(火) 21:14:19
練習をかねてやってる人多いから全然構わないよ
間違っててもそんなの気にする人いない
86デフォルトの名無しさん:2009/06/09(火) 21:19:44
>>84
>私もis_non_wordcに渡すのは&cなのではないか?と思ったのですがここでしょうか
そこじゃない。
・ungetc()が意味分からん
・get_word()にwordだけ渡していったいどうしろというんだ
と書いているうちにちょこっと思いついたからコンパイルしてみる。
87デフォルトの名無しさん:2009/06/09(火) 21:25:12
>>80
ありがとうございます。
std::cout << "a[" << i << "]: "; std::cin >> a[i];
}
std::cout << "---- even number ----" << '\n';
はまだならっていないのでscanfなどを使ったものに置き換えられないでしょうか?
88デフォルトの名無しさん:2009/06/09(火) 21:27:15
判定に使ったcを戻して、それ先頭にwordに読みこんでくんだろ
89デフォルトの名無しさん:2009/06/09(火) 21:38:02
>>83
容赦ない突っ込み入る事もあるよ。
特にgetsとかw
90デフォルトの名無しさん:2009/06/09(火) 21:38:55
int get_word(char *p)
{
int i, ch;

for(i=0; !is_non_word(ch=getchar()); i++) p[i] = ch;
p[i] = '\0';

return i;
}
91デフォルトの名無しさん:2009/06/09(火) 21:40:26
>>87
条件付け足すくらいなら詳細なテンプレと分かりやすい問題文に書き直してくれ
for(int i;;) を習っていないので、とか言われたらC89仕様に直す手間がかかる
>>78は出力フォーマットが不明でどうコーディングしていいか分からない
92デフォルトの名無しさん:2009/06/09(火) 21:40:26
そういうつっこみって現場でもそうなのか揚げ足取りなのかどうなのよ?
93デフォルトの名無しさん:2009/06/09(火) 21:40:57
>>87 c++ じゃないのか? cなのか?
>[3.3] c++
//#include <iostream>
#include <stdio.h>
int main()
{
  int i;
  int a[11];
  for (i = 1; i < 11; ++i) {
// std::cout << "a[" << i << "]: "; std::cin >> a[i];
    printf("a[%d]: ", i); scanf("%d", &a[i]);
  }
// std::cout << "---- even number ----" << '\n';
  printf("---- even number ----\n");
  for (i = 1; i < 11; ++i) {
    if (a[i] % 2 == 0)
// std::cout << "a[" << i << "]: " << a[i] << '\n';
      printf("a[%d]: %d\n", i, a[i]);
  }
// std::cout << std::endl;
  printf("\n");
  return 0;
}
9454 ◆N8hH7z85ug :2009/06/09(火) 21:46:21
情報の小出しになってしまってすみません
関数get_word()についてのフローチャートがあったのですが、うまくフローチャートを書く自信が無かったのと、ここの皆さんなら理解してくれるだろうと思い込み勝手に省略してしまいました
すみません
うまく書けるかどうか分かりませんがこんな感じです

・関数get_word()についてのフローチャート

単語切り出し
get_word()
↓★
c = getchar()

文字cはEOF? →yesの場合'\n'を末尾に付加→関数終了
↓no
文字cは単語文字?
is_non_wordc()    →noの場合'\n'を末尾に付加→関数終了
↓yes
文字cを格納
ポインタ処理
カウンタ処理

★の部分に戻る


全体構成についてのフローチャートもありましたがこれはmain関数を見てもらえは分かると思います
必要なら書きますので宜しくお願いします
95デフォルトの名無しさん:2009/06/09(火) 21:47:58
>>94
もう答えが>>90にあるよ
9683:2009/06/09(火) 21:50:54
>>74に挑戦したけど結局できなかった・・・
>>89 getsでつまずきましたw
int first_word_len(char s[256]) {
  int len = 0, i;
  for (i=0; s[i]; i++) {
    if (len && s[i] == ' ') break;
    len++;//先頭の空白もカウント
  }
  return len;
}
int word_cnt(char s[256]) {
  int cnt = 0, word_len, total_len; char temp[256];
  strcpy(temp, s);
  while (1) {
    word_len = first_word_len(temp);
    if (word_len) {
      total_len += word_len;
      memset(temp, '\0', 256);
      memcpy(temp, &s[total_len], 256 - total_len);
      cnt++;
    } else { break; }
  }
  return cnt;
}
int main() {
  int cnt;
  //getsで受け取ると失敗する
  //char s[256]; gets(s);
  char s[256] = "Hello World word3 word4 word5";
  cnt = word_cnt(s);
  printf("cnt: %d\n", cnt);
}
97デフォルトの名無しさん:2009/06/09(火) 21:55:45
>>87
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional>

using namespace std;

struct odd : public unary_function< int, bool > {
result_type operator() ( const argument_type& i ){
return i % 2 == 1;
}
};

int main() {
vector< int > v;
copy( istream_iterator< int >( cin ), istream_iterator< int >(), back_inserter( v ) );
remove_copy_if ( v.begin(), v.end(), ostream_iterator< int >( cout, " " ), odd() );

return 0;
}
9854 ◆N8hH7z85ug :2009/06/09(火) 22:15:44
>>57
>>82
>>86
>>88
>>90
>>95
本当にありがとうございました
助かりました
明日コンパイルして実行してみます
99デフォルトの名無しさん:2009/06/09(火) 22:18:01
>>83
問題を解くのはダレの迷惑にもならないし、能力アップにはもってこい。
発表するかは君しだい。がんばってくれ。
10083:2009/06/09(火) 22:31:38
どうでもいいと思うが修正しました

int first_word_len(char s[256])
{
  int len = 0, i = 0;
  while (s[i] == ' ')
  {
    len++;
    i++;
  }
  for (; s[i]; i++)
  {
    if (s[i] == ' ') break;
    len++;
  }
  return len;
}

>>99
頑張ります!
101デフォルトの名無しさん:2009/06/09(火) 22:36:40
I'mの単語数っていくつなんかねぇとか、20-years-oldは1単語なのか?とか、
Yes, I do.の", "の部分が単語の長さを返す関数だときれいに処理できないよなぁとか、
色いろ考えてやめた。色いろ考えるのは楽しかったw
102デフォルトの名無しさん:2009/06/09(火) 22:41:33
>>74 >>96 で?>>100は何の修正?コメントがないよ。
#include <stdio.h>
int word_len(char *s) {
  int i;

  for (i=0; s[i] != '\0' && s[i] != '\n'; i++) {
    if (i != 0 && s[i] == ' ') break; // 単語の前の空白は1個のみ可。それ以上は1単語。
  }
  return i;
}
int word_cnt(char *s) {
  char *temp = s;
  int cnt, len;

  for (cnt = 0; len = word_len(temp); cnt++) {
    temp += len;
  }
  return cnt;
}
int main() {
  char s[256+2] = "Hello World word3 word4 word5";

  fgets(s, 256+2, stdin); // 256+'\n'+'\0'
  printf("word cnt: %d\n", word_cnt(s));
}
103デフォルトの名無しさん:2009/06/09(火) 23:04:56
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9401.txt[3] 環境
このプログラムのvoidポインタなどを参考にする。
まず、int ,char,long,float型どれを入力するか決め、その型の値を入力(このプログラムと同じような形で入力) 
値表示して、その値のアドレスを入力。そのあと、残りの3つの型で出力する。
例 int ,123を入力
Printing int 123
Printing data at location: 01D70C44(アドレス)
Data as char :
Data as int : 123
Data as long : 8069185
Data as  float : 0.00
(それぞれの型に応じた出力)
[3.1] OS Windows
 [3.2]VisualC++
 [3.3] 言語 C
[4] 期限:6月11日
[5]
104デフォルトの名無しさん:2009/06/09(火) 23:14:04
105デフォルトの名無しさん:2009/06/09(火) 23:15:22
>>前863 1〜256文字の文字列を入力し、その単語数を出力する。
#include <stdio.h>
int word(char *s) { // 先生>ここから、
  int size = 0;
  while(*s && *s != '\n') {
    if(*s++ == ' ') break; // 先頭の空白を含まない長さ。
    size++;
  }
  return size;
} // 先生>ここまでは、変更しない事。
int word_cnt(char *s) {
  char *temp = s;
  int cnt, len;

  for (cnt = 0; len = word(temp); cnt++) {
    temp += len + 1; // 後尾の空白を1個のみと仮定する。
  }
  return cnt;
}
int main() {
  char s[256+2] = "Hello World word3 word4 word5";

  fgets(s, 256+2, stdin); // 256+'\n'+'\0'
  printf("word cnt: %d\n", word_cnt(s));
}
106デフォルトの名無しさん:2009/06/09(火) 23:16:18
>>104
失礼しました。正しくは103さんの書いた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9401.txt
です。申し訳ありません。
107104 お歳暮返し:2009/06/09(火) 23:37:43
失礼しました。正しくは103さんがお書きになった
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9401.txt
[3] 環境
です。
10883:2009/06/09(火) 23:46:12
>>102

>>100の修正は単語前の空白を複数許可に変更しました
memcpyとかめちゃめちゃ無駄なことをしてたんですね。
>>102の temp += len; の行で完全に濡れた。ポインタでなおしてきます・・
109デフォルトの名無しさん:2009/06/09(火) 23:56:32
>>103
こんな感じで。動作は保障しない。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9403.zip
110デフォルトの名無しさん:2009/06/09(火) 23:59:08
動作は保障しないの人今日も頑張ってるのか
111デフォルトの名無しさん:2009/06/10(水) 00:02:43
>>110
なんかあったの?
112デフォルトの名無しさん:2009/06/10(水) 00:25:58
[1] 授業単元:計算機
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9404.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月12日まで
[5] その他の制限: 特になし
よろしくお願いします。
113デフォルトの名無しさん:2009/06/10(水) 00:32:35
>>112
これじゃ無理だろw
もうちょっと読む側のことも考えようよ
114デフォルトの名無しさん:2009/06/10(水) 00:33:57
[1] 授業単元:c言語
[2] 要素の数51個の1次配列aの各要素a[1]〜a[50]に0〜100までの点数を入力し最高点をa[35]=100点と表示せよ
[3] 環境
 [3.1] OS: XP
 [3.2] study C
 [3.3] 言語: C
[4] 期限: 6月13日まで
[5] 特になし
よろしくお願いします。
115デフォルトの名無しさん:2009/06/10(水) 00:34:21
>>61
ありがとうございます。
116デフォルトの名無しさん:2009/06/10(水) 00:41:20
>>103 cf : >>109
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9405.c
適当に作ったのを後悔している。void *と聞いてつい触手が伸びてしまった。
117デフォルトの名無しさん:2009/06/10(水) 00:42:20
>>114
#include <stdio.h>

int main(void)
{
int i, a[51];

for(i=1; i<=50; i++) scanf("%d", a + i);

printf("最高点:a[35]=100点");

return 0;
}
118sage:2009/06/10(水) 00:47:59
[1] 授業単元:c言語
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9406.txt[3] 環境
 [3.1] OS:Windowsxp
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月10日まで
[5] その他の制限:なし
よろしくお願いします。
119デフォルトの名無しさん:2009/06/10(水) 00:54:03
>>114
やってみた

#include <stdio.h>

#define VALUE_LENGTH 50

int main()
{
  int a[VALUE_LENGTH + 1];
  int i, max;
  
  for (i=1, max=0; i<=VALUE_LENGTH; i++)
  {
    printf("a[%d]:", i);
    scanf("%d", &a[i]);
    if (!max || a[max] < a[i]) max = i;
  }
  
  printf("a[%d]=%d点", max, a[max]);
}
120デフォルトの名無しさん:2009/06/10(水) 00:58:07
121112:2009/06/10(水) 00:58:54
>>113
すいません。
2つに分けて読みやすくしました。
課題1http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9407.txt
課題2http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9409.txt
内容は同じです。
122デフォルトの名無しさん:2009/06/10(水) 00:59:01
1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9408.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月12日 金曜日
問題は2つです。条件も付いています。まだC言語を習い始めたばかりなので
よくわかりません;どうかよろしくお願い致します。
123デフォルトの名無しさん:2009/06/10(水) 01:03:04
>>118
while(*str!='\0'){
if( 32 <= *str && *str <=126){
hindo[*str-32]++;
}
str++;
}

動いたけどコレで良いのか?
124デフォルトの名無しさん:2009/06/10(水) 01:03:46
>>118

void countHindo(char* str){
  while (*str)
  {
    if (*str >= 32 && *str <= 126) {
      hindo[*str-32]++;
    }
    *str++;
  }
}
125デフォルトの名無しさん:2009/06/10(水) 01:07:44
>>121
だからこれじゃ無理だって。
誰も読まねえよ
126デフォルトの名無しさん:2009/06/10(水) 01:12:24
どうせなら、もう少しキモく
void countHindo(char* str){
/* ここにプログラムを書く */
while (*str) if (32 <= *str && *str <= 126) hindo[*str++-32]++;
}
127デフォルトの名無しさん:2009/06/10(水) 01:16:43
>>122
問題2

#include <stdio.h>
void output(int a[20]){
int i;
for(i=0;i<=19;i++) {
printf("%6d",a[i]);
if((i+1)%5==0) printf("\n");
}
printf("\n");
}

int main(){
int i;
int data[20];
//1
for(i=0;i<=19;i++) data[i] = i;
output(data);

//2
for(i=0;i<19;i++) data[i] = data[i+1];
output(data);

//3
for(i=19;i>=1;i--) data[i] = data[i-1];
output(data);

return 0;
}
128118:2009/06/10(水) 01:19:43
>>123
>>124
回答ありがとうございます。
おかげで助かりました。
129デフォルトの名無しさん:2009/06/10(水) 01:21:42
>>122
問題1
borlandだと、配列の要素数は
constでもエラー吐いたんだけど…。

#include <stdio.h>
#include <string.h>

const int size = 64;
char str[size];

int main(){
printf("input characters (<64) : ");
fgets(str,size,stdin);
printf("\nlength = %d\n",strlen(str)-1);
return 0;
}
130デフォルトの名無しさん:2009/06/10(水) 01:25:21
C89の const はコンパイル時定数ではないのだ。
コンパイル時定数は #define を使うしかないのだ。
C++ メインの人がよくよく陥る罠なのだ。なのだ。なのだ…
131デフォルトの名無しさん:2009/06/10(水) 01:38:08
学校ってこんな楽しいことすんのか
夜間行きたくなったw
132112:2009/06/10(水) 02:00:24
133デフォルトの名無しさん:2009/06/10(水) 02:15:01
>>132








134デフォルトの名無しさん:2009/06/10(水) 02:29:56
[1] 授業単元:画像工学
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9397.txt
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:StudyC Ver2
 [3.3] 言語:C言語
[4] 期限: 2009年6月11日09:00まで
[5] その他の制限: 特にありません
期限が短いですがよろしくお願い致します
135デフォルトの名無しさん:2009/06/10(水) 02:32:15
>>133
まあ、そう言うな
課題内容はわかる
136112:2009/06/10(水) 02:37:10
>>133
よくわからないんですがIE7で見ると改行が無視されるんですが…。
他のブラウザで見ると問題ないんですけれど…。
137デフォルトの名無しさん:2009/06/10(水) 02:37:16
>>130
細かいことだけどconstはコンパイル時定数とはならない。
いや、定数では無いといった方がいいかな。
あくまで、値の変更できない変数だから、そこを勘違いしないように。

定数は、リテラルで表す。たとえば、'\0'とか'a'とか"foo"とか0とかとか。
これらに意味をもたせるために#defineでマクロ置換をしているにすぎない。
また、コンパイラにチェックさせる意味でenumを使うこともできる。
ただ、enumは、int(unsigned, short, longを含む)しか使えないので、
マクロ置換はまだまだ必要ということになる。
特にHackなことをするためには。

C++では、enumが、厳密に評価されるようになったため、
ビットフラグとして利用しにくくなってしまった。
本来の使い方では無いので、厳しくなったのは評価してよい点だ。

おっと、完全にスレチだ。
138デフォルトの名無しさん:2009/06/10(水) 02:53:32
>>134の問題すら理解できなかったw
139デフォルトの名無しさん:2009/06/10(水) 02:57:05
>>136
IE7が糞なだけだろ。
encodingは、UTF-16LEみたい。
ファイルの先頭が0xFFFEだったからね。
といってもWindowsはXP以降UTF-16使っていた気もする。
内容はUNIX系のシステムコールだけどUTF-16が標準の環境なのね。
140112:2009/06/10(水) 03:04:06
>>139
元のファイルがunicodeで設定してあったからそれで保存してました。
だからおかしかったんですね。

普段IE使わないんで気づきませんでした。
以後気をつけます。

無駄に同じようなファイルあげてすいませんでした。
141デフォルトの名無しさん:2009/06/10(水) 03:25:34
IE6 ならば大丈夫。ただ、.txt に関連付けたエディタが起動するんだけど。
9413.txt
9412.txt
142デフォルトの名無しさん:2009/06/10(水) 03:26:11
143デフォルトの名無しさん:2009/06/10(水) 09:27:58
>>134
それここに書いて解答出てくるかな?
StudyC特有の機能を使いそうだし。
http://www.orchid.co.jp/computer/cschool/index.html
144デフォルトの名無しさん:2009/06/10(水) 09:31:12
>>117>>119
ありがとうございます。
この問題でfor(i=1; i<=50; i++)が(i=1; i<51; i++)でも問題ないでしょうか?
145デフォルトの名無しさん:2009/06/10(水) 10:16:37
>要素の数51個の1次配列aの各要素a[1]〜a[50]
50個なのに51とは、要素の添え字は1から50でいいんじゃない?
きりがいいので。あとは先生に詳しく聞いて。
146デフォルトの名無しさん:2009/06/10(水) 10:45:10
>>144
動作は同じです!
147デフォルトの名無しさん:2009/06/10(水) 11:01:19
>>119は初期値 max=1 にしておけば !max || いらない。
148デフォルトの名無しさん:2009/06/10(水) 11:18:22
>>147
それは、最高点が複数あったらどうするかという問題に発展していくな。
149デフォルトの名無しさん:2009/06/10(水) 11:34:26
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9416.txt
[3] 環境
 [3.1] OS: Windows XP

 [3.3] 言語: C言語
[4] 期限:6月12日12時まで
[5]制限:配列を使用
 関数、配列まで授業で習いました、よろしくお願いします
150デフォルトの名無しさん:2009/06/10(水) 12:09:24
[1] 授業単元:システムコール
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9417.c
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:2009年06月11日12:00
[5] その他の制限:特になし

訳分かりません
宜しくお願いします
151デフォルトの名無しさん:2009/06/10(水) 12:11:21
課題1
#include <stdio.h>

int main(void)
{
int i, n, a[100];

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

for(i=0; i<n; i++) scanf("%d", a + i);

puts("reverse:");

while(i--) printf("%d\n", a[i]);

return 0;
}
152デフォルトの名無しさん:2009/06/10(水) 12:14:25
課題2
#include <stdio.h>

int main(void)
{
int i, n, fibo[100] = {0,1};

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

for(i=2; i<n; i++) fibo[i] = fibo[i-1] + fibo[i-2];

for(i=0; i<n; i++) printf("%d ", fibo[i]);
putchar('\n');
while(i--) printf("%d ", fibo[i]);

return 0;
}
153デフォルトの名無しさん:2009/06/10(水) 12:18:37
課題3
#include <stdio.h>

int main(void)
{
int i, n, ip, v1[100], v2[100];

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

puts("vector1:");
for(i=0; i<n; i++) scanf("%d", v1 + i);

puts("vector2:");
for(i=0; i<n; i++) scanf("%d", v2 + i);

for(i=ip=0; i<n; i++) ip += v1[i] * v2[i];

printf("inner product: %d\n", ip);

return 0;
}
154149:2009/06/10(水) 12:31:51
>>151-153
助かりました、本当にありがとうございました!
155デフォルトの名無しさん:2009/06/10(水) 13:02:03
[1]アルゴリズム
[2]このプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9384.txt
は、商品名と価格を入力させ、最後に出力させるプログラムである。

課題1:CELL型へのポインタ p が指すセルの直後のセルを削除する関数 delete_cell を作成する。free関数を使用すること。

課題2:上記プログラムと同様の動作をするプログラムを、連結リストではなく配列を用いて作成すること。

[3]Linux,gcc,C言語
[4]2009/08/01
よろしくお願いします
156デフォルトの名無しさん:2009/06/10(水) 13:18:01
どなたか>>64お願いします
157デフォルトの名無しさん:2009/06/10(水) 13:45:02
>>64
int main(void){
struct tnode *root=NULL;
int i, nums[]={78, 85, 79, 98, 87, 90, 95, 99, 97, 92};
for(i=0;i<sizeof(nums)/sizeof(nums[0]);i++) root=insertNode(root, nums[i]);
printTree(root);
return 0;
}
struct tnode *createNode (int num){
struct tnode *ret;
ret=malloc(sizeof(*ret));
ret->n=num;
ret->left=ret->right=NULL;
return ret;
}
struct tnode *insertNode (struct tnode *node, int num){
struct tnode **parent=NULL, *root;
for(root=node;node;node=*parent){
if(num>node->n) parent=&(node->left);
else parent=&(node->right);
}
if(parent==NULL) return createNode(num);
*parent=createNode(num);
return root;
}
void printTree (struct tnode *node){
if(node==NULL) return;
printTree(node->left);
printf("n = %d [%p] -> [%p, %p]\n", node->n, node, node->left, node->right);
printTree(node->right);
}
158デフォルトの名無しさん:2009/06/10(水) 14:56:27
>>157
助かりました!ありがとうございます!
159デフォルトの名無しさん:2009/06/10(水) 15:16:44
[1] 授業単元:c言語
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9418.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9419.txt
[3] 環境
 [3.1] OS:Windowsxp
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月11日12:00まで
[5] その他の制限:なし
またお願いします。
160デフォルトの名無しさん:2009/06/10(水) 15:22:56
>>122です。
>>127
>>129
ありがとうございました!!
問題2で出力を受け持つ関数名を
void print(int n, int a[]);
としたときはプログラムは大幅に変わってしまうでしょうか?
161デフォルトの名無しさん:2009/06/10(水) 15:34:18
>>160
>>1
>・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
162デフォルトの名無しさん:2009/06/10(水) 16:07:50
163デフォルトの名無しさん:2009/06/10(水) 16:23:33
>>159
void fCountHindo(FILE* input){
int moji;
while((moji=fgetc(input))!=EOF){
moji-=32;
if(0<=moji && moji<sizeof(hindo)/sizeof(hindo[0])) hindo[moji]++;
}
}
void fCountHindoIgnoreCase(FILE* input){
int moji;
while((moji=fgetc(input))!=EOF){
if('a'<=moji && moji<='z') moji=moji-'a'+'A';
moji-=32;
if(0<=moji && moji<sizeof(hindo)/sizeof(hindo[0])) hindo[moji]++;
}
}
164デフォルトの名無しさん:2009/06/10(水) 17:51:16
165デフォルトの名無しさん:2009/06/10(水) 19:20:53
[1] 授業単元:C言語演習課題
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9422.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C
[4] 期限: 2009/06/12
[5] その他の制限: ゼラー(ツェラー?)の定理は利用禁止です。

よろしくお願いします。
166134:2009/06/10(水) 19:23:46
>>143
担当教諭に質問したところvisual studio 2003(学科PCにインストールされている)でも可とのことでした
>>134をどなたかよろしくお願い致します
出力結果をグラフにしたいのでコピペしやすいようにして頂けると幸いです
167デフォルトの名無しさん:2009/06/10(水) 19:23:47
そっ、そんな辛い(つぇらーい)ことをさせるなんて・・・
168デフォルトの名無しさん:2009/06/10(水) 19:34:12
こういう宿題って、
「1から100の整数」でとか「256文字以内」とかの指示があった場合、
チェックを入れてエラーを出すべきなのかな?それともその条件で動作さえすれば良いの?
169デフォルトの名無しさん:2009/06/10(水) 19:37:47
>>166
どの値を出力するんだよ
それから、ヒントの凅って何やねん
170デフォルトの名無しさん:2009/06/10(水) 19:41:08
[1] 授業単元:画像情報処理
[2] 問題文(含コード&リンク):
(1)入力画像が001.bmpの時のmain中のreadBitmapの直後でのw,hの値を
fprintf文で記述しファイルResult.datで確認せよ。
(2)define文でNUCを減少させてビルドし動作結果がどうなるか確認せよ。
(3)入力画像を他の入力画像に変えてNUC・NURを調整して正常動作させよ。
(4)入力画像を元の001.bmp画像に戻し、プログラム中の行%R1%直前の画素強度の
増加率の会話的決定の部分のコメント文による停止を解除し、
その後のプログラム中記載の課題のプログラム部分を作成し、
増加率を0.5, 1.5, 0.の場合の出力画像out1.bmp, out2.bmpを観測せよ。
問題:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9423.txt
ヘッダー:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9424.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:?
 [3.3] 言語:C++
[4] 期限:2009年06月11日まで
[5] C++の空のWin32コンソールアプリに入れて実行せよとの事です。
どなたかお願いいたします。
171むむナナ:2009/06/10(水) 20:00:31
*** n = %1, a = %2: counterexample found! *** としてください。出力の
出だしは、
n = 2, a = 1: verified
n = 3, a = 1: verified
n = 3, a = 2: verified
n = 4, a = 1: verified
n = 4, a = 3: verified
n = 5, a = 1: verified
n = 5, a = 2: verified
n = 5, a = 3: verified
n = 5, a = 4: verified
調べる組み合わせの順番はまず n の小さい順
、同じ n の値に対して a の小さい順としてください。定理の確認が目的な
ので、プログラムの作成に際して定理が正しいという仮定を用いてはいけま
せん。


[3] 環境
 [3.1] OS: Windows vista
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 明日までですT。T
[5] その他の制限: よく知りませんT.T
172むむナナ:2009/06/10(水) 20:02:40
[1] 授業単元:C 言語演習
[2] 問題文(含コード&リンク):
オイラーの定理は、「n と a を互いに素な任意の正整数とするとき、
a^φ(n) - 1 (a の φ(n) 乗から1を引いた値) は必ず n で割り切れる。」
というものです。1以上 50未満の n と、1以上n未満で n と互いに素な
a のすべての組み合わせに対して、オイラーの定理が成り立っていること
を確認するプログラムを書いてください。
a の φ(n) 乗を実際に計算してしまうと int型で扱える範囲をすぐに
超えてしまいます。a の i 乗を順次求めていくかわりに、
a の i 乗を n で割った余りを順次求めていくようにすることで、
この問題を避けることができます。出力の形式は、
検査した n と a の対ごとに、もし定理が成り立っていれば、

n = %1, a = %2: verified 成り立っていなければ
173デフォルトの名無しさん:2009/06/10(水) 20:15:41
>>172
回答はもう出来てるが問題文が不完全なので貼らないし、多分ずっと貼
らない。(出題者じゃないとは言い切れないし)
174デフォルトの名無しさん:2009/06/10(水) 20:16:09
>>171-172
書き込む順番逆だぞw
175デフォルトの名無しさん:2009/06/10(水) 20:25:36
>>162さんありがとうございました。すいませんでした;
176デフォルトの名無しさん:2009/06/10(水) 20:34:25
>>166
それは、C言語の問題じゃなくて、CG/画像処理の問題。
Cの課題としてはあまりにも説明不足。
とりあえず、Excelにその式を入れてグラフを描いてみたらどうか。
177デフォルトの名無しさん:2009/06/10(水) 21:12:57
>>171
#include <stdio.h>

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

int f(int n, int a)
{
int i, c, r;

for(i=1,c=0; i<n; i++) if(gcd(n, i)==1) c++;

for(i=0,r=1; i<c; i++) {
r *= a;
r %= n;
}

return r == 1;
}

int main(void)
{
int n, a;

for(n=2; n<=50; n++) {
for(a=1; a<n; a++) {
if(gcd(n,a)==1) {
if(f(n,a)) printf("n = %d, a = %d: verified\n", n, a);
else printf("*** n = %d, a = %d: counterexample found! ***", n, a);
}}}

return 0;
}
178デフォルトの名無しさん:2009/06/10(水) 21:33:26
>>166
よくわからんけどE2(λ)を出力してみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9425.txt
179デフォルトの名無しさん:2009/06/10(水) 21:34:47
>>177
>>173か?
問題にφ(n)の定義なんて出てないんだし
C言語の宿題片付けスレとしては行き過ぎ
180173:2009/06/10(水) 21:44:38
>>179
俺じゃないってw
まエスパーも何もφ(n)はnと素なnより小さい自然数の
数だってことはオイラーの定理でググれば出てくるから
許容範囲なのかも知れないが、>>171の質問文はそれ
以前だろ
181デフォルトの名無しさん:2009/06/10(水) 21:54:28
行き過ぎw
それ以前w

答える気ねーなら、書き込まないで黙ってろよw
182デフォルトの名無しさん:2009/06/10(水) 21:56:31
すべての尋問に答える必要はありません
183デフォルトの名無しさん:2009/06/10(水) 22:32:39
[1] 授業単元:
[2] 問題文(含コード&リンク):
1 白黒の画像ファイルを読み込み(ファイルの種類は好きに決めてよい)、その画像の解像度と同じサイズの二次元配列を作りなさい。
2 さらに、その二次元配列に、元画像で白だった部分は0、黒だった部分は1を代入しなさい
たとえば
白黒白
白白白
白白黒
の3×3の解像度の画像を読み込んで
010
000
001
の二次元配列に変換する
200×200とかでも同様

[3] 環境
 [3.1] OS: Windows XP
 [3.3] 言語: C
[4] 期限: 無期限
[5] その他の制限: 特になし
184159:2009/06/11(木) 00:11:01
>>163
ありがとうこざいます!
助かりました。
185デフォルトの名無しさん:2009/06/11(木) 00:44:38
どなたかお願いします。
C言語についての質問です。

10進表記されている32ビットの数字をオクテット単位でわけてそれぞれを10進表記するにはどうすればよいでしょうか?
たとえば33620236といった数字です。

186デフォルトの名無しさん:2009/06/11(木) 01:02:50
[1] 授業単元:
[2] 問題文(含コード&リンク):http://textup.no.land.to/w/1244649360/
上のじゃんけんゲームのソースをいじって
1・コンピューターの強さを10段階に設定する。
2・ゲームを始める前にコンピューターの強さを10段階から自分で選べるようにする。
3・Ctrl+cでプログラムを抜け出した時にそのゲームでの勝敗履歴を表示する。(○×○○×―のように)
[3] 環境
 [3.1] OS:Redhat9
 [3.2] コンパイラ名とバージョン:gcc3.4
 [3.3] 言語:C言語
[4] 期限:今週いっぱい
[5] その他の制限:特にはないです。
187デフォルトの名無しさん:2009/06/11(木) 01:05:36
>>185
union {
 unsigned int x;
 unsigned char y[4];
} A;

A.x = 33620236;
printf("%d %d %d %d", A.y[3], A.y[2], A.y[1], A.y[0]);
188デフォルトの名無しさん:2009/06/11(木) 01:37:34
>>185
#include<stdio.h>

int main(void){
const char *p="33620236";
unsigned long x;
int i;

sscanf(p, "%lu", &x);
for(i=4-1;i>=0;i--){
printf(" %d", (x>>(i*8))&0xff);
}

return 0;
}
189デフォルトの名無しさん:2009/06/11(木) 02:07:20
>>188
ありがとうございます。とても助かりました。共用体についてもっと勉強をしたいと思います。
190デフォルトの名無しさん:2009/06/11(木) 05:20:23
>>186
強さって勝ちの比率を操作すればいいの?

とりあえず勝ち:分け:負けを以下のようにはしてみた。
LV 1→ 5:10:10
LV 2→ 6:10:10
〜〜〜〜〜〜〜
LV10→15:10:10

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9427.txt
191デフォルトの名無しさん:2009/06/11(木) 06:58:06
>>182
待った!異議あり!!くらえっ!アマいなっ!
192デフォルトの名無しさん:2009/06/11(木) 11:38:16
>>164
>>150です
有難うございます
実行してみます!
193デフォルトの名無しさん:2009/06/11(木) 11:50:51
194デフォルトの名無しさん:2009/06/11(木) 12:11:53
186のものです。
どうにも書き方が悪かったようでスミマセン。

強さというのはCPUの強さで、高ければ高いほど自分が勝ちにくくなるということです。

また、この強さの決め方はどのようにして決めているのでしょうか?
宜しければその仕組みを教えていただければと思います
195デフォルトの名無しさん:2009/06/11(木) 12:59:48
>>194
普通に考えたらジャンケンの難易度なんて、確率操作をインチキすることくらいしかないように思えるけどなあ
196デフォルトの名無しさん:2009/06/11(木) 13:14:35
>>195
こちらの入力の後でCPUの手を決めるので
Lvが高ければ高いほどこちらの手に負ける手をCPUが表示する確率を少なくすればいいってことですよね。
恥ずかしながらC言語での確率のいじり方などが分からないのでソースを書き直すとしたらどこをどう書き直すか
教えていただけないでしょうか?
197デフォルトの名無しさん:2009/06/11(木) 13:42:37
[1] 授業単元:コマンドライン
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9430.c
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:2009年6月17日12:00まで
[5] その他の制限:特になし

御頼み申します
198デフォルトの名無しさん:2009/06/11(木) 13:48:46
>>196 これで文句ある?
勝つ確率=10/(25+レベル)
相子確率=10/(25+レベル)
負ける確率=(5+レベル)/(25+レベル)
レベル5で五分五分
199デフォルトの名無しさん:2009/06/11(木) 14:14:51
200デフォルトの名無しさん:2009/06/11(木) 15:47:40
201デフォルトの名無しさん:2009/06/11(木) 18:39:46
最強で完全ランダム、他は出す手に傾向がある(LV1だとほとんどパーとか、グーチョキパーをくりかえすとか)。
……ってのが公平な気がする。
PLとの心理戦をするんでない限り。
202デフォルトの名無しさん:2009/06/11(木) 19:01:35
[1] 授業単元:c言語演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9432.txt
[3] 環境 Windowsvista
[3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2009年6月12日20:00まで
[5] その他の制限:特になし
203デフォルトの名無しさん:2009/06/11(木) 19:41:37
>>201
低レベルでは、ときどき次に出す手を予告するというのはどうか。
あるいは、グーチョキパーをルーレットのように表示してとめる仕組みにし、
低レベルほど回転速度が遅くなる。あと、まんこ。
204デフォルトの名無しさん:2009/06/11(木) 20:18:40
>>203
イカサマせずに勝率を上げるとなると
相手の癖とか戦略を読まないといけない
卒業研究のレベルになってこないか?
205デフォルトの名無しさん:2009/06/11(木) 20:37:18
>>202
とりあえずなんの工夫もないバブルソート
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9433.txt
VC6で作ったんで「/* ↓↓↓ここから↓↓↓ */」〜「/* ↑↑↑ここまで↑↑↑ */」と呼び出し行をコピペしてくれ。

あとついでにwords.txtのサンプル(38098個)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9434.zip

以下のURLの民法を適当に加工したもの
http://www.cas.go.jp/jp/seisaku/hourei/data2.html
206デフォルトの名無しさん:2009/06/11(木) 21:07:41
[1] プログラミング
[2] 入力した数値を4で割った余りを求めるプログラムを作れ。(switch)を用いて。
[3] 環境
 [3.1] Windows vista
 [3.2] Visual Studio 2008
 [3.3] C

#include<stdio.h>
int main(void){

int a,b;
printf( "数値を入力してください>>>\n");
scanf("%d",&a);
b = a % 4;
switch( b )
{
case 0:
printf("%d を4で割った余りは、0です。\n", b );
break;
〜略〜
default:
printf("%d は数値ではないです。\n", b );
break;
}
return 0;
}

error改行が多すぎます。と出て書き込めないのでcase2〜4は省略しました。
こんな感じで作ってみたんですが、scanfのところで数値ではなく、tとかアルファベットを入れるとすべてcase 0で返されます。
数値以外を入れた場合defaultで返してほしいんですが、どうすればいいでしょうか?
207デフォルトの名無しさん:2009/06/11(木) 21:12:18
>>206
scanf("%d",&a);
b = a % 4;

b=-1;
if(scanf("%d",&a)==1) b = a % 4;
208デフォルトの名無しさん:2009/06/11(木) 21:59:02
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):2分木の根節点へのポインタが引数として与えられた時、その2分木の高さを調べて返す関数
int height(Tree t);
を定義せよ。ただし、height(NULL)=-1として関数定義せよ。
構造体
typedef struct node *Tree;
typedef struct node{
int data;
Tree left_subtree;
Tree right_subtree;
}Node;
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名: gcc
 [3.3] 言語: C
[4] 期限: 6月12日まで
[5] その他の制限:たぶんなし
209デフォルトの名無しさん:2009/06/11(木) 22:01:22
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9435.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:3日間
[5] その他の制限:
         初心者なので、なるべく簡単にお願いします。
210デフォルトの名無しさん:2009/06/11(木) 22:23:03
>>209 初心者向け↓
#include <stdio.h>

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

printf("文字入力:");
scanf("%80[^\n]%*c",str);

for(i=0; str[i]!='\0'; i++){
if(str[i]==' ')
printf("\n");

else
printf("%c",str[i]);
}

return 0;
}
211デフォルトの名無しさん:2009/06/11(木) 22:25:51
>>208
int max(int a, int b)
{
if(a>b) return a;
return b;
}

int height_internal(Tree t)
{
if(!t) return 0;
return max(height_internal(t->left_subtree), height_internal(t->right_subtree))+1;
}

int height(Tree t)
{
if(!t) return -1;
return height_internal(t);
}
212デフォルトの名無しさん:2009/06/11(木) 22:27:44
213デフォルトの名無しさん:2009/06/11(木) 22:28:34
>>205
無事ソートできました、ありがとうございました。
ただ、240s以上ソートにかかると減点対象なので、できればもう少し早いとありがたいのですが・・。
214デフォルトの名無しさん:2009/06/11(木) 22:31:46
>>209 真・初心者向け
#include<stdio.h>
#include<ctype.h>
int main(){
 int c=0;
 for(;c!=EOF;putchar('\n'))for(;isalpha(c=getchar());)putchar(c);
}
215デフォルトの名無しさん:2009/06/11(木) 22:35:07
>>208


#define max(a, b) ((a) > (b)? a : b)
int height(Tree t)
{
int l_height, r_height;
if(t == NULL){
return -1;
} else {
l_height = height(t->left_subtree);
r_height = height(t->right_subtree);
return max(l_height, r_height) + 1;
}
}
216デフォルトの名無しさん:2009/06/11(木) 22:38:15
>>215
それをするなら
return max(max(l_height, r_height), 0) + 1;
じゃね?
217デフォルトの名無しさん:2009/06/11(木) 22:39:13
>>213
これでどうかな? うちの環境では15倍くらい早くなった。
compareとswapは使ってないんで消して。

void sort(char buf[][32], int num){
  int i, j, temp, *ix, *hash;
  char (*buf2)[32];
  ix = calloc(num, sizeof(int));
  hash = calloc(num, sizeof(int));
  buf2 = calloc(num, sizeof(char)*32);
  for(i = 0; i < num; ++i){
    ix[i] = i;
    hash[i] = ((toupper(buf[i][0])<<24)|(toupper(buf[i][1])<<16)|(toupper(buf[i][2])<<8)|(toupper(buf[i][3])));
  }
  for(i = 0; i < num - 1; ++i){
    for(j = 1; j < num - i; ++j){
      if((hash[ix[j]] - hash[ix[j-1]]) < 0){
        temp = ix[j];
        ix[j] = ix[j-1];
        ix[j-1] = temp;
      }
    }
  }
  memcpy(buf2, buf, sizeof(char)*32*num);
  for(i = 0; i < num; ++i){
    strcpy(buf[i], buf2[ix[i]]);
  }
  free(ix);
  free(hash);
  free(buf2);
}
218デフォルトの名無しさん:2009/06/11(木) 22:39:54
>>209
#include <stdio.h>

int main(void)
{
char str[81];
int i, flg = 0;

fgets(str, sizeof str, stdin);

for(i=0; str[i]; i++) {
if(str[i] == ' ') {
if(flg++ == 0) putchar('\n');
}
else {
flg = 0;
if(str[i]!=',' && str[i]!='.') putchar(str[i]);
}
}

return 0;
}
219デフォルトの名無しさん:2009/06/11(木) 22:41:11
217補足。#include<string.h>を追加してな。
220デフォルトの名無しさん:2009/06/11(木) 22:45:43
>>209
#include <stdio.h>
#define BUF_SIZE 81
bool IsCharOfWord(char c)
{
return (c!=' ' && c!='\t' && c!='\n' && c!='.' && c!=',');
}
int main() {
int pFront, pEnd;
char buf[BUF_SIZE];
if (fgets( buf, BUF_SIZE, stdin ) == NULL) return 1;
for (pFront=0;pFront<BUF_SIZE && buf[pFront]!='\0';pFront++)
{
if (!IsCharOfWord(buf[pFront])) continue;
for (pEnd=pFront+1;buf[pEnd]!='\0';pEnd++)
{
if (!IsCharOfWord(buf[pEnd]))
{
buf[pEnd] = '\0';
break;
}
}
printf("%s\n", &buf[pFront]);
pFront = pEnd;
}
return 0;
}
221デフォルトの名無しさん:2009/06/11(木) 23:05:01
>>210
空白連続入力で無駄な改行が入ってしまう
コンマピリオド未対応

>>214
アルファベット以外まで除外してる
アルファベット以外の文字が来るたびに改行が入る
80字制限がない

>>218
スペースカンマスペースとかの並びだと改行が入ってしまう

>>220
タブと改行?
222209:2009/06/11(木) 23:08:40
たくさん書いて頂いたのですが、あまりよく解りません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9436.txt
これに、空白が2個以上連続してもうまく動作するようにすること。また、コンマ(,)、
ピリオド(,)は表示する単語に含めないこと。
という条件がうまくいくように変えてください。
isalpha(x)は習っています。
223デフォルトの名無しさん:2009/06/11(木) 23:09:16
>>221
文句だけは一人前だなw
224デフォルトの名無しさん:2009/06/11(木) 23:11:11
麻呂先生の出番だよ〜
225209:2009/06/11(木) 23:19:45
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9438.txt
空白が2個以上連続してもうまく動作するようにすることという条件がうまくいくように
変えて下さい。
226デフォルトの名無しさん:2009/06/11(木) 23:24:25
[1] 授業単元:C言語基礎・応用
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語: C++
[4] 期限: 6月15日(月)の19:00まで
[5] その他の制限:
習った箇所:配列・関数・構造体・引数・返り値(戻り値)・ファイルポインタなど
       一通り学習済み。バイナリエディタなどほんの一部のみ未学習。
標準ライブラリ:使用。
最後に:初心者に近い状態なので、なるべく簡単にお願いします。
227デフォルトの名無しさん:2009/06/11(木) 23:25:31
>>226
何を?
228デフォルトの名無しさん:2009/06/11(木) 23:26:12
>>222
#include <stdio.h>
#include <ctype.h>

int main(void){
char buf[80+1+1];
int i, is_prev_alpha=1;

fgets(buf, sizeof(buf), stdin);
for(i=0;buf[i] && !isalpha(buf[i]);i++);
for(;buf[i];i++){
if(isalpha(buf[i])){
if(!is_prev_alpha) putchar('\n');
putchar(buf[i]);
is_prev_alpha=1;
}
else is_prev_alpha=0;
}
return 0;
}
229デフォルトの名無しさん:2009/06/11(木) 23:26:26
>>225
>>218>>220はその条件を満たしてる
230226 ◆TAPy3blMsc :2009/06/11(木) 23:33:13
>>226
すみません。誤って書き込んでしまいました。問題文を加えて改めて書き直しておきます。
[1] 授業単元:C言語基礎・応用
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9439.zip
(作成する実行ファイルの例・宿題の諸注意などが入っています。)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語: C++
[4] 期限: 6月15日(月)の19:00まで
[5] その他の制限:習った箇所:配列・関数・構造体・引数・返り値(戻り値)・ファイルポインタなど
       一通り学習済み。バイナリエディタなどほんの一部のみ未学習。
標準ライブラリ:使用。
最後に:初心者に近い状態なので、なるべく簡単にお願いします。
231デフォルトの名無しさん:2009/06/11(木) 23:36:44
さすがにexeをたたく気にはなれんな〜
232デフォルトの名無しさん:2009/06/11(木) 23:40:39
>>222
#include <stdio.h>

int main()
{
char str[81];
char * p = str;

printf("文字入力:");
fgets( str, sizeof( str ), stdin );

while ( *p ) {
while ( isspace( *p ) || *p == ',' || *p == '.' ) {
p++;
}
while ( isalpha( *p ) ) {
putc( *p++, stdout );
}
putc( '\n', stdout );
}
return 0;
}
233232:2009/06/11(木) 23:51:39
>>222
チョイ修正。

#include <stdio.h>

int main()
{
char str[81];
char * p = str;

printf("文字入力:");
fgets( str, sizeof( str ), stdin );

while ( *p ) {
while ( isspace( *p ) || *p == ',' || *p == '.' ) {
p++;
}
if ( ! *p ) {
break;
}
while ( isalpha( *p ) ) {
putc( *p++, stdout );
}
putc( '\n', stdout );
}
return 0;
}
234206:2009/06/12(金) 00:14:37
>>207
レスありがとうございます。
それで実行してみましたが、実行結果が数値以外を入れると
「-1 は数値ではありません」と出て、5以上の数値を入れると1〜4で返されます。
たとえば45だと
「1 を4で割った余りは1です。」と出ます。
実行結果は
「入力した値 を4で割った余りは○です。」にしたいのですが・・・
また if(scanf("%d",&a)==1) b = a % 4; というのは
scanf("%d",&a );
if (a==1);
b = a % 4;
と同じ意味と捉えていいのでしょうか?
235デフォルトの名無しさん:2009/06/12(金) 00:18:52
>>170ですが、どなたか(1)の
「入力画像が001.bmpの時のmain中のreadBitmapの直後でのw,hの値を
fprintf文で記述」の部分だけで良いので解いてくださいませんか?
当方初心者なのでさっぱりで・・・
お願い致しますm(_ _)m
236デフォルトの名無しさん:2009/06/12(金) 00:28:36
>>234
#include<stdio.h>
int main(void){
int a;
printf( "数値を入力してください>>>\n");
if(scanf("%d",&a)==1) printf("%d を4で割った余りは、%dです。\n", a, a%4 );
else printf("数値ではないです。\n");
return 0;
}

scanf で %d を使う場合数値以外が来ると読み込みに失敗して a の値は変化しません
詳しくはこの辺をじっくり読んで下さい
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
237デフォルトの名無しさん:2009/06/12(金) 00:35:11
>>235
// BMPファイルから画像を読み込む
readBitmap(pathimgi,
(略)
// ↓これ
fprintf(fp, "\n画像の幅%d", w);
fprintf(fp, "\n画像の高さ%d", h);
238206:2009/06/12(金) 00:38:58
>>236
レスありがとうございます。
if文は先週の課題だったんで今週はswitchでやれと・・・

>scanf で %d を使う場合数値以外が来ると読み込みに失敗して a の値は変化しません
ということは、「入力した数値以外の文字 は数値ではありません」と返すのは無理ということなんでしょうか。
239デフォルトの名無しさん:2009/06/12(金) 00:39:06
>>235
>fprintf文で記述しファイルResult.datで確認せよ。

fprintf文で記述してファイルResult.datに書き込み、
テキストエディタなどで確認せよ

って事でいいのかね?
240デフォルトの名無しさん:2009/06/12(金) 01:22:43
>>238
プログラム中でその「入力した数値以外の文字列」が扱いたいなら、
char str[256]; とか用意して、
scanf("%d", &a) じゃなくて scanf("%s", str) とかで一旦文字列を保存しておく必要がある。
a = atoi(str); とか書けば a には str に入ってるはずの整数値を取り出せる。

トリッキーになるが、scanf に失敗したってことは入力バッファにまだ残ってるから、
数値ではないと判断できた時点で scanf("%s", str) なりして表示することもできる。
241前スレ952:2009/06/12(金) 02:04:02
前スレ>542
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9440.zip
ポリゴンの透視変換、画像出力とかCSGモデルの描画とかの奴

…C言語縛りが思ったよりきつかった…
一応出来たが、力尽きたスマン
後、モデルは座標の計算方法の精度のせいか隙間が出来てる、これもスマン

課題2と課題3はクリアーしてると思うので、
課題1は自分でピクセル情報をかぶせてくれ、それか誰か改造してあげて < ALL

242デフォルトの名無しさん:2009/06/12(金) 02:29:00
>>241
お疲れ
243 ◆p3KE2pR6J6 :2009/06/12(金) 07:49:43
>>241
すごいです、本当に助かります。ありがとうございました!
244デフォルトの名無しさん:2009/06/12(金) 09:31:18
[1] 授業単元:
[2] 問題文(含コード&リンク):
There is a client that constantly receives random number between 1 - 2,000,000.
Under 2 MB of Memory usage, on demand, return the top 10 numbers that was generated the most.
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: どちらでも可
[4] 期限: 無期限
[5] その他の制限:

アルゴリズムの方に投稿するかこちらに投稿するかで迷ったのですが問題に対する解答を得ると言う形式を取っていたこちらに投稿させていただきました。
同僚の就職面接時に出題された問題だそうです。

8byte使って生成された数字とその回数をメモリにセーブすると約250,000のユニークな数字が出た時点で破綻しますし。
(それまでは十分通用しますが)
ファイルにセーブすると言う案も出たのですがそれだと厳密には2MBのメモリしか使用しないと言う制限に反する気もします。
(まぁ問題文でファイルにセーブする事が制限されている訳では無いのですが)
245デフォルトの名無しさん:2009/06/12(金) 09:50:34
>>244
同一の数値が生成される回数の上限が255以下(もしくは11番目の回数が255回未満)なら可能
回数上限が2048以下なら500,000種の数字まで可能(数値21bit 回数11bit)

特に制限が無ければファイルに書き出すしか無いんじゃないかと
246デフォルトの名無しさん:2009/06/12(金) 10:23:19
8byteではない、8bit。ここ重要、試験に出る。
2Mbyte > 2,097Kbyte > 2,000,000byte
2550+254回までならTOP10 OK.なので回る回数は2804回。
250,000 が何処から出たのか不明。・・・答えになってるか?
247デフォルトの名無しさん:2009/06/12(金) 10:31:07
>>244 11番目が255回未満である限り正しく動作する版 (同一回数に対する優先順位が無ければ)
#include<stdio.h>
#include<stdlib.h>
#define CLIP_INC(num, maximum) ((num)>=(maximum)?(maximum):(num)+1)
typedef struct tag_num_cnt_t{
int num, count;
}num_cnt_t;
int cmp(const void *pa, const void *pb){
const num_cnt_t *a=pa, *b=pb;
if(a->count>b->count) return -1;
return (a->count<b->count);
}
void get_top10(num_cnt_t top10[10], const unsigned char count[]){
int i;
for(i=1;i<=10;i++) top10[i-1].count=count[i], top10[i-1].num=i;
for(;i<=2000000;i++){
if(top10[10-1].count<count[i]){
top10[10-1].count=count[i], top10[10-1].num=i;
qsort(top10, 10, sizeof(top10[0]), cmp);
}
}
}
int main(void){
static unsigned char count[2000000+1];
int i, num;
num_cnt_t top10[10];
while(scanf("%d", &num)==1) count[num]=CLIP_INC(count[num], 255);
get_top10(top10, count);
for(i=0;i<10;i++)
if(top10[i].count) printf("%d %d\n", top10[i].num, top10[i].count);
return 0;
}
248デフォルトの名無しさん:2009/06/12(金) 11:26:30
W
249デフォルトの名無しさん:2009/06/12(金) 12:34:52
根本的なことなんですが、newで派生クラスのインスタンスを基礎クラスにキャストしてdeleteてできました??
環境が無いので試せない・・・

class Base {
int nBase;
}

class Hoge : Base {
int nHoge;
}

main() {
Hoge* pHoge= new Hoge;

Base* pBase = (Base*)pHoge;

delete pBase; //<--これって問題?
}
250246:2009/06/12(金) 14:07:37
>>244 255回は、約5分の1の55回に短くしてちょうどいい時間。
#include <stdio.h>
#define MAX_RAND 2000000
int main() {
  int num, i, j;
  unsigned char count[MAX_RAND+1];

  while(1){j=0;
    for(i=0;i<MAX_RAND;i++) count[i] = 0;
    while(j<10) { // TOP 10
      num = rand()%MAX_RAND+1;
      if(count[num] < 254) // 54
        count[num]++;
      else if(count[num]++ <255) // 55
        printf("%7d ", (++j, num));
    }
    fflush(stdout);
  }
}
251デフォルトの名無しさん:2009/06/12(金) 15:27:10
>>247 修正
void get_top10(num_cnt_t top10[10], const unsigned char count[]){
int i;
for(i=1;i<=10;i++) top10[i-1].count=count[i], top10[i-1].num=i;
qsort(top10, 10, sizeof(top10[0]), cmp); // この行を追加
for(;i<=2000000;i++){
if(top10[10-1].count<count[i]){
top10[10-1].count=count[i], top10[10-1].num=i;
qsort(top10, 10, sizeof(top10[0]), cmp);
}
}
}
252197:2009/06/12(金) 18:14:44
>>200
>>164と同じ方ですか?
有難うございます
253デフォルトの名無しさん:2009/06/12(金) 18:22:02
>>249
可能。さらに、
Base* pBase = (Base*)pHoge;

Base* pBase = pHoge;
で、OK。
どうしても明示キャストしたいなら、dynamic_castを使うべきだし。
254デフォルトの名無しさん:2009/06/12(金) 18:44:59
少しWindowsAPI入るんですが質問です。

初めにコードを載せます。

TCHAR a[] = TEXT("Hello");
string str = a;

マルチバイトとユニコード両方に対応できるようにしたいのですが
上のコードはユニコードの時にワイド文字となってコンパイラに
はじかれてしまいます。

マルチバイトに変換すればいいのですがマルチバイトに設定した時に
今度は変換する過程でエラーが出ると思うので、
TCHARがワイド文字かマルチバイト文字か知る必要があります。

どのようにコードを書けばいいのですか
255デフォルトの名無しさん:2009/06/12(金) 18:56:58
>>254
プリプロセッサの制御でユニコード定義がある時と無い時用のコードをかけばいいと思う
256デフォルトの名無しさん:2009/06/12(金) 19:06:20
>>249
きちんと設計されたクラス階層においては、派生クラスのオブジェクトを指している基底クラスのポインタ型をdeleteしても問題ない。
ただし249のコードの場合はBaseのデストラクタが仮想デストラクタとして定義されていないので問題。
(現状はintなので問題ないが将来的に問題になりうる)

あとこれは単純ミスだろうが、アクセス指定子のない継承はclassの場合はprivate継承な。
257254:2009/06/12(金) 19:06:45
考えたら単純な事に気づきました。
sizeof(TCHAR)を調べればいいだけでした。


>>255
解答ありがとうございます。面倒くさがりなので一つのコードで済ませたかったのです。
258デフォルトの名無しさん:2009/06/12(金) 20:15:43
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9442.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月17日 17:00
[5] その他の制限:
259デフォルトの名無しさん:2009/06/12(金) 20:56:10
>>258
課題1(構造体は問題文通り宣言して)

#include <stdio.h>
int main(void){
double in;

printf("input (yen):");
scanf("%lf",&in);
printf("%.0f yen = %.4f dollar = %.4f EURO\n",in,yen.to_dollar*in,yen.to_euro*in);

return 0;
}
260デフォルトの名無しさん:2009/06/12(金) 20:59:57
>>258
課題2(構造体は問題文通り宣言して)

#include <stdio.h>
int main(void){
char sentaku;
int i;

printf("input e or f:");
scanf("%c",&sentaku);

if(sentaku == 'e') for(i=0;i<COUNTRIES;i++) printf("%s\n",country[i].en);
else if (sentaku == 'f') for(i=0;i<COUNTRIES;i++) printf("%s\n",country[i].fr);
else printf("error!\n");

return 0;
}
261デフォルトの名無しさん:2009/06/12(金) 21:29:12
>>259>>260

ありがとうございました!
262デフォルトの名無しさん:2009/06/12(金) 21:53:05
263デフォルトの名無しさん:2009/06/12(金) 22:36:27
>>262

ありがとうございました!
264デフォルトの名無しさん:2009/06/13(土) 01:42:09
まずは回答してくださった皆さんに感謝を。

>> 245
2つも32 bit int使う必要は無かったですね。
最大値は決まっているんだから残りのbitに回数を詰め込めば良いというのは失念していました。
やはり500,000種以上になった場合ファイルしか無いですかね。

>> 246
8byteは32bit int x 2です。
回数保持用に一つ 32 bitと2000000まで入る数値用に一つ 32 bit。
まぁ上記の通り4byteで収める事も出来るのですが。
8byte使って今まで出てきた番号をセーブする場合262144種セーブ出来ることになります。
(2097152 byte / 8 byte/種 = 262144種)
凡そで計算したときに250000種と出したのはその所為です

>> 247
確かにunsigned charならば全種保存は出来ますが回数保存が最大255までしか出来ないのが困りものですね。
ファイルに保存をしないとなると何かしらのリミットが付いてしまうのは仕方が無い事なのかもしれません。
265デフォルトの名無しさん:2009/06/13(土) 02:43:48
平均と標準偏差を求める関数を作ったんですが、標準偏差のほうが変なんです。
どこが間違っているのか、ご指摘願います。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9444.c

266デフォルトの名無しさん:2009/06/13(土) 02:47:51
>>265
すみません、自己解決です。
267デフォルトの名無しさん:2009/06/13(土) 10:18:02
>>165
ツェラーの公式は使わず、フリーゲルの公式の変形を使って

#include<stdio.h>
int f(int y,int m,int d){
m+=m<3?y--,13:1;
return y*365+y/4-y/100+y/400+m*153/5+d+5;
}
int main(){
int y,m,d;
for(;;){
printf("年月を入力:");scanf("%d %d",&y,&m);
if(y*100+m<175211 || y>9999 || m<1 || m>12)continue;
puts("月 火 水 木 金 土 日");
for(d=1-f(y,m,1)%7;d<1;d++)printf("%02d ",d+f(y,m,1)-f(y,m-1,1));
for(d=1;d<=f(y,m+1,1)-f(y,m,1);d++){printf("%02d ",d);if(f(y,m,d)%7>5)puts("");}
for(d=1;d<8-f(y,m+1,1)%7;d++)printf("%02d ",d);
puts("");
}
return 0;
}
268デフォルトの名無しさん:2009/06/13(土) 11:32:46
>>264
>まずは回答してくださった皆さんに感謝を。
結論は?というか、まずはの次は?
269デフォルトの名無しさん:2009/06/13(土) 12:28:10
>>237 >>239

ありがとうございます!助かりました!
270デフォルトの名無しさん:2009/06/13(土) 13:06:30
[1] 授業単元:実習
[2] 問題文:ユーザーが月を指定してその月のカレンダーを表示するプログラム
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:ボーランド
 [3.3] 言語:C
[4]期限:明日まで
271デフォルトの名無しさん:2009/06/13(土) 13:07:55
>>270
あきらめてください
272デフォルトの名無しさん:2009/06/13(土) 13:47:52
>>270
年も指定しないと無理
273デフォルトの名無しさん:2009/06/13(土) 13:49:44
すいません2009年です
274デフォルトの名無しさん:2009/06/13(土) 13:59:47
単純に作ってて面白くなさそうなプログラムだな
275デフォルトの名無しさん:2009/06/13(土) 14:04:22
>>270
直近100レス以内に回答がある
276デフォルトの名無しさん:2009/06/13(土) 14:34:07
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9445.txt
               ほとんど英文です。訳そうとしたんですが自分でも意味がわからなくなったんでそのままにしました。すいません。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月17日 17:00
[5] その他の制限:
277デフォルトの名無しさん:2009/06/13(土) 14:45:39
難しくはないけどだるいなw
278デフォルトの名無しさん:2009/06/13(土) 14:48:20
>>244 英語→日本語にしてみた。
[1] 授業単元: 情報と通信
[2] 問題文(含コード&リンク):
1から2,000,000までのランダムな数を常時受信するクライアントが有る。rand()関数と、2MBまでの
メモリを使って、必要な時に、直前までに最も多く生成されたトップ10個の数を表示する関数を作れ。
[3] 環境
 [3.1] OS: (Windows GUI)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: STL使用不可
[4] 期限: 無期限
[5] その他の制限: ファイルなど外部記憶は使用不可
279デフォルトの名無しさん:2009/06/13(土) 14:51:43
[1]C言語初級
[2]
f(1)=1
f(11)=1^1+1^1
f(21)=2^2+1^1=5
f(321)=3^3+2^2+1^1=32
f(4321)=4^4+3^3+2^2+1^1
f(1234)=1^1+2^2+3^3+4^4
....
とする
f(x)=xとなる値をすべて求めよ
[3]linux/gcc/C
制限:malloc等外部メモリ、配列を使わないで、1分以内に回答が
3つ以上得られれば、成績は優がつきます。
[4]月曜日正午迄
280デフォルトの名無しさん:2009/06/13(土) 14:57:22
f(1234)=1^1+2^2+3^3+4^4 でなく
f(1234)=1^4+2^3+3^2+4^1 の希ガス。
281デフォルトの名無しさん:2009/06/13(土) 14:59:37
>>280
元の出題者?
282デフォルトの名無しさん:2009/06/13(土) 15:02:35
いや、●^●+
283デフォルトの名無しさん:2009/06/13(土) 15:19:41
>>279
やってみたけど2つなら余裕だけど3つは難しいね
284デフォルトの名無しさん:2009/06/13(土) 15:27:21
[1] 授業単元: C言語
[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9446.txt
 [3.1] OS Windows
 [3.2] VisualC++
 [3.3] 言語 C
[4] 期限: 6月15日hh:mmまで]
[5] 最後の出力するところで正しい型で出力させる方法がわかりません。 
たぶんポインタの形を間違っていると思います。
Use int (i) or float (f) or char(c) or long(l) "の部分はどの型を入力するか選ぶ部分
例 i 123 の順番で入力したら
Printing int 123
Printing data at location(入力した123のあるアドレス)
Data as char :
Data as int : 123
Data as long : 8069185
Data as  float : 0.00
と表示されればよい
285デフォルトの名無しさん:2009/06/13(土) 15:42:19
>>280
バカだろw
11が1^1+1^1の時点で桁関係ないしw
286デフォルトの名無しさん:2009/06/13(土) 15:45:59
287デフォルトの名無しさん:2009/06/13(土) 16:07:22
>>286

ありがとうございました!

288デフォルトの名無しさん:2009/06/13(土) 16:17:43
>>279
0^0 を 0 としない限り3つ目の解なんて無いようだ
289デフォルトの名無しさん:2009/06/13(土) 19:10:42
>>279 60秒のHzは?
290デフォルトの名無しさん:2009/06/13(土) 19:15:57
配列禁止だからchar配列も使えないんですよ^^
なのでlong intの限界まで計算した結果では
答えは1と3435なわけでして、三つ目の答えはありませんでした。
long int 以上の値が使える機構を組む必要があり、
ちょいとおまんこ。
291デフォルトの名無しさん:2009/06/13(土) 19:26:47
>>290
3435は
f(x)=x
に当てはまる?
292デフォルトの名無しさん:2009/06/13(土) 19:28:43
>>290
理論上 unsigned long の範囲でおk

なぜなら n>11 であるとき
(9^9)*n < 10^n
だから
293デフォルトの名無しさん:2009/06/13(土) 19:58:30
>>279の問題を2時間位ひたすら計算させてるがおわらね〜。32ビットMAXまで計算中。
見つけたのは3個でカウントしていいんかなぁ。。。

CPUはいんてる、こんろ〜のせれろん2G。

Find!! -> 0 at 0clock
Find!! -> 1 at 0clock
Find!! -> 3435 at 50clock

って書いてたらこんなの見つけてきた。後で検算してみる。
Find!! -> 438579088 at 9007516clock

プログラムが間違ってませんように!
294デフォルトの名無しさん:2009/06/13(土) 20:04:42
unsigned int で計算終わっていいと思う。
 理由をぐだぐだ↓
nがx以上の時、常に n > f(n) であることを示せばよい。
n=999,999,999 の時、f(n) = 387420489 * 9 = 3,486,784,401
n=3,999,999,999 の時、f(n) = 387420489 * 9 + 27
n=4,294,967,295 の時、n=0xFFFF,FFFF
n=9,999,999,999 の時、f(n) = 387420489 * 10 = 3,874,204,890
295デフォルトの名無しさん:2009/06/13(土) 20:13:21
あらかじめpow(0,0) 〜 pow(9,9)の1の位だけ計算しておいて、
1の位だけの足し算の結果がxの一の位と等しいときにのみ
まともな計算に入るようにするだけでもだいぶ高速化する。

高速化するが1秒いないとか_w
どこかの桁に9が存在するときは
全体が9桁以上ないとだめとか、
そういう分岐をしても1秒以内は_。

多分、こーそくふーりえへんかんみたいな
文系のあっぱらぱーな自分には理解不能な最適化がどこかに潜んでいる気がする
296デフォルトの名無しさん:2009/06/13(土) 20:32:30
>>279
0^0 を 1 とするか 0 とするか、はたまた無効とするかそれが問題だ
#include<stdio.h>
#include<time.h>

unsigned long f(unsigned long x){
unsigned long ret=0;
do{
switch(x%10){
case 0: ret+=0; break; // 0 の 0 乗はいくつ?
case 1: ret+=1; break;
case 2: ret+=2*2; break;
case 3: ret+=3*3*3; break;
case 4: ret+=4*4*4*4; break;
case 5: ret+=5*5*5*5*5; break;
case 6: ret+=6*6*6*6*6*6; break;
case 7: ret+=7*7*7*7*7*7*7; break;
case 8: ret+=8*8*8*8*8*8*8*8; break;
case 9: ret+=9*9*9*9*9*9*9*9*9; break; // このへんはコンパイル時に予め計算されるはず
}
}while((x/=10)>0);
return ret;
}
int main(void){
unsigned long i;
clock_t s=clock();
for(i=0;i<=3874204890;i++){
if(i%1000000==0) fprintf(stderr, " %lu \r", i);
if(i==f(i)) printf("f(%lu)=%lu %.2f[sec]\n", i, i, (double)(clock()-s)/CLOCKS_PER_SEC);
}
return 0;
}
297293:2009/06/13(土) 21:01:13
やっべー。MS電卓で0の0乗計算したら1だったよ。
今色々藻屑に消えた。Orz

数学的に詳しい人ヘルプ!
298デフォルトの名無しさん:2009/06/13(土) 21:06:32
>>297
数学では例外を認めない方が美しいのでそう定義されてるだけの事だよ
299デフォルトの名無しさん:2009/06/13(土) 21:07:21
http://ja.wikipedia.org/wiki/0%E3%81%AE0%E4%B9%97
プログラミング言語における扱い
いくつかのプログラミング言語は 0^0 を定義しており、その多くは 1 としている。
1 と定義しているものは、Java、Python、Ruby、Haskell、ML、Scheme、MATLAB、Microsoft Windows の電卓、Google の電卓機能[3]などである。
300デフォルトの名無しさん:2009/06/13(土) 21:08:13
0の0乗(0の0じょう)とは何か、ということはしばしば初学者の議論となるところであるが、
これはただ数学用語を組み合わせただけの言葉であって、特別な意味は持たない。
すなわち、標準的な教科書においては0の0乗は定義されない。
301デフォルトの名無しさん:2009/06/13(土) 21:11:08
lim x^x=1 (x->+0)
なんで0^0=1とかんがえるのが自然だが、この問題の場合
各桁で0でないもののその数字乗の和だとしないと解が3つ以上無い感じ。
302デフォルトの名無しさん:2009/06/13(土) 21:13:33
>>284
#include <stdio.h>
#include <string.h>

#define INPUT_TYPE_SYMBOL_LIST "ifcl"

int main(void){
char input_type_symbol[2], *tmp=INPUT_TYPE_SYMBOL_LIST;
char *scan_fmt[]={"%d", "%f", "%c", "%ld"};
int input_type;
long data;
void *p=&data;

printf("Use int (i) or float (f) or char(c) or long(l) ");
if(scanf("%1[" INPUT_TYPE_SYMBOL_LIST "]", input_type_symbol)!=1) return 1;

input_type=strchr(tmp, input_type_symbol[0])-tmp;
if(scanf(scan_fmt[input_type], p)!=1) return 2;

printf("Printing data at location:%x\n", &data);
printf("Data as char : %c\n", *((char*)p));
printf("Data as int : %d\n", *((int*)p));
printf("Data as long : %ld\n", *((long*)p));
printf("Data as float : %f\n", *((float*)p));

return 0;
}
303293:2009/06/13(土) 21:31:07
>>298-301
情報サンクス。なるほど、数学者でも考えることなのね。
そんなもん趣味グラマにわかってたまるかぁ〜!!うわわわぁ〜ん。Orz

しかし、困ったなぁ。
Counter Is Now 679535690 Count! And Now 13541776 Clock!!
上記のように4時間位回してるのに、2割くらいしか終わってない。。。(VCのCLOCKS_PER_SECは常に1000だったと思う。)
うーん。一端打ち切るかなぁ。
一部に適応できる汚い最適化方法おもいだしたんだよねぇ。。。
304デフォルトの名無しさん:2009/06/13(土) 21:36:03
>>303
カウンタ表示の頻度を 1/10000 くらいにすれば劇的に高速化するよ
305293:2009/06/13(土) 21:50:52
>>304
なるほど。そこら辺もあるかな。
多分kbhit使ってるのが遅い原因かもしれん。
カウンタいじってみる〜。
306226 ◆TAPy3blMsc :2009/06/13(土) 22:07:54
>>226
どなたかお願いしますm(_ _)m
307デフォルトの名無しさん:2009/06/13(土) 22:17:43
>>226 = >>230 = >>306
ウイルス騒ぎが耐えないのにEXE叩けっていうの???
308デフォルトの名無しさん:2009/06/13(土) 22:25:27
>>306
サンプルは動かしたくはないな。

依頼はC++ってあるけど、
出力はprintfでいいの?
309293:2009/06/13(土) 22:30:18
Counter Is Now 860000000 Count! And Now 1813127 Clock!!
表示周り、汚い最適化、変更したら10倍になった。何やってたんだ俺。。。
参考数字だと、500万件を10秒くらいで処理してる。
N桁目の数字切り出しのいい方法がないもんかな。割り算が多すぎる。
310デフォルトの名無しさん:2009/06/13(土) 22:36:21
>>309
枝刈という意味では f(x) の各桁入れ替え版は常に同じ数値になるから
逆に各桁に使用する数値を決定した後で計算後の数値と一致させることが出来るかチェックすれば
計算量は減らせるかもしれない

が、配列を使っちゃダメだからやりたくはない
311293:2009/06/13(土) 22:41:14
>>310
それうまく計算すれば、10倍位になりそうだなぁ。
アイディアがちょっとおもいつかないけど。
下手なの作ったら、試算だけで資源食っちゃうし。。。

うん、俺もあんまりやりたくない。Orz
312 ◆Pk0FPDtefg :2009/06/13(土) 23:23:15
コードの質問ではないのですが
forkで生成した子プロセスは親プロセスが終了すれば自動的に終了しますか?
313デフォルトの名無しさん:2009/06/13(土) 23:35:16
>>279 o^o+
#include <stdio.h>
#include <time.h>
#define power(i) (i-1?(i-2?(i-3?(i-4?(i-5?(i-6?(i-7?(i-8?(i-9?0:387420489):16777216):823543):46656):3125):256):27):4):1)
int main() {
unsigned int a, b, c, d, e, f, g, h, j;
unsigned int i, p;
clock_t s = clock();
for(i = 1; i <= 0xFFFFFFFF; i++) { /* 0xFFFF,FFFF = 4,294,967,295 */
// if(i>999,999,999) else /* 438,579,088 以下でよい */
if(i>99999999) { a=i%10, b=i/10%10, c=i/100%10, d=i/1000%10, e=i/10000%10, f=i/100000%10, g=i/1000000%10, h=i/10000000%10, j=i/100000000;
p = power(j) + power(h) + power(g) + power(f) + power(e) + power(d) + power(c) + power(b) + power(a);
} else if(i>9999999) { a=i%10, b=i/10%10, c=i/100%10, d=i/1000%10, e=i/10000%10, f=i/100000%10, g=i/1000000%10, h=i/10000000;
p = power(h) + power(g) + power(f) + power(e) + power(d) + power(c) + power(b) + power(a);
} else if(i>999999) { a=i%10, b=i/10%10, c=i/100%10, d=i/1000%10, e=i/10000%10, f=i/100000%10, g=i/1000000;
p = power(g) + power(f) + power(e) + power(d) + power(c) + power(b) + power(a);
} else if(i>99999) { a=i%10, b=i/10%10, c=i/100%10, d=i/1000%10, e=i/10000%10, f=i/100000;
p = power(f) + power(e) + power(d) + power(c) + power(b) + power(a);
} else if(i>9999) { a=i%10, b=i/10%10, c=i/100%10, d=i/1000%10, e=i/10000;
p = power(e) + power(d) + power(c) + power(b) + power(a);
} else if(i>999) { a=i%10, b=i/10%10, c=i/100%10, d=i/1000;
p = power(d) + power(c) + power(b) + power(a);
} else if(i>99) { a=i%10, b=i/10%10, c=i/100;
p = power(c) + power(b) + power(a);
} else if(i>9) { a=i%10, b=i/10;
p = power(b) + power(a);
} else
p = power(i);
if(i == p) printf("%u %d[msec]\n", i, clock() - s);
}}
314デフォルトの名無しさん:2009/06/13(土) 23:35:45
>>312
しないでしょう。やっぱり。ターミナルベースで動かしたとき
ターミナル終了時点でターミナル起動プロセスが終了するのは
意図的にそうしているからで、システムコールレベルで自動的に
そのようになっているとは思えません。

>>279の問題だが、とある初等的方法を使えば
400MHzPCで30秒以内に取りあえず3つ解が求まった。
sol=1(1)
sol=438579088(759973041)
sol=438579088(8084109681)
sol=438579088(9377549001)
sol=438579088(7756231121)
sol=438579088(2127517361)
sol=438579088(7773923401)
sol=3435(2244532161)
↑スクリーンショット
但しすべての解を尽くしていることは検証してないが、>>279
制限条件では無意味に近いのでは?
315デフォルトの名無しさん:2009/06/13(土) 23:48:38
まず問題に解がどの程度あり得るかをざっと見積もる
その後、しらみつぶしな検証アルゴリズムを作る

こういう問題の解決の仕方がどちらかと言えば正しく
問題の質の見積もりをせずにいきなりコードを書いて
実行する(させる)ことを習慣にするのは好ましいこと
ではないと思う。
316293:2009/06/13(土) 23:53:14
>>279
とりあえず、今日の営業は終了!と。
一応、半分くらいまでは計算してみたが解なし。
>>314すげーと思う。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9448.zip

そうそう、動作は保障しない。
317デフォルトの名無しさん:2009/06/14(日) 00:07:05
>>315
水も漏らさぬ堅牢な構造物を作る為の言語コミュニティ
に向いている問題じゃないね。
318デフォルトの名無しさん:2009/06/14(日) 00:14:04
配列を使えば1秒足らずでおk
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int arr[10]={0,1,2*2,3*3*3,4*4*4*4,5*5*5*5*5,6*6*6*6*6*6,7*7*7*7*7*7*7,8*8*8*8*8*8*8*8,9*9*9*9*9*9*9*9*9}, sumnum[11];
int cmp(const int *a, const int *b){
return (*a>*b)?-1:(*a<*b);
}
void sum2num(unsigned long sum){
int i;
for(i=0;i<11;i++,sum/=10) sumnum[i]=sum%10;
qsort(sumnum, 11, sizeof(int), cmp);
}
void solve(int *num, int depth){
int i;
unsigned long sum=0;
if(depth>=11){
for(i=0;i<11;i++) sum+=arr[num[i]];
sum2num(sum);
if(memcmp(num, sumnum, sizeof(sumnum))==0) printf("%lu\n", sum);
return;
}
for(i=num[depth-1];i>=0;i--){
num[depth]=i;
solve(num, depth+1);
}
}
int main(void){
int num[12]={9};
solve(num+1, 0);
return 0;
}
319デフォルトの名無しさん:2009/06/14(日) 00:24:35
>>318
うは、バグってたwww
320デフォルトの名無しさん:2009/06/14(日) 00:52:13
ULONG_MAX 4294967295で、
0
1
3435
438579088
の4つだった。
321デフォルトの名無しさん:2009/06/14(日) 01:03:04
>>318
すばらしい。あまりの速さに興奮した。
322デフォルトの名無しさん:2009/06/14(日) 01:08:33
配列の使用禁止という制約が曖昧な気がする

もっと厳密に変数の利用(メモリの確保)について言及してくれないと
トークン結合とか使えば #define なり n1, n2, n3 とかの変数で配列の代替ができるので
>>279 の条件をもっと厳密に確認する必要がある
323デフォルトの名無しさん:2009/06/14(日) 01:25:14
>>318 の少しだけ汎用版 arr[0]==1 のときでも正常に動作するように変更
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int arr[10]={1,1,2*2,3*3*3,4*4*4*4,5*5*5*5*5,6*6*6*6*6*6,7*7*7*7*7*7*7,8*8*8*8*8*8*8*8,9*9*9*9*9*9*9*9*9};
int cmp(const int *a, const int *b){
return (*a>*b)?-1:(*a<*b);
}
int sum_num_equal(unsigned long sum, int num[]){
int i, sumnum[]={0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
for(i=0;i<11 && sum;i++,sum/=10) sumnum[i]=sum%10;
qsort(sumnum, 11, sizeof(int), cmp);
return memcmp(num, sumnum, sizeof(sumnum))==0;
}
void solve(int *num, int depth){
int i;
unsigned long sum=0;
if(depth>=11){
for(i=0;i<11 && num[i]>=0;i++) sum+=arr[num[i]];
if(sum_num_equal(sum, num)) printf("%lu\n", sum);
return;
}
for(i=num[depth-1];i>=-1;i--){
num[depth]=i;
solve(num, depth+1);
}
}
int main(void){
int num[12]={9};
solve(num+1, 0);
return 0;
}
324デフォルトの名無しさん:2009/06/14(日) 02:39:17
[1] 授業単元: プログラミング
[2] 問題文
問5.1に示す表を表示するプログラムを作成せよ。
ただし氏名はポインタ配列を用いて参照するようにし、年齢、初任給は配列に入れる。

氏名は次のようにポインタ配列に初期値として入れる。
char *namae[]={"高専 卒男","大学 学男","大学 修治"};

年齢、初任給は二次元配列salary[3][2]を宣言してそこに読み込む。方法としては次の2通りがある。
(1)キーボードから読み込む
(2)配列の初期設定で行う
Salary[][2]={{20,215000},
{22,235000},
{24,255000}};

表はこれです
http://a.pic.to/11fgne

[3.1] OS Windows
[3.2]VisualC++
[3.3] 言語 C++
[4] 期限:6月15日

説明がわかりにくいかもしれませんが、どうかお願いします

表の写真は見えるでしょうか?
325デフォルトの名無しさん:2009/06/14(日) 04:10:28
>>279 o^o+ >>318参考にしました
#include <stdio.h>
#include <time.h>
#define power(i) (i-1?(i-2?(i-3?(i-4?(i-5?(i-6?(i-7?(i-8?(i-9?0:387420489):16777216):823543):46656):3125):256):27):4):1)
int cmp(const char *a, const char *b){
  return (*a<*b)?-1:(*a>*b);
}
int main() {
  struct { char num1, num2, num3, num4, num5, num6, num7, num8, num9, num10, num11; } sumnum;
  unsigned int a, b, c, d, e, f, g, h, j, k;
  unsigned int sum, sumsort, p; /* 0xFFFF,FFFF = 4,294,967,295 */
  clock_t s = clock();

  sumnum.num11 = '\0';
  for(a = 0; a <= 4; a++) { // 1
  for(b = a; b <= 9; b++) { // 2
  for(c = b; c <= 9; c++) { // 3
  for(d = c; d <= 9; d++) { // 4
  for(e = d; e <= 9; e++) { // 5
  for(f = e; f <= 9; f++) { // 6
  for(g = f; g <= 9; g++) { // 7
  for(h = g; h <= 9; h++) { // 8
  for(j = h; j <= 9; j++) { // 9
  for(k = j; k <= 9; k++) { // 10
    sum = power(j) + power(h) + power(g) + power(f) + power(e) + power(d) + power(c) + power(b) + power(a);
    p = k+j*10+h*100+g*1000+f*10000+e*100000+d*1000000+c*10000000+b*100000000+a*1000000000;
    sprintf((char*)&sumnum, "%010d", sum);
    qsort(&sumnum, 10, sizeof(char), (void*)cmp);
    sscanf((char*)&sumnum, "%u", &sumsort);
    if( sumsort == p) printf("%u %d[msec]\n", sum, clock() - s);
  }}}}}}}}}}
}
326325 修正:2009/06/14(日) 04:57:48
#include <stdio.h>
#include <time.h>
#define power(i) (i-1?(i-2?(i-3?(i-4?(i-5?(i-6?(i-7?(i-8?(i-9?0:387420489):16777216):823543):46656):3125):256):27):4):1)
int cmp(const char *a, const char *b){
  return (*a<*b)?-1:(*a>*b);
}
int main() {
  struct { char num1, num2, num3, num4, num5, num6, num7, num8, num9, num10, num11; } sumnum;
  unsigned int a, b, c, d, e, f, g, h, j, k;
  unsigned int sum, sumsort, p; /* 0xFFFF,FFFF = 4,294,967,295 */
  clock_t s = clock();

  sumnum.num11 = '\0';
  for(a = 0; a <= 4; a++) { // 1
  for(b = a; b <= 9; b++) { // 2
  for(c = b; c <= 9; c++) { // 3
  for(d = c; d <= 9; d++) { // 4
  for(e = d; e <= 9; e++) { // 5
  for(f = e; f <= 9; f++) { // 6
  for(g = f; g <= 9; g++) { // 7
  for(h = g; h <= 9; h++) { // 8
  for(j = h; j <= 9; j++) { // 9
  for(k = j; k <= 9; k++) { // 10
    sum = power(k) + power(j) + power(h) + power(g) + power(f) + power(e) + power(d) + power(c) + power(b) + power(a);
    p = k+j*10+h*100+g*1000+f*10000+e*100000+d*1000000+c*10000000+b*100000000+a*1000000000;
    sprintf((char*)&sumnum, "%010u", sum);
    qsort(&sumnum, 10, sizeof(char), (void*)cmp);
    sscanf((char*)&sumnum, "%u", &sumsort);
    if( sumsort == p) printf("%u %d[msec]\n", sum, clock() - s);
  }}}}}}}}}}
}
327デフォルトの名無しさん:2009/06/14(日) 09:18:10
>>326
おそロシア。これは凄く速いな
328デフォルトの名無しさん:2009/06/14(日) 10:13:52
これで>>279は学校で人気者だろw
1分どころか1秒いないに回答4つでてるし。
329デフォルトの名無しさん:2009/06/14(日) 10:22:23
配列を使わないという制限がある件について
330デフォルトの名無しさん:2009/06/14(日) 13:19:21
[1] 授業単元:C演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9449.txt
[3] 環境
 [3.1] OS: Windows XP

 [3.3] 言語: C言語
[4] 期限:6月15日15時まで
[5]制限:配列を使用
  配列まで授業で習いました、お願いします
331デフォルトの名無しさん:2009/06/14(日) 14:19:02
>>330
課題1

#include <stdio.h>

int calc_max(int a[],int num){
int i,max = a[0];

for(i=1;i<num;i++){
if(max < a[i]) max = a[i];
}

return max;
}


int main(void){
int data[256];
int i,n;

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

for(i=0;i<n;i++){
scanf("%d",&data[i]);
}

printf("max: %d\n",calc_max(data,n));

return 0;
}
332デフォルトの名無しさん:2009/06/14(日) 14:23:51
>>279 o^o+
修正がある。3,999,999,999の次は4,444,444,444なのでULONGを超えるため。
>>325 for(a = 0; a <= 3; a++) { // 1 (4->3)

>>226 の実効結果(問題)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9450.txt
333デフォルトの名無しさん:2009/06/14(日) 14:26:14
>>330
課題2

#include <stdio.h>

int main(void){
int a[2][3],b[2][3];
int i,j;

for(i=0;i<2;i++) for(j=0;j<3;j++){
printf("a[%d][%d] = ",i,j);
scanf("%d",&a[i][j]);
}
for(i=0;i<2;i++) for(j=0;j<3;j++){
printf("b[%d][%d] = ",i,j);
scanf("%d",&b[i][j]);
}

printf("\na + b:\n");
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("%d ",a[i][j] + b[i][j]);
}
printf("\n");
}

return 0;
}
334デフォルトの名無しさん:2009/06/14(日) 14:28:58
>>330
課題3

#include <stdio.h>

int main(void){
int a[2][3];
int i,j;

for(i=0;i<2;i++) for(j=0;j<3;j++){
printf("a[%d][%d] = ",i,j);
scanf("%d",&a[i][j]);
}

printf("\naT:\n");

for(j=0;j<3;j++){
for(i=0;i<2;i++){
printf("%d ",a[i][j]);
}
printf("\n");
}

return 0;
}
335>>324:2009/06/14(日) 15:17:50
助けてください
問題の書き方が駄目でしょうか?
336デフォルトの名無しさん:2009/06/14(日) 15:27:05
>>335
表の写真の通りに画面表示するのは難しいだろうな。
きっとそこまで要求してないと思うが?
337デフォルトの名無しさん:2009/06/14(日) 15:29:40
>>324 iomanip については使い方を知らないので他の人に頼む
#include<iostream>
//#include<cstdio>

int main(void){
char *namae[]={"高専 卒男","大学 学男","大学 修治"};
int Salary[][2]={{20,215000},
{22,235000},
{24,255000}};

for(int i=0;i<3;++i){
std::cout << namae[i] << " " << Salary[i][0] << " " << Salary[i][1] << std::endl;
// printf("%s %d %d\n", namae[i], Salary[i][0], Salary[i][1]);
}

return 0;
}
338112:2009/06/14(日) 16:00:08
>>142

ありがとうございます。

ただ課題2がそれだと子プロセスを無限に生成して実行例通りにうまくいきませんでした。

自分で出来る限りやってみたんですがうまくいかなかったのでどなたかもう一度課題2をお願いします。
339112:2009/06/14(日) 16:00:21
>>142

ありがとうございます。

ただ課題2がそれだと子プロセスを無限に生成して実行例通りにうまくいきませんでした。

自分で出来る限りやってみたんですがうまくいかなかったのでどなたかもう一度課題2をお願いします。
340デフォルトの名無しさん:2009/06/14(日) 16:00:23
X.Org Wiki を見ていたところ、コードのアップロードに
便利そうなサイトを見つけたんだが、使ってみないか?

ttp://pastebin.com/

現行では、直接書き込むかアップロードするかなんだが、
自動で色をつけてくれて見やすいなど、結構使い勝手がいいです


ttp://pastebin.com/pastebin.php?help=1 によると

○ And this is all free?
It will always be free, our hosting and maintenance costs are paid for through advertising.
(広告費で費用をまかなってるからいつもフリーだよ)

○ Can I get the source?
The source code to this site is available under a GPL licence. You can download it here
(ライセンスは GPL なので、このサイト自身のソースもダウンロードできるよ)

みたいな感じで、日本語が使えないことを除けば、問題はなさそうだし
#誰か日本語対応バージョン書いてほすぃ
341デフォルトの名無しさん:2009/06/14(日) 16:04:17
怪しげなサイト。2ch並かそれ以上。
342デフォルトの名無しさん:2009/06/14(日) 17:35:41
名前  値段  産地
りんご 100円 青森県
みかん  60円 和歌山県
ぶどう 150円 山梨県

みたいな感じのテキストファイルがあるんですけど、
これをfscanfで1行ずつ読み取って値段の合計を表示するプログラムを作るにはどうすればいいんですか?
343デフォルトの名無しさん:2009/06/14(日) 17:38:17
EXCELに読み込んでΣって書いてあるボタンをぽちっ^^
344デフォルトの名無しさん:2009/06/14(日) 17:45:56
>>342
>>1 を読んで質問テンプレ書いてちょ
345マロクソース食らえ:2009/06/14(日) 17:51:36
>>279
#include <stdio.h>
unsigned int mtable[]={0,1,2*2,3*3*3,
4*4*4*4,5*5*5*5*5,6*6*6*6*6*6,7*7*7*7*7*7*7,8*8*8*8*8*8*8*8,
9*9*9*9*9*9*9*9*9};
unsigned int ff(int *a){
int i,j;unsigned int result=0;
for(i=1;i<=9;i++)result+=mtable[i]*a[i];return result;
}
int *f(int *a){
unsigned int r;static int x[10],*res=&(x[0]);int i;
r=ff(a);for(i=0;i<10;i++)x[i]=0;
while(r){x[r %10]++;r/=10;}return res;
}
int main(void){
int a[10],*cal,m,i;
for(m=1;m<=10;m++)
for(a[9]=m;a[9]>=0;a[9]--)for(a[8]=m-a[9];a[8]>=0;a[8]--)
for(a[7]=m-a[9]-a[8];a[7]>=0;a[7]--)for(a[6]=m-a[9]-a[8]-a[7];a[6]>=0;a[6]--)
for(a[5]=m-a[9]-a[8]-a[7]-a[6];a[5]>=0;a[5]--)for(a[4]=m-a[9]-a[8]-a[7]-a[6]-a[5];a[4]>=0;a[4]--)
for(a[3]=m-a[9]-a[8]-a[7]-a[6]-a[5]-a[4];a[3]>=0;a[3]--)
for(a[2]=m-a[9]-a[8]-a[7]-a[6]-a[5]-a[4]-a[3];a[2]>=0;a[2]--)
for(a[1]=m-a[9]-a[8]-a[7]-a[6]-a[5]-a[4]-a[3]-a[2];a[1]>=0;a[1]--){
if(a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]!=m)continue;
cal=f(a);
for(i=1;i<=9;i++)if(a[i]!=cal[i])goto skip;
printf("Sum=%u¥n",ff(a));
skip:;
}}
346デフォルトの名無しさん:2009/06/14(日) 18:01:02
>>344
すいません。

[1] 授業単元:C言語実習
[2] 問題文:
  「演習1を利用し、数値データファイルを1行ずつ読み込み、
   合計を計算して表示するプログラムを作成しなさい。 」
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:CPad for Borland C++Compiler バージョン2.31
[4] 期限:2009年06月15日まで
[5] その他の制限:fscanfを利用、演習1を利用

ちなみに演習1というのは「データファイルdata.txtを1行ずつ読み込み(fgetsを利用)表示するプログラムを作成せよ」
というもので、data.txtの中は

名前  値段  産地
りんご 100円 青森県
みかん  60円 和歌山県
ぶどう 150円 山梨県

↑です。
よろしくお願いします。
演習1の回答を載せたほうがいいでしょうか?
347デフォルトの名無しさん:2009/06/14(日) 18:03:04
>>346
乱暴だけど答えは出る

#include <stdio.h>

void main(void)
{
FILE *fp;
char name[256], price[256], from[256];
int sum = 0;

fp = fopen("nurupo.txt", "r");
if(fp == NULL)
exit(0);

while( fscanf(fp, "%s %s %s", &name, &price, &from ) != EOF ){
sum += atoi( price );
}

printf( "合計:%d\n", sum );

fclose(fp);
}
348デフォルトの名無しさん:2009/06/14(日) 18:15:48
>>347
返答ありがとうございます
それを実行すると結果は60になったのですが、それってあってるのでしょうか?

ちなみに演習1は

#include<stdio.h>
#include<stdlib.h>
int main(void){
FILE *fp;
char s[20];
if((fp=fopen("data.txt","r"))==NULL){
printf("ファイルがオープンできません。\n");
exit(1);
}

while(fgets(s,20,fp)!=NULL){
printf("%s",s);
}

fclose(fp);
return(0);
}

こんな感じです。
あとEOFっていうのはまだ習ってないです。
最初に書かなくてすいません。
349デフォルトの名無しさん:2009/06/14(日) 18:18:37
>>348
テキストのデータがまずいと思う
文字列の間に入れる空白は統一しないと

名前 値段 産地
りんご 100円 青森県
みかん 60円 和歌山県
ぶどう 150円 山梨県

↑これをテキストに貼り付けて試して
350デフォルトの名無しさん:2009/06/14(日) 18:30:49
>>349
なるほど!
ちゃんと合計がでました、ありがとうございます。
EOFの意味も自己解決しました。

あと、何度も申し訳ないのですが……

while( fscanf(fp, "%s %s %s", &name, &price, &from ) != EOF ){
sum += atoi( price );
}

の部分の atoi(price); というのがよくわかりません。
どなたか解説してくれないでしょうか。
おそらく知らないということは習ってないと思うので、できればその部分を他のやり方で教えてほしいです。
本当に何度もすいません。どなたかよろしくお願いします。
351デフォルトの名無しさん:2009/06/14(日) 18:38:41
atoiは文字列を数値に変換する関数
変換できなかったら0、途中で数字じゃない文字列が入ってたら途中までを変換する
これ使わないで自作すると糞めんどくさい処理になるけど・・・
352デフォルトの名無しさん:2009/06/14(日) 18:45:15
>>346じゃないけどやっぱここのスレは勉強になりまくるわ。例題と回答がどんどん出てくるし。
353デフォルトの名無しさん:2009/06/14(日) 18:47:21
どこが糞めんどくさいんだ?

int atoi(const char *s)
{
int ret = 0;
while ('0' <= *s && *s <= '9')
ret = 10*ret + *s++ - '0';
return ret;
}
354デフォルトの名無しさん:2009/06/14(日) 18:47:40
>>351
解説ありがとうございます。理解しました。

そんなに複雑な処理になってしまうのならやめておいたほうがよさそうですねw
でもおかげでなんとかなりそうです。本当にありがとうございました。
355デフォルトの名無しさん:2009/06/14(日) 18:53:43
>>353
それはそうだけど、さすがにそのコードは書けなくない?
レベル的に一文字ずつ取得してif文で分岐とか考えてた
356デフォルトの名無しさん:2009/06/14(日) 18:58:08
>>346 これならどうだ!
#include<stdio.h>

int main(void){
char buf[1024];
int sum=0, price;
FILE *fp;
char *filename="data.txt";

fp=fopen(filename, "r");
if(fp==NULL) return 1;

fgets(buf, sizeof(buf), fp); // 一行目は読み捨てる

while(fscanf(fp, "%*s %d円 %s", &price, buf)==2){
sum+=price;
}
fclose(fp);
printf("\n計 %d 円\n", sum);
return 0;
}
357デフォルトの名無しさん:2009/06/14(日) 19:01:06
>>356見て気付いたけど
while( fscanf(fp, "%s %s %s", &name, &price, &from ) != EOF ){
じゃなくて
while( fscanf(fp, "%s %s %s", name, price, from ) != EOF ){
358デフォルトの名無しさん:2009/06/14(日) 19:25:50
359デフォルトの名無しさん:2009/06/14(日) 20:31:01
>>358
あやしげ
360デフォルトの名無しさん:2009/06/14(日) 20:34:27
前スレ 511 をやる人いないの?
どの程度処理時間がかかるのか興味があるんだが…
361デフォルトの名無しさん:2009/06/14(日) 20:42:21
>>360
概算なら出せる。
約 読む時間*5+書く時間 = 処理時間
ソートタイムそのものは、全体のアクセス時間に比べればわずか。
362デフォルトの名無しさん:2009/06/14(日) 20:44:01
ミスた
約 読む時間*50+書く時間 = 処理時間
ソートタイムそのものは、全体のアクセス時間に比べればわずか。
363279:2009/06/14(日) 20:47:31
>>296
>>313
>>316
>>318
>>323
>>325,326
>>345
本当に沢山の解答を頂けて恐縮です。結局解は0を除いて3つしか
ないようで...
他にも色々とヒントを出して下さった方もどうもありがとうございます。
364デフォルトの名無しさん:2009/06/14(日) 21:12:08
[1] 授業単元: プログラミング実験
[2] 問題文(含コード&リンク): 
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9455.txt
[3] 環境
 [3.1] OS: Windows/Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月16日まで
[5] その他の制限: なし

よろしくお願いします。
365デフォルトの名無しさん:2009/06/14(日) 21:20:31
>>360

D:\work\126511>timer "mkfile 1"
Duration time is 55.80 seconds

D:\work\126511>timer "copy 1000MB.txt 1000MB2.txt"
1 個のファイルをコピーしました。
Duration time is 53.70 seconds

D:\work\126511>timer "sort /M 30000 /T E:\tmp 1000MB.txt /O 1000MB3.txt"
Duration time is 101.20 seconds

mkfile は >>665のソースを元に、最初に引数でsrandを実行するようにしたもの。
sort は Windows標準のコマンド
366360:2009/06/14(日) 21:37:29
>>365
thx
sort ってめちゃくちゃ早いですね
これより早くできる気がしない
367デフォルトの名無しさん:2009/06/14(日) 23:15:31
>>366
時間から推測するに、
入力ファイルの読込み+ワークへの出力+ワークからの入力+出力ファイルへの出力
なんではと思う。ワークからの入力時にOSのキャッシュが効くんじゃないかな。
プログラムで使用するメモリーサイズは指定できるが、こういうのは、許されるかな?
368デフォルトの名無しさん:2009/06/14(日) 23:22:17
>>358 これは、ちょっと加工が必要。http://pastebin.com/m599a713d
[m599a713d.c.html]
<pre>
#include &lt;stdio.h>
#include &lt;stdlib.h>
#include &lt;sys/types.h>
#include &lt;sys/wait.h>
#include &lt;signal.h>
#include &lt;unistd.h>
#include &lt;strings.h>
369デフォルトの名無しさん:2009/06/14(日) 23:23:12
[1]番外
[2] sortコマンドのアルゴリズムを要約
☆メモリは例えば320Mバイトしか使用出来ない
☆テンポラリファイルを作ることは許可
☆標準入力からの入力に堪えること。
☆標準出力に出力すること
☆ホンモノのようにタブ区切りの特定項目の組み合わせについてソート
しろとかそういう面倒なことまでは不要
☆出来ればサンプルコード
[3] 日本語。サンプルコードはC/C++どっちでもいいよ
[4]無期限だがこのスレ(127)が終わるまでとしとこ
370デフォルトの名無しさん:2009/06/14(日) 23:42:29
>>369
宿題でないならスレ違い

限られたメモリでの巨大ファイルのソートのやり方が知りたいなら
マージソートで検索すれば良いだけ
きわめて一般的な手法で人に解かせる意味はない
371デフォルトの名無しさん:2009/06/15(月) 00:29:02
>>370
前スレ>>511で出された問題の延長?期限なしなので宿題かどうかは不明。
関心ある奴が継続して取り組んでいるかな?
確かに一般的手法はあるんだろうが、ちょい静観して。
372デフォルトの名無しさん:2009/06/15(月) 00:48:48
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):do-while分の問題です。数を入力し、1から入力値まで"*"で会談を表示する
[3] 環境
 [3.1] OS: WindouwsVISTA
 [3.2] コンパイラ名とバージョン: VC9.0
 [3.3] 言語: C言語
[4] 期限:無期限(授業の復習)
[5] その他の制限:習ったのはprintf,int,float,while,do-while,for,switch(現在習っている命令)です

#include<stdio.h>
main(){
int a,i;
i = 1;
printf("行数は?");
scanf("%d",&a);
do{
printf("*****\n");
i++;
}while(i<a);
}

というプログラムを入力しているのですが、うまくいきません
どうすればいいんでしょうか?
373デフォルトの名無しさん:2009/06/15(月) 00:57:47
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9456.txt
[3] 環境
 [3.1] OS: (Windows Vista)
 [3.2] コンパイラ名とバージョン: VS 2009
 [3.3] 言語: C言語
[4] 期限: 6月16日
[5] その他の制限: for文 配列 ポインタetc
374デフォルトの名無しさん:2009/06/15(月) 00:57:55
>>372
#include<stdio.h>

int main(){
    int a, i, j;
    printf("行数は?");
    scanf("%d",&a);
    for(i = 0; i < a; i++){
        for(j = 0; j <= i; j++){
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
375デフォルトの名無しさん:2009/06/15(月) 00:59:20
>>374
すいません、do-whileで作らなければいけないんです……
376デフォルトの名無しさん:2009/06/15(月) 01:00:33
あーあ、会談ですごく悩んだわ。。。こんなんだからいつまでたっても初心者だわ。
377デフォルトの名無しさん:2009/06/15(月) 01:02:31
>>372
#include <stdio.h>
int main()
{
int a,i,j;
i = 0;
printf("行数は?");
scanf("%d",&a);
do {
j = 0;
do {
printf("*");
j++;
}while(j<=i);
printf("\n");
i++;
}while(i<a);
return 0;
}
378デフォルトの名無しさん:2009/06/15(月) 01:04:00
>>373
#include <stdio.h>

int main(void)
{
    double d[] = {50.5, 75.0, 62.0, 65.5, 80.0, 95.0, 90.5, 87.0, 80.0, 99.5};
    double sum, *ptr = d;
    int i, n;

    n = sizeof(d) / sizeof(double); /* n = 10; */

    for(i = 0, sum = 0.0; i < n; i++){
        sum += *(ptr + i);
    }
    printf("%f", sum / n);
    return 0;
}
379デフォルトの名無しさん:2009/06/15(月) 01:05:02
>>377
ありがとうございます。
コンパイルして実行したら、確かにできました
ありがとうございました!
380デフォルトの名無しさん:2009/06/15(月) 01:29:19
>>378
無事うまくできました!
ありがとうございました!
381デフォルトの名無しさん:2009/06/15(月) 08:44:10
[1] 数値計算法
[2] f(x)=cos(5sin(2πx+1)),0<x<1.0
  1.台形則を用いて数値積分せよ。分点の数を倍々に増やしていくと積分値がどのように変化するのか
  2.シンプソン則を用いて数値積分せよ。積分値の収束の様子を示せ。
[3] 環境
 [3.1] Windows
 [3.2] Cpad for Borland
 [3.3] C++
[4] 期限:本日am:11:00まで
[5] ソース提出なし。変化のグラフを提出。fprintで出力したい。
382デフォルトの名無しさん:2009/06/15(月) 09:25:43
>>381
俺含め通勤時間+勤務時間でほとんどの人は沈没だな。
南無。
383デフォルトの名無しさん:2009/06/15(月) 09:29:18
>>381
ttp://et2001.mech.okayama-u.ac.jp/numeric/program.html
これ参考にして頑張って。
384デフォルトの名無しさん:2009/06/15(月) 09:43:33
>>383
thx
385デフォルトの名無しさん:2009/06/15(月) 09:57:30
>>383
これ、fを求める関数にして、aを0.0、bを1.0にして、
最後にIを表示すれば、1回分の数値積分になる。

「分点の数を倍々に」というのは、さらにループを被せないといけないが、
グラフだけ出せばいいなら、とりあえず人間が入力して何回分かやれば。
386デフォルトの名無しさん:2009/06/15(月) 10:26:07
>>381 台形則
#include<stdio.h>
#include<math.h>

#define PI 3.1415926535897932384626433832795

double f(double x){
return cos(5*sin(2*PI*x+1));
}
double integral(double (*f)(double), double s, double e, long div){
long i;
double x, delta, sum;

delta=(e-s)/div;
sum=(f(s)+f(e))/2;
for(i=1;i<=div-1;i++){
x=s+delta*i;
sum+=f(x);
}
sum*=delta;
return sum;
}
int main(void){
long i, div;
FILE *fp=stdout;

for(i=0;i<=20;i++){
div=1<<i;
fprintf(fp, "div=%ld integral=%g\n", div, integral(f, 0.0, 1.0, div));
}
return 0;
}
387デフォルトの名無しさん:2009/06/15(月) 10:30:58
[1]c言語
[2]scanf により n を受け取り, 要素数 n の乱数配列を生成し表示するプログラムを作成せよ. ただし, 配列の要素を表示するときは一行につき 10 個ずつ表示するようにせよ.
[3]windows
動的なオブジェクトの生成でお願いします。
期限は今日中です。
388381:2009/06/15(月) 10:32:34
>>386
thx

何とか終わりそう
389デフォルトの名無しさん:2009/06/15(月) 10:39:59
>>381 シンプソン則
double integral(double (*f)(double), double s, double e, long div){
long i;
double x, delta, sum, t;

if(div<2) return -1;
delta=(e-s)/div;
sum=(f(s)+f(e));
for(i=1,t=0.0;i<div;i+=2){
x=s+delta*i;
t+=f(x);
}
sum+=t*4;
for(i=2,t=0.0;i<div;i+=2){
x=s+delta*i;
t+=f(x);
}
sum+=t*2;
sum*=delta/3;
return sum;
}
390デフォルトの名無しさん:2009/06/15(月) 10:42:20
[1]c言語
[2]二次元ベクトルを表す配列 double x[2] と角度 degree を受け取り, ベクトル x を degree 度回転させたベクトル を返す関数 double* rotation( int degree, double x[] ) を作成せよ. 三角関数は math.h を include すれば使える. (ヒント calloc を使う)
[3]環境
[3.1]windows
[3.2]c言語
[4]期限、今日の14時30分まで
[5]ポインタを用いる。
お願いします。
391デフォルトの名無しさん:2009/06/15(月) 10:45:41
>>387
動的なオブジェクトの生成ってどういう意味?
392デフォルトの名無しさん:2009/06/15(月) 10:48:55
>>391
可変長配列ってことじゃないの?
393デフォルトの名無しさん:2009/06/15(月) 10:49:39
>>391
すいませんとくに意味はないです。ただポインタをもちいてお願いします。
394デフォルトの名無しさん:2009/06/15(月) 10:49:42
>>390
double* rotation(int degree, double x[]){
double *y, theta;

y=calloc(sizeof(double),2);
theta=M_PI*degree/180;
y[0]=x[0]*cos(theta)-x[1]*sin(theta);
y[1]=x[0]*sin(theta)+x[1]*cos(theta);
return y;
}
395デフォルトの名無しさん:2009/06/15(月) 10:52:28
>>387
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void){
int i, n, *x;

srand(time(NULL));
printf("Input n : ");
scanf("%d", &n);
x=malloc(sizeof(*x)*n);
for(i=0;i<n;i++) x[i]=rand();
for(i=0;i<n;i++){
if(i && i%10==0) printf("\n");
printf(" %d", x[i]);
}
free(x);

return 0;
}
396デフォルトの名無しさん:2009/06/15(月) 11:00:16
>>394
ありがとうございます
397デフォルトの名無しさん:2009/06/15(月) 11:01:20
>>どうもです。
398デフォルトの名無しさん:2009/06/15(月) 11:02:38
>>395
どうもです
399デフォルトの名無しさん:2009/06/15(月) 11:06:18
>>394
y=calloc(2, sizeof(double));
じゃない?
400デフォルトの名無しさん:2009/06/15(月) 11:13:41
>>399
そのようですね
401デフォルトの名無しさん:2009/06/15(月) 12:19:35
>>276
どういうゲームかよく分からなかったのですが、解釈をしてみました。
言語は Prolog ですから、フローチャートのつもりで眺めてください。
http://nojiriko.asia/prolog/t167.html
402デフォルトの名無しさん:2009/06/15(月) 12:23:08
>>337
>>324
氏名年齢初任給をどうやって入れるのかわからないんですが…
403デフォルトの名無しさん:2009/06/15(月) 16:01:35
>>324 >>402
#include<iostream>
using std::cin;
using std::cout;
#define MAX_NUM 10
int main(void){
  int i, num;
  char ch;
  char *namae[MAX_NUM];
  int Salary[MAX_NUM][2];

  for(num=0; num<MAX_NUM; num++) {
    namae[num] = new char[80];
    cout << "氏名を入力して下さい(改行で終了)";
    cin.getline(namae[num], 80);
    if(*namae[num] == '\0') break;
    cout << "年齢を入力して下さい";
    cin >> Salary[num][0];
    cout << "初任給を入力して下さい";
    cin >> Salary[num][1];
    cin.get(ch);
  }
  cout << "\n  氏 名  |年 齢| 初任給\n";
  for(i=0; i<num; i++) {
    cout << " ";
    cout.width(10);
    cout << namae[i]
      << " | " << Salary[i][0]
      << " | " << Salary[i][1] << std::endl;
  }
  for(i=0; i<num; i++) delete namae[i];
}
404デフォルトの名無しさん:2009/06/15(月) 17:49:51
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9457.zip
↑課題1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9458.zip
↑課題2
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: C
[4] 期限:6/19

お願いします
405デフォルトの名無しさん:2009/06/15(月) 18:45:48
[1] 授業単元:プログラミング実習I
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9459.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual c
 [3.3] 言語: C
[4] 期限: 6月19日
[5] その他の制限:とくになし
406デフォルトの名無しさん:2009/06/15(月) 18:50:06
>>405
このスレの中で回答済み
407デフォルトの名無しさん:2009/06/15(月) 18:50:27
>>404
ひとつめ

#include<stdio.h>

int pow2(int no);
int main(void){
int a,b,no;
printf("整数Aを入力してください\n");
scanf("%d",&a);
printf("何ビットシフトしますか?\n");
scanf("%d",&no);
b=pow2(no);
printf("A × (2の%d乗)=%d\n",no,a*b);
printf("A ÷ (2の%d乗)=%d\n\n",no,a/b);
printf("A<<%d = %d\n",no,a*b);
printf("A>>%d = %d\n\n",no,a/b);
printf("符号無し整数%dの左右%dビットシフトは、\n2の%d乗での乗算や除算と等しいです。",a,no,no);
return 0;
}
int pow2(int no){
int a=1;
while(no!=0){
a=a*2;
no--;
}
return a;
}
408デフォルトの名無しさん:2009/06/15(月) 18:50:51
[1] 授業単元:For文
[2] 問題文:整数1〜10までの累計(1+2+3・・・・9+10=55)
 [3.1] OS: XP
 [3.2] Turbo C++
 [3.3] C++

簡単だと思いますがアホなんでわかりません。

#include <iostream.h>
#include <conio.h>
void main(){

int i, goukei;

goukei=0;

for (i = 0; i < 10; i++) {
goukei=i+goukei+1;
}

cout<<goukei<<endl;

getch( );
}

こんなん思いつきましたがもっとスマートな方法はありますか??
409デフォルトの名無しさん:2009/06/15(月) 18:52:03
まじでwhile(no!で吹いた。
410デフォルトの名無しさん:2009/06/15(月) 18:53:30
>>408
1から10までなら i=1; i<=10; / goukei += i; の方が、
取り立ててスマートというわけではないが読みやすいと思う
411デフォルトの名無しさん:2009/06/15(月) 18:56:28
>>410
ありがとうmm
412デフォルトの名無しさん:2009/06/15(月) 19:12:25
>>406
本当だ!
ありがとうごぞいます
413デフォルトの名無しさん:2009/06/15(月) 19:59:44
[1] インタラクティブコミュニケーション
[2] ttp://www.ncc-1701.jp/kakei/InteractiveComm/Class5/InteractiveComm_5.htmlに書いている演習

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Windows Visual Studio 2005
 [3.3] 言語: C
[4] 期限: 今日
[5] その他の制限: 六曜は順番通り巡るとする。
414デフォルトの名無しさん:2009/06/15(月) 20:01:54
お願い致しますm(__)m
3日ぐらい悩んでます…自分ではあってるかわかりませんがここまでやりました

#include <stdio.h>
int main()
{
int i, m, p;
int count;

printf("\nmの値を入力してください");
scanf("%d",&m);
count = 0;

for(i=m%7;p=m%6;){
if (i==5){
if (p!=2){
count++;}
;}
;}
printf("今日から%dの間には仏滅でない日曜日が%d日ある",m,count);
getch();
return 0;
}
415デフォルトの名無しさん:2009/06/15(月) 20:44:30
>>407
すいません

関数 unsigned pow2 を使ってないので使って書いてほしいです
416デフォルトの名無しさん:2009/06/15(月) 20:49:06
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

@http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9460.zip
Ahttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9461.zip

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C
[4] 期限:6/18
[5] その他の制限:
最初は#include<stdio.h>しか使っていません。
また、何かあれば指摘させていただくかもしれません。
お手数かけますが宜しくお願いします。
417デフォルトの名無しさん:2009/06/15(月) 20:51:59
>>416
>>404 と同じ?
418デフォルトの名無しさん:2009/06/15(月) 21:43:32
[1] 授業単元 C言語
[2] 問題文 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9462.txt
結果の例  最初にどの型で入力するか入力、そのあとその型の値を入力
(例はintで入力のとき)
Printing int 123 (入力した値)
Printing data at location: 01D70C44 (アドレス)
この下の4つは最初に入力した値をほかの方で出力したときの値
Data as char :
Data as int : 123
Data as long : 8069185
Data as  float : 0.00
[3] 環境  [3.1] OS Windows
 [3.2] コンパイラ名とバージョン:VisualC++
 [3.3] 言語:  C
[4] 期限: 6月16日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限 voidポインタを使わなければならない。これだと結果がおかしいのでこのプログラムの修正です
419デフォルトの名無しさん:2009/06/15(月) 21:46:38
>>418
すくなくとも %l じゃなくて %ld
で、どこがおかしいの?
420デフォルトの名無しさん:2009/06/15(月) 21:56:08
>>419
%lを%ldと直したら解決できました。ありがとうございます。
421デフォルトの名無しさん:2009/06/15(月) 22:40:19
>>413
六曜もしくは旧暦の算出ができないとどうにもならんと思うぞ
422デフォルトの名無しさん:2009/06/15(月) 22:47:03
#include <iostream>
using namespace std;

int main()
{
const float pi = 3.141592;
float a;

cout << "半径を入力してください(単位(cm)) /n";
cin >> a;

cout << "半径" << a << "(cm)の円の円周は" << 2.0 * a * pi;
cout << "(cm)で、円の面積は" << a * a * pi << "(平方cm)です/n";

このプログラムの途中にpi=2.5;を挿入して、コンパイルするとどうなるか。
このプログラムのどこに入れたらいいんですか。これは?
423デフォルトの名無しさん:2009/06/15(月) 22:49:29
>>422
int main()
の前にいれてみては?www
424デフォルトの名無しさん:2009/06/15(月) 22:55:27
>>422
プログラムを作れという問題じゃなくて、
「どうなるか」っていう問題だから、
思いつくいろいろなところに入れて、
どうなるか調べて、まとめて書けばいい。
問題文の意味を理解する日本語の問題。
425デフォルトの名無しさん:2009/06/15(月) 23:09:27

>>424
けど正解はひとつだけなんですよね?
426デフォルトの名無しさん:2009/06/15(月) 23:11:21
普通に考えて
const float pi = 3.141592;
const float pi = 2.5;
じゃないの?
427デフォルトの名無しさん:2009/06/15(月) 23:12:07
>>425
No
構文エラーとか
文字列リテラルの中に入れるとか
あるでしょ
428デフォルトの名無しさん:2009/06/15(月) 23:12:59
以下のように出力されるプログラムを作成せよ
年齢を入力してください
16
生まれた年を入力してください
1986
好きな数字を入力してください
7
あなたは1986年生まれの16才で、7が好きですね


台形の面積を求めるプログラムを作成せよ
上底を入力してください。(単位はcm)
3
下底を入力してください。(単位はcm)
4
高さを入力してください。(単位はcm)
5.0
台形の面積は17.5平方cmです。

誰か助けてください。
429デフォルトの名無しさん:2009/06/15(月) 23:13:02
こういう問題を解く場合にそなえ、名著「ライトついていますか?」を読んでおくといい。
430デフォルトの名無しさん:2009/06/15(月) 23:13:59
>>425ですが、言い忘れてしまいました。
こういうのって一筋縄でいくならconst float pi = 3.141592;の下に入れるはずですよね
431デフォルトの名無しさん:2009/06/15(月) 23:20:38
>>428ですが
書き始めは
#include <iostream>から始めるっぽいです。
あと、上の問題(年齢の方の問題)をcinを一度だけつかって実現せよっていうのも問題にありました
432デフォルトの名無しさん:2009/06/15(月) 23:22:08
>>421
暦は考えなくてもいいみたいです
433デフォルトの名無しさん:2009/06/15(月) 23:29:00
>>425
なんでそう思うの?
プログラムの途中にpi=2.5;を挿入しろと書いてあるんだから、
まずやってみて、どうなるか自分の目で確かめればいい。
たぶん出題者の意図は、constの意味が分かってるかどうかだけど、
それにしても、正解例はひとつだけじゃない。

>>426
いや、pi=2.5;を挿入しろと言ってるんだから、
もしそれなら、2行目のconst floatはいらないよ。
434デフォルトの名無しさん:2009/06/15(月) 23:30:57
"pi=2.5;";
{pi=2.5;}

こんなんか
435デフォルトの名無しさん:2009/06/15(月) 23:34:28
>>428 みたいなあまりにも基本的な問題は、教えるべきか悩むなあ。
これ分からなかったら、今後ずっと全部コピペ解答し続けるしかないもん。
まあ、ほかの誰かが解答するかな。
436デフォルトの名無しさん:2009/06/15(月) 23:39:11
>>428
#include <iostream>
using namespace std;

int main(){
cout << "年齢を入力してください\n" << 16 << endl;
cout << "生まれた年を入力してください\n" << 1986 << endl;
cout << "好きな数字を入力してください\n" << 7 << endl;
cout << "あなたは1986年生まれの16才で、7が好きですね" << endl;
}
437デフォルトの名無しさん:2009/06/15(月) 23:53:39
#include <iostream>
using namespace std;

int main()
{

pi = 2.5;
pi = 3.141592;
float a;

cout << "半径を入力してください(単位(cm)) /n";
cin >> a;

cout << "半径" << a << "(cm)の円の円周は" << 2.0 * a * pi;
cout << "(cm)で、円の面積は" << a * a * pi << "(平方cm)です/n";

このプログラムの途中にpi=2.5;を挿入して、コンパイルするとどうなるか。

じゃあこうなるんですか
438デフォルトの名無しさん:2009/06/16(火) 00:10:40
内容:
[1] 授業単元: プログラミング論
[2] 問題文(含コード&リンク):
入力ストリームから読み込んだデータ文字列を、データベースに格納する前にスタックに一時的に格納するプログラムを作成する。
このときデータをまとめたデータ文字列を一つづつスタックへプッシュしたりポップしたりする家庭がわかるプログラムを作成する。
なおスタックを実現するライブラリは、スタックのための別のヘッダにまとめる


[3] 環境
 [3.1] OS: Windows vista
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限: 2009年6月16日13:00まで
439デフォルトの名無しさん:2009/06/16(火) 00:12:19
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int max; /* スタックのサイズ */
int ptr; /* スタックポインタ */
int *stk; /* スタック(の先頭要素へのポインタ) */
} Stack;

int StackAlloc(Stack *s, int max)
{
s->ptr = 0;
if ((s->stk = calloc(max, sizeof(int))) == NULL) {
s->max = 0; /* 配列の確保に失敗 */
return (-1);
}
s->max = max;
return (0);
}
440デフォルトの名無しさん:2009/06/16(火) 00:13:04
>>433
2行目のconst floatだけがいらないんですか?
それともその行のconst floatpi = 3.141592; 自体がいらないんですか。
というか、僕が書いた、上のでいいんですかね
441#:2009/06/16(火) 00:15:00
void StackFree(Stack *s)
{
if (s->stk != NULL) {
free(s->stk);
s->max = s->ptr = 0;
}
}
int StackPush(Stack *s, int x)
{
if (s->ptr >= s->max)
return (-1);
s->stk[s->ptr++] = x;
return (0);
}

int StackPop(Stack *s, int *x)
{
if (s->ptr <= 0) /* スタックは空 */
return (-1);
*x = s->stk[--s->ptr];
return (0);
}
442#:2009/06/16(火) 00:15:59
int StackPeek(const Stack *s, int *x)
{
if (s->ptr <= 0) /* スタックは空 */
return (-1);
*x = s->stk[s->ptr - 1];
return (0);
}

int StackSize(const Stack *s)
{
return (s->max);
}

int StackNo(const Stack *s)
{
return (s->ptr);
}

int StackIsEmpty(const Stack *s)
{
return (s->ptr <= 0);
}

int StackIsFull(const Stack *s)
{
return (s->ptr >= s->max);
}

void StackClear(Stack *s)
{
s->ptr = 0;
}
443デフォルトの名無しさん:2009/06/16(火) 00:17:22
int main(void)
{
Stack s;

if (StackAlloc(&s, 100) == -1) {
puts("スタックの確保に失敗しました。");
return (1);
}
while (1) {
int m, x;

printf("現在のデータ数:%d/%d\n", StackNo(&s), StackSize(&s));
printf("(1) プッシュ (2) ポップ (0) 終了:");
scanf("%d", &m);

if (m == 0) break;
444#:2009/06/16(火) 00:21:08
switch (m) {
case 1: printf("データ:"); scanf("%d", &x);
if (StackPush(&s, x) == -1)
puts("スタックへのプッシュに失敗しました。"); break;

case 2: if (StackPop(&s, &x) == -1)
puts("ポップできません。");
else
printf("ポップしたデータは%dです。\n", x); break;
}
}
StackFree(&s);

return (0);
}

このプログラムを書き換えて作る

二次元配列を用いた場合どこをどう変えるか分かりません
教えてください
連張りすみませんでした
445デフォルトの名無しさん:2009/06/16(火) 00:23:29
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
次のフォーマットで,ある人の1日ごとの仕事時間を入力すると,日数と仕事の合計時間を出力するプログラムをつくりなさい。
ただし,仕事時間の入力データが不正な場合(hh:mmの入力で,hh>23やhh<0やmm>59やmm<0の場合)は再入力をさせるようにしなさい。
また,終了は0:0とします。

<出力例>
日  数 17 日
合計時間 104 時間
     23 分


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc3,4
 [3.3] 言語: c言語
[4] 期限:6月17日
446デフォルトの名無しさん:2009/06/16(火) 00:27:40
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
キーボードから入力された1行(空白で区切られた正整数並びの文字列)を項に分解して,i番目の項の整数値を配列要素d[i-1]に累算しながら格納するプログラムをつくりなさい。
ただし,配列dの要素数は10として宣言し,10項目より多い入力の場合は11項目以降を棄却しなさい。
1行の入力には関数fgetsを用いなさい。
fgetsは改行文字も取り込む点に注意して,入力の終了は「改行のみの入力」で判定しなさい。

[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月16日 23:59
[5] その他の制限: なし
447デフォルトの名無しさん:2009/06/16(火) 00:28:42
>>437
const float pi = 3.141592;
って定義されたあとに
pi = 2.5;
を入れてコンパイルするとどうなりますか?

或いは
pi = 2.5;

const float pi = 3.141592;
の前に挿入してコンパイルするとどうなりますか?

などを自分で試して、実際どうなるか、どうしてそうなるのかを考えてくださいていう宿題だろ。
その問題に答えはなくて、constの役割を学習して来いってことだと思うよ。
448デフォルトの名無しさん:2009/06/16(火) 00:39:13
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
以下のコードはいずれも間違っています。
どこに間違いがあるかを指摘して,修正を施しなさい。
階乗を計算するコード:
int factorial(int n)
{
int fac;
fac = 1;
while (n--)
fac *= n;
return fac;
}
文字列の文字を1行に1文字ずつ表示するコード:
i = 0;
do {
putchar(s[i++]);
putchar('\n');
} while (s[i] != '\0');
コピー元からコピー先へ文字列を複写するコード:
void strcpy(char *dest, char *src)
{
int i;
for (i = 0; src[i] != '\0'; i++)
dest[i] = src[i];
}
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 6月16日 23:59
[5] その他の制限: 特になし
449デフォルトの名無しさん:2009/06/16(火) 00:57:36
>>447
ありがとうございました
450デフォルトの名無しさん:2009/06/16(火) 01:04:22
>>432
旧暦の (月+日)%6 で六曜が分かるんだよ
で、どうやって六曜を取得するかって話

課題としては適切ではないように思える
451デフォルトの名無しさん:2009/06/16(火) 01:13:16
>>448
上 nを引くタイミングが早い。
中 s[0]が'\0'なら暴走する。
下 '\0'がコピペされん。
452デフォルトの名無しさん:2009/06/16(火) 01:41:13
>>413 今日の曜日と六曜を入力出来るようにすればいい。
先勝,友引,先負,仏滅,大安,赤口
----------------------------------
.月曜 .火曜0.水曜1.木曜2.金曜3.土曜4
(日曜).月曜6.火曜7.水曜8.木曜9.金曜0
.土曜1(日曜).月曜3.火曜4.水曜5.木曜6
.金曜7.土曜8(日曜).月曜0.火曜1.水曜2
.木曜3.金曜4.土曜5(日曜).月曜7.火曜8
.水曜9.木曜0.金曜1.土曜2(日曜).月曜4
.火曜5.水曜6.木曜7.金曜8.土曜9(日曜)
.月曜1.火曜2.水曜3.木曜4.金曜5.土曜6

0-4:0
5-11:1 (6) 7-13 (+2)
12-18:2 (6) 14-20 (+2)
19-25:3 (6) 21-27 (+2)
26-32:3 (6) 21-27 (-5)
33-39:4 (6) 28-34 (-5)
40-46:5 (6) 35-41 (-5)
#include <stdio.h>
int main() {
  int N, M;
  do{ printf("N=");
    if(scanf("%d", &M) == 1) break;
    scanf("%*s");
  } while(!0);
  printf("      ");
  for(N=0; N<=M; N++) {
    if((N+2)%7==0) puts("");
    printf("%2d:%2d ", N, N/42*5 + ((N%42<=25)?(N%42+2)/7:(N%42-5)/7) );
  }
}
453デフォルトの名無しさん:2009/06/16(火) 01:55:53
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9465.txt
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月16日 18:00
[5] その他の制限: なし
お願いします
454デフォルトの名無しさん:2009/06/16(火) 02:49:44
>>453
#include <stdio.h>
#define NMAX 15
main(){
  int a[NMAX];
  int i, j;

  for(i=0; i<NMAX; i++) {
    printf("%d>", i+1);
    if(scanf("%d", &a[i]) != 1) scanf("%*s"), i--;
    if(a[i]<0) break;
  }
  j=i; puts("");
  for(i=0; i<j; i++) printf("%d ",a[i]);
}
455デフォルトの名無しさん:2009/06/16(火) 05:32:48
>>454 ありがとうございました
456デフォルトの名無しさん:2009/06/16(火) 05:50:24
>>416の2問目どなたかお願いします。
457#:2009/06/16(火) 08:56:02
438の問題誰かお願いします;;
458デフォルトの名無しさん:2009/06/16(火) 09:41:21
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
n*n行列A、Bをそれぞれキーボード から入力し、積を求めろ。
行列の大きさnもキーボードから入力せよ。多次元配列を使ってください。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみ
[4] 期限: 明日
[5] その他の制限: 配列ぐらいまでしかわかってません

よろしくお願いします。。
459デフォルトの名無しさん:2009/06/16(火) 10:01:50
460デフォルトの名無しさん:2009/06/16(火) 10:56:12
>>458
#include <stdio.h>
#define N 8
int main(void)
{
double A[N][N], B[N][N], C[N][N];
int i, j, k, n;
printf("input n >> "); scanf("%d", &n);
if (n > N) n = N;
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) { printf("input A(%d, %d) >> ", i, j); scanf("%lf", &A[i][j]); }
}
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) { printf("input B(%d, %d) >> " , i, j); scanf("%lf", &B[i][j]); }
}

for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) C[i][j] = 0;
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
for (k = 0; k < n; ++k)
C[i][j] += A[i][k] * B[k][j];
return 0;
}
461#:2009/06/16(火) 10:57:23
>>459
ありがとうございます
ですが、できれば参考プログラムを元にして作っていただけたらうれしいです
あと、C++言語ではなくC言語でお願いします
すみません;;
462 ◆ncl0TRhUQ6 :2009/06/16(火) 10:58:53
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):catをシステムコールとライブラリ関数で作り直す
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 2009年6月18日23:59まで
[5] その他の制限: システムコールの方はreadとwriteを使うとのことです。

困っています!よろしくお願いします!!
463残りの問題まとめ:2009/06/16(火) 11:23:26
>>446 i番目の項の整数値を配列要素d[i-1]に累算しながら格納する 6月16日23:59
>>445 日数と仕事の合計時間を出力する 6月17日
>>438-444(CODE)>>459(9467)>>461 入力ストリームから読み込んだデータ文字列を、データベースに格納する前にスタックに一時的に格納する
>>416(9461) ラジアン。 6月18日
>>404(9458) ラジアン。 6月19日
>>364(9455) 巡回セールスマン問題。最短経路長をもった閉路と閉路長を比較する。 6月16日
>>226>>230(9439) (EXE)ファイルから問題文を読み込み、10問(3択)を解いていく。 6月15日(月)19:00
>>183 画像の解像度と同じサイズの二次元配列を作りなさい。 なし
>>170(9423,9424)>>235>>237>>239 画像情報処理4問。 6月11日
>>073(9399) 3次元上の格子点をarray<int, 3> で表すとする.点を要素に持つベクトルを用意し,大きさn を入力する。 6月9日
>>072(9398) 3次元上の1点をarray<double, 3> で表すとする.2つの点を受け取ってそれらの内積(inner_product) を返す関数を作成 6月9日
>>前511>>前516>>369 一行1000バイト以下のテキストファイルをソートするプログラム。 なし
464デフォルトの名無しさん:2009/06/16(火) 11:31:17
>>416の2問目お願いしますorz
465デフォルトの名無しさん:2009/06/16(火) 11:36:10
>>446
#include <stdio.h>
#define N 10
#define M 256

int main(void)
{
int d[N];
char b[M];
int i;
for (i = 0; i < N; ++i) d[i] = 0;
while (*fgets(b, M, stdin) != '\n') {
int i = 0, j = 0, k = 0;
do {
while ('0' <= b[j] && b[j] <= '9') {
if (k) d[i] = d[i] * 10 + b[j] - '0';
else { d[i] += b[j] - '0'; k = 1; }
j++;
}
i++, j++;
k = 0;
} while (b[j] != '\n' && i < N);
}
return 0;
}
466デフォルトの名無しさん:2009/06/16(火) 12:01:08
>>464
#include <stdio.h>
#include <math.h>
#ifndef M_PI
#define M_PI 3.14159265
#endif
#define N_ANG 100

int main(void)
{
double ang_sin[N_ANG][2], ang0, ang1;
int i, n;

printf("始点の角度(deg)? : "); scanf("%lf", &ang0);
printf("終点の角度(deg)? : "); scanf("%lf", &ang1);
printf("分割数? : "); scanf("%d", &n);

for (i = 0; i < n + 1; ++i) {
ang_sin[i][0] = ang0 + (ang1 - ang0) / n * i;
ang_sin[i][1] = sin(M_PI * ang_sin[i][0] / 180);
}

for (i = 0; i < n + 1; ++i)
printf("%10.6f\t%10.6f\n", ang_sin[i][0], ang_sin[i][1]);

return 0;
}
467デフォルトの名無しさん:2009/06/16(火) 12:22:30
>>466
申し訳ありません。
#ifndef、#endifの二つは習って無いので使わずに書くことはできますでしょうか?
468デフォルトの名無しさん:2009/06/16(火) 12:26:35
[1] 授業単元:プログラミングT
[2] 問題文(含コード&リンク):「12以下の自然数nを入力して下さい。」と画面に出力し、キーボードからnに値を入力する。
そしてn!(nの階乗)を計算して表示するプログラムを作成せよ。
ただしn!=1×2×3×・・・× (n-1)×nであり、「n」の入力はmain関数内で行い、『引数をnとし、その階乗を計算して画面に出力する(戻り値は無し)』関数を作成し、main関数内で使用せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語:C
[4] 期限:2009年6月19日10時
[5] その他の制限:関数に入ったばかりです。よろしくお願いします。
469デフォルトの名無しさん:2009/06/16(火) 12:27:12
470デフォルトの名無しさん:2009/06/16(火) 12:27:21
>>467
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
#define N_ANG 100
/* あとから付け足すなクズ */
int main(void)
{
double ang_sin[N_ANG][2], ang0, ang1;
int i, n;

printf("始点の角度(deg)? : "); scanf("%lf", &ang0);
printf("終点の角度(deg)? : "); scanf("%lf", &ang1);
printf("分割数? : "); scanf("%d", &n);
/* 習ってないものを使っちゃいけないなら習ったものを全部書け */

for (i = 0; i < n + 1; ++i) {
ang_sin[i][0] = ang0 + (ang1 - ang0) / n * i;
ang_sin[i][1] = sin(PI * ang_sin[i][0] / 180);
}

for (i = 0; i < n + 1; ++i)
printf("%10.6f\t%10.6f\n", ang_sin[i][0], ang_sin[i][1]);

return 0;
}
471デフォルトの名無しさん:2009/06/16(火) 12:28:06
>>445
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFFSIZE 16

int main(void)
{
char buff[BUFFSIZE];
int hour = 0, minute = 0;
while (1) {
int hh, mm;
printf("input >> ");
if (!fgets(buff, BUFFSIZE, stdin)) break;
hh = atoi(strtok(buff, ":"));
mm = atoi(strtok(NULL, ":"));
if (hh == 0 && mm == 0) break;
if (hh > 23 || hh < 0 || mm > 59 || mm < 0) continue;
minute += mm; if (minute >= 60) { minute -= 60; hour++; }
hour += hh;
}
printf("日  数 %4d 日\n", hour / 24);
printf("合計時間 %4d 時間\n", hour);
printf("     %4d 分\n", minute);
return 0;
}
472デフォルトの名無しさん:2009/06/16(火) 12:30:37
[1] 授業単元:プログラミングT
[2] 問題文(含コード&リンク): 上記のプログラムで、階乗の計算結果を表示したら再び「12以下の自然数nを入力して下さい。」と画面に出して計算をし続けるプログラムに変更せよ。
ただし負の数を入力した場合にはプログラムが終了するものとし、『nの階乗を計算・表示する関数』を必ず使うこと。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語:C
[4] 期限:2009年6月19日10時
[5] その他の制限:上記=468の問題です。よろしくお願いします。
473#:2009/06/16(火) 12:34:33
>>438
>>461

できたらお願いします;;
474デフォルトの名無しさん:2009/06/16(火) 12:35:16
>>468
#include <stdio.h>

long f(int n) { return (n <= 1)? 1: f(n - 1) * n; }

int main(void)
{
int n;
printf("12以下の自然数nを入力して下さい。"); scanf("%d", &n);
if (n <= 12) printf("%d! = %d\n", n, f(n));
return 0;
}

>>472
#include <stdio.h>

long f(int n) { return (n <= 1)? 1: f(n - 1) * n; }

int main(void)
{
int n;
while (1) {
printf("12以下の自然数nを入力して下さい。"); scanf("%d", &n);
if (n < 0) break;
if (n <= 12) printf("%d! = %d\n", n, f(n));
}
return 0;
}
475デフォルトの名無しさん:2009/06/16(火) 12:40:54
問題をちゃんと呼んでなかった。>>474は無視して。
>>468
#include <stdio.h>

long f(int n) { return (n <= 1)? 1: f(n - 1) * n; }
void PrintFactorial(int n) { printf("%d! = %d\n", n, f(n)); }

int main(void)
{
int n;
printf("12以下の自然数nを入力して下さい。"); scanf("%d", &n);
if (n <= 12) PrintFactorial(n);
return 0;
}

>>472
#include <stdio.h>

long f(int n) { return (n <= 1)? 1: f(n - 1) * n; }
void PrintFactorial(int n) { printf("%d! = %d\n", n, f(n)); }

int main(void)
{
int n;
while (1) {
printf("12以下の自然数nを入力して下さい。"); scanf("%d", &n);
if (n < 0) break;
if (n <= 12) PrintFactorial(n);
}
return 0;
}
476デフォルトの名無しさん:2009/06/16(火) 13:41:12
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):滑降シンプレックス
[3] 環境
 [3.1] Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++
[4] 期限:6月19日
[5] その他の制限:各点の大きさを比べるところまでは出来ました。
その後の最良点、2番目に良い点を結びその中点を最悪点が通る部分が分かりません。
WEB上では完成してあるアルゴリズムがあるのですが自分には難しく、計算時間がかかってもいいので分かりやすい関数でと思い書き込みました。
よろしくお願いします。
477デフォルトの名無しさん:2009/06/16(火) 15:27:25
>・問題文は、出題されたまま全文を書いてください。
問題文がたった9文字とは凄い課題だな
478デフォルトの名無しさん:2009/06/16(火) 15:55:05
[1] 授業単元:応用プログラミング
[2] 問題文(含コード&リンク):http:
//kansai2channeler.hp.infoseek.co.jp/cgi- bin/joyful/img/9470.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++
[4] 期限:本日23:00までですが、2日以内なら遅れてもいいそうです。
[5] その他の制限: 特にありません。

三問ありますが、どうぞよろしくお願いします。
479デフォルトの名無しさん:2009/06/16(火) 16:38:33
>>478 1問目は意味が分からないので2と3だけ
(8_5)
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int i, n;
int *r;
printf("n = "); scanf("%d", &n);
r = malloc(n * sizeof(int));
for (i = 0; i < n; ++i) r[i] = rand();
for (i = 0; i < n; ++i) {
printf(" %d", r[i]);
if ((i + 1) % 10 == 0) printf("\n");
}
free(r);
return 0;
}

(8_6)
double deg2rad(double degree) { const double PI = 3.141592535898; return degree * PI / 180; }
double *rotation(int degree, double x[])
{
double *y = calloc(2, sizeof(double));
y[0] = x[0] * cos(deg2rad(degree)) - x[1] * sin(deg2rad(degree));
y[1] = x[0] * sin(deg2rad(degree)) + x[1] * cos(deg2rad(degree));
return y;
}
480デフォルトの名無しさん:2009/06/16(火) 16:51:07
>>479 ありがとうございました。
一問目は自分で対応したいと思います。
お疲れ様でした。
481デフォルトの名無しさん:2009/06/16(火) 18:12:28
[1] 授業単元:ソフトウェア演習C
[2] 問題文:
文書ないのすべての単語とその単語の頻度をメンバとして持つ構造体を定義し、
この構造体へのポインタをノードの値として持つ二分木のノードを定義せよ

次に、任意のノードはその左の部分木にはそのノードの単語より辞書順で小さい単語のみがあり、その右の部分木にはより大きい単語のみがあるように保持される。
新たに単語がすでに木にあるかどうかを探すには、ルート(根元)から出発してそのノードに格納されている単語と新しい単語を比較する。
二つが一致したら、それで良い。
新しい単語が木の単語より小さいときは、探索は左の子供に対して続けられ、そうでなければ右の子供が調べられる。
求める方向に子供がないときは、新しい単語は木の中にはないと言うことであり、また実際にはその子供のないところがそれを置く場所である。
このプロセスは再帰的である必要があり、単語の挿入を行うadd_word()関数を定義せよ。この関数は再帰的に呼ばれて、左または右の部分木に振り分けられる。
単語は木の中の単語と一致する(その場合カウント(頻度)がインクリメントされる)か、あるいはノードを作成し、木に加えなければならないことを示すヌル・ポインタと出会う。
新たにノードが生成されると、この関数ではそのノードへのポインタが返され、親ノードに埋め込まれる。
この関数を利用し、以下のテキストをコマンド実行時の引数として与えられたファイルを入力して二分探索木を生成し、単語と頻度のリストを表示するプログラムを作成せよ。

文章:
University was founded in April 1998 at Iwate,
which is situated in the northeastern part of Japan. University consists of
four faculties Software and Information Science, Nursing, Social Welfare,
and policy Studies, and additionally other educational supporut centers.
[3] 環境
 [3.1] OS:Unix
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 2009年06月18日13:00まで
[5] その他の制限: アルゴリズム論とデータ構造の序盤です。特に指定はないです。

長文になってしまい、申し訳ありません
よろしくお願いします
482デフォルトの名無しさん:2009/06/16(火) 20:24:44
[1] 授業単元:プログラミング基礎
[2] 問題文

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9473.txt

[3] 環境
 [3.1] Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++
[4] 期限:6月19日

ソースコードが中途半端な上に分かりづらいと思いますが
空白出力→★出力→空白出力→★出力という流れでやってます
根本的にアプローチの仕方が間違ってるかもしれませんが
よろしくお願いします
483デフォルトの名無しさん:2009/06/16(火) 20:34:08
>>482
#include <stdio.h>

int main(void)
{
char *c = "★   ★\n ★ ★\n  ★\n ★ ★\n★   ★\n";
int i;
if (c == NULL) return 1;
for (i = 0; c[i] != '\0'; ++i) printf("%c", c[i]);
return 0;
}
484食う負名無:2009/06/16(火) 20:46:12
プログラミング初心者でアホアホなのでよろしくお願いします。
[1] 授業単元: C++
[2] 問題文: 次の2つのプログラミングは参照渡しのものであるが、値渡しでプログラミングを作り直しなさい。(←実引数が変更を受けないことを確かめよ)
(1)
#include<iostream.h>
void irekae(int& a, int& b);
main(){ int a,b; a=10; b=1;
irekae(a,b);
cout<<"a="<<a<<"b="<<b<<endl;}
void irekae(int& a, int& b)
{int temp; temp=a; a=b; b=temp;}
(2)
#include<iostream.h>
void irekae(int& a, int& b)
{int temp; temp=a; a=b; b=temp;}
main(){ int a,b;
a=10; b=1; irekae(a,b);
cout<<"a="<<a<<"b="<<b<<endl;}
[3] 環境
 [3.1] OS: WindowsXP
 [3.3] 言語: C++
[4] 期限: 6月18日0時 (17日の24時)
485デフォルトの名無しさん:2009/06/16(火) 20:50:32
違いがわからない俺アホス
486デフォルトの名無しさん:2009/06/16(火) 20:52:11
>>481
入力の文章の形が微妙だけど、
文章内には改行なし/最後のみ改行の形を想定し
プログラムを作ってあります。

入力は何とでもなると思うので、
main関数内いじくってください。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9474.txt
487デフォルトの名無しさん:2009/06/16(火) 20:53:47
↑訂正
9行目:MAX_LEN -> MAX_LEN+1
488デフォルトの名無しさん:2009/06/16(火) 20:55:35
>>484
両方とも void irekae(int& a, int& b) を void irekae(int a, int b) にかえるだけだと思われ

思ったんだけど両方とも同じ問題じゃない?
489食う負名無:2009/06/16(火) 21:04:46
>>488
注意書き??ヒント??のようなところには『関数main で関数irekae を呼び出し a,bを入れ換えると(2)ではmainの中の実引数は入れ換わるが
(1)の実引数は入れ替わらない』と書かれています。

自分本当の初心者なので参照渡しと値渡しの違いも分からないのですが。。。
教えてください。
490初物:2009/06/16(火) 21:08:36
お願いしいますm(__)m
[1] 授業単元: C++を使ったプログラミング
[2] 問題文:
10個の数が与えられた時、その最大値を求める関数saidaiを作成して、
関数mainで10個の変数をキーボードから入力し、関数saidaiを呼び出して最大値を求め、
その最大値を関数mainで表示させるプログラムを作成しなさい。(※下記の例を参考にしても良い)

#include <iostream.h>
int saidai(int a[])
{
-文(宣言や最大値の計算)-
return max;
}
main()
{ int a[10];
-文(宣言や値の入力)-
max=saidai(a);
cout<<"最大値"<<'\t'<<max<<endl;
}
[3] 環境
 [3.1] OS: WindowsXP
 [3.3] 言語:C++
[4] 期限: 6/17 18:00
491デフォルトの名無しさん:2009/06/16(火) 21:21:55
>>490
#include <iostream>
using namespace std;

int saidai(int a[])
{
int max = a[0];
for (int i = 1; i < 10; ++i) if (max < a[i]) max = a[i];
return max;
}

int main()
{
int a[10];
int max;
for (int i = 0; i < 10; ++i) { cout << "a[" << i << "] = "; cin >> a[i]; }
max = saidai(a);
cout << "最大値\t" << max << endl;
return 0;
}
492初物:2009/06/16(火) 21:31:19
>>491
ありがとうございます。!
493デフォルトの名無しさん:2009/06/16(火) 21:45:31
[1] 授業単元:情報処理T
[2] 問題文(含コード&リンク):サブルーチンを使用した成績処理のプログラムを基に、それにさらに
構造体を取り込んだプログラムを作成しなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: TurboC
 [3.3] 言語: どちらでも可
[4] 期限: 2009年6月28日
[5] その他の制限:#include<stdio.h>の形で始まるようにお願いします。

よろしくお願いします。
494デフォルトの名無しさん:2009/06/16(火) 21:48:15
>>493
何を基にするのか分かんない
495食う負名無:2009/06/16(火) 21:54:18
484 お願いします。
496デフォルトの名無しさん:2009/06/16(火) 21:58:59
>>495
>>488
だいたい、こういう「どうなるか」とか「確かめよ」という問題は、
正しいプログラムを作る話とは限らないんだよ。
うまく行かないのを「確かめよ」ということだ。
497デフォルトの名無しさん:2009/06/16(火) 22:06:40
>>496
問題文にプログラミングを作り直せと書かれているんだから正しいプログラムを作れってことだろ??
というかそれができないから>>484は質問してんじゃない?
498デフォルトの名無しさん:2009/06/16(火) 22:10:57
>>497
その答えが>>488じゃねーの
499デフォルトの名無しさん:2009/06/16(火) 22:13:28
>>497
>>496に書いた「正しい」というのは、
問題文に対する正解と言う意味じゃなくて、
プログラムが意味のある処理をする意味で、正しいということ。
>>484 の問題の意図は、わざと間違ったプログラムを作れということで、
わざと間違ったプログラムを作ると、それが正解。

ともかく、正解はもう出てる。 >>488
エディタで置換すればいいだけだ。
500デフォルトの名無しさん:2009/06/16(火) 22:15:22
>>482
#include <stdio.h>

void main(void)
{
int i, j;
int n = 5;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (j == i || j == n-1-i) {
printf("★");
} else {
printf(" ");
}
}
printf("\n");
}
}
501デフォルトの名無しさん:2009/06/16(火) 22:15:34
>>496
悪かった。
502デフォルトの名無しさん:2009/06/16(火) 22:16:57
>>494
わかりにくくて申し訳ありませんでした。
サブルーチンを使っているプログラムなら何でもいいのでそこに構造体を取り込んだプログラムを作成せよという問題です。
それだけではわかりにくいだろうということで例として成績処理のプログラムをサブルーチンを使って作成して、それに構造体をという教授からの指示でした。

プログラム自体はなんでもいいのでサブルーチンと構造体を使用したものをお願いいたします。
503デフォルトの名無しさん:2009/06/16(火) 22:19:55
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):[0,1]の一様乱数をを発生させるプログラムを作成しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual Studio
 [3.3] 言語:C++
[4] 期限:6月22日まで
[5] その他の制限:特になし
504デフォルトの名無しさん:2009/06/16(火) 23:29:56
>>493
#include<stdio.h>
#include<stdlib.h>

typedef struct tag_student_t{
int id, score[3];
}student_t;

double average(student_t *student){
double ave=0.0;
int i;

for(i=0;i<3;i++) ave=(ave*i+student->score[i])/(i+1);
return ave;
}

int main(void){
student_t student[5];
int i, j;

for(i=0;i<5;i++){
student[i].id=i+1;
for(j=0;j<3;j++) student[i].score[j]=rand()%101;
}
for(i=0;i<5;i++){
printf("\nid:%d average:%-6.2f", student[i].id, average(&student[i]));
for(j=0;j<3;j++) printf(" %3d", student[i].score[j]);
}
return 0;
}
505デフォルトの名無しさん:2009/06/17(水) 00:48:16
[1] 授業単元: C言語
[2] 問題文 
(1)
文字列を受け取る関数(charポインタを使用)
その文字列の一番最後の文字を消去する関数を作る。
(2)
文字列を受け取る関数(charポインタ使用)
その文字列の一番最初の文字を消去する関数を作る。
(3)文字列を入力し、ある文字を入力。その文字列の中にその入力した文字がいくつあるかを数える関数。
例 文字列 asdfgvbfdcaa 文字aと入力したら 3となる
その関数は二つのパラメータをもち、一つ目は文字列へのポインタ、二つ目は数えた文字の数である。[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VisualC++;
 [3.3] 言語:C 
[4] 期限:6月19日
[5] その他の制限:問題文の指示のポインタは使用すること
506デフォルトの名無しさん:2009/06/17(水) 00:54:56
>>503 一様乱数
#include <iostream>
#include <stdlib.h>
#include <time.h>
using std::cout;
int main(void) {
  srand((unsigned int)time(0));
  cout << rand()/(double)RAND_MAX << std::endl; // [0,1]
}
507デフォルトの名無しさん:2009/06/17(水) 01:05:40
>>505
#include<stdio.h>

void remove_last_char(char *str){
if(str==NULL || *str=='\0') return;
for(;*(str+1);str++);
*str='\0';
}
void remove_first_char(char *str){
if(str==NULL || *str=='\0') return;
for(;(*str=*(str+1));str++);
}
int count_char(const char *str, int moji){
int count;

for(count=0;*str;str++) if(*str==moji) count++;
return count;
}
int main(void){
char buf[]="Hello good-morning. Mike.";

puts(buf);
remove_last_char(buf);
puts(buf);
remove_first_char(buf);
puts(buf);
printf("%d\n", count_char(buf, 'o'));

return 0;
}
508デフォルトの名無しさん:2009/06/17(水) 01:14:47
>>507
ありがとうございます。
509デフォルトの名無しさん:2009/06/17(水) 01:37:39
文字列操作系の問題はパズルみたいで面白いね
void delete_last_char(char *str) {
if (!str || !*str) return ;
while (*str++ = *(str+1)?*str:'\0');
}

void delete_first_char(char *str) {
if (!str || !*str) return ;
while (*str++=*(str+1)) ;
}

int count_char(const char *str, const char c) {
int count = 0;
if (!str || !*str) return 0;
while (count+=*str==c?1:0, *str++) ;
return count;
}
510デフォルトの名無しさん:2009/06/17(水) 01:41:58
>>504
助かりました。ありがとうございました。
511デフォルトの名無しさん:2009/06/17(水) 01:52:32
>>506の(3)の問題文をよく読んでるかい?
>一つ目は文字列へのポインタ、二つ目は数えた文字の数である。
                    〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
2つ目の引数は「文字」じゃなくて「文字数」っぽいよ
512デフォルトの名無しさん:2009/06/17(水) 01:53:37
安価ミス。ごめんなさい。
s/>>506/>>505/
513デフォルトの名無しさん:2009/06/17(水) 08:08:48
>>505

>>507じゃないけど>>511を反映してcount_charだけ書いてみた

#include<stdio.h>

void count_char(const char *str, int *count){
char moji;

printf("文字を1文字入力してください\n> ");
scanf("%c", &moji);

for(*count=0;*str;str++) if(*str==moji) (*count)++;
}

int main(void){
char buf[]="Hello good-morning. Mike.";
int *n;

puts(buf);

count_char(buf, n);
printf("%d\n", *n);

return 0;
}
514デフォルトの名無しさん:2009/06/17(水) 08:41:22
[1]授業単元:プログラミング演習1

[2]問題文:画面より入力した成績データをファイルに登録する。
画面より入力する項目は以下のとおり。
・生徒コード、数字6桁、数字であること。
・氏名、文字列20文字、1字以上、20字以内
・国語(点数)、数字3桁、数字であること、0<=点数<=100
・算数(点数)、国語と同じ
・社会(点数)、国語、算数と同じ


生徒コードに999999が入力されたら終了する。


[3]環境
[3.1]OS:Windows
[3.2]コンパイラ名とバージョン:C machine
[3.3]言語:C

[4]期限:明日

[5]その他の制限:入力は、gets()にて行い、ファイルに出力する。


期限ギリギリですが、よろしくお願いします。
515デフォルトの名無しさん:2009/06/17(水) 08:48:23
>>506
ありがとうございました
516デフォルトの名無しさん:2009/06/17(水) 09:09:26
517デフォルトの名無しさん:2009/06/17(水) 10:00:51
>>513
mainが危険だな
518デフォルトの名無しさん:2009/06/17(水) 10:08:00
>>516
ありがとうございます。

でも、点数や文字数などの判定はどうするんでしょうか?
519デフォルトの名無しさん:2009/06/17(水) 10:47:54
>>518
スマン、判定も必要だったのか
その場合、点数とかは指定された桁数で入力しないといけないの?
たとえば、国語の点数で
「85」と入力 => エラー
「085」と入力 => 成功
みたいな
520デフォルトの名無しさん:2009/06/17(水) 10:50:15
>>513
nは実体で定義してポインタ渡しじゃないとダメじゃね?
521デフォルトの名無しさん:2009/06/17(水) 10:58:13
>>517
>>520
ほんとだ
指摘thx

#include<stdio.h>

void count_char(const char *str, int *count){
char moji;

printf("文字を1文字入力してください\n> ");
scanf("%c", &moji);

for(*count=0;*str;str++) if(*str==moji) (*count)++;
}

int main(void){
char buf[]="Hello good-morning. Mike.";
int n;

puts(buf);

count_char(buf, &n);
printf("%d\n", n);

return 0;
}
522デフォルトの名無しさん:2009/06/17(水) 11:17:14
>>516 UTF-8 だとIE6で文字化けする。SJISならいい。
523デフォルトの名無しさん:2009/06/17(水) 12:00:21
>>519
桁は関係ないけど、0の三ケタ(000)は通らないようにしてほしいです。
524デフォルトの名無しさん:2009/06/17(水) 12:34:19
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
Q1:1 から10 までの数を,fprintf 関数を用いてファイルnumber.txt に書き込むプ
ログラムをつくりなさい。但し,各数字のあとに改行'\n'を挿入すること

Q2:作成したファイルの最後に文字列「Number File」を追加するプログラムも作りなさい。
fopen関数を用いてモードaを利用すること

Q3:作成したファイルを読み込んで表示するプログラムを作りなさい
fscanを利用すること
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C言語
[4] 期限: 6月20日
[5] その他の制限:なし
525デフォルトの名無しさん:2009/06/17(水) 12:39:23
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
 英語の文(最大80文字の文字列)をキーボードから入力し、文を構成する単
語(空白で区切られている)を1行に一つづつ表示するプログラムを作成せよ。
空白が2個以上連続してもうまく動作するようにすること。また、コンマ(,)、
ピリオド(,)は表示する単語に含めないこと。

(実行例)
・入力
  This is a pen.

・出力
  This
is
a
pen


[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:6月17日12時くらいまで

よろしくお願いします。
526デフォルトの名無しさん:2009/06/17(水) 12:48:47
>>525
>>222 と一緒?
527デフォルトの名無しさん:2009/06/17(水) 14:52:56
>>524
Q1
#include <stdio.h>

int main(void)
{
FILE *fp = fopen("number.txt", "w");
int i;
for (i = 1; i <= 10; ++i) fprintf(fp, "%d\n", i);
fclose(fp);
return 0;
}

Q2
#include <stdio.h>

int main(void)
{
FILE *fp = fopen("number.txt", "a");
fprintf(fp, "Number FILE");
fclose(fp);
return 0;
}
528デフォルトの名無しさん:2009/06/17(水) 14:58:46
>>524
Q3
#include <stdio.h>

int main(void)
{
FILE *fp = fopen("number.txt", "r");
char s;
while (fscanf(fp, "%c", &s) != EOF) putchar(s);
fclose(fp);
return 0;
}
529デフォルトの名無しさん:2009/06/17(水) 15:02:41
>>514 strncmp(buff,"00",2) を使う。付け足しをどこに入れるかは問題とする。
do {
puts("生徒コードを入力(999999を入力で終了)");
gets(code);
sts = sscanf(code,"%6d%c",&student_code,&dmy); // dmy 数字の後に文字が付く場合
if(sts == 1 && strlen(code) == 6 && student_code>=0)
break;
puts("数字6桁");
} while (1);
if (student_code == 999999) break;

do {
puts("名前を入力");
gets(name);
if(*name != '\0' && strlen(name) <= 20) break;
puts("1〜20文字まで");
} while (1);

do {
puts("国語の点数を入力"); gets(buff);
sts = sscanf(buff,"%d%c",&kokugo,&dmy);
if(sts == 1 && kokugo>=0 && kokugo<=100)
break;
puts("0点〜100点");
} while (1);
530デフォルトの名無しさん:2009/06/17(水) 15:21:20
>>525
#include <stdio.h>
#include <string.h>
#define BUFFSIZE 128
#define DELIMITER " \n\t,."
int main(void)
{
char buff[BUFFSIZE];
char *p = strtok(fgets(buff, BUFFSIZE, stdin), DELIMITER);
while (p) { puts(p); p = strtok(NULL, DELIMITER); }
return 0;
}
531デフォルトの名無しさん:2009/06/17(水) 17:59:48
画像を20度ずつ回転させるプログラムの宿題がだされました.
open cvの画像回転サンプルプログラムをfor文で変形できますか.
教えてください..
532デフォルトの名無しさん:2009/06/17(水) 18:23:39
>>529
STSとDMYの使い方がわからないんですが…

533デフォルトの名無しさん:2009/06/17(水) 18:29:28
>>532
>>529じゃないが、STSがstsのことを指してるならstatusのことだと思うよ
DMYがdmyのことを指してるならdummyのことだと思うよ
534デフォルトの名無しさん:2009/06/17(水) 19:05:33
535デフォルトの名無しさん:2009/06/17(水) 19:58:14
課題で行き詰まってしまいました。

外部のtxtファイルから英文を読み込み、単語ごとに配列に格納する関数(もしくはメイン文での処理)をお願いします。

txtの中身は>>481のような文章です。
空白、ピリオド、コロン、改行は格納する単語には含まれません。

 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 2009年06月18日13:00まで
536デフォルトの名無しさん:2009/06/17(水) 20:02:33
>>535
どこで行き詰ったの
537デフォルトの名無しさん:2009/06/17(水) 20:03:31
538デフォルトの名無しさん:2009/06/17(水) 20:07:43
>>535
#include <stdio.h>
#include <string.h>
#define BUFFSIZE 128
#define ARRAYSIZE 8192
#define DELIMITER " \n\t,."
int main(void)
{
char buff[BUFFSIZE];
char array[BUFFSIZE][ARRAYSIZE];
int i = 0;
while (fgets(buff, BUFFSIZE, stdin)) {
char *p = strtok(buff, DELIMITER);
while (p) { strcpy(array[i++], p); p = strtok(NULL, DELIMITER); }
}
return 0;
}
539デフォルトの名無しさん:2009/06/17(水) 20:09:56
>>536
getcでファイルから1文字ずつ受け取り、
if文で空白、ピリオド、コロン、改行をはじいて単語を表示させるところまではできたんですが、
その受け取った文字列を単語として扱うところで行き詰まってます。

単語の文字数をカウントして、単語配列の要素数に当てはめるまではいいんですが、
その後どうすればいいのか・・・orz
540デフォルトの名無しさん:2009/06/17(水) 20:11:54
>>538
char array[ARRAYSIZE][BUFFSIZE];
こうじゃね?
541デフォルトの名無しさん:2009/06/17(水) 20:14:43
>>540
そうですね。失礼しました。
542デフォルトの名無しさん:2009/06/17(水) 20:21:47
>>539
単語を入れるのに配列が必要で、たくさんの単語を入れるのに配列が必要なので
2次元配列を使うのがわりと楽だし、素直。
単語を取得することができてるなら後はそれを詰めるだけだよ。
あと少しがんばれ
543デフォルトの名無しさん:2009/06/17(水) 20:29:24
>>539
区切り文字ってあるでしょ?
それを受け取ったらそこで区切られれて単語が一個出来上がってる計算になるわけだ。
後で表示なりの処理が必要なら、どこかのバッファに一端保存しておいて、後でがんばる。
544デフォルトの名無しさん:2009/06/17(水) 20:40:23
>>538>>535にスルーされてしまったので書き直してみました。

#include <stdio.h>
#define BUFFSIZE 128
#define ARRAYSIZE 8192

int main(void)
{
FILE *fp = stdin; /* fopen("data.txt", "r"); */
char array[ARRAYSIZE][BUFFSIZE];
int i = 0, j = 0, c;
while ((c = getc(fp)) != EOF) {
if (c == ' ' || c == ',' || c == '.' || c == '\n') {
array[i++][j] = '\0';
j = 0;
}
else
array[i][j++] = c;
}
/* { int k; for (k = 0; k < i; ++k) puts(array[k]); } */
fclose(fp);
return 0;
}
545デフォルトの名無しさん:2009/06/17(水) 20:52:24
>>544
ありがとうございます。
参考にしてがんばります!
546529:2009/06/17(水) 20:59:08
>>532 >STSとDMYの使い方がわからないんですが…
#define MAX_CODE_LEMGTH 6
#define MAX_NAME_LEMGTH 20
int main()
char buff[BUFF_SIZE];
int student_code, sts;
char code[MAX_CODE_LEMGTH+1], name[MAX_NAME_LEMGTH+1], dmy;
547デフォルトの名無しさん:2009/06/17(水) 21:19:01
レミングスかとおもった
548デフォルトの名無しさん:2009/06/17(水) 22:16:09
[1] 授業単元: プログラミング論
[2] 問題文(含コード&リンク): C言語で三目並べをするプログラムの作成
C言語で三目並べ(いわゆる○×)をするプログラムを作成する。


条件
・コンピュータの手はランダムに決定するものとする(空いているところに打つ)
・盤面を表現する配列は3×3の二次元配列とし、グローバルに宣言する
・以下のような関数を作成すること:盤の表示、○×を打つ、3つ並んだかチェック
・他にも必要に応じて関数を宣言すること

ヒント集
・マスの状態は空:0 ○:1 ×:2など数値で定義するとよい。
・char stone[3][3]={"-","○","×"};などと宣言しておくと便利?
・9マスしかないので、9マス打ち切ったら終了→このとき勝敗が決まっていなければ引き分け
・ループの考え方は2通りできる
 1.先手後手がセットで1ループ、9マス目に先手が打ったらbreak
2.先手、後手それぞれ1ループ,nマス目は、n%2=0なら先手、n%2=1な  ら後手
・三目並んだかのチェックは工夫のしどころ
 ・手盤の人の石だけチェックする
 ・打ったところの縦横は必ずチェック、斜めはどうする?
・作っていく順
 ・石の入力+盤面表示、コンピュータの手番、3つ並んだかチェック、勝敗表示
 ・石の入力+盤面表示、3つ並んだかチェック、勝敗表示、コンピュータの手番

[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: Visual Studio
 [3.3] 言語: C++
[4] 期限: 2008年6月29日
[5] その他の制限: 上記の旨
549デフォルトの名無しさん:2009/06/17(水) 22:29:47
[1] 授業単元: C
[2] 問題文(含コード&リンク): char型の取りうる値の範囲は-128〜127である。この
範囲をこえるとどうなるか試しなさい
(a)char型変数に-128を代入し、そこから1をひくと変数の内容はいくつになるか
(b)char型変数に127を代入し、そこへ1を足すと変数の内容はいくつになるか
なお、上記の動作をするプログラムをコンパイルしようとすると「this decimal constant is
unsigned only in ISO C90」のような警告が表示されることがある。故意に範囲を超えようとしているので、
今回に限りこの警告を無視してもよい。

[3] 環境
 [3.1] OS Linux
[3.2]gcc
[3.3]c
[4]2009年6月19日

[5] まだ初めて2日です。変数と式ってとこでみんなが何やってるか
わからない状態です。
550デフォルトの名無しさん:2009/06/17(水) 22:38:28
>>548
[4] 期限: 2008年6月29日
2008年?
551デフォルトの名無しさん:2009/06/17(水) 22:59:52
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
cos(x)とx軸で囲まれる領域において、xがa〜bの区間の面積を台形積分で求めるプログラムを作成しなさい。
なお、aとbは引数として与えるようにすること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限: 2008年6月22日
[5] その他の制限:そこまで理系な頭じゃないもので、問題文の意味が分からない状態です。
ネットで調べても台形公式の例なら出てくるんですが、cos(x)とx軸で囲まれた・・・のところが分かりません。

よろしくお願いします。
552デフォルトの名無しさん:2009/06/17(水) 23:02:58
最近のカリキュラム知らないんだけど、文系は三角関数習わないの?
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Sin_and_cos.png
cos(x)のグラフはこの黄緑のやつだよ。
553551:2009/06/17(水) 23:03:16
2008年→2009年です。すいません。
554デフォルトの名無しさん:2009/06/17(水) 23:06:57
[1] 授業単元: c言語演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9478.txt
[3] 環境
 [3.1] OS: Windowsvista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限:6月19日18時まで
[5] その他の制限:簡単めのコードでお願いします。
555デフォルトの名無しさん:2009/06/17(水) 23:10:14
さっきから宿題多くね?とおもってたら宿題スレだったワロス
556デフォルトの名無しさん:2009/06/17(水) 23:12:00
[1] 授業単元: C
[2] 問題文(含コード&リンク):六科目の試験の得点を入力すると、合計点と平均点を出力するプログラムを作成せよ

[3] 環境
[3.1]LInux
[3.2] gcc
[3.3]C
[4]2009年6月18日

[5]scanfぐらいまでしかならってないです。お願いします
557デフォルトの名無しさん:2009/06/17(水) 23:12:06
「実際の応用プログラムでは」ソートロジックなんかとんと書かんなw
558デフォルトの名無しさん:2009/06/17(水) 23:15:30
>>551
// ∫[a,b] |cos(x)|dx の意味だと解釈して
#include <stdio.h>
#include <math.h>

double f(double x) {
return abs(cos(x));
}

int integral(double a, double b)
{
int i;
int n = 100;
double h = (b - a) / n;
double sum = 0.0;
for (i = 0; i < n; i++) {
double x = a + h * i;
sum += (f(x) + f(x+h)) / 2;
}
return sum;
}

int main()
{
printf("%f\n", integral(0, 3.14));
return 0;
}
559デフォルトの名無しさん:2009/06/17(水) 23:17:47
>>558
ミスった
#include <stdio.h>
#include <math.h>

double f(double x) {
return fabs(cos(x));
}
double integral(double a, double b) {
int i;
int n = 100; // 分割数
double h = (b - a) / n; // 刻み幅
double sum = 0.0;
for (i = 0; i < n; i++) {
double x = a + h * i;
sum += (f(x) + f(x+h)) * h / 2;
}
return sum;
}
int main() {
printf("%f\n", integral(0, 3.14));
return 0;
}
560デフォルトの名無しさん:2009/06/17(水) 23:20:39
[1] 授業単元: C
[2] 問題文(含コード&リンク):アルファベットの小文字を大文字に変換するプログラムを作成せよ
ヒント: 'a'〜'z'は連続した文字コードが割り当てられている。'A'〜'Z'も連続した文字コードが割り当てられている。すなわち、'a'の文字コード
     にある定数を足す(または引く)と'A'になり、'b'にその定数を足す(または引く)と'B'になる。この定数さえ求められれば、簡単に計算できることがわかる。
     定数は、'a'や'A'を使えば計算できる。
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]2009年6月18日
[5]scanfぐらいまでしかならってません。なにもわからない初心者ですお願いします


561デフォルトの名無しさん:2009/06/17(水) 23:26:18
>>560 書いただけ。
char toupper(char c) {
  if(c>='a'&&c<='z') return c+'A'-'a';
  else return c;
}
562デフォルトの名無しさん:2009/06/17(水) 23:32:38
>>557
だからソートアルゴリズムも問わないってなってんだとおもった
563デフォルトの名無しさん:2009/06/17(水) 23:34:11
[1] 授業単元: C
[2] 問題文(含コード&リンク):コンピューターは2進数で計算をおこなうため、2のn乗の和で表現できる数値の表現は得意である。
               しかし0.1のような数値は2のn乗の和で表現できないため、どうしても誤差が発生する。実際にどれくらいの誤差が出るか試せ
(a)float型の変数num1に1を、num2へ0を代入せよ
(b)num2に0.1を足す文を10回書け。1行で書かないこと。
(c)num1とnum2の差がどれだけあるか表示せよ。ただし、%fそのままではその差が表示されないので、
 小数点以下を23桁程度表示できるように指定すること。

[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]2009年6月18日
[5]素人です、お願いします
564デフォルトの名無しさん:2009/06/17(水) 23:40:02
有効桁23桁??
floatの有効桁は23ビットだから7桁弱だろ?写し間違い?
565デフォルトの名無しさん:2009/06/17(水) 23:56:32
お前こそ何を言っているんだ
566デフォルトの名無しさん:2009/06/18(木) 00:01:18
7桁精度だから小数第7位以下に誤差が出る。
printfが%fで表示する際にdoubleの15桁くらいまで頑張ってくれる。
足して小数点以下22〜23桁を表示する。
567デフォルトの名無しさん:2009/06/18(木) 00:03:27
>>566
足す理由はよく分からないが
無効桁まで表示したいだけじゃないか?
568デフォルトの名無しさん:2009/06/18(木) 00:04:08
>>556
for文を習ってないなら、
scanfとsum =の2行を6回書いてください。

#include <stdio.h>
int main(void){
int i,temp,sum=0;
double ave;

for(i=0;i<6;i++){
scanf("%d",&temp);
sum = sum + temp;
}

ave = sum/6.0;
printf("sum = %d, ave = %f\n",sum,ave);

return 0;
}
569デフォルトの名無しさん:2009/06/18(木) 00:04:45
>>567
頭7桁は0.000000だから。「小数点以下」ってとこ読み落としてる?
570564:2009/06/18(木) 00:06:15
orz
でも23桁は無理じゃね?
571デフォルトの名無しさん:2009/06/18(木) 00:07:42
%eならわかる
572デフォルトの名無しさん:2009/06/18(木) 00:10:53
>>563
#include<stdio.h>

int main(void){
float num1=1.0, num2=0.0;

num2+=0.1;
num2+=0.1;
num2+=0.1;
num2+=0.1;
num2+=0.1;
num2+=0.1;
num2+=0.1;
num2+=0.1;
num2+=0.1;
num2+=0.1;
printf("%.23f\n", num1-num2);

return 0;
}
573デフォルトの名無しさん:2009/06/18(木) 00:20:56
>>572
こういう風に単純に同じのコピペしたコードって
volatileつけないと最適化されてしまったりしない?
574デフォルトの名無しさん:2009/06/18(木) 00:21:50
>>573
-O0 とか指定してやってください
575デフォルトの名無しさん:2009/06/18(木) 00:23:11
「num2+=0.1f;」としなくて良いかどうかは、問題文からは分からないな。
まー、誤差が二通り出るのも含めて学習意図かもしれないが。
576デフォルトの名無しさん:2009/06/18(木) 00:30:12
>>549

#include <stdio.h>

int main(void){
char a = -128;
char b = 127;

printf("char[-128] = %4d\n",a);
a--;
printf("char[-129] = %4d\n",a);

printf("char[ 127] = %4d\n",b);
b++;
printf("char[ 128] = %4d\n",b);

return 0;
}
577デフォルトの名無しさん:2009/06/18(木) 01:17:42
>>534
皆さんありがとうございます。
無事に提出できそうです。
578デフォルトの名無しさん:2009/06/18(木) 01:56:19
>>552
>>558
ありがとうございます。
助かりました。
579デフォルトの名無しさん:2009/06/18(木) 01:56:37
580デフォルトの名無しさん:2009/06/18(木) 02:44:49
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文: 人の名前(ローマ字)を検索(部分一致)することができるプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 今日の午前
[5] その他の制限: 検索できる機能が充実していれば他は特にないです。よろしくお願いします。
581デフォルトの名無しさん:2009/06/18(木) 02:55:51
>>580
exec*()とgrep(1)かregex.hを利用する。
strstr()でもいいかもしれないが、やる気がしない。
今、プリプロセッサをハック中だから無理無理絶対無理。
582デフォルトの名無しさん:2009/06/18(木) 03:06:13
execとgrepてw
ハックがんばってね
583デフォルトの名無しさん:2009/06/18(木) 10:49:32
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
   英語の文(最大80文字の文字列)をキーボードから入力し、文を構成する単
語(空白で区切られている)を1行に一つづつ表示するプログラムを作成せよ。
空白が2個以上連続してもうまく動作するようにすること。また、コンマ(,)、
ピリオド(,)は表示する単語に含めないこと。

(実行例)
・入力
  This is a pen.

・出力
  This
is
a
pen


[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語: C
[4] 期限: 2009年6月19日12:00まで
[5] その他の制限: なし

お願いします。
584デフォルトの名無しさん:2009/06/18(木) 11:05:25
おかと違いの質問だったら申し訳ありませんが・・・
配列の取得(コピー)メソッドを作成した場合↓

class Hoge {
vector<int> m_aData;
public:
vector<int> getData() { return m_aData; }      
void      getData(vector<int>& aData) { aData = m_aData; }
};

int main() {
Hoge hoge;
vector<int> aData00, aData01;
aData00 = hoge.getData(); //@
hoge.getData( aData01 ); //A

}

上記の@とAの場合、
@はm_aDataのコピーのコピーをaData00に格納している
Aはm_aDataのコピーを格納している
で正しいですか?

@はgetData()のreturn時にコピーが返され、それをさらに、aData00にコピー渡しすると思っていいます。
585デフォルトの名無しさん:2009/06/18(木) 11:11:58
>>583

#include <stdio.h>
#define BUFF_SIZE (80 + 1)

int main()
{
int i;
char buff[BUFF_SIZE];

printf("英文を入力してください(80字以内)\n> ");
fgets(buff, BUFF_SIZE, stdin);

for(i = 0; buff[i] != '\0'; i++) {
if(buff[i] == ' ') {
puts("");
while((i + 1) < BUFF_SIZE && buff[i + 1] == ' ')
i++;
}
else if(!(buff[i] == ',') && !(buff[i] == '.')) {
printf("%c", buff[i]);
}
}

return 0;
}
586デフォルトの名無しさん:2009/06/18(木) 11:17:15
>>584
マルチスレッド対応でリアルタイム処理可能かどうかに
関わってくる問題なので処理系依存
587デフォルトの名無しさん:2009/06/18(木) 11:56:54
>>583
#include <stdio.h>
#define INPUT_LEN 80

int main(void)
{
  char input[INPUT_LEN + 2];
  int i, ls;
  
  fgets(input, INPUT_LEN + 2, stdin);

  for (i = 0, ls = 0; input[i]; ++i)
  {
    if (ls && input[i] == ' ') {
      fputc('\n', stdout);
      ls = 0;
    }
    else if (input[i] != ' ' && input[i] != ',' && input[i] != '.' && input[i] != '\n') {
      fputc(input[i], stdout);
      ls = 1;
    }
  }
}
588デフォルトの名無しさん:2009/06/18(木) 11:59:35
[1] 授業単元:システムコール
[2] 問題文(含コード&リンク):以下のようなプログラムを、それぞれ書け
1.まずpwdを実行し、成功すれば、lsを実行
ただし、コマンドライン引数はすべてls にそのまま渡すものとする.
2.オプション-cがあれば、dateを実行しその後calを実行.オプションを指定しなければdateだけを実行.
ただし、オプション-z timezoneがあれば、環境変数TZの値をtimezoneに設定して各コマンドを実行.
pwdを実行し、成功すればls -lを実行するプログラム
# voyager1.c execl()を使用:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9481.c
# voyager2.c execv()を使用:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9482.c
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:2009年06月24日12:00まで
[5] その他の制限:特になし

何がなんだか
よろしくお願いします
589デフォルトの名無しさん:2009/06/18(木) 13:49:40
>>585>>587
ありがとうございました。
590デフォルトの名無しさん:2009/06/18(木) 14:55:54
【質問テンプレ】
[1] 授業単元:応用数学
[2] 問題文(含コード&リンク):
1.e^xをx=1,5,10,15,20,-1,-5,-10,-15,-20について、次のテイラー展開で計算し、math.hの関数exp(x)の結果と比較せよ。
e^x=1+x+x^2/2!+x^3/3!+…
2.関数fのxにおける微分は以下のように定義される:f'(x)={f(x+h)-f(x)}/h
上の式を適応してx=1におけるf(x)=e^xの微分値を計算し、e=2.71828183と比較して誤差を計算せよ。
  ただし、h=10^0,10^1,10^2,…,10^11とすること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: borland c++
 [3.3] 言語: C++
[4] 期限: 6/18(木)24:00まで
[5] その他の制限: 特になし

よろしくお願いします。
591デフォルトの名無しさん:2009/06/18(木) 16:06:43
1] 授業単元: C
[2] 問題文(含コード&リンク):試験の点数(100点満点)を入力すると、評価値(A+,A,B,C,F)を表示する
プログラムを作れ90〜100A+80〜89A70〜79B60〜69C0〜59Fそれ以外error
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月19
[5]素人です
592デフォルトの名無しさん:2009/06/18(木) 16:11:54
1] 授業単元: C
[2] 問題文(含コード&リンク):入力した文字の種類を表示するプログラムを作成せよ。ただし、表示は次に従うとする
入力キーA〜Z 表示メッセージ 英大文字です
入力キーa〜z 表示メッセージ  英小文字です
入力キー0〜9 表示メッセージ  数字です
上記以外    表示メッセージ  その他のキャラクターです

[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月19まで
[5]
593デフォルトの名無しさん:2009/06/18(木) 16:16:44
1] 授業単元: C
[2] 問題文(含コード&リンク):会員番号に基づき5つのグループA,G,P,Q,Uに分けたい。会員番号を5で割ったあまりが0ならAグループ、
               1ならGグループ、2ならPグループ、3ならQグループ、4ならUグループとする。会員番号を入力するとグループ名を出力するプログラムを
               switch文を使って作れ。また、0や負の数が入力されたらエラーを表示して終了するようにすること
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C

[4]6月19日
[5]お願いします
594デフォルトの名無しさん:2009/06/18(木) 16:32:28
>>591
問題文の通りに作ったけど、Cの次がFっておかしい気がする

#include<stdio.h>

int main(void){
int a;
printf("点数を入力してください\n");
scanf("%d",&a);
if(a>100||a<0){
printf("error");
}
else if(a>=90){
printf("A+");
}
else if(a>=80){
printf("A");
}
else if(a>=70){
printf("B");
}
else if(a>=60){
printf("C");
}
else if(a>=0){
printf("F");
}
}
595デフォルトの名無しさん:2009/06/18(木) 16:40:43
>>592
ctype.h
isupper が真、入力キーA〜Z 
islower が真、入力キーa〜z 
isdigit が真、入力キー0〜9
isalnum が偽、上記以外
596デフォルトの名無しさん:2009/06/18(木) 16:43:19
>>593
#include<stdio.h>

int main(void){
long id=0;
char *group_name[]={"A", "G", "P", "Q", "U"};

printf("\n会員番号を入力してください : ");
scanf("%ld", &id);
if(id<=0){
printf("\nエラー\n");
return 1;
}

switch(id%5){
case 0:
case 1:
case 2:
case 3:
case 4:
printf("グループ%s\n", group_name[id%5]);
break;
}
return 0;
}
597180:2009/06/18(木) 16:45:45
>>591
# include <stdio.h>

void tensu(int n);
int main(){
int n;
printf("点数...");
scanf("%d", &n);
tensu(n);
return 0;}
void tensu(int a)
{

if(a > 100)
printf("error");
else if(a >= 90)
printf("評価...A+\n");
else if(a >= 80)
printf("評価...A\n");
else if(a >= 70)
printf("評価...B\n");
else if(a >= 60)
printf("評価...C\n");
else if(a >= 0)
printf("評価...F\n");
else
printf("error\n");}

//先客がいたとはw
>>594
大学の成績評価だと60未満は単位をFailしたってことだろ。
598デフォルトの名無しさん:2009/06/18(木) 16:53:33
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9483.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 1週間後まで
[5] その他の制限:
           
599デフォルトの名無しさん:2009/06/18(木) 16:58:53
>>598
#include<stdio.h>

unsigned gcd(unsigned m, unsigned n){
unsigned x;

while((x=m%n)) m=n, n=x;
return n;
}

int main(void){
unsigned a=60, b=20, c=16;

printf("%u\n", gcd(gcd(a, b), c));

return 0;
}
600デフォルトの名無しさん:2009/06/18(木) 17:04:27
>>599
すいませんが、初心者なのでunsignedというのが解りません。
なるべく難しいものを使わずに、教えて下さい。
601デフォルトの名無しさん:2009/06/18(木) 17:07:09
>>600
unsigned をすべて int にすればおk
602デフォルトの名無しさん:2009/06/18(木) 17:07:29
unsignedはunsigned int のこと
603デフォルトの名無しさん:2009/06/18(木) 17:17:50
必死で作ってみたけど>>599のほうがいいのかな
でもキーボードからの入力って要件を満たしてるから一応書いとく
#include<stdio.h>
int gcd(int m,int n);
int main(void){
int a,b,c,yakusuu1,yakusuu2;
printf("数値を3つ入力してください。\n");
scanf("%d%d%d",&a,&b,&c);
if(b==0){
b=a;
}
if(c==0){
c=a;
}
yakusuu1=gcd(a,b);
yakusuu2=gcd(yakusuu1,c);
printf("%d",yakusuu2);
return 0;
}

int gcd(int m,int n){
int r1=1;
while(r1!=0){
r1=m%n;
m=n;
if(r1==0){
break;
}
n=r1;
}
return n;
}
604デフォルトの名無しさん:2009/06/18(木) 17:35:35
printf("数値を3つ入力してください。\n");
scanf("%d%d%d",&a,&b,&c);
要件を満たしてるとはいえ、これはちょっとと思わなくもないけど
605デフォルトの名無しさん:2009/06/18(木) 17:48:40
じゃあどういう風にすればもっとよいのか
606デフォルトの名無しさん:2009/06/18(木) 17:54:51
>>605

printf("a...");
scanf("%d",&a);
printf("b...");
scanf("%d",&b);
printf("c...");
scanf("%d",&c);

607デフォルトの名無しさん:2009/06/18(木) 17:59:00
ヨッシーが産まれた
608デフォルトの名無しさん:2009/06/18(木) 19:11:08
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
整数データを節点に持つ2分木は、
typedef struct node *Tree;
typedef struct node {
int data;
Tree left_subtree;
Tree right_subtree;
} Node;
と定義された構造体を木の節点としてポインタで
繋げることによって表すことができる。この様に表された
2分木の根節点へのポインタが引数として与えられた時、
その2分木の高さを調べて返す関数
int height(Tree t);
を定義せよ。ただし、height(NULL) = -1を用いる。


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限:特になし
609デフォルトの名無しさん:2009/06/18(木) 19:15:43
>>608
このスレ内で回答済み
610デフォルトの名無しさん:2009/06/18(木) 19:51:34
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
4つのCソースファイルaaa.c,bbb.c,xxx.c,yyy.cが用意されたディレクトリ
内で、2種類のコンパイル
gcc -o ax aaa.c xxx.c -lm
gcc -o bxy bbb.c xxx.c yyy.c
を効率よく行うためのMakefileを書け。もちろんo.ファイルも生成する。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限:今日中にお願いします。

よろしくお願いします。
611デフォルトの名無しさん:2009/06/18(木) 20:02:48
ヘッダファイルがないんだね
612デフォルトの名無しさん:2009/06/18(木) 20:08:16
ヘッダファイルw
依存関係に必要とは限らないからな
613デフォルトの名無しさん:2009/06/18(木) 20:11:53
あれ?ヘッダファイルって言葉おかしかった?
まあ、.hがないならないで.c間の依存関係が必要だと思うんだけど
614デフォルトの名無しさん:2009/06/18(木) 20:12:37
>>610
make によって書き方が違うからよく分かんない
$(CC) って書いたり $* の書き方が違ったりする

CC=gcc

.SUFFIXES: .c .o

ax: aaa.o xxx.o
${CC} -o $@ $* -lm

bxy: bbb.o xxx.o yyy.o
${CC} -o $@ $*

.c.o:
${CC} -c $<
615デフォルトの名無しさん:2009/06/18(木) 20:19:39
[1] 授業単元: C初心者コース
[2] 問題文(含コード&リンク):試験の点数(100点満点)を入力すると、評価値(A+,A,B,C,F)を表示する
プログラムを作れ90〜100A+80〜89A70〜79B60〜69C0〜59Fそれ以外error
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月19日
[5]if文(gotoは論外)while do while for等 ループ文を使ってはいけないそうです

616デフォルトの名無しさん:2009/06/18(木) 20:28:44
617デフォルトの名無しさん:2009/06/18(木) 21:07:03
>>608
ほとんど自分の練習のため作った。結構本気で作ったが動作は保障しない。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9484.zip

次回はスレッドをちゃんと検索しような!
618610:2009/06/18(木) 21:11:40
自分で作ってみたのが下のものなんですが、o.ファイルが作られませんでした。
どうでしょう?
これを何とかならないでしょうか?

CC = gcc

SRCS_AX = aaa.c xxx.c
SRCS_BXY = bbb.c xxx.c yyy.c

ax: ${SRCS_AX}
  ${CC} -o ax ${SRCS_AX} -lm

bxy: ${SRCS_BXY}
  ${CC} -o bxy ${SRCS_BXY}

aaa.o: aaa.c
  ${CC} -c aaa.c -lm

bbb.o: bbb.c
  ${CC} -c bbb.c

xxx.o: xxx.c
  ${CC} -c xxx.c

yyy.o: yyy.c
  ${CC} -c yyy.c
619デフォルトの名無しさん:2009/06/18(木) 21:18:11
>>615
デバッグあんまりしてないから、検算してね!
あと、動作は保障しない。

#include <stdio.h>

int main(){
    int Point=0;
    puts("Input Point");
    scanf("%d",&Point);
    switch(Point/10){
        case 10:case 9: puts("Your Rank Is A+");break;
        case 8: puts("Your Rank Is A");break;
        case 7: puts("Your Rank Is B");break;
        case 6: puts("Your Rank Is C");break;
        case 5:case 4:case 3:case 2:case 1:case 0:
            puts("Your Rank Is F");break;
        default:
            puts("Errer:Out Of Range");break;
    }
    return 0;
}
620デフォルトの名無しさん:2009/06/18(木) 21:18:42
>>618
順番に見ていったらいい。
axを作るよ
 aaa.c xxx.c が更新されてるなら
  ${CC} -o ax ${SRCS_AX} -lm
 (更新されてないなら何もしない)

aaa.oを作るよ、という動機(依存関係)がかかれていないから
aaa.o: aaa.cのルールは使われない

make aaa.o とやれば作られるが、そういう話でもない。
621デフォルトの名無しさん:2009/06/18(木) 21:47:05
>>618

教科書 P.316 例14.7を参考にしてみては?
622>>615:2009/06/18(木) 22:05:53
>>616>>617

ありがとうございます!


同じ学校同じ学科のヤシがいっぱいいる
バロス
623デフォルトの名無しさん:2009/06/18(木) 22:25:43
[1] 授業単元:c++
[2] 問題文:√(x)をsqrtを使わず、足し算掛け算でもとめるプログラム。
        r1*r2=xとおいて、考える。while文を使う。
        
[3] 環境
 [3.1] OS: Windows xp
 [3.3] 言語: C++
[4] 期限: 2009年6月22日
[5] その他の制限:sqrtをつかわない。

お願いします(><)
自分でも考えてみましたがどうしてもうまくいかないので・・・
624デフォルトの名無しさん:2009/06/18(木) 23:24:53
>>623
二分法かニュートン法使うしかないな
他の方法は収束が遅すぎる
625デフォルトの名無しさん:2009/06/18(木) 23:48:15
>>623
#include <stdio.h>
int main()
{
double x = 2.0;
double r1 = 0, r2 = x;
double m = x / 2;
int n = 100;
while (n--) {
if (m * m - x < 0) {
r1 = m;
} else {
r2 = m;
}
m = (r1 + r2) / 2;
}
printf("%f\n", m);
return 0;
}
626デフォルトの名無しさん:2009/06/19(金) 00:03:06
これじゃあ、x < 1 でうごかねー、訂正。
#include <stdio.h>
int main()
{
double x = 0.25;
double r1 = 0, r2 = (x < 1.0) ? 1.0 : x;
int n = 100;
while (n--) {
double m = (r1 + r2) / 2;
if (m * m - x < 0) {
r1 = m;
} else {
r2 = m;
}
}
printf("%f\n", (r1+r2)/2);
return 0;
}
627デフォルトの名無しさん:2009/06/19(金) 00:33:09
【質問】
#define square(x) x*x
4
ではなくて
#define square(x) (x*x)

と定義しなければならない理由を教えて下さい
628デフォルトの名無しさん:2009/06/19(金) 00:34:37
>>627
どっちもだめじゃね?
629デフォルトの名無しさん:2009/06/19(金) 01:07:44
#define square (x) (x) * (x) だろ
630デフォルトの名無しさん:2009/06/19(金) 01:08:33
つまりこのマクロに x++ とかを与えた時にどうなるか考えてみるとよい
631デフォルトの名無しさん:2009/06/19(金) 01:09:38
>>590
1.
#include <stdio.h>
#include <math.h>

#define TAYLOR_EXPANSION_TARM 50

double e_Taylor(double x, int max_tarm);
double factorial(int i);

double x_in[] = {1.0, 5.0, 10.0, 15.0, 20.0, -1.0, -5.0, -10.0, -15.0, -20.0};

int main(void)
{
int i;
int x_size = sizeof(x_in)/sizeof(x_in[0]);

printf("Taylor expansion term number : %d\n", TAYLOR_EXPANSION_TARM);
puts("x,exp(x),e_Taylor(x),error");

for (i = 0; i < x_size; i++)
{
double e_lib_value = exp(x_in[i]);
double e_Taylor_value = e_Taylor(x_in[i], TAYLOR_EXPANSION_TARM);
printf(
"%d,%e,%e,%e\n",
(int)x_in[i], e_lib_value, e_Taylor_value, e_Taylor_value-e_lib_value
);
}

return 0;
}
632デフォルトの名無しさん:2009/06/19(金) 01:10:19
>>590
double e_Taylor(double x, int max_tarm)
{
double value = 0.0;

int i;
for (i = 0; i < max_tarm; i++)
{
value += pow(x, (double)i) / factorial(i);
}

return value;
}

double factorial(int n)
{
double value = 1.0;

int i;
for (i = n; i > 0; i--)
{
value *= (double)i;
}

return value;
}
633デフォルトの名無しさん:2009/06/19(金) 02:01:34
[1] 授業単元: 情報基礎
[2] 問題文(含コード&リンク):
  
  正整数nを超えない奇数の和を求める関数oddsum()を作成する。
  nは引数としてこの関数に渡す。
  この関数を用い、いくつかの整数を入力し、それぞれに関するoddsum()を計算するプログラムを作成せよ。
  データの終わりは0または不の数が現れたことで判定する。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: C++builder
 [3.3] 言語: C
[4] 期限: 2009年6月19日13:00まで
[5] その他の制限:なし

よろしくお願いします。
634デフォルトの名無しさん:2009/06/19(金) 02:46:11
>>633
データの入力は標準入力からにしたけど、こんな感じでいい?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9485.txt
635デフォルトの名無しさん:2009/06/19(金) 02:55:21
[1] 授業単元: C
[2] 問題文(含コード&リンク):int型のとりうる値の範囲は-2147483648(=-2の31乗)〜2147483647(=2の31乗-1)である。>>549の問題と
               同様に、範囲をこえるとどうなるか試しなさい。
               なお、上記の動作をするプログラムをコンパイルしようとすると、「this decimal constant is unsigned only in ISO C90」のような警告がひょうじsれることがある。
               故意に範囲を越えようとしているので、今回に限りこの警告を無視してもよい。
「3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]
[5]5月20日
636デフォルトの名無しさん:2009/06/19(金) 02:58:40
>>634
oddsum(1)==0 ?
637デフォルトの名無しさん:2009/06/19(金) 03:00:41
>>635
#include<stdio.h>
int main(void){
int i,a=1;
for(i=1;i<33;i++){
printf("%d\n",a);
a=a*2;
}
return 0;
}
638デフォルトの名無しさん:2009/06/19(金) 03:03:39
すいません>556の問題なんですが。表示は
例  国語の得点:83
   数学の得点:100 
   英語の得点:98
   化学の得点86  
   物理の得点:90
   世界史の得点80
 合計点は537点です
 平均点は89.5点です

のように表示したいんですが、どなたか関数を使わずにする書き方ご教授お願いします。
639デフォルトの名無しさん:2009/06/19(金) 03:05:19
>>560の問題なんですが>>561のようにやってもできないんですが、
どなたか丁寧に教えていただけないでしょうか?
640デフォルトの名無しさん:2009/06/19(金) 03:07:13
>>639
>>561はやりかたを書いているわけじゃない
>>639が何を行ったか書かないと、何を教えればわからないだろjk
641デフォルトの名無しさん:2009/06/19(金) 03:12:04
すいません>>592の問題なんですが。
表示結果の例として
 判別したい文字:H
 英大文字です
 判別したい文字:ж
 その他のキャラクターです 

と表示されるようにしたいんですが、どなたかご教授お願いします。
642デフォルトの名無しさん:2009/06/19(金) 03:13:28
>>635
期限過ぎてるなw

#include <stdio.h>

int main(void){
int smallest = -2147483648; /* int型のとりうる最小値 */
int largest = 2147483647; /* int型のとりうる最大値 */

printf("int(-2147483648) = %d\n", smallest); /* int型のとりうる最小値を表示 */
smallest--; /* 1だけ減算(下限をこえる) */
printf("int(-2147483649) = %d\n",smallest); /* 下限をこえた値を表示 */

printf("int(2147483647) = %d\n",largest); /* int型のとりうる最大値を表示 */
largest++; /* 1だけ加算(上限をこえる) */
printf("int(2147483648) = %d\n",largest); /* 上限をこえた値を表示 */

return 0;
}
643デフォルトの名無しさん:2009/06/19(金) 03:14:29
>>641
全角かよw
それは手ごわい
644デフォルトの名無しさん:2009/06/19(金) 03:19:53
>>638
#include<stdio.h>

int main(void){
int kokugo,suugaku,eigo,kagaku,buturi,sekaisi,sum;
double ave;
printf("国語の点数…\n");
scanf("%d",&kokugo);
printf("数学の点数…\n");
scanf("%d",&suugaku);
printf("英語の点数…\n");
scanf("%d",&eigo);
printf("化学の点数…\n");
scanf("%d",&kagaku);
printf("物理の点数…\n");
scanf("%d",&buturi);
printf("世界史の点数…\n");
scanf("%d",&sekaisi);
sum=kokugo+suugaku+eigo+kagaku+buturi+sekaisi;
ave=(double)sum/6;
printf("合計点は%dです。\n",sum);
printf("平均点は%4.1fです。",ave);
return 0;
}
645デフォルトの名無しさん:2009/06/19(金) 03:40:04
すいません>>593の問題についてなんですが表示結果の例として
 会員番号:3524
Uグループです。
 会員番号:0
 会員番号が適切ではありません。

のように作れと書いてあるんですが、>>596のように書いたんですがうまくいかないです。
あと>>596のlongとかreturn1の意味がわからないんですが・・。素人なものなんで何が何かわからない状態です
どなたかご教授お願いします。
646デフォルトの名無しさん:2009/06/19(金) 03:48:02
注文が多いとスルーされるよ
647デフォルトの名無しさん:2009/06/19(金) 03:49:34
>>645
そんな指示は初耳でござる
648デフォルトの名無しさん:2009/06/19(金) 03:53:14
[1] 授業単元: C
[2] 問題文(含コード&リンク):正の整数nについて、1の二乗+2の二乗+3の二乗+・・・・・nの二乗の値を求めるプログラムを作成せよ。ただし、0や負の数が入力された場合はプログラムが終了するようにせよ。
   表示結果の例として
正の整数:17
1から17までの2乗和は1785です。
正の整数:0
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月20日まで
[5]繰り返しまでです
649デフォルトの名無しさん:2009/06/19(金) 03:59:23
>>648
#include<stdio.h>

int main(void){
int a=0,n,i;
printf("n…\n");
scanf("%d",&n);
if(n<=0){
return 0;
}
for(i=1;i<=n;i++){
a=a+i*i;
}
printf("%d",a);
return 0;
}
650デフォルトの名無しさん:2009/06/19(金) 04:01:55
[1] 授業単元: C
[2] 問題文(含コード&リンク):キーボードから入力された1以上の整数nについて、次の例に示すように行番号と*を表示するプログラムを作成せよ
。なお、*の数は、1行目はn個とし、1行毎に1ずつへっていくこととする。また、0や負の数が入力された場合はプログラムが終了するようにせよ。
表示結果の例
正の整数:7
1*******
2******
3*****
4****
5***
6**
7*
のように作れとのことです。

[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月20日
[5]繰り返しまでです、関数まではいっていません、お願いします
651デフォルトの名無しさん:2009/06/19(金) 04:05:13
>>650
宿題ためこみすぎじゃね?
あと全角の処理って面倒なんだぜ
652デフォルトの名無しさん:2009/06/19(金) 04:14:50
[1] 授業単元: C
[2] 問題文(含コード&リンク):キーボードから入力されたせいの整数n(0〜15)を2進数(4ビット)で出力するぷ8炉グラムを作成せよ。
ただし、表示は下位ビットからでよい。また、0や負の数が入力された場合はプログラムが終了するようにせよ。
表示結果の例

正の整数:12
整数12を2進数表記すると下位ビットより0011となります
正の整数:3
整数3を2進数表記すると下位ビットより1100となります。
正の整数:5
整数5を2進数表記すると下位ビットより1010となります
正の整数:0
ヒント nを2で割った商と余りを求める。余りが2進数の最下位ビットである。商を2で割ったときの余りが最下位から2番目のビットになる。
    以下同様に計算する。
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月20日
[5]繰り返しまでです、よろしくお願いします
653デフォルトの名無しさん:2009/06/19(金) 04:19:12
>>650
#include<stdio.h>

int main(void){
int n,m,i,j;
printf("n…");
scanf("%d",&n);
m=n;
if(n<=0){
return 0;
}
printf("正の整数:%d\n",n);
for(i=0;i<=m;i++){
if(i<m)printf("%d",m-n+1);
for(j=1;j<=n;j++){
printf("*");
if(j==n){
printf("\n");
}
}
n--;
}
return 0;
}
654デフォルトの名無しさん:2009/06/19(金) 04:31:08
>>652
#include<stdio.h>

int main(void){
int n,m,a=0,b=0,c=0,d=0;
printf("n…");
scanf("%d",&n);
if(n<=0)return 0;
printf("正の整数:%d\n",n);
m=n;
if(n%2==1){
a=1;
}
n=n/2;
if(n%2==1){
b=1;
}
n=n/2;
if(n%2==1){
c=1;
}
n=n/2;
if(n%2==1){
d=1;
}
printf("整数%dを2進数表記すると下位ビットより%d%d%d%dとなります。",m,a,b,c,d);
return 0;
}
655デフォルトの名無しさん:2009/06/19(金) 04:36:21
>>636
ちゃんと0になると思うんだけど
656デフォルトの名無しさん:2009/06/19(金) 04:48:13
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
前回の課題の関数を用いて今日から1万日先が何年何月何日であるか求めるプログラムを作りなさい。
関数は以下

int leapyear(int year){
if(year%400==0){
return 1;
}
else if(year%4==0 && year%100!=0){
return 1;
}
else return0;
}

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:6月27日
[5] その他の制限: 関数まで。

お願いします。
657デフォルトの名無しさん:2009/06/19(金) 04:53:02
>>655
1 になるべきでは
658デフォルトの名無しさん:2009/06/19(金) 05:09:56
>>656
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9486.txt

これ合ってるかなあ、誰か検算してよ
659デフォルトの名無しさん:2009/06/19(金) 05:15:31
あ、ごめん日付の表示がおかしかったわ
660デフォルトの名無しさん:2009/06/19(金) 05:28:25
661デフォルトの名無しさん:2009/06/19(金) 05:34:32
あれ、6月31日って出ちゃった・・・

もういいや、めんどくせ〜
役に立てなくてごめんね
662デフォルトの名無しさん:2009/06/19(金) 05:44:57
>>633 ただの634につられて書いただけ。
int oddsum(int n) {
int sum=0; // default:(else) が無いので初期化
if(n%4 == 3) sum = (n+1)*(n+1)/4;
else if(n%4 == 0) sum = n*n/4;
else if(n%4 == 1) sum = (n-1)*(n-1)/4 + n;
else if(n%4 == 2) sum = (n-2)*(n-2)/4 + n-1;
return sum; // 戻るのは1箇所
}
663デフォルトの名無しさん:2009/06/19(金) 05:50:50
>>662
これでおk
int m=(n+1)/2;
return m*m;
664デフォルトの名無しさん:2009/06/19(金) 06:40:04
>>627
return pow((double)x,2);

>>561
#include <stdio.h>
#include <string.h>
char toupper(char c) {
if(c>='a'&&c<='z') return c+'A'-'a';
else return c;
}
int main(void) {
  char *a="This M!.";
  int i, l;
  
  l = strlen(a);
  for(i=0;i<l;i++)
    putchar( toupper(a[i]) );
}
665デフォルトの名無しさん:2009/06/19(金) 07:37:17
>>627
square(a+b)ってやったら、どっちもダメだなあ。
666デフォルトの名無しさん:2009/06/19(金) 09:04:08
>>664
>if(c>='a'&&c<='z') return c+'A'-'a';
ここがダメ
667デフォルトの名無しさん:2009/06/19(金) 12:59:20
[1] 授業単元:プログラミング
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9488.c
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2009年06月24日まで]
[5] その他の制限:xclock -update 1 を起動し、約30秒後にSIGTERMで停止させるプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9489.c

よろしくお願いします
668デフォルトの名無しさん:2009/06/19(金) 13:27:46
コンピュータを3目並べ(いわゆる○×)をするプログラムを作成しなさい
コンピュータの手はランダムに決定するものとする(空いてるところに打つ)

盤面を表現する配列は3×3の二次元配列とし、グローバルに宣言する。
以下のような関数を宣言すること
盤の表示、○×を打つ、3つ並んだかチェック。
669デフォルトの名無しさん:2009/06/19(金) 13:40:36
内容:
[1] 授業単元: プログラミング論
[2] 問題文(含コード&リンク):
1からnまでの整数値の和を再帰的に求めるプログラムを作成する
[実行結果の例]
1からnまでの整数値の和を計算します
nの値を入力してください:100
1から100までの整数値の和は5050です
[3] 環境
 [3.1] OS: Windows vista
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限: 2009年6月23日13:00まで
670デフォルトの名無しさん:2009/06/19(金) 13:42:09

参考プログラム
/*
階乗値を再帰的に求める
*/

#include <stdio.h>

/*--- 整数値nの階乗を返却 ---*/
int factorial(int n)
{
if (n > 0)
return (n * factorial(n - 1));
else
return (1);
}

int main(void)
{
int x;

printf("整数を入力せよ:");
scanf("%d", &x);

printf("%dの階乗は%dです。\n", x, factorial(x));

return (0);
}
671デフォルトの名無しさん:2009/06/19(金) 13:43:51
>>438-444

お願いします;;
672デフォルトの名無しさん:2009/06/19(金) 13:53:02
>>669
>>670 の差分 (最低限: 関数名やコメント printf の内容はノータッチ)

-- return (n * factorial(n - 1));
++ return (n + factorial(n - 1));

-- return (1);
++ return (0);
673デフォルトの名無しさん:2009/06/19(金) 14:03:11
関数名かえろよw
674デフォルトの名無しさん:2009/06/19(金) 14:03:18
[1] 授業単元:プログラム
[2] 4*3行列Aと 3*5行列B の各要素をキーボードから入力し、
C = A*B を計算し、表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] 言語:C
[4] 期限: 2009年6月19日16:00まで
[5] 特になす

ぼすけて…orz
675デフォルトの名無しさん:2009/06/19(金) 14:41:09
>>656 コマンド引数で日数を指定するようにした。
#include <stdio.h>
int leapyear(int year){
  if(year%400 == 0) return 1;
  else if(year%4 == 0 && year%100 != 0) return 1;
  else return 0;
}
void addmonth(int *day, int *month, int *year){
  *day = 1; (*month)++;
  if(*month > 12) {
    *month = 1; (*year)++;
  }
}
int main(int argc, char *argv[]){
  int year, month, day, a=0, max_days;
  int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

  if(argc != 2) {puts("Usage: exefile 10000"); return 1;}
  max_days = atoi(argv[1]);
  printf("今日は西暦何年 何月 何日? ");
  scanf("%d%d%d",&year,&month,&day);

  while(a<max_days) {
    a++; day++;
    if(month == 2 && leapyear(year)) {
      if(day > 29) addmonth(&day, &month, &year);
    } else {
      if(day > month_days[month-1]) addmonth(&day, &month, &year);
    }
  }
  printf("今日から%d日後は、%d年%d月%d日です。",max_days, year, month, day);
}
676デフォルトの名無しさん:2009/06/19(金) 14:50:52
>>674
#include <stdio.h>

int main(void)
{
double a[4][3], b[3][5], c[4][5];
int i, j, k;

for(i=0; i<4; i++) for(j=0; j<3; j++) scanf("%lf", &a[i][j]);
for(i=0; i<3; i++) for(j=0; j<5; j++) scanf("%lf", &b[i][j]);

for(i=0; i<4; i++) {
for(j=0; j<5; j++) {
c[i][j] = 0;
for(k=0; k<3; k++) c[i][j] += a[i][k] * b[k][j];
printf("%f ", c[i][j]);
}
putchar('\n');
}

return 0;
}
677デフォルトの名無しさん:2009/06/19(金) 15:01:40
test
678デフォルトの名無しさん:2009/06/19(金) 15:30:24
>>676
tasukatta!
679デフォルトの名無しさん:2009/06/19(金) 15:51:06
680デフォルトの名無しさん:2009/06/19(金) 18:54:05
681デフォルトの名無しさん:2009/06/19(金) 20:36:56
[1] 授業単元:情報基礎B
[2] 問題文(含コード&リンク):
1から10までの任意の数字を入力すると、
1から50までの範囲でその数字の倍数を出力するプログラムを作成せよ。
ただし、入力された数字が1から10の範囲外の場合は"Input Error"と表示させる。
また、数字を5つおきに改行するなど、各自で工夫点を入れること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:コンパイルするときにccというコマンドを使っていますが…。よくわかりません
 [3.3] 言語: C
[4] 期限: 2009年06月25日13:00まで
[5] その他の制限:初心者です。printf scanf if for などの構文や関数を習いました。
682681 ◆WMGclVKsR2 :2009/06/19(金) 20:41:19
初歩的なことしか習ってないのに、いきなりこんな宿題が出ました。
解説もできればお願いしたいです。
683デフォルトの名無しさん:2009/06/19(金) 20:55:01
>>682
既に1期終わるのに習っていないとな
684デフォルトの名無しさん:2009/06/19(金) 20:58:23
>>681
#include <stdio.h>
int main()
{
int num, ret, i, disp;
ret = scanf("%d", &num);
if (ret!=1 || num<=0 || num>10)
{
printf("Input Error");
return 1;
}

disp = 0;
for (i=1; i<=50; i++)
{
if (i%num!=0) continue;
disp++;
printf("%2d", i);
if (disp%5==0)
{
printf("\n");
}
else
{
printf(" ");
}
}
return 0;
}
685684:2009/06/19(金) 21:05:08
解説
scanfで数値読み取り
scanfは返り値が読み取った値の個数なので
この場合1以外は読み取れなかったことを示す
1<=num<=10の条件と一緒に判断してエラー表示

メインループ1から50まで順番に回す
倍数かどうかは%演算(あまりを求める)で==0のときで判断

dispはいくつ表示したかを把握するためのカウンタ
5の倍数で改行を入れる

こんなもん?
686デフォルトの名無しさん:2009/06/19(金) 21:27:22
#include <stdio.h>
#include <stdlib.h>
#define BUFFERSIZE 10000
#define MAX 50
#define LINEFEED 4

int main() {
double d = 0.0, maxim;
int count = 0;
char buffer[ BUFFERSIZE ];
/* 1から10の範囲内の数字なら小数点でもOKよ */
for (;;) {
printf( "1から10までの数字いっこ入れる :" );
scanf( "%s", &buffer );
d = atof( buffer );
if ( 0 < d && d <= 10 ) {
break;
}
printf ( "比類なきinput Error\n" );
}
/* 小数点の誤差がアレだから回りくどい方法で表示するわ */
maxim = d;
do {
printf( "%16.4f", maxim );
maxim += d;
if ( ++count % LINEFEED == 0 ) {
printf ( "\n" );
}
} while ( maxim <= MAX );
return 0;
}
687デフォルトの名無しさん:2009/06/19(金) 21:45:04
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
課題@http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9492.zip
課題Ahttp://www.dotup.org/uploda/www.dotup.org147024.zip
課題Bhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9493.zip

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C
[4] 期限:6/25
[5] その他の制限:

EOF、コピーまで習いました。
問題文に書いてある参照のリストはファイルに一緒に入れてあります。
宜しくお願いします。
688デフォルトの名無しさん:2009/06/19(金) 23:38:49
http://www.diracvideo.org/git?p=schroedinger.git;a=snapshot;h=60531e235077556ef7fc5c923d2db9841ea56605;sf=tgz

schroedinger/tools/build_win32_sdk
を実行してエラーが出ない人っている?

build_win32_sdkの6行目の

export PKG_CONFIG_PATH=
って所だけは
export PKG_CONFIG_PATH="/usr/lib/pkgconfig/":""

って書き換えた。

[1] 授業単元:無し
[2] 問題文(含コード&リンク):省略
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 4.3.3
 [3.3] 言語: C/C++/どちらでも可
[4] 期限: 無期限
[5] その他の制限: 無し
689デフォルトの名無しさん:2009/06/19(金) 23:49:21
[1] 授業単元:
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9494.txt
[3] 環境
 [3.1] OS: Windows/Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: どちらでも可(C or C++)
[4] 期限: 6月21日
[5] その他の制限: 制限なし

よろしくお願いします。
690デフォルトの名無しさん:2009/06/20(土) 00:40:40
691デフォルトの名無しさん:2009/06/20(土) 01:08:36
#include <iostream>
using namespace std;

int main(){
cout << "年齢を入力してください\n" << 16 << endl;
cout << "生まれた年を入力してください\n" << 1986 << endl;
cout << "好きな数字を入力してください\n" << 7 << endl;
cout << "あなたは1986年生まれの16才で、7が好きですね" << endl;
return0;
}

上の問題にcinを一度だけ使って表現せよ


あと、次のような割り勘プログラムを作成せよ
御勘定を入力してください
23000
割り勘する人数を入力してください
7
1人当たり3285円で端数が5円出ます。




誰か助けてくれませんか?
692デフォルトの名無しさん:2009/06/20(土) 01:08:47
>>689
ちょっと興味を持ったので
大学?院?
693デフォルトの名無しさん:2009/06/20(土) 01:13:04
694デフォルトの名無しさん:2009/06/20(土) 01:23:40
695デフォルトの名無しさん:2009/06/20(土) 01:52:13
>>692
大学です。
696デフォルトの名無しさん:2009/06/20(土) 05:10:41
>>690 , >>693 , >>694

有難うございます。
助かりましたm(_ _)m
697デフォルトの名無しさん:2009/06/20(土) 09:29:32
>>691
教科書買ったの?
698デフォルトの名無しさん:2009/06/20(土) 10:55:25
>>691
#include <iostream> // 問1 これかな?
using namespace std;
int main(void){
  int umare, toshi, suuji;
  cout << "年齢を入力してください\n";
  cout << "生まれた年を入力してください\n";
  cout << "好きな数字を入力してください\n";
  cin >> toshi >> umare >> suuji;
  cout << "あなたは"<<umare<<"年生まれの"<<toshi<<"才で、"<<suuji<<"が好きですね" << endl;
}
#include <iostream> // 問1 こっちかも?
using namespace std;
int main(void){
  cout << "年齢を入力してください\n" << 16 << endl
   << "生まれた年を入力してください\n" << 1986 << endl
   << "好きな数字を入力してください\n" << 7 << endl
   << "あなたは1986年生まれの16才で、7が好きですね" << endl;
}
#include <iostream> // 問2
using namespace std;
int main(void) {
  int kingaku, ninzu, warikan, amari;
  cout <<"御勘定を入力してください\n"; cin >>kingaku;
  cout <<"割り勘する人数を入力してください\n"; cin >>ninzu;
  warikan = (kingaku/ninzu+5)/10*10;
  amari = kingaku - warikan * ninzu;
  cout <<"1人当たり"<< warikan <<"円で端数が"<< amari<<"円出ます。"<<endl;
}
699デフォルトの名無しさん:2009/06/20(土) 13:07:47
1] 授業単元:情報リテラシ
[2] 問題文: a行a列の数値を.exeの時に入力し、
対角要素を並びかえをするプログラムを作れ。
[3] 環境
 [3.1] OS: Windows XP 
[3.2] コンパイラ名とバージョン: 不明です
 [3.3] 言語:C言語でお願いします。
[4] 期限: 2009年6月22日まで

よろしくお願いします。
700デフォルトの名無しさん:2009/06/20(土) 14:32:52
>>699
#include<stdio.h>
#define a 5
int main(void){
int matrix[a][a];
int i, j, t;
for(i=0;i<a;i++){
for(j=0;j<a;j++) matrix[i][j]=i*10+j;
}
for(i=0;i<a;i++){
for(j=0;j<a;j++) printf(" %02d", matrix[i][j]);
printf("\n");
}
for(i=0;i<a;i++){
for(j=i+1;j<a;j++){
t=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=t;
}
}
printf("\n");
for(i=0;i<a;i++){
for(j=0;j<a;j++) printf(" %02d", matrix[i][j]);
printf("\n");
}
return 0;
}
701デフォルトの名無しさん:2009/06/20(土) 14:34:26
>>699 転置行列ではないので合ってると思う。一回の走査で入れ替えられないものか。
#include <stdio.h>
int main() {
  int n, i, j, sts;
  float *a, tmp;

  do {
    printf("matrixの行数=列数は?");
    if((sts = scanf("%d", &n)) == EOF) return 0;
    if(sts == 1) break;
    scanf("%*s");
  } while(1);
  if((a = malloc(n*n*sizeof(float))) == NULL) return 1;
  printf("%d行*%d列のデータを入力\n",n,n);
  for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%f", &a[i*n+j]);
  puts("入力したデータは:");
  for(i=0;i<n;i++) {
    for(j=0;j<n;j++) printf("%f\t", a[i*n+j]);
    puts("");
  }
  for(i=0;i<n/2;i++) for(j=0;j<n;j++) {
    tmp = a[i*n+j]; a[i*n+j] = a[(n-1-i)*n+j]; a[(n-1-i)*n+j] = tmp;
  }
  for(i=0;i<n;i++) for(j=0;j<n/2;j++) {
    tmp = a[i*n+j]; a[i*n+j] = a[i*n+(n-1-j)]; a[i*n+(n-1-j)] = tmp;
  }
  puts("対角要素を入れ替えたデータは:");
  for(i=0;i<n;i++) {
    for(j=0;j<n;j++) printf("%f\t", a[i*n+j]);
    puts("");
  }
}
702700:2009/06/20(土) 14:41:18
転置行列じゃなかったのか・・・
700は無しで
703未解決まとめ:2009/06/20(土) 15:28:01
>>667 (Linux)xclock -update 1 を何個か起動し、 指定された間隔で一つずつSIGTERMで停止させる 6月24日
>>588 (Linux)execl()を使用。execl()を使用 6月24日12:00
>>689 Nearest Addition 法(最近追加法)を用いて巡回セールスマン問題を解く 6月21日
>>364 巡回セールスマン問題。最短経路長をもった閉路と閉路長を比較する 6月16日
>>476 滑降シンプレックス 6月19日 6月19日
期限が過ぎたもの
>>462 catをシステムコールとライブラリ関数で作り直す 6月18日23:59
>>593>>645 会員番号に基づき5つのグループに分ける 6月19日
>>592>>641 入力した文字の種類を表示 6月19日
>>590 x=1におけるf(x)=e^xの微分値を計算 6月18日24:00
>>580 人の名前(ローマ字)を検索(部分一致) 6月18日午前
>>438-444>>461 入力ストリームから読み込んだデータ文字列を、データベースに格納する前にスタックに一時的に格納する 6月16日13:00
>>226>>230>>332 (EXE)ファイルから問題文を読み込み、3択を解いていく 6月15日(月)19:00
704デフォルトの名無しさん:2009/06/20(土) 16:10:42
705デフォルトの名無しさん:2009/06/20(土) 17:42:25
age
706デフォルトの名無しさん:2009/06/20(土) 17:53:14
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9500.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9501.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Linux
 [3.2] コンパイラ名とバージョン: iTerm
 [3.3] 言語: C言語
[4] 期限: 6/21 12:00まで

上記の2つのURLにあるコードを使って
ヒープソートとクイックソートを完成させる課題です。
どのコードをどう使ってどのように実装すれば良いのか分かりませんでした。
よろしければどなたか完成版をお願いします
707デフォルトの名無しさん:2009/06/21(日) 00:03:56
>>698
問1が二つ書いてあるんですが、どっち書けばいいんですか?
本当は、問1が
以下のように出力されるプログラムを出力せよ
年齢を入力してください


16
生まれた年を入力してください
1992
好きな数字を入れてください

って問題ですがそれは合ってると思うから書きました。
しかし、問2が、『上の問題をcinを一度だけ使って実現せよ』って問題なんですが…

あと()の中のvoidっているんですか?そしてreturn0;は必要ないんでしょうか
708デフォルトの名無しさん:2009/06/21(日) 00:19:44

授業単元:
[2] 問題文:
問@成績集計プログラム
入力件数nをキーボードより入力し、n人分のテストデータを入力する。
その際、合計点、最高点、最低点を求め、最後に平均点を計算しそれぞれを出力するプログラムを作成せよ。
ただし、平均点は実数型とし小数点第2位まで出力する。
平均点以外の変数は整数型とする。

問A棒グラフ出力プログラム
値2つを入力し、*を横に並べて棒グラフ状に出力するプログラム。
大きい値の方の棒グラフが上に来るようにすること。
(値として0〜50までしか入力されないものとする)


[3] 環境  
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: Windows Visual Studio 2008  
[3.3] 言語: C
[4] 期限:6月23日
[5] その他の制限:初心者なので解説があるとうれしいです。何かを使ってはいけないという制限はありません

709708:2009/06/21(日) 00:21:08
抜けていましたが授業単元はC言語です
よろしくおねがいします
710デフォルトの名無しさん:2009/06/21(日) 00:26:40
次のように入力、出力できるようなプログラムを作成せよ
アルファベットを3つ入力してください
a
b
c
キーボードからa、b、cが入力されました←a、b、cは上の文字

#include <iostream>
using namespace std;

int main(){

return0;
}
はなんか鉄板みたいなんですよね
711698:2009/06/21(日) 00:27:35
>>707 >>691のC++ソース間違ってるよ。
#include <iostream> // 問1
using namespace std;

int main(){
  int umare, toshi, suuji;
  cout << "年齢を入力してください\n" ; cin >> umare;
  cout << "生まれた年を入力してください\n" ; cin >> toshi;
  cout << "好きな数字を入力してください\n" ; cin >> suuji;
  cout << "あなたは" << umare <<"年生まれの" << toshi << "才で、" << suuji << "が好きですね" << endl;
  return 0;
}
#include <iostream> // 問2
using namespace std;
int datain() {
  int data;
  cin >> data;
  return data;
}
int main(){
  int umare, toshi, suuji;
  cout << "年齢を入力してください\n" ; umare = datain();
  cout << "生まれた年を入力してください\n" ; toshi = datain();
  cout << "好きな数字を入力してください\n" ; suuji = datain();
  cout << "あなたは" << umare <<"年生まれの" << toshi << "才で、" << suuji << "が好きですね" << endl;
  return 0;
}
712デフォルトの名無しさん:2009/06/21(日) 00:27:58
>>710ですが、C++です
713デフォルトの名無しさん:2009/06/21(日) 00:34:27
>>710
#include <iostream>
using namespace std;

int main(){
cout << "アルファベットを3つ入力してください" << endl;
char a, b, c;
cin >> a; cin >> b; cin >> c;
cout << "キーボードから" << a << "、" << b << "、" << c <<
return0;
}
714デフォルトの名無しさん:2009/06/21(日) 00:34:39
>>711
ごめんなさいありがとうございます。しかし、
問1の問題と問2の問題ってこうやって続けて書かないとダメですか。
//問1って書かないとダメですか。
715デフォルトの名無しさん:2009/06/21(日) 00:35:35
cin を一度しか使えないという制約を守るため

istream &customcin = cin;

と書くのはどうだろう。
716デフォルトの名無しさん:2009/06/21(日) 00:35:48
途中で送信してしまった

return 0; の上はこれに置き換えて
cout << "キーボードから" << a << "、" << b << "、" << c << "が入力されました←a、b、cは上の文字" << endl;
717デフォルトの名無しさん:2009/06/21(日) 00:38:13
なんだ釣りか
718デフォルトの名無しさん:2009/06/21(日) 00:40:41
>>708
問1
#include<stdio.h>

int main(void){
int i, n=0, score=0, total=0, maximum=0, minimum=0;

printf("\n入力件数 : ");
scanf("%d", &n);
if(n<=0) return 1;

for(i=0;i<n;i++){
printf("\n%d 人目の得点 : ", i+1);
scanf("%d", &score);
if(!i) maximum=minimum=score;
total+=score;
if(maximum<score) maximum=score;
if(minimum>score) minimum=score;
}
printf("合計点 %d\n最高点 %d\n最低点 %d\n", total, maximum, minimum);
printf("平均点 %.2f\n", (double)total/n);

return 0;
}
719デフォルトの名無しさん:2009/06/21(日) 00:43:30
>>708
問2
#include<stdio.h>

int main(void){
int i, a, b;

printf("\na : ");
scanf("%d", &a);
printf("\nb : ");
scanf("%d", &b);

printf("\na : ");
for(i=0;i<a;i++) printf("*");
printf("\nb : ");
for(i=0;i<b;i++) printf("*");
printf("\n");

return 0;
}
720デフォルトの名無しさん:2009/06/21(日) 00:43:33
>>716
cin >> a; cin >> b; cin >> c;はいいんですか。aとかの次って,じゃなくて;でよいんですか
721デフォルトの名無しさん:2009/06/21(日) 00:43:51
>>715
#define Cout cin
でよくね?
722デフォルトの名無しさん:2009/06/21(日) 00:46:01
さらしあげ
723デフォルトの名無しさん:2009/06/21(日) 00:46:25
>>720
「○○じゃなくて△△でよいんですか」
って言いたいだけだろ
724デフォルトの名無しさん:2009/06/21(日) 00:49:16

>>721
すると、どうなるんですか
>>711の2っていうのは。
725デフォルトの名無しさん:2009/06/21(日) 00:49:57
>>724ですすみません。2って言うのは問2ってことです。
726デフォルトの名無しさん:2009/06/21(日) 00:54:06
>>698
#include <iostream>
using namespace std;
int main() {
int kingaku, ninzu, warikan, amari;
cout <<"御勘定を入力してください\n"; cin >>kingaku;
cout <<"割り勘する人数を入力してください\n"; cin >>ninzu;
warikan = (kingaku/ninzu+5)/10*10;
amari = kingaku - warikan * ninzu;
cout <<"1人当たり"<< warikan <<"円で端数が"<< amari<<"円出ます。"<<endl;
}
でやったら、
御勘定を入力してください
23000
割り勘する人数を入力してください
7
1人当たり3290円で端数が-30円出ます。ってなるんですが、間違ってますか?
727デフォルトの名無しさん:2009/06/21(日) 00:55:51
>>725
#include <iostream>
#define Cout cin
using namespace std;
int main()
{
int okanjou, ninzuu;
cout << "御勘定を入力してください" << endl;
Cout >> okanjou;
cout << "割り勘する人数を入力してください" << endl;
Cout >> ninzuu;
cout << "1人当たり" << okanjou / ninzuu << "円で端数が" << okanjou % ninzuu << "円出ます。" << endl;
return 0;
}
728デフォルトの名無しさん:2009/06/21(日) 00:59:50
>>727
入れていけないわけではないですが、cinをひとつだけ入れよというのは>>691にもあるように割り勘の問題ではないですよ。
729698:2009/06/21(日) 01:00:16
>>724 問3です。
730デフォルトの名無しさん:2009/06/21(日) 01:03:44
割り込みすみません
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9502.txt

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: c++6.0
 [3.3] 言語:C
[4] 期限:6/22
[5] その他の制限:
指定されたプログラム例を使ってとのことらしいです。それ以外だと再提出になるので
 大変かもしれませんがよろしくお願いします。
731デフォルトの名無しさん:2009/06/21(日) 01:04:04
>>729
そうですか。すみませんでした。でも、cinを一度だけ使ってと言うのは2番の問題なんで、これはcinって入れなくてもいいんですが、入れてもできるんですか。
そして、>>727でcoutを大文字小文字分けているのは何でですか教えてください。
732デフォルトの名無しさん:2009/06/21(日) 01:08:31
そもそも>>691の例題は出力がおかしいのだ。
一人当たり3285円とあるが、それを7倍してみよ。
23000円には足りないのだ!

つまり、店員は怒り出すし、警察を呼ばれてしまう可能性すらある。

>>698はそこまで考えた上で、
ちゃんと全員が払うべき額と、それで返ってくる額まで算出している。
ただしい。
733デフォルトの名無しさん:2009/06/21(日) 01:13:19
>>732
つまり教科書が間違ってるんですか
734デフォルトの名無しさん:2009/06/21(日) 01:16:27
>>732
では、>>727さんのも合ってるはずだから同じ答えが返ってくるんですか
735デフォルトの名無しさん:2009/06/21(日) 01:16:34
>>732
「1人当たり3285円です。ただし一人だけ5円多く出してもらいます。」
ならよかったのにね。
736デフォルトの名無しさん:2009/06/21(日) 01:17:21
>>727
#define Cout cin っていらなくないんですか?必要ですか?
737デフォルトの名無しさん:2009/06/21(日) 01:17:39
>>735
一円単位で計算しておいてそれはひどいw
738デフォルトの名無しさん:2009/06/21(日) 01:19:24
もうだめだこのスレwww
739698:2009/06/21(日) 01:31:18
>>736 Cout は #define Cout cin で宣言してるから使うことが出来る。
740デフォルトの名無しさん:2009/06/21(日) 03:33:59
#include <iostream> // 問2
using namespace std;
int main(void) {
  int kingaku, ninzu, warikan, amari;
  cout <<"御勘定を入力してください\n"; cin >>kingaku;
  cout <<"割り勘する人数を入力してください\n"; cin >>ninzu;
  warikan = kingaku/ninzu;
  amari = kingaku - warikan * ninzu;
  cout <<"1人当たり"<< (amari?warikan+1:warikan) <<"円でおつりが"<< (amari?ninzu-amari:0)<<"円出ます。"<<en
}
こうじゃね?
741デフォルトの名無しさん:2009/06/21(日) 03:35:51
#include <iostream> // 問2
using namespace std;
int main(void) {
  int kingaku, ninzu, warikan, amari;
  cout <<"御勘定を入力してください\n"; cin >>kingaku;
  cout <<"割り勘する人数を入力してください\n"; cin >>ninzu;
  warikan = kingaku/ninzu + (kingaku%ninzu?1:0);
  amari = warikan * ninzu - kingaku;
  cout <<"1人当たり"<< warikan <<"円でおつりが"<< amari<<"円出ます。"<<endl;
}
こっちのがいいか。
742デフォルトの名無しさん:2009/06/21(日) 03:45:58
[1] 授業単元: C
[2] 問題文(含コード&リンク):年r%の複利でy円を借り、n年後に一括返済する場合の返済額を計算するプログラムを作成せよ
              ただしr%の複利でn年借りた場合の利率を計算する部分を関数として作成すること。
表示結果の例
    利率(r):7.5
    金額(y):1000000
期間(n):2
返済金額は1155625
ヒント:返済金額はy(1+r/100)のn乗円である。r%の複利でn年間の利率(1+r/100)のn乗を計算する関数
    float interest(float r, int n)を作る。そしてmain()からinterest()を呼び出し、返された値にyを掛けて返済額を求める。
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月21日
[5]関数までです。お願いします
743デフォルトの名無しさん:2009/06/21(日) 04:06:35
[1] 授業単元: C
[2] 問題文(含コード&リンク):じゃんけんゲームを作成せよ。ただし、main()は下記のものを用いよ。具体的には、get_hand_player(),
print_hand(),judge()をついかすればよい。
表示結果の例
    じゃんけんぽん(1-3):1
コンピューター:グー
    あなた:グー
    あいこ
    じゃんけんぽん(1-3):2
コンピューター:パー
    あなた:チョキ
    あなたの勝ち!
    じゃんけんぽん(1-3):3
コンピュータ:チョキ
    あなた:パー
    私の勝ち!
744デフォルトの名無しさん:2009/06/21(日) 04:07:56
>>742
#include <stdio.h>

float interest(float r, int n) {
  float ret = 1;
  while (n--)
  {
    ret*=(1+r/100);
  }
  return ret;
}

int main() {
  float r;
  int y, n;
  printf("    利率(r):"); scanf("%f", &r);
  printf("    金額(y):"); scanf("%d", &y);
  printf("期間(n):"); scanf("%d", &n);
  printf("返済金額は%d\n", (int)(y * interest(r, n)));
  return 0;
}
745デフォルトの名無しさん:2009/06/21(日) 04:19:17
>>743
main()は?
746デフォルトの名無しさん:2009/06/21(日) 04:19:56
↑の続きです
int main()
{
int computer,player;
srandom((unsigned long)time(NULL));
while(1){
computer = random() % 3+1;
player = get_hand_player();
printf("コンピューター");
print_hand(computer);
printf("あなた:")
print_hand(player);
switch(judge(computer,player))
case -1:
printf("私の勝ち!\n\n");
break;
case 0:
printf("あいこ\n\n")
break;
case 1:
printf("あなたの勝ち!\n\n")
}
}
}
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月21日
[5]関数までです

747デフォルトの名無しさん:2009/06/21(日) 04:28:14
[1] 授業単元: C
[2] 問題文(含コード&リンク):うるう年なら返り値1を、そうでないなら0を返す関数int leapYear(int year)をつくり、この関数を
               用いて2001年から2999年までの間にうるう年が何年あるか計算するプログラムを作成せよ。
表示結果の例
    2001 leap = 0
2002 leap = 0
2003 leap = 0
2004 leap = 1
・・・    ←省略
    2999 leap = 0
242回です。
ヒント:うるう年とは、4で割り切れる年のことである。ただし、100で割り切れる年はうるう年ではなく、400で割り切れる年はうるう年である。
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月21日
[5]関数までです

748デフォルトの名無しさん:2009/06/21(日) 04:32:24
[1] 授業単元: C
[2] 問題文(含コード&リンク):>>747で作成したleapYear()関数を利用し、今日から10000日先は何年何月何日かを求めるプログラムを作りなさい。
ヒント:10000日から各月の日数をひいていく。翌月に進むとmonth=month+1とし、12月を過ぎるとyear=year+1,month=1とする。引いた日数がマイナス(0以下)になるまでこれを繰り返す。なお、2008年5月27日の10000日後は2035年10月13日である。

[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月21日
[5]関数までです、よろしくお願いします
749デフォルトの名無しさん:2009/06/21(日) 04:43:38
[1] 授業単元: C
[2] 問題文(含コード&リンク):表示入力から正の整数値を読み込み、0がにゅうりょくされたらそれらの整数を小さい順に表示するプログラムを作成せよ。
表示結果の例
 正整数:17
 正整数:3
 正整数:9
 正整数:4
 正整数:0 
入力された整数は小さい順に0,3,4,9,17です。
ヒント:数字を読み込む毎に、それまでに入力された数値が格納された配列の最後の要素から先頭に向かって順に大小の比較を行う。
    読み込んだ数字の法が小さかったら、既に記憶されている配列の要素をひとつずつずらし、配列の1つ前の要素と比較を行う。
    読み込んだ数字の方が大きかったら、比較した要素の次の場所を代入し、次に入力される数字の処理へ移る。

[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月21日
[5]配列までです
750デフォルトの名無しさん:2009/06/21(日) 04:55:37
[1] 授業単元: C
[2] 問題文(含コード&リンク):行列A(l行m列9と行列B(m行n列)の積C(l行n列)を求めるプログラムを作成せよ。
表示結果の例
 lとmを入力してください:23
行列Aを入力してください
>2 4 8
>7 3 3
nを入力してください(m = 3):4
行列Bを入力してください
>4 5 2 7
>5 6 2 8
>1 2 3 6
C=
  36 50 36 94
46 59 29 91
ヒント:行列AとBを2次元配列(例えば、matrixA[MAX_SIZE][MAX_SIZE].ただし、MAX_SIZEは適切にdefineされているとする)
    で宣言する。このとき、行列Aのi行j列の要素は、C言語ではmatrixA[i-1][j-1]に記憶させることに注意する。matrixBについても同様。
    このときmatrixCは次のように計算できる。
  matrixA[i][0]*matrixB[0][j]+matrixA[i][1]*matrixB[1][j]+・・・・
  +matrixA[i][m-1]*matrixB[m-1][j]
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]
[5]
751デフォルトの名無しさん:2009/06/21(日) 04:58:37
>>743
int get_hand_player()
{
int hand;
printf("じゃんけんぽん(1-3):");
do {
scanf("%d", &hand);
} while (hand < 1 || 3 < hand);
return hand;
}

void print_hand(int hand)
{
char hand_table[][7] = {"グー", "チョキ", "パー"};
printf("%s\n", hand_table[hand-1]);
}

int judge(int computer, int player)
{
int judge_table[] = {0, 1, -1};
if (computer > player) {
return judge_table[computer - player];
} else {
return -judge_table[player - computer];
}
}
752デフォルトの名無しさん:2009/06/21(日) 05:08:49
>>749
#include<stdio.h>

int main(void){
int a[255],b,i=0,j,k;
while(i<255){
printf("正整数:\n");
scanf("%d",&a[i]);
if(a[i]==0) break;
else if(a[i]<0){
printf("正の整数ではありません");
return 0;
}
i++;
}
for(k=0;k<=i;k++){
for(j=0;j<=i;j++){
if(a[j]>a[j+1]){
b=a[j];
a[j]=a[j+1];
a[j+1]=b;
}
}
}
printf("入力された整数は小さい順に");
for(j=0;j<=i;j++){
printf("%d,",a[j]);
}
printf("です。");
return 0;
}
753デフォルトの名無しさん:2009/06/21(日) 06:00:14
>>707 問3
#include <iostream>
using namespace std;
int main(void) {
  int kingaku, ninzu, warikan, amari;
  int tanni = 1, hasuu[7] = {1,5,10,50,100,500,1000};
  string hasu = "Y";
  cout <<"御勘定を入力してください\n"; cin >>kingaku;
  cout <<"割り勘する人数を入力してください\n"; cin >>ninzu;
  cout <<"端数にしますか(Y)、それとも釣りにしますか(N)\n"; cin >>hasu;
  cout <<"最小単位は幾らで切り上げますか(1:1,2:5,3:10,4:50,5:100,6:500,7:1000)\n"; cin >>tanni;
  tanni = hasuu[tanni-1];
  if(hasu == "N" || hasu == "n") {
    warikan = (kingaku/ninzu + (kingaku%(ninzu*tanni)?tanni:0))/tanni*tanni;
    amari = warikan * ninzu - kingaku;
    cout <<"1人当たり"<< warikan <<"円で釣りが"<< amari<<"円出ます。"<<endl;
  } else if(hasu == "Y" || hasu == "y") {
    warikan = (kingaku/ninzu)/tanni*tanni;
    amari = kingaku - warikan * ninzu;
    cout <<"1人当たり"<< warikan <<"円で端数が"<< amari<<"円出ます。"<<endl;
  }
}
754デフォルトの名無しさん:2009/06/21(日) 06:28:24
>>747-748 問題 >>656 問題 >>675 解答
755デフォルトの名無しさん:2009/06/21(日) 13:54:49
>>747
#include <stdio.h>
int leapYear(int year){
  if(year%400 == 0) return 1;
  else if(year%4 == 0 && year%100 != 0) return 1;
  else return 0;
}
int main() {
  int n, count=0;
  for(n=2001;n<=2999;n++) if(leapYear(n)) {printf("%d ",n); count++;}
  printf("\ntotal:%d times",count);
}
756デフォルトの名無しさん:2009/06/21(日) 14:05:57
しつこくて申し訳ありませんが、
どなたか分かる方いらっしゃいましたら>>706をお願いします。
757708:2009/06/21(日) 14:27:13
>>718-719
ありがとうございました
おかげでとても助かりました
758デフォルトの名無しさん:2009/06/21(日) 16:08:03
>>438-444

お願いします;;
759デフォルトの名無しさん:2009/06/21(日) 16:10:15
[1] 授業単元: C
[2] 問題文(含コード&リンク):行列A(l行m列9と行列B(m行n列)の積C(l行n列)を求めるプログラムを作成せよ。
表示結果の例
 lとmを入力してください:23
行列Aを入力してください
>2 4 8
>7 3 3
nを入力してください(m = 3):4
行列Bを入力してください
>4 5 2 7
>5 6 2 8
>1 2 3 6
C=
  36 50 36 94
46 59 29 91
ヒント:行列AとBを2次元配列(例えば、matrixA[MAX_SIZE][MAX_SIZE].ただし、MAX_SIZEは適切にdefineされているとする)
    で宣言する。このとき、行列Aのi行j列の要素は、C言語ではmatrixA[i-1][j-1]に記憶させることに注意する。matrixBについても同様。
    このときmatrixCは次のように計算できる。
  matrixA[i][0]*matrixB[0][j]+matrixA[i][1]*matrixB[1][j]+・・・・
  +matrixA[i][m-1]*matrixB[m-1][j]
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4] 6月21日まで
[5] 配列までです、お願いします
760デフォルトの名無しさん:2009/06/21(日) 16:17:01
>>759

>>674 -> >>676
761デフォルトの名無しさん:2009/06/21(日) 16:33:17
>>741
()の中のvoidっているんですか?すみません
762デフォルトの名無しさん:2009/06/21(日) 16:38:39
>>761
別になくてもいいよ
あと、端数をおつりに変えてるから
763デフォルトの名無しさん:2009/06/21(日) 17:37:53
>>762
ありがとうございます
764デフォルトの名無しさん:2009/06/21(日) 17:58:54
>>691の僕が作った1番上のプログラムにcinを入れるのってどうなるんですか
765デフォルトの名無しさん:2009/06/21(日) 18:05:58
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
診断プログラムを作ろう
「計算ドリル」。質問文全てを一つの文字列配列に格納し、その順番に表示しましょう。正解するたびに、
tokuten を増やすことで、最後に「あなたは 5 問正解です」みたいな結果を表示させることが出来ます。
char questions[6][100]={
“12×(3+4)=”, “(1+1÷9)×9=”,
“(29−5)÷(17−11)=”, “2の10乗=”,
“(3×9+44÷2)のルート=”, “8の階乗=”};
ソースプログラム、変数の意味、工夫した点を書きなさい
[3] 環境
[3.1] OS: Windows vista
[3.2] コンパイラ名とバージョン: borland c++
[3.3] 言語: C++
[4] 期限: 6/21(木)23:00まで
[5] その他の制限: 特になし
よろしくお願いします
766デフォルトの名無しさん:2009/06/21(日) 18:07:40
>>764
作ったというより >>436 のコピペでしょ
こうじゃなくて・・・という反応を期待していたのにスルーされただけの話
767デフォルトの名無しさん:2009/06/21(日) 18:25:28
>>766
そうなんですが、これのどこにcinを入れればいいのかなと思って
768デフォルトの名無しさん:2009/06/21(日) 18:33:39
>>765
#include <iostream>
#include <string>
#define MAX_Q 6

int main()
{
    int tokuten = 0;
    int index = 0;
    std::string input;
    char questions[MAX_Q][100]={
        "12×(3+4)=", "(1+1÷9)×9=",
        "(29−5)÷(17−11)=", "2の10乗=",
        "(3×9+44÷2)のルート=", "8の階乗="
    };

    char answer[MAX_Q][100]={
        "84", "9",
        "4", "1024",
        "7", "40320"
    };
769デフォルトの名無しさん:2009/06/21(日) 18:34:54
    while( index < MAX_Q ){
        std::cout << "第" << index << "問!" << std::endl;
        std::cout << questions[index] << "?" << std::endl;
        
        std::cout << "回答:";
        getline(std::cin, input, '\n');

        if( 0 == input.compare( answer[index] ) ){
            std::cout << "正解!" << std::endl;
            ++tokuten;
        }else
            std::cout << "ばーか!" << std::endl;
        ++index;
        
        std::cout << std::endl;
    }

    std::cout << "あなたの成績は" << tokuten << "点でした!" << std::endl;
}
770デフォルトの名無しさん:2009/06/21(日) 18:35:43
>>767 - >>711 問1
#include <stdio.h> // >>759
#define MAX_SIZE 20
int main() {
  float a[MAX_SIZE][MAX_SIZE], b[MAX_SIZE][MAX_SIZE], c[MAX_SIZE][MAX_SIZE];
  int i, j, k, l, m, n, sts;
  printf("lとmを入力してください:");
  if((sts = scanf("%d%d", &l, &m)) == EOF) return 1;
  if(l>MAX_SIZE || m>MAX_SIZE) {puts("MAX_SIZE OVER!"); return 1;}
  printf("行列Aを入力してください\n");
  for(i=0; i<l; i++) {
    printf("%d行目>", i+1);
    for(j=0; j<m; j++) scanf("%f", &a[i][j]);
  }
  printf("nを入力してください(m = %d):", m);
  if((sts = scanf("%d", &n)) == EOF) return 1;
  if(n>MAX_SIZE) {puts("MAX_SIZE OVER!"); return 1;}
  printf("行列Bを入力してください\n");
  for(i=0; i<m; i++) {
    printf("%d行目>", i+1);
    for(j=0; j<n; j++) scanf("%f", &b[i][j]);
  }
  printf("行列C =\n");
  for(i=0; i<l; i++) {
    for(j=0; j<n; j++) {
      c[i][j] = 0;
      for(k=0; k<m; k++) c[i][j] += a[i][k] * b[k][j];
      printf("%g\t", c[i][j]);
    }
    putchar('\n');
  } return 0;
}
771デフォルトの名無しさん:2009/06/21(日) 18:37:38
前置き、後置きインクリメント、前置き、後置デクリメントを確かめるようなプログラムを作成せよ。
#include <iostream>
using namespace std;
int main() {

return 0;
}

はそれでいいと思うんですが肝心な中身はどうすればいいか教えてください
772デフォルトの名無しさん:2009/06/21(日) 18:46:25
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
773デフォルトの名無しさん:2009/06/21(日) 19:09:40
>>772は、間違って送信してしまいました。

[1] 授業単元:C言語
[2] 問題文(含コード&リンク):ダイクストラ法を使って最短経路を表示せよ
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限: 明日の正午まで
[5] その他の制限:

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

アップしているソースでは隣接行列を使ってダイクストラ法を実装するところまでは完成したのですが、
次にこれを隣接行列ではなく、連結リストを使って実装せよ、というのがなかなか出来ません。
データはgraph.txtから読み込みます。ちなみに、一番上の数字は節の数を表し、
"(0, 1):5"というのは、「節0から節1に長さ5の枝がある」という意味で、有向グラフです。
このデータを格納するリストは、前が次の節の番号、後ろが枝の長さで、
setsu[0]->(1, 5)->(3, 10)->...
setsu[1]->(4, 3)->...
というようにイメージしているのですが、これをなかなか実装することができません。
774デフォルトの名無しさん:2009/06/21(日) 19:11:18
>>768
>>769
本当にありがとうございました!
でも今気づいたら依頼のとこの言語間違えてましたorzせっかく作っていただいたのに申し訳ないですm(__)m
775デフォルトの名無しさん:2009/06/21(日) 19:13:56
すみません、>>773に補足です。

グラフの始点は節0で終点は節(節の数-1)です。
776デフォルトの名無しさん:2009/06/21(日) 19:15:24
>>765ミスってたのではりなおします
何度もすいませんm(__)m
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
診断プログラムを作ろう
「計算ドリル」。質問文全てを一つの文字列配列に格納し、その順番に表示しましょう。正解するたびに、
tokuten を増やすことで、最後に「あなたは 5 問正解です」みたいな結果を表示させることが出来ます。
char questions[6][100]={
“12×(3+4)=”, “(1+1÷9)×9=”,
“(29−5)÷(17−11)=”, “2の10乗=”,
“(3×9+44÷2)のルート=”, “8の階乗=”};
ソースプログラム、変数の意味、工夫した点を書きなさい
[3] 環境
[3.1] OS: Windows vista
[3.2] コンパイラ名とバージョン: borland c++
[3.3] 言語: C
[4] 期限: 6/21(木)23:00まで
[5] その他の制限: 特になし
よろしくお願いします
777デフォルトの名無しさん:2009/06/21(日) 19:54:50
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9505.txt
[3] 環境
 [3.1] OS: Vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C 
[4] 期限:6月22日まで
[5] その他の制限: 特になし
778デフォルトの名無しさん:2009/06/21(日) 20:51:36
>>776 礼はいらない。
#include <stdio.h>
#include <string.h>
#define MAX_Q 6
int main() {
  int tokuten = 0, index = 0;
  char input[100];
  char questions[MAX_Q][100]={
    "12×(3+4)=", "(1+1÷9)×9=",
    "(29−5)÷(17−11)=", "2の10乗=",
    "(3×9+44÷2)のルート=", "8の階乗="
  };
  char answer[MAX_Q][100]={
    "84", "9",
    "4", "1024",
    "7", "40320"
  };
  while( index < MAX_Q ){
    printf("第%d問\n%s\n回答:", index+1, questions[index]);
    fgets(input, 100, stdin);
    input[strlen(input)-1] = '\0';
    if( !strcmp(input, answer[index]) ){
      printf("正解!\n");
      tokuten++;
    } else
      printf("ばーか!\n");
    index++;
    printf("\n");
  }
  printf("あなたの成績は%d点でした。\n", tokuten);
  return 0;
}
779デフォルトの名無しさん:2009/06/21(日) 21:11:06
#include <iostream>
using namespace std;
int main() {
int kingaku, ninzu, warikan, amari;
cout <<"御勘定を入力してください\n"; cin >>kingaku;
cout <<"割り勘する人数を入力してください\n"; cin >>ninzu;
warikan = kingaku/ninzu + (kingaku%ninzu?1:0);
amari = warikan * ninzu - kingaku;
cout <<"1人当たり"<< warikan <<"円で端数が"<< amari<<"円出ます。"<<endl;
return 0;
}


作ってもらったやつ、>>691にある問題の通りにでなくて、端数が2円って出るんですが、ダメなんですかねそれだと
780デフォルトの名無しさん:2009/06/21(日) 21:19:34
>>727 でいいだろ。>>779
781デフォルトの名無しさん:2009/06/21(日) 21:21:03
>>780
#define Cout cin 使ってやるのってすごい高等テクニックだったりしないんですか?
782デフォルトの名無しさん:2009/06/21(日) 21:23:24
>>779
もうどうでもいいじゃん。
783デフォルトの名無しさん:2009/06/21(日) 22:11:04
C++なんですが次のように入力出力できるようなプログラムを教えてくれませんか
品物の単価を入力してください
100
品物の個数を入力してください
3
税率を%で入力してください
5
合計金額は税込みで315円(税抜きで300円)
784デフォルトの名無しさん:2009/06/21(日) 22:20:09
std::coutを使って文字を出力して、std::cinを使って入力内容を取得して、
税込み、税抜き金額を計算して出力するような感じ
ちなみに税込み金額っていうのは単価×個数×(100+税率)÷100で計算できるよ
785デフォルトの名無しさん:2009/06/21(日) 22:22:11
>>781
全然。
理念すら理解できん。
786デフォルトの名無しさん:2009/06/21(日) 22:23:23
[1] 授業単元: 数値解析学
[2] 問題文(含コード&リンク):
ガウス・ジョルダンを使ってn元連立1次方程式を解き
係数マトリクスの逆行列とその解を表示するプログラムを作れ。
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: VC++
 [3.3] 言語: CでもC++でも可
[4] 期限: 2009/6/23
[5] その他の制限:
C言語の入門書に載っているレベルから逸脱しなければ特に制限はありません。
数値を入力させて(もしくはtxtなどから読み込み)解くプログラムでお願いします。
787785:2009/06/21(日) 22:28:13
ログ読んできた。
吊ってくる
λ...
788デフォルトの名無しさん:2009/06/21(日) 22:35:38
>>784
今の国の法律では内税表示が義務付けられているから、
単価100円のものは「税込みで」100円でないといけない。

つまり、単価100円のものを3個売ると、
税込み300円であり、税抜きは286円だ。
789デフォルトの名無しさん:2009/06/21(日) 22:45:41

>>783のプログラムを誰かorz
790デフォルトの名無しさん:2009/06/21(日) 22:47:42
>>789
おまえは>>1を大声で音読して来い。
791デフォルトの名無しさん:2009/06/21(日) 22:49:20
>>778
お礼を言わずにはいられない!
ありがとうございました!
792デフォルトの名無しさん:2009/06/21(日) 23:16:45
>>788
ああそっか、内税になったんだった。
すっかり忘れてた。ありがとん
793デフォルトの名無しさん:2009/06/21(日) 23:26:57
>>691(問題) が、>>428(解答) のコピペだったことには驚いた。
>って問題ですがそれは合ってると思うから書きました。
794デフォルトの名無しさん:2009/06/21(日) 23:39:54
795デフォルトの名無しさん:2009/06/21(日) 23:59:36
[1] 授業単元: C言語 設計演習
[2] 問題文(含コード&リンク)
問題文    : http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9506.txt
現在まで作成したコード : http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9507.txt
基本情報過去問    :ttp://情報処理試験.jp/FE15b-pm/t06.html
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: C言語
[4] 期限: 特になし
[5] その他の制限:問題文内にあります。

以前に、お世話になりました者です、
自由課題なのですが、座席指定予約部分がどうにも、解決出来ないです。
どうか、宜しくお願いします。

また、ソース全体に関する、ご指摘等を頂けたらと思います、
なにぶん自信がないものなので。
796793:2009/06/22(月) 01:27:48
>>783 の宿題
#include <iostream>
using namespace std;
int main(void) {
  int tanka, kosuu, goukei; float ritu;
  cin >> tanka >> kosuu >> ritu;
  cout<<endl<<endl;
  cout<<"品物の単価を入力してください\n"<<tanka<<endl;
  cout<<"品物の個数を入力してください\n"<<kosuu<<endl;
  cout<<"税率を%で入力してください\n"<<ritu<<endl;
  goukei = tanka * kosuu;
  cout<<"合計金額は税込みで"<< goukei*(1+ritu/100) <<"円(税抜きで"<< goukei <<"円) "<<endl;
  cout<<endl<<endl;
  cout<<"合計金額は税込みで"<< goukei <<"円(税抜きで"<< goukei/(1+ritu/100) <<"円) "<<endl;
}
797デフォルトの名無しさん:2009/06/22(月) 01:39:59
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
下記のような電話帳がある。これをランダムファイルname_tel.txtに書き込むプログラムをつくりなさい。

Ichiro Suzuki 03-1111-2222
Hanako Yamato 042-387-5555
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:20090624
[5] その他の制限:
1人毎のデータを下記のような単位(レコード)で記録する。
名と姓,電話番号の2項目についてそれぞれscanf関数を用いて入力する。
また,データ入力の終了はCtrl-dとする。
データの書き込みは1人毎のデータをまとめて書式指定して,fprintf関数を用いて行うこと
798デフォルトの名無しさん:2009/06/22(月) 01:40:38
100円(税抜96円)のものを100個買った場合って、税込み10000円で、税抜き9600円なのかな
799デフォルトの名無しさん:2009/06/22(月) 02:08:37
税抜きの金額は、買い物の合計/1.05なので、税額は477円。
800デフォルトの名無しさん:2009/06/22(月) 02:10:01
なるほど。
んじゃ>>796の下のやつであってんのかな
801デフォルトの名無しさん:2009/06/22(月) 03:19:11
だれか>>580の質問やってもらえませんか?
期限は気にしなくていいのでお願いします。
802デフォルトの名無しさん:2009/06/22(月) 04:01:02
#include <stdio.h>
#include <string.h>
#define N 3
#define LENGTH 100
int main() {
const char database[N][LENGTH] = {
"ichirou", "jirou", "hanako"
};
char query[LENGTH];
while (printf("> "), scanf("%s", query) != EOF) {
int i;
printf("---検索結果---\n");
for (i = 0; i < N; i++) {
if (strstr(database[i], query)) {
printf("%s\n", database[i]);
}
}
printf("--------------\n");
}
return 0;
}
803デフォルトの名無しさん:2009/06/22(月) 11:33:45
>>801
もうひとつ、問題がはっきりしないんだよね。
鍵を与えて文章の中の名前らしきローマ字名を切り抜くのか。
ローマ字の字並びの定義も必要なのか。
姓・名の間にスペースが入らないこともあり得るのか、とか。
804デフォルトの名無しさん:2009/06/22(月) 15:24:10
>>803
検索氏名が Futaro Yamada だとして
文の中にamaが出てきたら適合するとか、
そういう意味じゃないの?
805デフォルトの名無しさん:2009/06/22(月) 15:35:42
俺も>>802のようなことだと思ってた
806デフォルトの名無しさん:2009/06/22(月) 16:07:42
[1] 授業単元:C演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9510.txt
[3] 環境
 [3.1] OS: Windows XP

 [3.3] 言語: C言語
[4] 期限:6月23日12時まで
[5] ポインタまで教わりました、よろしくお願いします
807デフォルトの名無しさん:2009/06/22(月) 16:11:17
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):http:
//kansai2channeler.hp.infoseek.co.jp/cgi- bin/joyful/img/9511.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++/
[4] 期限: 明日6月23日 20:00まで
[5] その他の制限: 特にありません

4問あります。 どうぞよろしくお願いします。

808デフォルトの名無しさん:2009/06/22(月) 16:54:37
>>806
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int calc(double *x,double *y);
double a, b, c, d;
int main(){
double x, y;
printf("x:");
scanf("%lf",&x);
printf("y:");
scanf("%lf",&y);

calc(&x, &y);
printf("x + y = %.0lf\n",a);
printf("x - y = %.0lf\n",b);
printf("x * y = %.0lf\n",c);
printf("x / y = %.2lf\n",d);
return 0;}
int calc(double *x,double *y){
a = *x + *y;
b = *x - *y;
c = *x * *y;
d = *x / *y;
return 0;}
809デフォルトの名無しさん:2009/06/22(月) 17:05:19
整数って書いてあんのにdoubleでうけるのはなんで?
810デフォルトの名無しさん:2009/06/22(月) 17:12:27
>>809
実行例に x / y = 2.67ってのがあったから。

課題2
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9512.txt
811デフォルトの名無しさん:2009/06/22(月) 17:18:03
calcにアドレスを渡すのは何で?
812810:2009/06/22(月) 17:18:13
>>806

str1[i] != str2[i] じゃなくて
*(str1 + i) != *(str2 + i)
だった
813デフォルトの名無しさん:2009/06/22(月) 17:22:24
流れにのってみる
hogeとhageがsameってなったんだけどなんで?
814810:2009/06/22(月) 17:28:58
for (i = 0; str1[i] != '\0'; i++){
if (str1[i] != str2[i]){
return 0;
}
}
return 1;
}

これでおk
815810:2009/06/22(月) 17:32:42
for (i = 0; str1[i] != '\0'; i++) → for (i = 0; str1[i] != '\0' || str2[i] != '\0'; i++) ね
またまちがえてた。
なんどもごめんねw
816デフォルトの名無しさん:2009/06/22(月) 17:34:46
str2の方が短かった場合は、str1のナルじゃない文字と、str2のナル文字を比較して、
結局は異なるという結果が返るから問題ないよ
817デフォルトの名無しさん:2009/06/22(月) 17:35:28
そんなことないわごめんwww
818デフォルトの名無しさん:2009/06/22(月) 17:36:15
なんかグダグダすぎんな。
819デフォルトの名無しさん:2009/06/22(月) 18:46:40
Visual Studio 2005で、入力した数字が一秒ごとに1減っていくタイマーを作りたいのですが#include <windows.h>じゃなく#include <time.h>を使った方法を教えてもらえませんか?
820デフォルトの名無しさん:2009/06/22(月) 18:47:55
>>819
テンプレ書けやぁ〜
821デフォルトの名無しさん:2009/06/22(月) 18:57:13
[1] インタラクティブコミュニケーション
[2] ttp://www.ncc-1701.jp/kakei/InteractiveComm/Class5/InteractiveComm_6.htmlに書いているタイマーの演習
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Windows Visual Studio 2005
 [3.3] 言語: C
[4] 期限: 今日
[5] その他の制限:#include <windows.h>じゃなく
#include <time.h>
822デフォルトの名無しさん:2009/06/22(月) 19:00:34
>>821
404NotFound!
823デフォルトの名無しさん:2009/06/22(月) 19:02:34
824デフォルトの名無しさん:2009/06/22(月) 19:22:59
>>821
こんな感じで。動作は保障しない。
ちょっと汚い実装になったが勘弁してくれ。

#include <stdio.h>
#include <time.h>

int main(){
    time_t Limit,Now;
    int Count=0;
    
    printf("何秒前からカウントしますか? ");
    scanf("%d",&Count);
    Now = time(NULL);
    while(Now == time(NULL));
    Now = time(NULL);
    Limit = time(NULL) + Count;
    printf("  %d秒前\n",Limit - Now);
    while(Limit>Now){
        if(Now == time(NULL)) continue;
        Now = time(NULL);
        printf("  %d秒前\n",Limit - Now);
    }
    return 0;
}
825デフォルトの名無しさん:2009/06/22(月) 19:39:01
>>824
わざわざありがとうございます。残念ながら動きませんでした
これってtime_tを使わずは無理ですか?
826デフォルトの名無しさん:2009/06/22(月) 19:44:11
えーっとunsigned intにしても多分動くよ。
827デフォルトの名無しさん:2009/06/22(月) 19:44:43
>>824
getch();入れたら動きました。
828デフォルトの名無しさん:2009/06/22(月) 19:45:54
>>827
多分だが、動きませんでしたという主張が間違えている
829デフォルトの名無しさん:2009/06/22(月) 19:47:44
なんじゃそら。
stdinになんか不純物混ざってないか?
830デフォルトの名無しさん:2009/06/22(月) 19:49:49
>>829>>827に!
831デフォルトの名無しさん:2009/06/22(月) 19:57:40
解決しました
ありがとうございましたm(__)m
832デフォルトの名無しさん:2009/06/22(月) 19:58:32
>>831>>821のことです
833デフォルトの名無しさん:2009/06/22(月) 21:12:49
>>807
課題1やってみたけど正直なんか動作が違うw
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9513.txt
834デフォルトの名無しさん:2009/06/22(月) 21:27:29
void insertion(int a[], int n)
{
int i, j, k, tmp;
for(i=1; i<n; i++) {
tmp = a[i];
for(j=i; j>0 && a[j-1]>tmp; j--) {
for(k=0; k<n; k++) {
if(k==j || k==j-1) printf("(%2d) ", a[k]);
else printf(" %2d ", a[k]);
}
putchar('\n');
swap(int, a[j], a[j-1]);
}
if(j==i) {
for(k=0; k<n; k++) {
if(k==j) printf("[%2d] ", a[k]);
else printf(" %2d ", a[k]);
}
putchar('\n');
}
}
}
835デフォルトの名無しさん:2009/06/22(月) 21:32:15
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9514.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: c++6.0
 [3.3] 言語:C
[4] 期限:6/23
[5] その他
よろしくお願いします
836デフォルトの名無しさん:2009/06/22(月) 21:37:26
>>835
Cで何か作れってわけでなし。スレチじゃね?
動かした結果及び動作の説明をするんでしょ?
837デフォルトの名無しさん:2009/06/22(月) 22:08:42
キーボードから入力した数値の段数を持つ逆ピラミッドを表示するプログラム。

例えば3と入力した時、

*****
***


となるようなプログラムです。
どうか早急にお願いします。
838デフォルトの名無しさん:2009/06/22(月) 22:11:36
839デフォルトの名無しさん:2009/06/22(月) 22:16:40
>>837
#include <stdio.h>

void replace(int a);
int main()
{
int a;
printf("数字を入れてね...");
scanf("%d",&a);
replace(a);
}

void replace(int a)
{
int i,j;
for(j = a; a >= 0; a--){
for(i = 0; i < a; i++){
printf("*");
}
printf("\n");
}

}
840デフォルトの名無しさん:2009/06/22(月) 22:29:10
jが不要な上に>>837の例とは違うw
841デフォルトの名無しさん:2009/06/22(月) 22:33:51
>>837
半角スペース使うな
842デフォルトの名無しさん:2009/06/22(月) 22:43:09
[1] C言語
[2]1〜5の数字の組み合わせをを2次元配列index[][]に格納し、表示しなさい。
[3] 環境
 [3.1] Windows
 [3.2] Visual C++
 [3.3] C
[4] 期限: 2009年6月25日20:00まで
[5] メソッドを使わず、main文の中forループを使い作成すること
843デフォルトの名無しさん:2009/06/22(月) 23:09:15
>>837
こうかな

#include "stdio.h"
int main()
{
int i, j, pyramid, ret, num;
printf("数字を入力してください: ");
ret = scanf("%d", &num);
if (ret != 1)
{
printf("入力が不正です\n");
return 1;
}
pyramid = num * 2 - 1;
for (i=0; i<num; i++)
{
for (j=0; j<pyramid; j++)
{
if (j>=i && j<pyramid-i)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
844デフォルトの名無しさん:2009/06/22(月) 23:21:28
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9515.txt
[3] 環境
 [3.1] OS: Vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C 
[4] 期限:6月23日まで
[5] その他の制限: 特になし
845デフォルトの名無しさん:2009/06/22(月) 23:22:40
>>796
本当に助けてください。コンパイルのサイトでコンパイルしたら変な風に出てきました。
品物の単価を入力してください
-1084811224
品物の個数を入力してください
0
税率を%で入力してください
3.99994e-34
合計金額は税込みで0円(税抜きで0円)


合計金額は税込みで0円(税抜きで0円)
846デフォルトの名無しさん:2009/06/22(月) 23:32:07
自分の環境で、コンソール使って打ち込んでみた方が良い。
万一そのサイトしか使えなかったら、cinの行をコメントアウトして

tanka = 1980;
kosuu = 5000;
ritu = 12.5;

とか数値を入力してみてコンパイルしてもらうと安心できるかな。
847デフォルトの名無しさん:2009/06/22(月) 23:33:21
>>580の者ですが、>>804の方がおっしゃってるように一致した場合を検索するプログラムをを願いします。
説明不足でどうもすみませんでした。
848デフォルトの名無しさん:2009/06/22(月) 23:34:23
>>842
ほい。配列の名前間違えたけど。

#include <stdio.h>

int main(void){
int i,j,retsu=0;
int data[25][2];

for(i=1;i<=5;i++){
for(j=1;j<=5;j++){
data[retsu][0] = i;
data[retsu][1] = j;
retsu++;
}
}

for(i=0;i<25;i++){
for(j=0;j<2;j++){
printf("%2d",data[i][j]);
}
putchar('\n');
}

return 0;
}
849デフォルトの名無しさん:2009/06/22(月) 23:36:39
[1]授業単元:プログラミング演習課題3
[2]問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9516.txt
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ名とバージョン:C machine
[3.3]言語:C
[4]期限:明日の16時
[5]その他の制限:@選択ソートを使用する。Aグローバル変数を取らない。

期限ギリギリですが、よろしくお願いします。

850デフォルトの名無しさん:2009/06/22(月) 23:37:02
>>845
#include <iostream>
using namespace std;
int main(void) {
int tanka, kosuu, goukei;
float ritu;
cout<<"品物の単価を入力してください"<<endl;
cin >> tanka;
cout<<"品物の個数を入力してください"<<endl;
cin >> kosuu;
cout<<"税率を%で入力してください"<<endl;
cin >> ritu;
goukei = tanka * kosuu;
cout<<"合計金額は税込みで"<< goukei*(1.0+ritu/100.0) <<"円(税抜きで"<< goukei <<"円) "<<endl;
cout<<"合計金額は税込みで"<< goukei <<"円(税抜きで"<< goukei/(1.0+ritu/100.0) <<"円) "<<endl;
}
851デフォルトの名無しさん:2009/06/22(月) 23:41:18
あいうえお
/*かきくけこ*/
さしす/*せそ
なにぬ*/ねの

というファイル(test.txt)から文字数、改行数、コメント文字数をカウントし、出力するプログラムです。
お願いいたします。
852デフォルトの名無しさん:2009/06/22(月) 23:45:39
>>851
>>1を見て、テンプレ書いてくれ
853デフォルトの名無しさん:2009/06/22(月) 23:46:59
>>847
だからそれ>>802じゃだめなの?って。
854デフォルトの名無しさん:2009/06/22(月) 23:52:31
すいません、テンプレ忘れてました。

[1] 授業単元:プログラミング演習
[2] 問題文:以下のファイル(test.txt)から文字数、改行数、コメント文字数をカウントし、出力する

あいうえお
/*かきくけこ*/
さしす/*せそ
なにぬ*/ねの


[3] 環境
 [3.1] OS: Windows
 [3.2] Visual Studio 2005
 [3.3] 言語: C
[4] 期限: 明日中
[5] その他:特になし

よろしくお願いします。
855842:2009/06/23(火) 00:10:03
>>848
せっかくやっていただいたのに申しわけありません。
格納する配列はn行5列の状態で格納しなければいけませんでした。
(1,1,1,1,2)
(1,1,1,1,3)
のような感じです。

説明不足で申し訳ありませんでした。
856デフォルトの名無しさん:2009/06/23(火) 00:11:03
文字数って地味に難題だよなw
文字コード指定無しだし
857デフォルトの名無しさん:2009/06/23(火) 00:52:07
>>842=>>855
解釈が微妙な所だったな。
まぁループ数の変化のみなので。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9517.txt
858デフォルトの名無しさん:2009/06/23(火) 00:55:01
>>857
それ組み合わせじゃなくて、順列じゃね?
859デフォルトの名無しさん:2009/06/23(火) 01:03:35
>>858
(´・ω・`)

>>842
ごめんなさい。
余力があれば作り直します。
860デフォルトの名無しさん:2009/06/23(火) 01:17:06
>>842=>>855
すんませんでした。
汚いけど一応順列…のはず。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9518.txt
861デフォルトの名無しさん:2009/06/23(火) 01:24:44
以下のように出力されるプログラムを作成せよ
年齢を入力してください
16
生まれた年を入力してください
1986
好きな数字を入力してください
7
あなたは1986年生まれの16才で、7が好きですね

862861:2009/06/23(火) 01:25:29
#include <iostream>
using namespace std;
int main(){
int age,year,number;
cout << "年齢を入力してください" << endl;
cin >> age;
cout << "生まれた年を入力してください" << endl;
cin >> year;
cout << "好きな数字を入力してください" << endl;
cin >> number;
cout << "あなたは" << year << "年生まれの" << age << "才で、" << number << "が好きですね" << endl;
return0;
}


上の問題のプログラムにcinを一回だけ用いて表現せよってどうすればいいんですか。本当に誰か教えてください
863796:2009/06/23(火) 01:27:29
>>845 そうコメント来たか・・・ http://codepad.org/
0006: int tanka=100, kosuu=3, goukei; float ritu=5;
864デフォルトの名無しさん:2009/06/23(火) 01:31:32
答えがあるのに、自分で×だしてるだけ。
#include <iostream>
using namespace std;
int main(){
int age,year,number;
cin >> age >> year >> number;
cout << "年齢を入力してください\n" << age <<endl;
cout << "生まれた年を入力してください\n" << year <<endl;
cout << "好きな数字を入力してください\n" << number <<endl;
cout << "あなたは" << year << "年生まれの" << age << "才で、" << number << "が好きですね" << endl;
return0;
}
865デフォルトの名無しさん:2009/06/23(火) 01:33:20
>>860は組み合わせの間違い。
疲れてるのかな…俺。

866デフォルトの名無しさん:2009/06/23(火) 01:34:42
>>863
やっぱりおかしいですかね。

>>864
ありがとうございます。それもコンパイルすると結果同じになりますよね?
867862:2009/06/23(火) 01:46:47
年齢を入力してください
生まれた年を入力してください
好きな数字を入力してください
あなたは134539285年生まれの134539136才で、-1079911224が好きですね

僕が作ったやつだって、そのコンパイルにかけると上のように出るんです。本当に誰か助けてください。数字も入れてないのに何で勝手に最後の数字だけ変な風に出てくるんですか
868デフォルトの名無しさん:2009/06/23(火) 01:48:21
>>866 意味不明
私の推理では、1970年生まれで現在40歳近い。
0004: int age=16,year=1986,number=7;
0010: return 0;
869デフォルトの名無しさん:2009/06/23(火) 01:49:34
>>842>>855を見るにこうだと思うんだが。
「1〜5の数字の組み合わせ」という言葉だけで一意に特定するのは難しい。ところで「をを」って流行りなん?

#include <stdio.h>
/*
 数字1つ 5
 数字2つ 1:4、2:3、3:2、4:1 各10
 数字3つ 1:1:3、1:2:2、1:3:1、2:1:2:、2:2:1、3:1:1 各10
 数字4つ 1:1:1:2、1:1:2:1、1:2:1:1:、2:1:1:1 各5
 数字5つ 1
5+10*4+10*6+5*4+1 = 126
*/
#define N (126)

int main(){
  int i0, i1, i2, i3, i4, index[N][5], i = 0;
  for(i0 = 1; i0 <= 5; ++i0)
    for(i1 = 1; i1 <= i0; ++i1)
      for(i2 = 1; i2 <= i1; ++i2)
        for(i3 = 1; i3 <= i2; ++i3)
          for(i4 = 1; i4 <= i3; ++i4){
            index[i][0] = i0;
            index[i][1] = i1;
            index[i][2] = i2;
            index[i][3] = i3;
            index[i++][4] = i4;
          }
  for(i0 = 0; i0 < i; ++i0)
    printf("(%d,%d,%d,%d,%d)\n", index[i0][4],index[i0][3],index[i0][2],index[i0][1],index[i0][0]);
  return 0;
}
870862:2009/06/23(火) 01:54:13
>>868
すみません。でも僕がやって元々のやつは何もデータ入れてなくても結論だけ出ますよね
871デフォルトの名無しさん:2009/06/23(火) 01:56:42
>>870
何もデータを入れなくとも、というのはどういうことをやるの?
872デフォルトの名無しさん:2009/06/23(火) 01:57:33
パソコンにC++入ってれば、それ使うべき。
873862:2009/06/23(火) 02:02:38
>>871
862で書いたのを863のでコンパイルしたら、
年齢を入力してください
生まれた年を入力してください
好きな数字を入力してください
あなたは134539285年生まれの134539136才で、-1079911224が好きですね
って出るんですが、年齢も生まれた年も好きな数字も入れてないのにこんな風に出ちゃいます
874デフォルトの名無しさん:2009/06/23(火) 02:08:09
ちゃんとcinに値を入れられる環境でやれば?
ちなみに>>862はコンパイル通らなかったよ
875862:2009/06/23(火) 02:16:16
>>861の問題もじゃあ誰か教えてください。だって、違うんですよねorz
ってことは次のも違うし
876864:2009/06/23(火) 02:22:18
862 >>864>>868 の修正を。
877デフォルトの名無しさん:2009/06/23(火) 02:27:45
テンプレ書かない子ってのはこういう感じなんだな。
878874:2009/06/23(火) 02:31:32
>>875
コンパイル通らなかったのは別の話だよ。
>>862そのままだと「結論だけ出ます」という状態にはならなかったでしょ?

で、それが原因で入力できないのではないよ。
だから「値を入れられる環境でやれば?」と言った。
879デフォルトの名無しさん:2009/06/23(火) 02:45:22
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9519.txt
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C言語
[4] 期限: 6月25日9時
[5] その他の制限: 構造体まで習いました
880デフォルトの名無しさん:2009/06/23(火) 05:44:04
881デフォルトの名無しさん:2009/06/23(火) 06:24:42
>>849
だれかお願いします。
882デフォルトの名無しさん:2009/06/23(火) 08:55:17
>>881
お待たせ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9521.txt

入力用データは↓のようなものを想定(ファイル名はdata.txt)
000001,hogehogehogehogehoge,080,090,095,070
000002,fugafugafugafugafuga,065,080,045,100
000003,piyopiyopiyopiyopiyo,095,100,100,100
000004,punipunipunipunipuni,025,000,010,060

883882:2009/06/23(火) 09:02:32
884デフォルトの名無しさん:2009/06/23(火) 10:50:01
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
List型を継承し、StackクラスとQueueクラスを作成する
(ただし、実行されている様子がわかるmain関数も記述すること)

[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C++
[4] 期限: 6月26日23時59分
[5] その他の制限:C++習い始めて2ヶ月です

どうかよろしくお願いします・・・。
885デフォルトの名無しさん:2009/06/23(火) 11:03:17
>>884
List型も一から作るの?
886デフォルトの名無しさん:2009/06/23(火) 11:27:46
そうです。
887デフォルトの名無しさん:2009/06/23(火) 12:09:51
>[5] その他の制限:C++習い始めて2ヶ月です
で?制限はなんなんだ?
「○○は習ってないから使わないでください」っていうなら
使ってるテキストの習ったところを全部うpしろよ
888デフォルトの名無しさん:2009/06/23(火) 12:19:11
>>883
ありがとうございます。

ちなみにMAXを使わないでソートする方法はどうするんでしょうか?
889デフォルトの名無しさん:2009/06/23(火) 12:21:42
制限は特にありません。すみません
890デフォルトの名無しさん:2009/06/23(火) 12:31:56
[1] 授業単元:数理物理
[2] 問題文(含コード&リンク):http://www.mns.kyutech.ac.jp/~kamada/suuributuri/sub8.html
  の課題3のプログラムで解くところまで
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:分かりません
 [3.3] 言語:どちらでも可
[4] 期限:今日中にお願いします
891882:2009/06/23(火) 12:42:58
>>888
いまいち質問の意図がわからないのだけど、
MAXってsort_students()の中のmaxのこと?
892デフォルトの名無しさん:2009/06/23(火) 13:06:02
>>891
そうですね。一人ずつ比較していくやり方なんですが…
説明がへたですいません。
893882:2009/06/23(火) 13:49:58
>>892
バブルソートのことかな?
とりあえずやってみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9523.txt
894デフォルトの名無しさん:2009/06/23(火) 14:51:55
>>862>>864ってコンパイル通りますか?もうパソコン室でできないのに締め切り今日なんですが
895デフォルトの名無しさん:2009/06/23(火) 14:58:17
通りましたよ
896デフォルトの名無しさん:2009/06/23(火) 14:58:57
ありがとうございます。何て出ました
897デフォルトの名無しさん:2009/06/23(火) 15:08:32
>>893
ありがとうございました!
無事に間に合いそうです!
898デフォルトの名無しさん:2009/06/23(火) 15:22:10
C++で前置き後置きインクリメント、前置き後置きデクリメントを確かめるようなプログラムを作成して
結果も記せ


今コンパイルがパソコンできないのでありません。誰か助けてください
899デフォルトの名無しさん:2009/06/23(火) 15:40:39
>>833 お疲れ様です。 ありがとうございました。

どなたか>>807続きお願いします。
900デフォルトの名無しさん:2009/06/23(火) 15:44:48
>>898
クラスの?
901デフォルトの名無しさん:2009/06/23(火) 15:56:22
>>895
通らないですよ
902デフォルトの名無しさん:2009/06/23(火) 16:03:07
903デフォルトの名無しさん:2009/06/23(火) 16:54:18
[1]c++
[2]5個の実数型データを配列bに入力してから、最大値max、最小値min、合計kei、平均値heikinを求めなさい。
[3]
 [3.1] xp
 [3.2] turbo c 5.01
 [3.3] c++
[4] 期限:今週末
[5] お願いします
904デフォルトの名無しさん:2009/06/23(火) 16:57:14
>>902 確認できました。 ありがとうございました!
905デフォルトの名無しさん:2009/06/23(火) 17:25:06
[1]c++
[2]2次元配列n[10][10]のすべての要素に1を代入してから、その内容を表示しなさい。
また、対角要素だけを1を代入し、ほかはすべて0を代入してから、表示しなさい。
ただし、対角要素は左上隅から右下隅への対角線上の要素とする。次の図は実行例である。
 --- (2)配列nの内容 ---

100000000
010000000
001000000
000100000
000010000
000001000
000000100
000000010
000000001

[3]
 [3.1] xp
 [3.2] turbo c 5.01
 [3.3] c++
[4] 期限:今週末
[5] お願いします
906デフォルトの名無しさん:2009/06/23(火) 17:36:05
[1]c++
[2]下記のように各要素同士の加算をしなさい
  1 2 3 7 8 9 8 10 11
4 5 6 + 4 5 6 = 8 10 12
7 8 9 1 2 3 8 10 11
[3]
 [3.1] xp
 [3.2] turbo c 5.01
 [3.3] c++
[4] 期限:今週末
[5] お願いします
907デフォルトの名無しさん:2009/06/23(火) 17:45:00
[1]c++
[2]要素の数51の1次配列aの各要素 a[1]〜a[50]に、0〜100点までの点数を入力した後、
 最低点を"a[27]=5点"と表示しなさい
[3]
 [3.1] xp
 [3.2] turbo c 5.01
 [3.3] c++
[4] 期限:今週末
[5] お願いします
908デフォルトの名無しさん:2009/06/23(火) 17:46:18
>>906
9+3が11になる加算は無理w
909デフォルトの名無しさん:2009/06/23(火) 17:51:41
[1]c++
[2]要素の数51の1次元配列a[1]〜a[50]に、0〜100点までの点数を入力した後、
 点数の高い順(降順)にa[45]=100,a[15]=98,……a[32]=5 縦に表示しなさい。
[3]
 [3.1] xp
 [3.2] turbo c 5.01
 [3.3] c++
[4] 期限:今週末
[5] お願いします
910デフォルトの名無しさん:2009/06/23(火) 17:54:26
>>908
すいません。 12でした
911デフォルトの名無しさん:2009/06/23(火) 18:00:23
[1]c++
[2]要素の数51の1次元配列a[1]〜a[50]に、0〜100点までの点数を入力した後、
 最高点と最低点および平均点を同時に求めて表示するプログラムを作りなさい。
[3]
 [3.1] xp
 [3.2] turbo c 5.01
 [3.3] c++
[4] 期限:今週末
[5] お願いします
912デフォルトの名無しさん:2009/06/23(火) 18:40:48
>>894
パソコン室て何だよ。コンパイルや実行が自分で出来ない環境なのか?
それなのに実行結果が知りたいとは、何を提出するつもり。
>>868 で答え終ってるから、もう一度読んでソース修正してみて。
913デフォルトの名無しさん:2009/06/23(火) 18:52:16
こんなとこで宿題丸投げする人間が自宅に実行環境整えると思えるのが理解できないw
914デフォルトの名無しさん:2009/06/23(火) 19:04:15
>>912
PCが置かれている教室などはあるが、学校に通ったことないのか?w
915デフォルトの名無しさん:2009/06/23(火) 19:12:12
最近は中学校くらいからあるんだっけ?
いい年したおっさんで大学行ってないとかかな。
916デフォルトの名無しさん:2009/06/23(火) 19:16:36
そのパソコン室のパソコンではgccとかbcc32とか入ってないのか?
917デフォルトの名無しさん:2009/06/23(火) 19:17:08
>>912
>>868で終わったというのもよくわからん話だな。
918デフォルトの名無しさん:2009/06/23(火) 19:30:21
>>907, >>909, >>911 はたぶん同種の課題だと思うので
3問まとめてひとつのプログラムにした↓

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9526.txt
919デフォルトの名無しさん:2009/06/23(火) 19:36:07
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):二分木を用いて小さい順にソートする関数
void sort(int x[], int size)を作りたい。
ソートするデータとしてint型配列に格納した整数を関数に渡している。
なお、出来た二分木を中間順に走査して再帰的にアルゴリズムを作ること。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 明日まで

よろしくお願いします。
920デフォルトの名無しさん:2009/06/23(火) 20:12:24
921デフォルトの名無しさん:2009/06/23(火) 21:03:03
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9528.txt[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C 
[4] 期限:6月24日まで
[5] その他の制限: 特になし
922デフォルトの名無しさん:2009/06/23(火) 21:12:45
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9528.txt
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C 
[4] 期限:6月24日まで
[5] その他の制限: 特になし
923699:2009/06/23(火) 21:33:24
699で質問したものです。
701さんの回答で、
if((a = malloc(n*n*sizeof(float))) == NULL) return 1;
の部分がエラーになってしまい(line 11 で'int'から'float *'への指定です。:`='演算子)
コンパイラできませんでした。
どうしたらいいのか分からないです。
回答よろしくお願いします。
924デフォルトの名無しさん:2009/06/23(火) 21:48:15
>>23
malloc.hをインクルード。いや今はstdlib.hだっけ?まあどっちかだ。たぶん
925デフォルトの名無しさん:2009/06/23(火) 22:25:35
>>884
Listクラスも双方向リストを完全自作しようと思ったが面倒すぎたのでSTLを利用…

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9529.txt
926920:2009/06/23(火) 22:30:55
ごめん、>>906の問題の意味を誤解してた。
作り直した。>>920は忘れてくれ(謝)

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9530.txt
927デフォルトの名無しさん:2009/06/23(火) 22:42:10
ここは2ちゃんねる。
解答が正しいかどうかの動作確認は、依頼者の責任だろう。
そもそも、入力して出力するだけで計算もifもないプログラムにこんなに…。
928デフォルトの名無しさん:2009/06/23(火) 22:47:25
>>923
エスパーだが、
コンパイラはVCだろうけど、ソースの拡張子がcppなせいで出来ない。
ソースの拡張子をcにすると通ると思う。
929デフォルトの名無しさん:2009/06/23(火) 22:49:27
あ、>>924の方が重要だったわ。
忘れてくれ。
930デフォルトの名無しさん:2009/06/24(水) 00:59:35
[1] 授業単元:計算機システム構成原理
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9532.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月30日まで
[5] その他の制限: とくになし
931未解決と期限前:2009/06/24(水) 11:32:19
>>922 画像処理4問。画像全体のRGB各成分における平均輝度値を計算する 6月24日
>>919 二分木を用いて小さい順にソートする 6月23日
>>905 2問。2次元配列n[10][10]の対角要素だけを1を代入し、ほかはすべて0を代入してから、表示しなさい。6月28日
>>854 文字数、改行数、コメント文字数をカウントし、出力する 6月22日
>>844 画像処理3問。X座標が奇数であるすべてのピクセルを白にした画像を生成する。 6月23日
>>835 2問。(2)操作終了後にどのようなヒープができるか,図のように示せ 6月23日
>>797 ランダムファイルname_tel.txtに書き込む 6月24日
>>795 座席指定予約 なし
>>777 画像処理3問。画像の左半分を黒くした画像を生成 6月22日
>>773 ダイクストラ法を使って最短経路を表示せよ 6月21日の正午
>>771>>898 前置き、後置きインクリメント、前置き、後置デクリメントを確かめるようなプログラムを作成せよ。 不明
>>730 2問。操作終了後にどのようなヒープができるか,図のように示せ 6月22日
>>706 ヒープソートとクイックソートを完成させる 6月21日 12:00
>>588 (Linux)execl()を使用。execv()を使用。 6月24日12:00
>>183 画像の解像度と同じサイズの二次元配列を作りなさい。 なし
932デフォルトの名無しさん:2009/06/24(水) 12:24:05
[1] 授業単元:数理物理
[2] 問題文(含コード&リンク):http://www.mns.kyutech.ac.jp/~kamada/suuributuri/sub8.html
  の課題3のプログラムで解くところまで
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:分かりません
 [3.3] 言語:どちらでも可
[4] 期限: 3日後までにお願いします
933デフォルトの名無しさん:2009/06/24(水) 13:01:28
>>932
数学はド素人なのであってるかはわからない。Orz
プロットは自分でやるものと解釈している。
ほ、ほんとに動作は保障しないんだからね。

#include <stdio.h>
#include <math.h>

double F(double x,double v,double t){
    return -x + pow(-v,3)+1+cos(t);
}

int main(){

    for(double t=0.0;t<10.0;t+=0.1){
        printf("t=%lf F=%lf\n",t,F(1.0,-0.5,t));
    }

    return 0;
}
934デフォルトの名無しさん:2009/06/24(水) 13:10:35
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9525.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月26日まで
[5] その他の制限: 特になし
よろしくお願いします
935デフォルトの名無しさん:2009/06/24(水) 13:18:05
>>771 >>898
ttp://codepad.org/AqCeztBC

CodePad使ってみたかっただけなんだからね。
次からはちゃんとテンプレ書いてくれ。
936デフォルトの名無しさん:2009/06/24(水) 14:11:27
[1] 授業単元: プログラミング
[2] 問題文:
#include<stdio.h>

struct Data{
int eng,math,info;
double av;
};

int main(void){
int i;
double e_av=0.0, m_av=0.0, i_av=0.0;
struct Data kojindata[3];

    「ここに3人分のデータの入力・計算・出力」

printf("英語の平均点:%4.2lf\n",e_av/3.0);
printf("数学の平均点:%4.2lf\n",m_av/3.0);
printf("情報の平均点:%4.2lf\n",i_av/3.0);

return 0;
}
[3] 環境
 [3.1] OS: (WindowsXP
 [3.2] コンパイラ名とバージョン:すみません、わからないです。
 [3.3] 言語: C
[4] 期限: 23日の6時
[5] その他の制限:特になし
よろしくお願いします。
937デフォルトの名無しさん:2009/06/24(水) 14:14:07
>>936ですが日付が23日ではなく24日です。
すみません。
938デフォルトの名無しさん:2009/06/24(水) 14:46:26
>>936
求められてる出力が不明だけど、
iが宣言されてるあたりからすると、こんな感じ?

for(i=0;i<3;i++){
printf("%d人目のデータを入力してください。\n",i+1);
printf("英語の点数:");
scanf("%d",&kojindata[i].eng);
printf("数学の点数:");
scanf("%d",&kojindata[i].math);
printf("情報の点数:");
scanf("%d",&kojindata[i].info);
kojindata[i].av=(kojindata[i].eng+kojindata[i].math+kojindata[i].info)/3.0;
printf("%d人目の平均点:%4.2lf\n",i+1,kojindata[i].av);
e_av+=kojindata[i].eng;
m_av+=kojindata[i].math;
i_av+=kojindata[i].info;
}
939デフォルトの名無しさん:2009/06/24(水) 15:24:43
>>934
ttp://codepad.org/L3y8kLf7

VCで開発してるんだが、何でポインタ版のコードで配列が表示できないのかよくわからなかった。
配列版のコードは引数変えただけで、関数内部はいじってないし。
なんでだぁ〜。

940939:2009/06/24(水) 15:26:29
やべ、デバッグに使った変数消すの忘れた。
適時対処願いたい。
941デフォルトの名無しさん:2009/06/24(水) 15:28:17
>>939
構造が違うから
942デフォルトの名無しさん:2009/06/24(水) 15:31:44
授業単元 プログラミング製作実習
問題文 上底,下底。高さ、それぞれの値をキーボードから4回入力し4つの台形の面積の合計を求めよ。
コンパイラ gcc
os ソラリス
 言語 c
その他条件 単純に大きさの違う4つ台形の面積の合計を求めてください。if文やfor文を使わないようお願いします。ひとつひとつの台形の面積を表示するようにしてください。お願いします。

943デフォルトの名無しさん:2009/06/24(水) 16:17:25
>>942
#include <stdio.h>
void daikei(){
  float jyoutei, katei, takasa, menseki;
static int number=0;

  printf("台形<%d>\n", ++number);
  printf("台形の上底の長さは?"); scanf("%f", &jyoutei);
  printf("台形の下底の長さは?"); scanf("%f", &katei);
  printf("台形の高さは?"); scanf("%f", &takasa);
  menseki = (jyoutei+katei)*takasa/2.0F;
  printf("台形の面積は:%f\n", menseki);
}
int main() {
  daikei();
  daikei();
  daikei();
  daikei();
}
944デフォルトの名無しさん:2009/06/24(水) 16:40:15
>>943
台形4つの合計が出てない。

#include <stdio.h>
float daikei(int number){
float jyoutei, katei, takasa, menseki;

printf("台形<%d>\n", number);
printf("台形の上底の長さは?"); scanf("%f", &jyoutei);
printf("台形の下底の長さは?"); scanf("%f", &katei);
printf("台形の高さは?"); scanf("%f", &takasa);
menseki = (jyoutei+katei)*takasa/2.0F;
printf("台形の面積は:%f\n", menseki);
return menseki;
}

int main() {
printf("台形4つの合計面積は:%f\n", daikei(1)+daikei(2)+daikei(3)+daikei(4));
}
945884:2009/06/24(水) 16:41:00
>>925さん有難うございます
しかし提出したら先生に「pop関数とpush関数をつくり、main関数内で動作させ
その様子が分かるようなソースを作れ」と言われ跳ね返されてしまいました・・。
お手数ですがこの条件に沿うように修正していただけないでしょうか。
946デフォルトの名無しさん:2009/06/24(水) 16:44:23
>>944
+ 演算子は左結合だけど,関数の呼び出しの順番は不定だったはずだから
そこは分離するといいのでは
947デフォルトの名無しさん:2009/06/24(水) 17:09:44
>>945
条件は満たしていると思うが違うのか?
違うならどう違う?
948デフォルトの名無しさん:2009/06/24(水) 17:11:16
>>938
レスありがとうございます。
無事出力が上手くいきました。
ありがとうございました。
949デフォルトの名無しさん:2009/06/24(水) 17:27:23
>>946 関数の呼び出しの順番
printf("%f %f %f %f\n台形4つの合計面積は:%f\n", daikei(1),daikei(2),daikei(3),daikei(4), 0);
950デフォルトの名無しさん:2009/06/24(水) 17:31:10
>>949だと確実にでたらめに。
>>944では関数の返却値コピーのところで副作用完了点が発生して
ちゃんと1,2,3,4の順に。

ますらお。
951デフォルトの名無しさん:2009/06/24(水) 18:03:20
>>905
#include <iostream>
using std::cout;
const int SIZE = 10;
int main(void) {
  int n[SIZE][SIZE];
  int i, j;

  cout.width(1);
  for(i=0;i<SIZE;i++) for(j=0;j<SIZE;j++) n[i][j] = 1;
  for(i=0;i<SIZE;i++) {
    for(j=0;j<SIZE;j++) cout<<n[i][j];
    cout<<'\n';
  }

  cout<<'\n';
  for(i=0;i<SIZE;i++) for(j=0;j<SIZE;j++) {
    n[i][j] = 0;
    if(i==j) n[i][j] = 1;
  }
  for(i=0;i<SIZE;i++) {
    for(j=0;j<SIZE;j++) cout<<n[i][j];
    cout<<'\n';
  }
}
952デフォルトの名無しさん:2009/06/24(水) 18:27:38
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9533.txt
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C 言語
[4] 期限:6月25日まで
[5] その他の制限: 特になし
953デフォルトの名無しさん:2009/06/24(水) 18:52:02
[1] 授業単元: ピラミッドアート
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9534.txt
[3] 環境
 [3.1] OS:windows vista
 [3.2] コンパイラ名とバージョン:visual studio 2005
 [3.3] 言語:C
[4] 期限:2009年6月29日(月)
[5] その他の制限:printf、scanf、if文、switch文、while文、for文、関数の使い方、まで習いました。
954デフォルトの名無しさん:2009/06/24(水) 19:29:11
>>945
なんとなく先生の言いたいことがわかった
配列かなにかを利用してスタックとキューを自分で作れてことだな。まちがいない
そうなると「List型を継承して」うんぬんがよくわからんけど・・・

とりあえずその方針で
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9535.txt

これで正しければ俺はエスパー初段
955デフォルトの名無しさん:2009/06/24(水) 19:37:51
>>854 しめきりは過ぎてる。VS C++
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main() {
  wchar_t c;
  int c_count = 0, l_count = 0, f_count = 0, comment_f = 0;
  setlocale( LC_CTYPE, "" );
  while((c = getwchar()) != WEOF) {
    c_count++;
    if(c == '\n') l_count++;
    if(! comment_f && c == '/') { // コメントの開始か?
      putwchar(c); // '/' を一旦処理終了する
      if((c = getwchar()) == WEOF) break; // 次の文字を読み込む
      c_count++;
      if(c == '\n') l_count++;
      else if(c == '*') { comment_f = 1; f_count--; }
    }
    if(comment_f && c == '*') { // コメントの終了か?
      if(comment_f) f_count++;
      putwchar(c); // '*' を一旦処理終了する
      if((c = getwchar()) == WEOF) break; // 次の文字を読み込む
      c_count++;
      if(c == '\n') l_count++;
      else if(c == '/') { comment_f = 0; f_count--; }
    }
    if(comment_f) f_count++;
    putwchar(c);
  }
  l_count++;
  wprintf(L"\n文字数=%d 行数=%d コメント文字数=%d\n", c_count, l_count, f_count);
}
956884:2009/06/24(水) 19:48:25
>>954さん
ちょうど今具体的にどうすれば良いかメールで尋ねていて、返信がきましたので要約してみます

まずListクラスに値と次のヘッダアドレスを入れる場所を作る。
メインに書いても問題ないが、関数にまとめたほうがよい。(同じ工程を繰り返すので)

作る関数は
Listクラス
・値を入れる場所を生成し、値を入れ、一つ前の値に連結する
・連結して入れた値を表示する
スタッククラス
・プッシュ
・ポップ
キュークラス
・エンキュー
・デキュー

とのことです。
957デフォルトの名無しさん:2009/06/24(水) 19:58:15
>>956
もしかしてC++じゃなくてCの課題なんじゃないの?
958デフォルトの名無しさん:2009/06/24(水) 20:00:34
>>956
うわ、線形リストも自作するのかマンドクセ・・・
しょうがないので最後まで付き合う。明日までに作る
959デフォルトの名無しさん:2009/06/24(水) 20:05:02
[1] 授業単元:統計学入門
[2] 問題文(含コード&リンク):
1. 1回の試行において、1,2,3,4が出る確率がそれぞれ0.4 0.3 0.2 0.1とする。
(1)この試行を2回繰り返した場合の合計の確率分布をもとめ、平均と標準偏差を求めよ。
(2)この試行を2回繰り返した場合の・・・・
(3)この試行をNかい繰り返した場合の・・・・

2.母集団A{3,4,7}は3つの要素からなる。ここで繰り返し復元抽出(取り出しては元に戻す)を行うものとし、
(1)2回の復元抽出の結果得られる合計の平均と標準偏差を求めよ。
(2)3回の・・・・
(3)4回の・・・・
(4)N階の・・・・
[3] 環境
 [3.1] OS:WindowsVista
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C
[4] 期限: 6月27日正午
[5] その他の制限:ソースの提示は無しなので、制限無し。
結果と、計算過程がソースから分かるようなプログラムだとありがたいです。
960884:2009/06/24(水) 20:12:58
>>957
いえ、C++の授業です

>>958
申し訳ありません、授業聞けかったばっかりに・・・。
当方も教科書代わりにと買わされたC++実践プログラミングを読んでなんとか理解しようとしているのですが
理解力がなく質問できる相手が近くにいないので期日に間に合いそうにありません、すみません。
961デフォルトの名無しさん:2009/06/24(水) 21:11:06
宿題バレ回避のためにメールでソース受け取るのってアリでしょうか?
962デフォルトの名無しさん:2009/06/24(水) 21:12:53
それは作ってくれた人次第じゃないの
963デフォルトの名無しさん:2009/06/24(水) 21:15:36
俺はここの解答の常連だが、こんな長いパートスレなんだし
目つけられててもおかしくないと思うからその方がいいとは前々から思ってたw
次スレにでもテンプレにメールで送って欲しいか否かの項目追加してくれてもかまわんよ
俺は、だけどな
964デフォルトの名無しさん:2009/06/24(水) 21:18:41
秘匿主義になると回答の妙が見れなくなって寂しいなぁ。
なぁ。死ぬときは一緒だろ?へへ。
965デフォルトの名無しさん:2009/06/24(水) 21:21:56
>>961
それだと質問者の方もメールとかにしないとあんま意味ないだろw
まあ初歩の授業だったら同じ時期に同じような範囲やってるだろうし
完全に特定はできんだろうけどw
俺は独学で勉強中だからこのスレを勉強に使ってるから
正解のソースが見れなくなると少し寂しいかもわからんね
966デフォルトの名無しさん:2009/06/24(水) 21:23:08
何かと深刻なトラブルの原因になるので、コードだけのメール
直接転送だけはやめたほうがいいと思う。
コードがある程度公開されることによる最小限の問題チェックがされる
担保が無くなるんで。(現状のやり方(CodePadを含む)が良いとも言えないが)
967デフォルトの名無しさん:2009/06/24(水) 21:24:31
このスレの答えはたまにとんでもない間違いとか、嫌がらせの悪ふざけまじってるから、
勉強するときには注意が必要だぜ。
最近はそういうのに突っ込む人も減って、スルーされてるしな。
968デフォルトの名無しさん:2009/06/24(水) 21:35:08
それにしてもあんまり身にならないような宿題出すとこもあるんだなあ
って思いながらニヤニヤ見てる
969デフォルトの名無しさん:2009/06/24(水) 21:44:51
C++ で list クラス作れっていうのもすごいな。
STLとの整合性とろうと思うと、並大抵の努力じゃないぞ。
970デフォルトの名無しさん:2009/06/24(水) 22:27:52
stlとの整合とる必要は別にないと思うが

しかしlist継承してstackとqueue作れって
どこのjavaだよって感じだな
回答者がどう頑張ってもクソ汚い構造になる
971デフォルトの名無しさん:2009/06/24(水) 22:34:24
>>960
これでおしまい…であってほしい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9537.txt

>>969
STLとの整合性なんか知るか!w
972デフォルトの名無しさん:2009/06/24(水) 22:53:03
>>971
>>956を読んだ感じだと、mainは「pushして中身表示、popして中身表示」って感じじゃないかなぁ。
こんなイメージ↓

【スタック】
初期状態:(空)
1をpush:[1]
2をpush:[1][2]
pop:[1]
pop:(空)

デストラクタはvirtualじゃないとNG、
Listがpop_head()とpop_tail()をpublicにしてるのもNGだと思う。
(それを継承するStackがpop_tail()をインタフェイスに持つのはおかしい。)
973デフォルトの名無しさん:2009/06/24(水) 22:59:16
>>972
あとはまかせた
974デフォルトの名無しさん:2009/06/24(水) 23:07:00
コンテナ、双方向イテレータ、コンテナアダプタと大変高度なプログラムを要求する教師である。
975デフォルトの名無しさん:2009/06/24(水) 23:28:47 BE:85204433-DIA(282072)
次スレ立てました
C/C++の宿題片付けます 128代目
http://pc12.2ch.net/test/read.cgi/tech/1245853701/
976デフォルトの名無しさん:2009/06/24(水) 23:38:40
C++初心者っぽいしなあ
977デフォルトの名無しさん:2009/06/24(水) 23:41:43
だが世の中にはとんでもな糞学校があるのも事実
こういう業界だし
978701:2009/06/24(水) 23:51:00
>>923 C++でコンパイルすると、型の不一致でコンパイルエラーになるようだ。
if((a = malloc(n*n*sizeof(float))) == NULL) return 1;
    ↓修正↓
if((a = (float*)malloc(n*n*sizeof(float))) == NULL) return 1;

#include <stdlib.h>または<malloc.h>
の追加も必要。
979デフォルトの名無しさん:2009/06/24(水) 23:51:28
学校より教師じゃねえかなあ
俺が通ってた専門の糞教師が自分は分かってることをいいことに
適当な説明を1時間して向こう1ヶ月は課題やる時間でーすで授業終わってたし
980デフォルトの名無しさん:2009/06/24(水) 23:53:51
>>978
えっ今までわからなかったのか
君には宿題を与えよう

C++にはstd::sortがあるがそれを使わず敢えて
qsort()を使ってソートするプログラムが書けるか?
981デフォルトの名無しさん:2009/06/25(木) 00:09:16
ここは宿題を出すスレじゃねー梅
982デフォルトの名無しさん:2009/06/25(木) 00:22:28
>>973
口だけだとあれなんで一応やったぜー
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9538.txt

2ヶ月もやってりゃ演算子オーバーロードやテンプレートくらいわかるよなwww
983デフォルトの名無しさん:2009/06/25(木) 00:34:46
>>972
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9539.zip
俺もやってみた。
・Listクラスを継承してStackクラスとQueueクラスを実装したmain.c, List.h
・インターフェスStackとQueueを定義してそれをListに実装したmain2.c, List2.h
の2バージョンを入れておいた。
>>972により忠実なのは前者だと思うけど、オブジェクト指向的には後者の方が一般的だと思われる。

ちなみに後者はなぜかcygwin+gcc環境だとdelete queue;するときに落ちる。詳しい人いたら原因教えて。
984デフォルトの名無しさん:2009/06/25(木) 02:10:16
>>952
ひとつめ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9540.txt

aとbが同じサイズの24ビットのbmpファイルであるという条件で作りました
985デフォルトの名無しさん:2009/06/25(木) 02:59:48
[1] 数値計算
[2] ボールの軌道を計算する。直径12cmのボール(質量;125g)を毎時85kmの速度で地上から50度上方へ発射する。
1.オイラー法とルンゲクッタ方を用いて地上に落下するまでの軌道を計算せよ。
2.空気抵抗が速度の二条に比例して働くとすると、軌道はどのように変化するか。ルンゲクッタ方を用いよ。
抵抗係数は0.42、空気の密度を1.23kg/m^3とする。
3.実験結果に対する考察を行え。
(4.)考察しなきゃいけないので、着眼点とか教えてもらえるとネ申
[3] 環境
 Windows vista
C++
[4] 本日の午前8:00
[5] いちよ本人が理解しないとまずい

助けてくれたらうんこもらす
986デフォルトの名無しさん:2009/06/25(木) 03:05:49
>>985
>>1 ・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 
すごくねむい
987デフォルトの名無しさん:2009/06/25(木) 04:03:25
>>986
問題文全てでコレだけds。。。

m*dv/dt=mg
g=9.81m/s^2
v=85km/h=23.61m/s
v1=v*sin50/180 \vをベクトル分解したときの上向きの速さ
v2=v*cos50/180 \vをベクトル分解したときの横向きの速さ
を使って、地面からの高さh1と
横に進んだ距離x2をfprintで算出するって問題。
微分方程式を解くのが意味不明。。。
グラフを描きたいです。
2.は1.のソースの式をちょちょっと変えてあげればおkです。
レポート提出は明日ではないので、期限は過ぎても大丈夫。

よろしくお願いします
988デフォルトの名無しさん:2009/06/25(木) 04:05:58
[1] 授業単元: C++(超初級)
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9542.txt
[3] 環境
 [3.1] OS: XP
 [3.2]Turbo C++
 [3.3] 言語: C++のみ
[4] 期限: 7/
[5] その他の制限

問題文に答えも書いてあるんですが、実行できません。
どこが間違っているかわからないので、添削をお願いできますか?
よろしくお願いいたします。
989デフォルトの名無しさん:2009/06/25(木) 04:22:29
>>987
調べる素振りすらしないとはすげーな、おまいwww
990デフォルトの名無しさん:2009/06/25(木) 04:24:14
>>988
kを初期化
991デフォルトの名無しさん:2009/06/25(木) 05:01:47
>>990
kの初期化忘れは致命的だけど、実行は出来るだろう。
992988:2009/06/25(木) 05:10:48
初期化というのは、k=0;を入れればいいということでしょうか?
それでも実行結果はかわらないんですが…
実行できないのではなくて、正整数を入力したあとにnが表示されてくれない状態になります。
for文の中のM>kあたりが怪しい気がするんですが…
993デフォルトの名無しさん:2009/06/25(木) 05:31:47
k+=1.0/n;
994デフォルトの名無しさん:2009/06/25(木) 06:00:40
できました!ありがとうございました!
995デフォルトの名無しさん:2009/06/25(木) 08:34:44
>>987
これがゆとりなのか・・・
996デフォルトの名無しさん:2009/06/25(木) 08:54:48
>>985
> [5] いちよ本人が理解しないとまずい
言葉にどうこう言うつもりはないが、理解するつもりがあるなら困っている点を上げる方が楽じゃないか?
997デフォルトの名無しさん:2009/06/25(木) 09:32:57
>>985
面白そうだな。
1ヵ月ぐらい休みがあったらやってみてもいいんだけどなあ。
998 ◆/91kCCQXBo :2009/06/25(木) 10:16:29
>>953 「ピラミッドアート」ダイア(中埋め)
#include <stdio.h>
#include <math.h>
void daia1(int m){
  int i, j, n;
  /* 1->1 2->3 3->5 4->7 */
  n = m * 2 - 1;
// if((n&1) == 0) {printf("EVEN NUMBER!"); return;}
  for(i=0; i<n; i++) {
    /* 2 1 0 1 2 (n/2=2) */
    if(i<=n/2) for(j=0; j<(n/2 - i); j++) putchar(' ');
    else for(j=0; j<(i - n/2); j++) putchar(' ');
    /* 1 3 5 3 1 (n/2=2) */
    if(i<=n/2) for(j=0; j<(1+2*i); j++) putchar('*');
    else for(j=0; j<1+2*(n-1-i); j++) putchar('*');
    /* 2 1 0 1 2 (n/2=2) */
    if(i<=n/2) for(j=0; j<(n/2 - i); j++) putchar(' ');
    else for(j=0; j<(i - n/2); j++) putchar(' ');
    putchar('\n');
  }
}
int main() {
  int n;
  scanf("%d",&n);
  daia1(n);
}
999 ◆/91kCCQXBo :2009/06/25(木) 10:29:44
>>953 「ピラミッドアート」ダイア型(中抜き)
#include <stdio.h>
#include <math.h>
void daia1(int m){
  int i, j, n;
  /* 1->1 2->3 3->5 4->7 */
  n = m * 2 - 1;
// if((n&1) == 0) {printf("EVEN NUMBER!"); return;}
  for(i=0; i<n; i++) {
    /* 2 1 0 1 2 (n/2=2) */
    if(i<=n/2) for(j=0; j<(n/2 - i); j++) putchar(' ');
    else for(j=0; j<(i - n/2); j++) putchar(' ');
    putchar('*');
    /* 0 1 3 1 0 (n/2=2) */
    if(i<=n/2) for(j=0; j<(2*i-1); j++) putchar(' ');
    else for(j=0; j<2*(n-1-i)-1; j++) putchar(' ');
    if(i != 0 && i != (n-1))putchar('*');
    putchar('\n');
  }
}
int main() {
  int n;
  scanf("%d",&n);
  daia1(n);
}
1000 ◆/91kCCQXBo :2009/06/25(木) 11:03:59
>>953 「ピラミッドアート」八角形(中埋め)
数字(2〜9)を入力してください:3
 ***
*****
*****
*****
 ***
あってる?
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。