C/C++の宿題片付けます 127代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/06/08(月) 17:31:27【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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/
0002デフォルトの名無しさん
2009/06/08(月) 17:46:04・解答をもらったら、反応してあげると解答者も大喜びです。人間だもの。
・テンプレは仕様書のようなもんで、フォーマットを守りましょう。しかし、必要な情報は漏らさないようにね。
・>>1乙
0003デフォルトの名無しさん
2009/06/08(月) 18:30:59で特定の関数が返す値を表示させるには?
testpg() があり、これは、ファイルをスキャン(日付の更新を確認するプログラムです。)
コマンドライン上から、#testpg file
として、使用します。
このプログラムは、スキャンして日付の更新があれば、1を返し、なければ、7を返します。
さて、Cのプログラムで、この7という帰り値を表示させたいのですが、どういうプログラムを書いてやればいいでしょうか?
0004デフォルトの名無しさん
2009/06/08(月) 18:45:21テンプレ書いてくれ。
0005デフォルトの名無しさん
2009/06/08(月) 19:15:010006デフォルトの名無しさん
2009/06/08(月) 19:22:140007デフォルトの名無しさん
2009/06/08(月) 19:24:05#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;
}
0008デフォルトの名無しさん
2009/06/08(月) 19:34:17[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文を使用
よろしくお願いします
[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] その他の制限: 関数を自分で定義しないで、ソースで使用している構造体、変数を使って解く
書き掛けのソースで申し訳ないですが、どこが間違っているのかが分かりません。
よろしくお願いします。
0010デフォルトの名無しさん
2009/06/08(月) 19:44:260011デフォルトの名無しさん
2009/06/08(月) 19:49:53頭が柔軟なことはいいことだ
レベル
0012デフォルトの名無しさん
2009/06/08(月) 19:51:48立つ。
プログラミングにおいても重要な抽象化思考を鍛える役に立つからな。
以下も参照
http://www.mars.dti.ne.jp/~kshara/progmath.html
0013デフォルトの名無しさん
2009/06/08(月) 19:53:31#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;
}
0014デフォルトの名無しさん
2009/06/08(月) 19:55:38やっぱりそうなんだ
ところで>>8くらいだと現役のプログラマの人なんかみんな一瞬でできちゃったりするもんなの?
0015デフォルトの名無しさん
2009/06/08(月) 19:59:53ならこれで
#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;
}
0016デフォルトの名無しさん
2009/06/08(月) 20:03:06分かりやすくありがとうございました。助かりました。
0017デフォルトの名無しさん
2009/06/08(月) 20:04:35>>前980 nCnでオーバーフローするから。
int combination(int n,int r){
int a;
a=n-r, if(a==0) a=1;
0018デフォルトの名無しさん
2009/06/08(月) 20:41:04[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] 関数までは教わりました、よろしくお願いします
0019デフォルトの名無しさん
2009/06/08(月) 20:45:58オーバーフローじゃなくてゼロ除算だろ
直すべきはfactorial
int factorial(int x){
int i, f=1;
for(i=x; i>=1; --i) f *= i;
return f;
}
0020デフォルトの名無しさん
2009/06/08(月) 20:57:40ありがとうございました!
0021デフォルトの名無しさん
2009/06/08(月) 21:07:54#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;
}
棒グラフにするなら、起点は揃えたいな
0022デフォルトの名無しさん
2009/06/08(月) 21:08:57[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文を使用
よろしくお願いします。
0023デフォルトの名無しさん
2009/06/08(月) 21:26:51こんな感じで。動作は保障しない。今回は読み違いしてないといいが。。。
#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;
}
0024デフォルトの名無しさん
2009/06/08(月) 21:28:48(double) がいるかも
0025デフォルトの名無しさん
2009/06/08(月) 21:30:410026デフォルトの名無しさん
2009/06/08(月) 21:41:38ありがとうこざいます。
大変助かりました。
002723
2009/06/08(月) 22:00:000028デフォルトの名無しさん
2009/06/08(月) 22:20:33[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()などの常にあるソート関数は使わない
よろしくおねがいします。
0029デフォルトの名無しさん
2009/06/08(月) 22:30:42名前,数字,数字,
名前,数字,数字,
名前,数字,数字,
"組",
名前,数字,数字,
名前,数字,数字,
名前,数字,数字,
みたいな感じで一塊になってる部分が連続してるファイルを読み込んで処理したいのですが
fscanfで名前,数字,数字,の部分を処理するプログラムはできたのですが"組"の部分はどういう感じでやればよいのですか?
fscanfだと型が合ってないと無限ループになるので"組"の行を読み込んですんなりと下の行に行くやり方がわかりません
0030デフォルトの名無しさん
2009/06/08(月) 22:32:53fgets で一行読む
sscanf の返値でフォーマットチェックする
0031デフォルトの名無しさん
2009/06/08(月) 22:34:590032デフォルトの名無しさん
2009/06/08(月) 22:35:50ありがとうございました
0033デフォルトの名無しさん
2009/06/08(月) 22:46:560034デフォルトの名無しさん
2009/06/08(月) 22:56:540035デフォルトの名無しさん
2009/06/08(月) 22:57:38string でも使ってろ
0036デフォルトの名無しさん
2009/06/08(月) 23:01:39この場合ってもし返り値が同じだったらどうすれば良いんですかね?
0037デフォルトの名無しさん
2009/06/08(月) 23:04:49よく読め
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
0038デフォルトの名無しさん
2009/06/08(月) 23:06:04・while(EOF == iKara)をwhile(EOF != iKara)に修正
while(EOF == jKara)をwhile(EOF != jKara)に修正
・トランザクションに同じコードがある場合ループでi++をl++に修正
・&dを%dに修正
&sを%sに修正
・fprintfに改行"\n"をつける
・実行例のマスタで社員番号を全角→半角に修正、全角空白を半角に修正
でとりあえず出力はされる
0039デフォルトの名無しさん
2009/06/08(月) 23:16:45[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] その他の制限: わかりやすい内容でお願いします。
0040デフォルトの名無しさん
2009/06/08(月) 23:42:2735行目を修正でいいんじゃない?
35c35
< if(execv(argv[0],argv[])==(-1)){
---
> if(execvp(argv[0],argv)==(-1)){
関数 execlp() と execvp() は、指定されたファイル名がスラッシュ (/) を含んでいない場合、シェルと同じ動
作 で実行可能なファイルを探索する。検索パスは環境変数 PATH で指定されたパスである。
0041デフォルトの名無しさん
2009/06/08(月) 23:43:14ただし、えれぇ高速なマシンが必要。最適化とか皆無^^;
やりかたがアレだとかメモリがナニだとかはナシな方向で・・・
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9386.txt
0042デフォルトの名無しさん
2009/06/09(火) 00:02:17ウホッ!
約10KBの構造体をそのまま関数引数や戻り値にするところが豪気だねw
でもプログラムはすごくわかりやすくて性格のいい人が書いたのではという
印象を持った。
0043デフォルトの名無しさん
2009/06/09(火) 00:04:10whileの中の
p=(char *)&command;
がかなりヤバげに見えるんだが。
キャストもアンドもいらない。
0044デフォルトの名無しさん
2009/06/09(火) 00:06:58i[n]に0〜9でなく0〜99を割り当てたら、効率良くね?
0045デフォルトの名無しさん
2009/06/09(火) 00:15:19>>41が実装したのはBCD
それじゃただの多倍長
効率はいいが実装が面倒、特に除算
階乗を使う、とかいう糞縛りがなければnCrの答えはパスカルの三角形をDPで作った方が速い
0046デフォルトの名無しさん
2009/06/09(火) 00:16:31自然数 10000を10進で表現するか、16進で表現するか。2進で表現するか。または1234進数とか
その解釈で色々と実装が変わってくる。
PCは2進が効率良いから2進がベーすで、人がわかりやすいようにバイトで数字を表記する。
004746
2009/06/09(火) 00:25:12こういう表現もあるんだねぇ。
0048デフォルトの名無しさん
2009/06/09(火) 00:46:42ありながらも、???な計算が必要な(もっぱら??関係)用途に
用いられる。桁数が?えるとそれを???に変換する処理コストは
バカにならない。???に直すのに便利な形式が取られるのが普通。
なんで殆どの場合??のベキ乗進法が取られる。
004939
2009/06/09(火) 01:15:05execvpとしてみたのですが、
>gcc -o exp1 exp1.cでとても長いエラーが出力されます。
テストですので、hello worldで普通に実行できましたのでソースが悪い訳じゃないと思います。
0050デフォルトの名無しさん
2009/06/09(火) 01:28:31[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] その他の制限:特になし
0051デフォルトの名無しさん
2009/06/09(火) 01:32:42[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);
}
}
0052デフォルトの名無しさん
2009/06/09(火) 01:50:27[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] その他の制限: なし
0053デフォルトの名無しさん
2009/06/09(火) 01:50:44http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9387.c
0054 ◆N8hH7z85ug
2009/06/09(火) 04:25:21[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>しか使ったことはありません。
よろしくお願いします。
0055デフォルトの名無しさん
2009/06/09(火) 06:15:46http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9389.txt
0056デフォルトの名無しさん
2009/06/09(火) 09:35:13何故かgcc固有のインクルードパスを無効と判定するみたい。
-vで出力みると違いがでるね。
原因とか回避方法はわからない。宿題テーマとは離れてしまうかも?
0057デフォルトの名無しさん
2009/06/09(火) 11:14:25#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;
}
0058デフォルトの名無しさん
2009/06/09(火) 11:29:51引数がfloatとcharで20こあって"%d%f・・・・・",hairetu,&suuji・・・・とあるんだけど返り値=1にした時しかうまくいかない
switchにしてcase20はおkだけどcase 2とかdefaultにはcaseが正しくありませんってなる
0059デフォルトの名無しさん
2009/06/09(火) 11:38:17>>1
0060デフォルトの名無しさん
2009/06/09(火) 11:41:22すまん
0061デフォルトの名無しさん
2009/06/09(火) 14:07:57>>028の選択ソート使ってます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9390.txt
0062デフォルトの名無しさん
2009/06/09(火) 15:03:43[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] その他の制限: 特になし
よろしくお願いします
0063デフォルトの名無しさん
2009/06/09(火) 15:34:52http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9393.txt
0064デフォルトの名無しさん
2009/06/09(火) 15:39:08[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] その他の制限:特になし
よろしくお願いします
0065デフォルトの名無しさん
2009/06/09(火) 15:50:26ありがとうございました。助かりました
0066デフォルトの名無しさん
2009/06/09(火) 15:51:25#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;
}
006766
2009/06/09(火) 15:52:060068デフォルトの名無しさん
2009/06/09(火) 16:25:57#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;
}
0069デフォルトの名無しさん
2009/06/09(火) 16:59:14>[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問目以外規制があります。
>
>全三問です。 よろしくお願いいたします。
0070デフォルトの名無しさん
2009/06/09(火) 18:18:19[2] 1次元配列a[1]〜a[10]の各要素に任意の数値を格納した後すべて加算した合計値を表示せよ。
[3] 環境
[3.1] OS: XP
[3.2] turbo c
[3.3] c++
[4] 今週金曜日まで。
[5] まだ習いはじめて一年なのでそんなには進んでません。
007166
2009/06/09(火) 18:25:46#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;
}
0072デフォルトの名無しさん
2009/06/09(火) 18:27:21[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] その他の制限: 特になし
よろしくお願いします
0073デフォルトの名無しさん
2009/06/09(火) 18:29:51[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共々よろしくお願いします
0074デフォルトの名無しさん
2009/06/09(火) 19:43:45[2] 問題文(含コード&リンク):最大256文字の文字列を入力し、単語数を出力しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月11日 8:00
[5] その他の制限:最大256文字の文字列を引数とし、最初の単語の文字数を返す関数を作成し、それを用いる。
0075デフォルトの名無しさん
2009/06/09(火) 19:47:00[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文を使用
よろしくお願いします。
0076デフォルトの名無しさん
2009/06/09(火) 20:05:34#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;
}
0077デフォルトの名無しさん
2009/06/09(火) 20:36:30ありがとうございます。
助かりました。
0078デフォルトの名無しさん
2009/06/09(火) 20:38:03[2] 1次元配列a[1]〜a[10]の各要素に任意の数値をキーボードから格納した後、偶数値のみ表示しろ
[3] 環境
[3.1] OS: XP
[3.2] turbo c
[3.3] c++
[4] 今週金曜日まで。
ありがとうございました。助かりました。
0080デフォルトの名無しさん
2009/06/09(火) 20:46:18#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;
}
008154 ◆N8hH7z85ug
2009/06/09(火) 20:57:11ありがとうございます
ですが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を再度よろしくお願いします
0082デフォルトの名無しさん
2009/06/09(火) 21:02:26main()は絶対そうじゃないとダメなの?
それ絶対あってる?
0083デフォルトの名無しさん
2009/06/09(火) 21:10:03間違ってる可能性大なんですが、可能なら答え合わせをして欲しい。
008454 ◆N8hH7z85ug
2009/06/09(火) 21:13:54はい
指定されました
main関数はコピペしたのですがどこかおかしいでしょうか
私もis_non_wordcに渡すのは&cなのではないか?と思ったのですがここでしょうか
0085デフォルトの名無しさん
2009/06/09(火) 21:14:19間違っててもそんなの気にする人いない
0086デフォルトの名無しさん
2009/06/09(火) 21:19:44>私もis_non_wordcに渡すのは&cなのではないか?と思ったのですがここでしょうか
そこじゃない。
・ungetc()が意味分からん
・get_word()にwordだけ渡していったいどうしろというんだ
と書いているうちにちょこっと思いついたからコンパイルしてみる。
0087デフォルトの名無しさん
2009/06/09(火) 21:25:12ありがとうございます。
std::cout << "a[" << i << "]: "; std::cin >> a[i];
}
std::cout << "---- even number ----" << '\n';
はまだならっていないのでscanfなどを使ったものに置き換えられないでしょうか?
0088デフォルトの名無しさん
2009/06/09(火) 21:27:150089デフォルトの名無しさん
2009/06/09(火) 21:38:02容赦ない突っ込み入る事もあるよ。
特にgetsとかw
0090デフォルトの名無しさん
2009/06/09(火) 21:38:55{
int i, ch;
for(i=0; !is_non_word(ch=getchar()); i++) p[i] = ch;
p[i] = '\0';
return i;
}
0091デフォルトの名無しさん
2009/06/09(火) 21:40:26条件付け足すくらいなら詳細なテンプレと分かりやすい問題文に書き直してくれ
for(int i;;) を習っていないので、とか言われたらC89仕様に直す手間がかかる
>>78は出力フォーマットが不明でどうコーディングしていいか分からない
0092デフォルトの名無しさん
2009/06/09(火) 21:40:260093デフォルトの名無しさん
2009/06/09(火) 21:40:57>[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;
}
009454 ◆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関数を見てもらえは分かると思います
必要なら書きますので宜しくお願いします
0095デフォルトの名無しさん
2009/06/09(火) 21:47:58もう答えが>>90にあるよ
009683
2009/06/09(火) 21:50:54>>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);
}
0097デフォルトの名無しさん
2009/06/09(火) 21:55:45#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;
}
009854 ◆N8hH7z85ug
2009/06/09(火) 22:15:44>>82
>>86
>>88
>>90
>>95
本当にありがとうございました
助かりました
明日コンパイルして実行してみます
0099デフォルトの名無しさん
2009/06/09(火) 22:18:01問題を解くのはダレの迷惑にもならないし、能力アップにはもってこい。
発表するかは君しだい。がんばってくれ。
010083
2009/06/09(火) 22:31:38int 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
頑張ります!
0101デフォルトの名無しさん
2009/06/09(火) 22:36:40Yes, I do.の", "の部分が単語の長さを返す関数だときれいに処理できないよなぁとか、
色いろ考えてやめた。色いろ考えるのは楽しかったw
0102デフォルトの名無しさん
2009/06/09(火) 22:41:33#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));
}
0103デフォルトの名無しさん
2009/06/09(火) 23:04:56[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]
0104デフォルトの名無しさん
2009/06/09(火) 23:14:04URL変になってるね
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9401.txt
0105デフォルトの名無しさん
2009/06/09(火) 23:15:22#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));
}
0106デフォルトの名無しさん
2009/06/09(火) 23:16:18失礼しました。正しくは103さんの書いた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9401.txt
です。申し訳ありません。
0107104 お歳暮返し
2009/06/09(火) 23:37:43http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9401.txt
[3] 環境
です。
010883
2009/06/09(火) 23:46:12>>100の修正は単語前の空白を複数許可に変更しました
memcpyとかめちゃめちゃ無駄なことをしてたんですね。
>>102の temp += len; の行で完全に濡れた。ポインタでなおしてきます・・
0109デフォルトの名無しさん
2009/06/09(火) 23:56:32こんな感じで。動作は保障しない。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9403.zip
0110デフォルトの名無しさん
2009/06/09(火) 23:59:080111デフォルトの名無しさん
2009/06/10(水) 00:02:43なんかあったの?
0112デフォルトの名無しさん
2009/06/10(水) 00:25:58[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] その他の制限: 特になし
よろしくお願いします。
0113デフォルトの名無しさん
2009/06/10(水) 00:32:35これじゃ無理だろw
もうちょっと読む側のことも考えようよ
0114デフォルトの名無しさん
2009/06/10(水) 00:33:57[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] 特になし
よろしくお願いします。
0115デフォルトの名無しさん
2009/06/10(水) 00:34:21ありがとうございます。
0116デフォルトの名無しさん
2009/06/10(水) 00:41:20http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9405.c
適当に作ったのを後悔している。void *と聞いてつい触手が伸びてしまった。
0117デフォルトの名無しさん
2009/06/10(水) 00:42:20#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;
}
0118sage
2009/06/10(水) 00:47:59[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] その他の制限:なし
よろしくお願いします。
0119デフォルトの名無しさん
2009/06/10(水) 00:54:03やってみた
#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]);
}
0120デフォルトの名無しさん
2009/06/10(水) 00:58:07http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9406.txt
0121112
2009/06/10(水) 00:58:54すいません。
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
内容は同じです。
0122デフォルトの名無しさん
2009/06/10(水) 00:59:01[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言語を習い始めたばかりなので
よくわかりません;どうかよろしくお願い致します。
0123デフォルトの名無しさん
2009/06/10(水) 01:03:04while(*str!='\0'){
if( 32 <= *str && *str <=126){
hindo[*str-32]++;
}
str++;
}
動いたけどコレで良いのか?
0124デフォルトの名無しさん
2009/06/10(水) 01:03:46void countHindo(char* str){
while (*str)
{
if (*str >= 32 && *str <= 126) {
hindo[*str-32]++;
}
*str++;
}
}
0125デフォルトの名無しさん
2009/06/10(水) 01:07:44だからこれじゃ無理だって。
誰も読まねえよ
0126デフォルトの名無しさん
2009/06/10(水) 01:12:24void countHindo(char* str){
/* ここにプログラムを書く */
while (*str) if (32 <= *str && *str <= 126) hindo[*str++-32]++;
}
0127デフォルトの名無しさん
2009/06/10(水) 01:16:43問題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;
}
0129デフォルトの名無しさん
2009/06/10(水) 01:21:42問題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;
}
0130デフォルトの名無しさん
2009/06/10(水) 01:25:21コンパイル時定数は #define を使うしかないのだ。
C++ メインの人がよくよく陥る罠なのだ。なのだ。なのだ…
0131デフォルトの名無しさん
2009/06/10(水) 01:38:08夜間行きたくなったw
0132112
2009/06/10(水) 02:00:24なんどもすいません。
これでだめでしょうか?
課題1http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9410.txt
課題2http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9411.txt
0133デフォルトの名無しさん
2009/06/10(水) 02:15:01改
行
っ
て
知
っ
て
る
?
0134デフォルトの名無しさん
2009/06/10(水) 02:29:56[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] その他の制限: 特にありません
期限が短いですがよろしくお願い致します
0135デフォルトの名無しさん
2009/06/10(水) 02:32:15まあ、そう言うな
課題内容はわかる
0136112
2009/06/10(水) 02:37:10よくわからないんですがIE7で見ると改行が無視されるんですが…。
他のブラウザで見ると問題ないんですけれど…。
0137デフォルトの名無しさん
2009/06/10(水) 02:37:16細かいことだけどconstはコンパイル時定数とはならない。
いや、定数では無いといった方がいいかな。
あくまで、値の変更できない変数だから、そこを勘違いしないように。
定数は、リテラルで表す。たとえば、'\0'とか'a'とか"foo"とか0とかとか。
これらに意味をもたせるために#defineでマクロ置換をしているにすぎない。
また、コンパイラにチェックさせる意味でenumを使うこともできる。
ただ、enumは、int(unsigned, short, longを含む)しか使えないので、
マクロ置換はまだまだ必要ということになる。
特にHackなことをするためには。
C++では、enumが、厳密に評価されるようになったため、
ビットフラグとして利用しにくくなってしまった。
本来の使い方では無いので、厳しくなったのは評価してよい点だ。
おっと、完全にスレチだ。
0138デフォルトの名無しさん
2009/06/10(水) 02:53:320139デフォルトの名無しさん
2009/06/10(水) 02:57:05IE7が糞なだけだろ。
encodingは、UTF-16LEみたい。
ファイルの先頭が0xFFFEだったからね。
といってもWindowsはXP以降UTF-16使っていた気もする。
内容はUNIX系のシステムコールだけどUTF-16が標準の環境なのね。
0140112
2009/06/10(水) 03:04:06元のファイルがunicodeで設定してあったからそれで保存してました。
だからおかしかったんですね。
普段IE使わないんで気づきませんでした。
以後気をつけます。
無駄に同じようなファイルあげてすいませんでした。
0141デフォルトの名無しさん
2009/06/10(水) 03:25:349413.txt
9412.txt
0142デフォルトの名無しさん
2009/06/10(水) 03:26:11課題1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9414.c
課題2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9415.c
0143デフォルトの名無しさん
2009/06/10(水) 09:27:58それここに書いて解答出てくるかな?
StudyC特有の機能を使いそうだし。
http://www.orchid.co.jp/computer/cschool/index.html
0144デフォルトの名無しさん
2009/06/10(水) 09:31:12ありがとうございます。
この問題でfor(i=1; i<=50; i++)が(i=1; i<51; i++)でも問題ないでしょうか?
0145デフォルトの名無しさん
2009/06/10(水) 10:16:3750個なのに51とは、要素の添え字は1から50でいいんじゃない?
きりがいいので。あとは先生に詳しく聞いて。
0146デフォルトの名無しさん
2009/06/10(水) 10:45:10動作は同じです!
0147デフォルトの名無しさん
2009/06/10(水) 11:01:190148デフォルトの名無しさん
2009/06/10(水) 11:18:22それは、最高点が複数あったらどうするかという問題に発展していくな。
0149デフォルトの名無しさん
2009/06/10(水) 11:34:26[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]制限:配列を使用
関数、配列まで授業で習いました、よろしくお願いします
0150デフォルトの名無しさん
2009/06/10(水) 12:09:24[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] その他の制限:特になし
訳分かりません
宜しくお願いします
0151デフォルトの名無しさん
2009/06/10(水) 12:11:21#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;
}
0152デフォルトの名無しさん
2009/06/10(水) 12:14:25#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;
}
0153デフォルトの名無しさん
2009/06/10(水) 12:18:37#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;
}
0154149
2009/06/10(水) 12:31:51助かりました、本当にありがとうございました!
0155デフォルトの名無しさん
2009/06/10(水) 13:02:03[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
よろしくお願いします
0156デフォルトの名無しさん
2009/06/10(水) 13:18:010157デフォルトの名無しさん
2009/06/10(水) 13:45:02int 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);
}
0158デフォルトの名無しさん
2009/06/10(水) 14:56:27助かりました!ありがとうございます!
0159デフォルトの名無しさん
2009/06/10(水) 15:16:44[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] その他の制限:なし
またお願いします。
0160デフォルトの名無しさん
2009/06/10(水) 15:22:56>>127
>>129
ありがとうございました!!
問題2で出力を受け持つ関数名を
void print(int n, int a[]);
としたときはプログラムは大幅に変わってしまうでしょうか?
0161デフォルトの名無しさん
2009/06/10(水) 15:34:18>>1
>・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
0162デフォルトの名無しさん
2009/06/10(水) 16:07:50http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9420.txt
0163デフォルトの名無しさん
2009/06/10(水) 16:23:33void 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]++;
}
}
0164デフォルトの名無しさん
2009/06/10(水) 17:51:16http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9421.c
0165デフォルトの名無しさん
2009/06/10(水) 19:20:53[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] その他の制限: ゼラー(ツェラー?)の定理は利用禁止です。
よろしくお願いします。
0166134
2009/06/10(水) 19:23:46担当教諭に質問したところvisual studio 2003(学科PCにインストールされている)でも可とのことでした
>>134をどなたかよろしくお願い致します
出力結果をグラフにしたいのでコピペしやすいようにして頂けると幸いです
0167デフォルトの名無しさん
2009/06/10(水) 19:23:470168デフォルトの名無しさん
2009/06/10(水) 19:34:12「1から100の整数」でとか「256文字以内」とかの指示があった場合、
チェックを入れてエラーを出すべきなのかな?それともその条件で動作さえすれば良いの?
0169デフォルトの名無しさん
2009/06/10(水) 19:37:47どの値を出力するんだよ
それから、ヒントの�凅って何やねん
0170デフォルトの名無しさん
2009/06/10(水) 19:41:08[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コンソールアプリに入れて実行せよとの事です。
どなたかお願いいたします。
0171むむナナ
2009/06/10(水) 20:00:31出だしは、
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
0172むむナナ
2009/06/10(水) 20:02:40[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 成り立っていなければ
0173デフォルトの名無しさん
2009/06/10(水) 20:15:41回答はもう出来てるが問題文が不完全なので貼らないし、多分ずっと貼
らない。(出題者じゃないとは言い切れないし)
0174デフォルトの名無しさん
2009/06/10(水) 20:16:09書き込む順番逆だぞw
0175デフォルトの名無しさん
2009/06/10(水) 20:25:360176デフォルトの名無しさん
2009/06/10(水) 20:34:25それは、C言語の問題じゃなくて、CG/画像処理の問題。
Cの課題としてはあまりにも説明不足。
とりあえず、Excelにその式を入れてグラフを描いてみたらどうか。
0177デフォルトの名無しさん
2009/06/10(水) 21:12:57#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;
}
0178デフォルトの名無しさん
2009/06/10(水) 21:33:26よくわからんけどE2(λ)を出力してみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9425.txt
0179デフォルトの名無しさん
2009/06/10(水) 21:34:47>>173か?
問題にφ(n)の定義なんて出てないんだし
C言語の宿題片付けスレとしては行き過ぎ
0180173
2009/06/10(水) 21:44:38俺じゃないってw
まエスパーも何もφ(n)はnと素なnより小さい自然数の
数だってことはオイラーの定理でググれば出てくるから
許容範囲なのかも知れないが、>>171の質問文はそれ
以前だろ
0181デフォルトの名無しさん
2009/06/10(水) 21:54:28それ以前w
答える気ねーなら、書き込まないで黙ってろよw
0182デフォルトの名無しさん
2009/06/10(水) 21:56:310183デフォルトの名無しさん
2009/06/10(水) 22:32:39[2] 問題文(含コード&リンク):
1 白黒の画像ファイルを読み込み(ファイルの種類は好きに決めてよい)、その画像の解像度と同じサイズの二次元配列を作りなさい。
2 さらに、その二次元配列に、元画像で白だった部分は0、黒だった部分は1を代入しなさい
たとえば
白黒白
白白白
白白黒
の3×3の解像度の画像を読み込んで
010
000
001
の二次元配列に変換する
200×200とかでも同様
[3] 環境
[3.1] OS: Windows XP
[3.3] 言語: C
[4] 期限: 無期限
[5] その他の制限: 特になし
0185デフォルトの名無しさん
2009/06/11(木) 00:44:38C言語についての質問です。
10進表記されている32ビットの数字をオクテット単位でわけてそれぞれを10進表記するにはどうすればよいでしょうか?
たとえば33620236といった数字です。
0186デフォルトの名無しさん
2009/06/11(木) 01:02:50[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] その他の制限:特にはないです。
0187デフォルトの名無しさん
2009/06/11(木) 01:05:36union {
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]);
0188デフォルトの名無しさん
2009/06/11(木) 01:37:34#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;
}
0189デフォルトの名無しさん
2009/06/11(木) 02:07:20ありがとうございます。とても助かりました。共用体についてもっと勉強をしたいと思います。
0190デフォルトの名無しさん
2009/06/11(木) 05:20:23強さって勝ちの比率を操作すればいいの?
とりあえず勝ち:分け:負けを以下のようにはしてみた。
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
0191デフォルトの名無しさん
2009/06/11(木) 06:58:06待った!異議あり!!くらえっ!アマいなっ!
0193デフォルトの名無しさん
2009/06/11(木) 11:50:51>http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9428.txt
0194デフォルトの名無しさん
2009/06/11(木) 12:11:53どうにも書き方が悪かったようでスミマセン。
強さというのはCPUの強さで、高ければ高いほど自分が勝ちにくくなるということです。
また、この強さの決め方はどのようにして決めているのでしょうか?
宜しければその仕組みを教えていただければと思います
0195デフォルトの名無しさん
2009/06/11(木) 12:59:48普通に考えたらジャンケンの難易度なんて、確率操作をインチキすることくらいしかないように思えるけどなあ
0196デフォルトの名無しさん
2009/06/11(木) 13:14:35こちらの入力の後でCPUの手を決めるので
Lvが高ければ高いほどこちらの手に負ける手をCPUが表示する確率を少なくすればいいってことですよね。
恥ずかしながらC言語での確率のいじり方などが分からないのでソースを書き直すとしたらどこをどう書き直すか
教えていただけないでしょうか?
0197デフォルトの名無しさん
2009/06/11(木) 13:42:37[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] その他の制限:特になし
御頼み申します
0198デフォルトの名無しさん
2009/06/11(木) 13:48:46勝つ確率=10/(25+レベル)
相子確率=10/(25+レベル)
負ける確率=(5+レベル)/(25+レベル)
レベル5で五分五分
0199デフォルトの名無しさん
2009/06/11(木) 14:14:510200デフォルトの名無しさん
2009/06/11(木) 15:47:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9431.c
0201デフォルトの名無しさん
2009/06/11(木) 18:39:46……ってのが公平な気がする。
PLとの心理戦をするんでない限り。
0202デフォルトの名無しさん
2009/06/11(木) 19:01:35[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] その他の制限:特になし
0203デフォルトの名無しさん
2009/06/11(木) 19:41:37低レベルでは、ときどき次に出す手を予告するというのはどうか。
あるいは、グーチョキパーをルーレットのように表示してとめる仕組みにし、
低レベルほど回転速度が遅くなる。あと、まんこ。
0204デフォルトの名無しさん
2009/06/11(木) 20:18:40イカサマせずに勝率を上げるとなると
相手の癖とか戦略を読まないといけない
卒業研究のレベルになってこないか?
0205デフォルトの名無しさん
2009/06/11(木) 20:37:18とりあえずなんの工夫もないバブルソート
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
0206デフォルトの名無しさん
2009/06/11(木) 21:07:41[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で返してほしいんですが、どうすればいいでしょうか?
0207デフォルトの名無しさん
2009/06/11(木) 21:12:18scanf("%d",&a);
b = a % 4;
↓
b=-1;
if(scanf("%d",&a)==1) b = a % 4;
0208デフォルトの名無しさん
2009/06/11(木) 21:59:02[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] その他の制限:たぶんなし
0209デフォルトの名無しさん
2009/06/11(木) 22:01:22[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] その他の制限:
初心者なので、なるべく簡単にお願いします。
0210デフォルトの名無しさん
2009/06/11(木) 22:23:03#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;
}
0211デフォルトの名無しさん
2009/06/11(木) 22:25:51int 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);
}
0212デフォルトの名無しさん
2009/06/11(木) 22:27:44>>054 >>057 >>090
0213デフォルトの名無しさん
2009/06/11(木) 22:28:34無事ソートできました、ありがとうございました。
ただ、240s以上ソートにかかると減点対象なので、できればもう少し早いとありがたいのですが・・。
0214デフォルトの名無しさん
2009/06/11(木) 22:31:46#include<stdio.h>
#include<ctype.h>
int main(){
int c=0;
for(;c!=EOF;putchar('\n'))for(;isalpha(c=getchar());)putchar(c);
}
0215デフォルトの名無しさん
2009/06/11(木) 22:35:07#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;
}
}
0216デフォルトの名無しさん
2009/06/11(木) 22:38:15それをするなら
return max(max(l_height, r_height), 0) + 1;
じゃね?
0217デフォルトの名無しさん
2009/06/11(木) 22:39:13これでどうかな? うちの環境では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);
}
0218デフォルトの名無しさん
2009/06/11(木) 22:39:54#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;
}
0219デフォルトの名無しさん
2009/06/11(木) 22:41:110220デフォルトの名無しさん
2009/06/11(木) 22:45:43#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;
}
0221デフォルトの名無しさん
2009/06/11(木) 23:05:01空白連続入力で無駄な改行が入ってしまう
コンマピリオド未対応
>>214
アルファベット以外まで除外してる
アルファベット以外の文字が来るたびに改行が入る
80字制限がない
>>218
スペースカンマスペースとかの並びだと改行が入ってしまう
>>220
タブと改行?
0222209
2009/06/11(木) 23:08:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9436.txt
これに、空白が2個以上連続してもうまく動作するようにすること。また、コンマ(,)、
ピリオド(,)は表示する単語に含めないこと。
という条件がうまくいくように変えてください。
isalpha(x)は習っています。
0223デフォルトの名無しさん
2009/06/11(木) 23:09:16文句だけは一人前だなw
0224デフォルトの名無しさん
2009/06/11(木) 23:11:110225209
2009/06/11(木) 23:19:45空白が2個以上連続してもうまく動作するようにすることという条件がうまくいくように
変えて下さい。
0226デフォルトの名無しさん
2009/06/11(木) 23:24:25[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語: C++
[4] 期限: 6月15日(月)の19:00まで
[5] その他の制限:
習った箇所:配列・関数・構造体・引数・返り値(戻り値)・ファイルポインタなど
一通り学習済み。バイナリエディタなどほんの一部のみ未学習。
標準ライブラリ:使用。
最後に:初心者に近い状態なので、なるべく簡単にお願いします。
0227デフォルトの名無しさん
2009/06/11(木) 23:25:31何を?
0228デフォルトの名無しさん
2009/06/11(木) 23:26:12#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;
}
0229デフォルトの名無しさん
2009/06/11(木) 23:26:26>>218と>>220はその条件を満たしてる
0230226 ◆TAPy3blMsc
2009/06/11(木) 23:33:13すみません。誤って書き込んでしまいました。問題文を加えて改めて書き直しておきます。
[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] その他の制限:習った箇所:配列・関数・構造体・引数・返り値(戻り値)・ファイルポインタなど
一通り学習済み。バイナリエディタなどほんの一部のみ未学習。
標準ライブラリ:使用。
最後に:初心者に近い状態なので、なるべく簡単にお願いします。
0231デフォルトの名無しさん
2009/06/11(木) 23:36:440232デフォルトの名無しさん
2009/06/11(木) 23:40:39#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;
}
0233232
2009/06/11(木) 23:51:39チョイ修正。
#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;
}
0234206
2009/06/12(金) 00:14:37レスありがとうございます。
それで実行してみましたが、実行結果が数値以外を入れると
「-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;
と同じ意味と捉えていいのでしょうか?
0235デフォルトの名無しさん
2009/06/12(金) 00:18:52「入力画像が001.bmpの時のmain中のreadBitmapの直後でのw,hの値を
fprintf文で記述」の部分だけで良いので解いてくださいませんか?
当方初心者なのでさっぱりで・・・
お願い致しますm(_ _)m
0236デフォルトの名無しさん
2009/06/12(金) 00:28:36#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
0237デフォルトの名無しさん
2009/06/12(金) 00:35:11// BMPファイルから画像を読み込む
readBitmap(pathimgi,
(略)
// ↓これ
fprintf(fp, "\n画像の幅%d", w);
fprintf(fp, "\n画像の高さ%d", h);
0238206
2009/06/12(金) 00:38:58レスありがとうございます。
if文は先週の課題だったんで今週はswitchでやれと・・・
>scanf で %d を使う場合数値以外が来ると読み込みに失敗して a の値は変化しません
ということは、「入力した数値以外の文字 は数値ではありません」と返すのは無理ということなんでしょうか。
0239デフォルトの名無しさん
2009/06/12(金) 00:39:06>fprintf文で記述しファイルResult.datで確認せよ。
fprintf文で記述してファイルResult.datに書き込み、
テキストエディタなどで確認せよ
って事でいいのかね?
0240デフォルトの名無しさん
2009/06/12(金) 01:22:43プログラム中でその「入力した数値以外の文字列」が扱いたいなら、
char str[256]; とか用意して、
scanf("%d", &a) じゃなくて scanf("%s", str) とかで一旦文字列を保存しておく必要がある。
a = atoi(str); とか書けば a には str に入ってるはずの整数値を取り出せる。
トリッキーになるが、scanf に失敗したってことは入力バッファにまだ残ってるから、
数値ではないと判断できた時点で scanf("%s", str) なりして表示することもできる。
0241前スレ952
2009/06/12(金) 02:04:02http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9440.zip
ポリゴンの透視変換、画像出力とかCSGモデルの描画とかの奴
…C言語縛りが思ったよりきつかった…
一応出来たが、力尽きたスマン
後、モデルは座標の計算方法の精度のせいか隙間が出来てる、これもスマン
課題2と課題3はクリアーしてると思うので、
課題1は自分でピクセル情報をかぶせてくれ、それか誰か改造してあげて < ALL
0242デフォルトの名無しさん
2009/06/12(金) 02:29:00お疲れ
すごいです、本当に助かります。ありがとうございました!
0244デフォルトの名無しさん
2009/06/12(金) 09:31:18[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のメモリしか使用しないと言う制限に反する気もします。
(まぁ問題文でファイルにセーブする事が制限されている訳では無いのですが)
0245デフォルトの名無しさん
2009/06/12(金) 09:50:34同一の数値が生成される回数の上限が255以下(もしくは11番目の回数が255回未満)なら可能
回数上限が2048以下なら500,000種の数字まで可能(数値21bit 回数11bit)
特に制限が無ければファイルに書き出すしか無いんじゃないかと
0246デフォルトの名無しさん
2009/06/12(金) 10:23:192Mbyte > 2,097Kbyte > 2,000,000byte
2550+254回までならTOP10 OK.なので回る回数は2804回。
250,000 が何処から出たのか不明。・・・答えになってるか?
0247デフォルトの名無しさん
2009/06/12(金) 10:31:07#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;
}
0248デフォルトの名無しさん
2009/06/12(金) 11:26:300249デフォルトの名無しさん
2009/06/12(金) 12:34:52環境が無いので試せない・・・
class Base {
int nBase;
}
class Hoge : Base {
int nHoge;
}
main() {
Hoge* pHoge= new Hoge;
Base* pBase = (Base*)pHoge;
delete pBase; //<--これって問題?
}
0250246
2009/06/12(金) 14:07:37#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);
}
}
0251デフォルトの名無しさん
2009/06/12(金) 15:27:10void 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);
}
}
}
0253デフォルトの名無しさん
2009/06/12(金) 18:22:02可能。さらに、
Base* pBase = (Base*)pHoge;
は
Base* pBase = pHoge;
で、OK。
どうしても明示キャストしたいなら、dynamic_castを使うべきだし。
0254デフォルトの名無しさん
2009/06/12(金) 18:44:59初めにコードを載せます。
TCHAR a[] = TEXT("Hello");
string str = a;
マルチバイトとユニコード両方に対応できるようにしたいのですが
上のコードはユニコードの時にワイド文字となってコンパイラに
はじかれてしまいます。
マルチバイトに変換すればいいのですがマルチバイトに設定した時に
今度は変換する過程でエラーが出ると思うので、
TCHARがワイド文字かマルチバイト文字か知る必要があります。
どのようにコードを書けばいいのですか
0255デフォルトの名無しさん
2009/06/12(金) 18:56:58プリプロセッサの制御でユニコード定義がある時と無い時用のコードをかけばいいと思う
0256デフォルトの名無しさん
2009/06/12(金) 19:06:20きちんと設計されたクラス階層においては、派生クラスのオブジェクトを指している基底クラスのポインタ型をdeleteしても問題ない。
ただし249のコードの場合はBaseのデストラクタが仮想デストラクタとして定義されていないので問題。
(現状はintなので問題ないが将来的に問題になりうる)
あとこれは単純ミスだろうが、アクセス指定子のない継承はclassの場合はprivate継承な。
0257254
2009/06/12(金) 19:06:45sizeof(TCHAR)を調べればいいだけでした。
>>255
解答ありがとうございます。面倒くさがりなので一つのコードで済ませたかったのです。
0258デフォルトの名無しさん
2009/06/12(金) 20:15:43[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] その他の制限:
0259デフォルトの名無しさん
2009/06/12(金) 20:56:10課題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;
}
0260デフォルトの名無しさん
2009/06/12(金) 20:59:57課題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;
}
0262デフォルトの名無しさん
2009/06/12(金) 21:53:05課題3
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9443.txt
0263デフォルトの名無しさん
2009/06/12(金) 22:36:27ありがとうございました!
0264デフォルトの名無しさん
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までしか出来ないのが困りものですね。
ファイルに保存をしないとなると何かしらのリミットが付いてしまうのは仕方が無い事なのかもしれません。
0265デフォルトの名無しさん
2009/06/13(土) 02:43:48どこが間違っているのか、ご指摘願います。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9444.c
0266デフォルトの名無しさん
2009/06/13(土) 02:47:51すみません、自己解決です。
0267デフォルトの名無しさん
2009/06/13(土) 10:18:02ツェラーの公式は使わず、フリーゲルの公式の変形を使って
#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;
}
0268デフォルトの名無しさん
2009/06/13(土) 11:32:46>まずは回答してくださった皆さんに感謝を。
結論は?というか、まずはの次は?
0270デフォルトの名無しさん
2009/06/13(土) 13:06:30[2] 問題文:ユーザーが月を指定してその月のカレンダーを表示するプログラム
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:ボーランド
[3.3] 言語:C
[4]期限:明日まで
0271デフォルトの名無しさん
2009/06/13(土) 13:07:55あきらめてください
0272デフォルトの名無しさん
2009/06/13(土) 13:47:52年も指定しないと無理
0273デフォルトの名無しさん
2009/06/13(土) 13:49:440274デフォルトの名無しさん
2009/06/13(土) 13:59:470275デフォルトの名無しさん
2009/06/13(土) 14:04:22直近100レス以内に回答がある
0276デフォルトの名無しさん
2009/06/13(土) 14:34:07[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] その他の制限:
0277デフォルトの名無しさん
2009/06/13(土) 14:45:390278デフォルトの名無しさん
2009/06/13(土) 14:48:20[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] その他の制限: ファイルなど外部記憶は使用不可
0279デフォルトの名無しさん
2009/06/13(土) 14:51:43[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]月曜日正午迄
0280デフォルトの名無しさん
2009/06/13(土) 14:57:22f(1234)=1^4+2^3+3^2+4^1 の希ガス。
0281デフォルトの名無しさん
2009/06/13(土) 14:59:37元の出題者?
0282デフォルトの名無しさん
2009/06/13(土) 15:02:350283デフォルトの名無しさん
2009/06/13(土) 15:19:41やってみたけど2つなら余裕だけど3つは難しいね
0284デフォルトの名無しさん
2009/06/13(土) 15:27:21[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
と表示されればよい
0285デフォルトの名無しさん
2009/06/13(土) 15:42:19バカだろw
11が1^1+1^1の時点で桁関係ないしw
0286デフォルトの名無しさん
2009/06/13(土) 15:45:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9447.c
0287デフォルトの名無しさん
2009/06/13(土) 16:07:22ありがとうございました!
0288デフォルトの名無しさん
2009/06/13(土) 16:17:430^0 を 0 としない限り3つ目の解なんて無いようだ
0289デフォルトの名無しさん
2009/06/13(土) 19:10:420290デフォルトの名無しさん
2009/06/13(土) 19:15:57なのでlong intの限界まで計算した結果では
答えは1と3435なわけでして、三つ目の答えはありませんでした。
long int 以上の値が使える機構を組む必要があり、
ちょいとおまんこ。
0291デフォルトの名無しさん
2009/06/13(土) 19:26:473435は
f(x)=x
に当てはまる?
0292デフォルトの名無しさん
2009/06/13(土) 19:28:43理論上 unsigned long の範囲でおk
なぜなら n>11 であるとき
(9^9)*n < 10^n
だから
0293デフォルトの名無しさん
2009/06/13(土) 19:58:30見つけたのは3個でカウントしていいんかなぁ。。。
CPUはいんてる、こんろ〜のせれろん2G。
Find!! -> 0 at 0clock
Find!! -> 1 at 0clock
Find!! -> 3435 at 50clock
って書いてたらこんなの見つけてきた。後で検算してみる。
Find!! -> 438579088 at 9007516clock
プログラムが間違ってませんように!
0294デフォルトの名無しさん
2009/06/13(土) 20:04:42理由をぐだぐだ↓
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
0295デフォルトの名無しさん
2009/06/13(土) 20:13:211の位だけの足し算の結果がxの一の位と等しいときにのみ
まともな計算に入るようにするだけでもだいぶ高速化する。
高速化するが1秒いないとか�_w
どこかの桁に9が存在するときは
全体が9桁以上ないとだめとか、
そういう分岐をしても1秒以内は�_。
多分、こーそくふーりえへんかんみたいな
文系のあっぱらぱーな自分には理解不能な最適化がどこかに潜んでいる気がする
0296デフォルトの名無しさん
2009/06/13(土) 20:32:300^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;
}
0297293
2009/06/13(土) 21:01:13今色々藻屑に消えた。Orz
数学的に詳しい人ヘルプ!
0298デフォルトの名無しさん
2009/06/13(土) 21:06:32数学では例外を認めない方が美しいのでそう定義されてるだけの事だよ
0299デフォルトの名無しさん
2009/06/13(土) 21:07:21プログラミング言語における扱い
いくつかのプログラミング言語は 0^0 を定義しており、その多くは 1 としている。
1 と定義しているものは、Java、Python、Ruby、Haskell、ML、Scheme、MATLAB、Microsoft Windows の電卓、Google の電卓機能[3]などである。
0300デフォルトの名無しさん
2009/06/13(土) 21:08:13これはただ数学用語を組み合わせただけの言葉であって、特別な意味は持たない。
すなわち、標準的な教科書においては0の0乗は定義されない。
0301デフォルトの名無しさん
2009/06/13(土) 21:11:08なんで0^0=1とかんがえるのが自然だが、この問題の場合
各桁で0でないもののその数字乗の和だとしないと解が3つ以上無い感じ。
0302デフォルトの名無しさん
2009/06/13(土) 21:13:33#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;
}
0303293
2009/06/13(土) 21:31:07情報サンクス。なるほど、数学者でも考えることなのね。
そんなもん趣味グラマにわかってたまるかぁ〜!!うわわわぁ〜ん。Orz
しかし、困ったなぁ。
Counter Is Now 679535690 Count! And Now 13541776 Clock!!
上記のように4時間位回してるのに、2割くらいしか終わってない。。。(VCのCLOCKS_PER_SECは常に1000だったと思う。)
うーん。一端打ち切るかなぁ。
一部に適応できる汚い最適化方法おもいだしたんだよねぇ。。。
0304デフォルトの名無しさん
2009/06/13(土) 21:36:03カウンタ表示の頻度を 1/10000 くらいにすれば劇的に高速化するよ
0307デフォルトの名無しさん
2009/06/13(土) 22:17:43ウイルス騒ぎが耐えないのにEXE叩けっていうの???
0308デフォルトの名無しさん
2009/06/13(土) 22:25:27サンプルは動かしたくはないな。
依頼はC++ってあるけど、
出力はprintfでいいの?
0309293
2009/06/13(土) 22:30:18表示周り、汚い最適化、変更したら10倍になった。何やってたんだ俺。。。
参考数字だと、500万件を10秒くらいで処理してる。
N桁目の数字切り出しのいい方法がないもんかな。割り算が多すぎる。
0310デフォルトの名無しさん
2009/06/13(土) 22:36:21枝刈という意味では f(x) の各桁入れ替え版は常に同じ数値になるから
逆に各桁に使用する数値を決定した後で計算後の数値と一致させることが出来るかチェックすれば
計算量は減らせるかもしれない
が、配列を使っちゃダメだからやりたくはない
0311293
2009/06/13(土) 22:41:14それうまく計算すれば、10倍位になりそうだなぁ。
アイディアがちょっとおもいつかないけど。
下手なの作ったら、試算だけで資源食っちゃうし。。。
うん、俺もあんまりやりたくない。Orz
0312 ◆Pk0FPDtefg
2009/06/13(土) 23:23:15forkで生成した子プロセスは親プロセスが終了すれば自動的に終了しますか?
0313デフォルトの名無しさん
2009/06/13(土) 23:35:16#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);
}}
0314デフォルトの名無しさん
2009/06/13(土) 23:35:45しないでしょう。やっぱり。ターミナルベースで動かしたとき
ターミナル終了時点でターミナル起動プロセスが終了するのは
意図的にそうしているからで、システムコールレベルで自動的に
そのようになっているとは思えません。
で>>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の
制限条件では無意味に近いのでは?
0315デフォルトの名無しさん
2009/06/13(土) 23:48:38その後、しらみつぶしな検証アルゴリズムを作る
こういう問題の解決の仕方がどちらかと言えば正しく
問題の質の見積もりをせずにいきなりコードを書いて
実行する(させる)ことを習慣にするのは好ましいこと
ではないと思う。
0316293
2009/06/13(土) 23:53:14とりあえず、今日の営業は終了!と。
一応、半分くらいまでは計算してみたが解なし。
>>314すげーと思う。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9448.zip
そうそう、動作は保障しない。
0317デフォルトの名無しさん
2009/06/14(日) 00:07:05水も漏らさぬ堅牢な構造物を作る為の言語コミュニティ
に向いている問題じゃないね。
0318デフォルトの名無しさん
2009/06/14(日) 00:14:04#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;
}
0319デフォルトの名無しさん
2009/06/14(日) 00:24:35うは、バグってたwww
0320デフォルトの名無しさん
2009/06/14(日) 00:52:130
1
3435
438579088
の4つだった。
0321デフォルトの名無しさん
2009/06/14(日) 01:03:04すばらしい。あまりの速さに興奮した。
0322デフォルトの名無しさん
2009/06/14(日) 01:08:33もっと厳密に変数の利用(メモリの確保)について言及してくれないと
トークン結合とか使えば #define なり n1, n2, n3 とかの変数で配列の代替ができるので
>>279 の条件をもっと厳密に確認する必要がある
0323デフォルトの名無しさん
2009/06/14(日) 01:25:14#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;
}
0324デフォルトの名無しさん
2009/06/14(日) 02:39:17[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日
説明がわかりにくいかもしれませんが、どうかお願いします
表の写真は見えるでしょうか?
0325デフォルトの名無しさん
2009/06/14(日) 04:10:28#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);
}}}}}}}}}}
}
0326325 修正
2009/06/14(日) 04:57:48#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);
}}}}}}}}}}
}
0327デフォルトの名無しさん
2009/06/14(日) 09:18:10おそロシア。これは凄く速いな
0328デフォルトの名無しさん
2009/06/14(日) 10:13:521分どころか1秒いないに回答4つでてるし。
0329デフォルトの名無しさん
2009/06/14(日) 10:22:230330デフォルトの名無しさん
2009/06/14(日) 13:19:21[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]制限:配列を使用
配列まで授業で習いました、お願いします
0331デフォルトの名無しさん
2009/06/14(日) 14:19:02課題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;
}
0332デフォルトの名無しさん
2009/06/14(日) 14:23:51修正がある。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
0333デフォルトの名無しさん
2009/06/14(日) 14:26:14課題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;
}
0334デフォルトの名無しさん
2009/06/14(日) 14:28:58課題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;
}
0335>>324
2009/06/14(日) 15:17:50問題の書き方が駄目でしょうか?
0336デフォルトの名無しさん
2009/06/14(日) 15:27:05表の写真の通りに画面表示するのは難しいだろうな。
きっとそこまで要求してないと思うが?
0337デフォルトの名無しさん
2009/06/14(日) 15:29:40#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;
}
0338112
2009/06/14(日) 16:00:08ありがとうございます。
ただ課題2がそれだと子プロセスを無限に生成して実行例通りにうまくいきませんでした。
自分で出来る限りやってみたんですがうまくいかなかったのでどなたかもう一度課題2をお願いします。
0339112
2009/06/14(日) 16:00:21ありがとうございます。
ただ課題2がそれだと子プロセスを無限に生成して実行例通りにうまくいきませんでした。
自分で出来る限りやってみたんですがうまくいかなかったのでどなたかもう一度課題2をお願いします。
0340デフォルトの名無しさん
2009/06/14(日) 16:00:23便利そうなサイトを見つけたんだが、使ってみないか?
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 なので、このサイト自身のソースもダウンロードできるよ)
みたいな感じで、日本語が使えないことを除けば、問題はなさそうだし
#誰か日本語対応バージョン書いてほすぃ
0341デフォルトの名無しさん
2009/06/14(日) 16:04:170342デフォルトの名無しさん
2009/06/14(日) 17:35:41りんご 100円 青森県
みかん 60円 和歌山県
ぶどう 150円 山梨県
みたいな感じのテキストファイルがあるんですけど、
これをfscanfで1行ずつ読み取って値段の合計を表示するプログラムを作るにはどうすればいいんですか?
0343デフォルトの名無しさん
2009/06/14(日) 17:38:170344デフォルトの名無しさん
2009/06/14(日) 17:45:56>>1 を読んで質問テンプレ書いてちょ
0345マロクソース食らえ
2009/06/14(日) 17:51:36#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:;
}}
0346デフォルトの名無しさん
2009/06/14(日) 18:01:02すいません。
[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の回答を載せたほうがいいでしょうか?
0347デフォルトの名無しさん
2009/06/14(日) 18:03:04乱暴だけど答えは出る
#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);
}
0348デフォルトの名無しさん
2009/06/14(日) 18:15:48返答ありがとうございます
それを実行すると結果は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っていうのはまだ習ってないです。
最初に書かなくてすいません。
0349デフォルトの名無しさん
2009/06/14(日) 18:18:37テキストのデータがまずいと思う
文字列の間に入れる空白は統一しないと
名前 値段 産地
りんご 100円 青森県
みかん 60円 和歌山県
ぶどう 150円 山梨県
↑これをテキストに貼り付けて試して
0350デフォルトの名無しさん
2009/06/14(日) 18:30:49なるほど!
ちゃんと合計がでました、ありがとうございます。
EOFの意味も自己解決しました。
あと、何度も申し訳ないのですが……
while( fscanf(fp, "%s %s %s", &name, &price, &from ) != EOF ){
sum += atoi( price );
}
の部分の atoi(price); というのがよくわかりません。
どなたか解説してくれないでしょうか。
おそらく知らないということは習ってないと思うので、できればその部分を他のやり方で教えてほしいです。
本当に何度もすいません。どなたかよろしくお願いします。
0351デフォルトの名無しさん
2009/06/14(日) 18:38:41変換できなかったら0、途中で数字じゃない文字列が入ってたら途中までを変換する
これ使わないで自作すると糞めんどくさい処理になるけど・・・
0352デフォルトの名無しさん
2009/06/14(日) 18:45:150353デフォルトの名無しさん
2009/06/14(日) 18:47:21int atoi(const char *s)
{
int ret = 0;
while ('0' <= *s && *s <= '9')
ret = 10*ret + *s++ - '0';
return ret;
}
0354デフォルトの名無しさん
2009/06/14(日) 18:47:40解説ありがとうございます。理解しました。
そんなに複雑な処理になってしまうのならやめておいたほうがよさそうですねw
でもおかげでなんとかなりそうです。本当にありがとうございました。
0355デフォルトの名無しさん
2009/06/14(日) 18:53:43それはそうだけど、さすがにそのコードは書けなくない?
レベル的に一文字ずつ取得してif文で分岐とか考えてた
0356デフォルトの名無しさん
2009/06/14(日) 18:58:08#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;
}
0357デフォルトの名無しさん
2009/06/14(日) 19:01:06while( fscanf(fp, "%s %s %s", &name, &price, &from ) != EOF ){
じゃなくて
while( fscanf(fp, "%s %s %s", name, price, from ) != EOF ){
だ
0358デフォルトの名無しさん
2009/06/14(日) 19:25:50>>338
使ってみた
ttp://pastebin.com/m599a713d
0359デフォルトの名無しさん
2009/06/14(日) 20:31:01あやしげ
0360デフォルトの名無しさん
2009/06/14(日) 20:34:27どの程度処理時間がかかるのか興味があるんだが…
0361デフォルトの名無しさん
2009/06/14(日) 20:42:21概算なら出せる。
約 読む時間*5+書く時間 = 処理時間
ソートタイムそのものは、全体のアクセス時間に比べればわずか。
0362デフォルトの名無しさん
2009/06/14(日) 20:44:01約 読む時間*50+書く時間 = 処理時間
ソートタイムそのものは、全体のアクセス時間に比べればわずか。
0363279
2009/06/14(日) 20:47:31>>313
>>316
>>318
>>323
>>325,326
>>345
本当に沢山の解答を頂けて恐縮です。結局解は0を除いて3つしか
ないようで...
他にも色々とヒントを出して下さった方もどうもありがとうございます。
0364デフォルトの名無しさん
2009/06/14(日) 21:12:08[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] その他の制限: なし
よろしくお願いします。
0365デフォルトの名無しさん
2009/06/14(日) 21:20:31D:\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標準のコマンド
0367デフォルトの名無しさん
2009/06/14(日) 23:15:31時間から推測するに、
入力ファイルの読込み+ワークへの出力+ワークからの入力+出力ファイルへの出力
なんではと思う。ワークからの入力時にOSのキャッシュが効くんじゃないかな。
プログラムで使用するメモリーサイズは指定できるが、こういうのは、許されるかな?
0368デフォルトの名無しさん
2009/06/14(日) 23:22:17[m599a713d.c.html]
<pre>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
#include <strings.h>
0369デフォルトの名無しさん
2009/06/14(日) 23:23:12[2] sortコマンドのアルゴリズムを要約
☆メモリは例えば320Mバイトしか使用出来ない
☆テンポラリファイルを作ることは許可
☆標準入力からの入力に堪えること。
☆標準出力に出力すること
☆ホンモノのようにタブ区切りの特定項目の組み合わせについてソート
しろとかそういう面倒なことまでは不要
☆出来ればサンプルコード
[3] 日本語。サンプルコードはC/C++どっちでもいいよ
[4]無期限だがこのスレ(127)が終わるまでとしとこ
0370デフォルトの名無しさん
2009/06/14(日) 23:42:29宿題でないならスレ違い
限られたメモリでの巨大ファイルのソートのやり方が知りたいなら
マージソートで検索すれば良いだけ
きわめて一般的な手法で人に解かせる意味はない
0371デフォルトの名無しさん
2009/06/15(月) 00:29:02前スレ>>511で出された問題の延長?期限なしなので宿題かどうかは不明。
関心ある奴が継続して取り組んでいるかな?
確かに一般的手法はあるんだろうが、ちょい静観して。
0372デフォルトの名無しさん
2009/06/15(月) 00:48:48[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);
}
というプログラムを入力しているのですが、うまくいきません
どうすればいいんでしょうか?
0373デフォルトの名無しさん
2009/06/15(月) 00:57:47[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
0374デフォルトの名無しさん
2009/06/15(月) 00:57:55#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;
}
0375デフォルトの名無しさん
2009/06/15(月) 00:59:20すいません、do-whileで作らなければいけないんです……
0376デフォルトの名無しさん
2009/06/15(月) 01:00:330377デフォルトの名無しさん
2009/06/15(月) 01:02:31#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;
}
0378デフォルトの名無しさん
2009/06/15(月) 01:04:00#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;
}
0379デフォルトの名無しさん
2009/06/15(月) 01:05:02ありがとうございます。
コンパイルして実行したら、確かにできました
ありがとうございました!
0380デフォルトの名無しさん
2009/06/15(月) 01:29:19無事うまくできました!
ありがとうございました!
0381デフォルトの名無しさん
2009/06/15(月) 08:44:10[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で出力したい。
0382デフォルトの名無しさん
2009/06/15(月) 09:25:43俺含め通勤時間+勤務時間でほとんどの人は沈没だな。
南無。
0383デフォルトの名無しさん
2009/06/15(月) 09:29:18ttp://et2001.mech.okayama-u.ac.jp/numeric/program.html
これ参考にして頑張って。
0384デフォルトの名無しさん
2009/06/15(月) 09:43:33thx
0385デフォルトの名無しさん
2009/06/15(月) 09:57:30これ、fを求める関数にして、aを0.0、bを1.0にして、
最後にIを表示すれば、1回分の数値積分になる。
「分点の数を倍々に」というのは、さらにループを被せないといけないが、
グラフだけ出せばいいなら、とりあえず人間が入力して何回分かやれば。
0386デフォルトの名無しさん
2009/06/15(月) 10:26:07#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;
}
0387デフォルトの名無しさん
2009/06/15(月) 10:30:58[2]scanf により n を受け取り, 要素数 n の乱数配列を生成し表示するプログラムを作成せよ. ただし, 配列の要素を表示するときは一行につき 10 個ずつ表示するようにせよ.
[3]windows
動的なオブジェクトの生成でお願いします。
期限は今日中です。
0389デフォルトの名無しさん
2009/06/15(月) 10:39:59double 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;
}
0390デフォルトの名無しさん
2009/06/15(月) 10:42:20[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]ポインタを用いる。
お願いします。
0391デフォルトの名無しさん
2009/06/15(月) 10:45:41動的なオブジェクトの生成ってどういう意味?
0392デフォルトの名無しさん
2009/06/15(月) 10:48:55可変長配列ってことじゃないの?
0393デフォルトの名無しさん
2009/06/15(月) 10:49:39すいませんとくに意味はないです。ただポインタをもちいてお願いします。
0394デフォルトの名無しさん
2009/06/15(月) 10:49:42double* 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;
}
0395デフォルトの名無しさん
2009/06/15(月) 10:52:28#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;
}
0396デフォルトの名無しさん
2009/06/15(月) 11:00:16ありがとうございます
0397デフォルトの名無しさん
2009/06/15(月) 11:01:200398デフォルトの名無しさん
2009/06/15(月) 11:02:38どうもです
0399デフォルトの名無しさん
2009/06/15(月) 11:06:18y=calloc(2, sizeof(double));
じゃない?
0400デフォルトの名無しさん
2009/06/15(月) 11:13:41そのようですね
0401デフォルトの名無しさん
2009/06/15(月) 12:19:35どういうゲームかよく分からなかったのですが、解釈をしてみました。
言語は Prolog ですから、フローチャートのつもりで眺めてください。
http://nojiriko.asia/prolog/t167.html
0403デフォルトの名無しさん
2009/06/15(月) 16:01:35#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];
}
0404デフォルトの名無しさん
2009/06/15(月) 17:49:51[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
お願いします
0405デフォルトの名無しさん
2009/06/15(月) 18:45:48[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] その他の制限:とくになし
0406デフォルトの名無しさん
2009/06/15(月) 18:50:06このスレの中で回答済み
0407デフォルトの名無しさん
2009/06/15(月) 18:50:27ひとつめ
#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;
}
0408デフォルトの名無しさん
2009/06/15(月) 18:50:51[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( );
}
こんなん思いつきましたがもっとスマートな方法はありますか??
0409デフォルトの名無しさん
2009/06/15(月) 18:52:030410デフォルトの名無しさん
2009/06/15(月) 18:53:301から10までなら i=1; i<=10; / goukei += i; の方が、
取り立ててスマートというわけではないが読みやすいと思う
0411デフォルトの名無しさん
2009/06/15(月) 18:56:28ありがとうmm
0412デフォルトの名無しさん
2009/06/15(月) 19:12:25本当だ!
ありがとうごぞいます
0413デフォルトの名無しさん
2009/06/15(月) 19:59:44[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] その他の制限: 六曜は順番通り巡るとする。
0414デフォルトの名無しさん
2009/06/15(月) 20:01:543日ぐらい悩んでます…自分ではあってるかわかりませんがここまでやりました
#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;
}
0415デフォルトの名無しさん
2009/06/15(月) 20:44:30すいません
関数 unsigned pow2 を使ってないので使って書いてほしいです
0416デフォルトの名無しさん
2009/06/15(月) 20:49:06[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>しか使っていません。
また、何かあれば指摘させていただくかもしれません。
お手数かけますが宜しくお願いします。
0417デフォルトの名無しさん
2009/06/15(月) 20:51:59>>404 と同じ?
0418デフォルトの名無しさん
2009/06/15(月) 21:43:32[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ポインタを使わなければならない。これだと結果がおかしいのでこのプログラムの修正です
0419デフォルトの名無しさん
2009/06/15(月) 21:46:38すくなくとも %l じゃなくて %ld
で、どこがおかしいの?
0420デフォルトの名無しさん
2009/06/15(月) 21:56:08%lを%ldと直したら解決できました。ありがとうございます。
0421デフォルトの名無しさん
2009/06/15(月) 22:40:19六曜もしくは旧暦の算出ができないとどうにもならんと思うぞ
0422デフォルトの名無しさん
2009/06/15(月) 22:47:03using 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;を挿入して、コンパイルするとどうなるか。
このプログラムのどこに入れたらいいんですか。これは?
0423デフォルトの名無しさん
2009/06/15(月) 22:49:29int main()
の前にいれてみては?www
0424デフォルトの名無しさん
2009/06/15(月) 22:55:27プログラムを作れという問題じゃなくて、
「どうなるか」っていう問題だから、
思いつくいろいろなところに入れて、
どうなるか調べて、まとめて書けばいい。
問題文の意味を理解する日本語の問題。
0425デフォルトの名無しさん
2009/06/15(月) 23:09:27>>424
けど正解はひとつだけなんですよね?
0426デフォルトの名無しさん
2009/06/15(月) 23:11:21const float pi = 3.141592;
const float pi = 2.5;
じゃないの?
0427デフォルトの名無しさん
2009/06/15(月) 23:12:07No
構文エラーとか
文字列リテラルの中に入れるとか
あるでしょ
0428デフォルトの名無しさん
2009/06/15(月) 23:12:59年齢を入力してください
16
生まれた年を入力してください
1986
好きな数字を入力してください
7
あなたは1986年生まれの16才で、7が好きですね
台形の面積を求めるプログラムを作成せよ
上底を入力してください。(単位はcm)
3
下底を入力してください。(単位はcm)
4
高さを入力してください。(単位はcm)
5.0
台形の面積は17.5平方cmです。
誰か助けてください。
0429デフォルトの名無しさん
2009/06/15(月) 23:13:020430デフォルトの名無しさん
2009/06/15(月) 23:13:59こういうのって一筋縄でいくならconst float pi = 3.141592;の下に入れるはずですよね
0431デフォルトの名無しさん
2009/06/15(月) 23:20:38書き始めは
#include <iostream>から始めるっぽいです。
あと、上の問題(年齢の方の問題)をcinを一度だけつかって実現せよっていうのも問題にありました
0432デフォルトの名無しさん
2009/06/15(月) 23:22:08暦は考えなくてもいいみたいです
0433デフォルトの名無しさん
2009/06/15(月) 23:29:00なんでそう思うの?
プログラムの途中にpi=2.5;を挿入しろと書いてあるんだから、
まずやってみて、どうなるか自分の目で確かめればいい。
たぶん出題者の意図は、constの意味が分かってるかどうかだけど、
それにしても、正解例はひとつだけじゃない。
>>426
いや、pi=2.5;を挿入しろと言ってるんだから、
もしそれなら、2行目のconst floatはいらないよ。
0434デフォルトの名無しさん
2009/06/15(月) 23:30:57{pi=2.5;}
こんなんか
0435デフォルトの名無しさん
2009/06/15(月) 23:34:28これ分からなかったら、今後ずっと全部コピペ解答し続けるしかないもん。
まあ、ほかの誰かが解答するかな。
0436デフォルトの名無しさん
2009/06/15(月) 23:39:11#include <iostream>
using namespace std;
int main(){
cout << "年齢を入力してください\n" << 16 << endl;
cout << "生まれた年を入力してください\n" << 1986 << endl;
cout << "好きな数字を入力してください\n" << 7 << endl;
cout << "あなたは1986年生まれの16才で、7が好きですね" << endl;
}
0437デフォルトの名無しさん
2009/06/15(月) 23:53:39using 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;を挿入して、コンパイルするとどうなるか。
じゃあこうなるんですか
0438デフォルトの名無しさん
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まで
0439デフォルトの名無しさん
2009/06/16(火) 00:12:19#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);
}
0440デフォルトの名無しさん
2009/06/16(火) 00:13:042行目のconst floatだけがいらないんですか?
それともその行のconst floatpi = 3.141592; 自体がいらないんですか。
というか、僕が書いた、上のでいいんですかね
0441#
2009/06/16(火) 00:15:00{
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);
}
0442#
2009/06/16(火) 00:15:59{
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;
}
0443デフォルトの名無しさん
2009/06/16(火) 00:17:22{
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;
0444#
2009/06/16(火) 00:21:08case 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);
}
このプログラムを書き換えて作る
二次元配列を用いた場合どこをどう変えるか分かりません
教えてください
連張りすみませんでした
0445デフォルトの名無しさん
2009/06/16(火) 00:23:29[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日
0446デフォルトの名無しさん
2009/06/16(火) 00:27:40[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] その他の制限: なし
0447デフォルトの名無しさん
2009/06/16(火) 00:28:42const float pi = 3.141592;
って定義されたあとに
pi = 2.5;
を入れてコンパイルするとどうなりますか?
或いは
pi = 2.5;
を
const float pi = 3.141592;
の前に挿入してコンパイルするとどうなりますか?
などを自分で試して、実際どうなるか、どうしてそうなるのかを考えてくださいていう宿題だろ。
その問題に答えはなくて、constの役割を学習して来いってことだと思うよ。
0448デフォルトの名無しさん
2009/06/16(火) 00:39:13[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] その他の制限: 特になし
0449デフォルトの名無しさん
2009/06/16(火) 00:57:36ありがとうございました
0450デフォルトの名無しさん
2009/06/16(火) 01:04:22旧暦の (月+日)%6 で六曜が分かるんだよ
で、どうやって六曜を取得するかって話
課題としては適切ではないように思える
0451デフォルトの名無しさん
2009/06/16(火) 01:13:16上 nを引くタイミングが早い。
中 s[0]が'\0'なら暴走する。
下 '\0'がコピペされん。
0452デフォルトの名無しさん
2009/06/16(火) 01:41:13先勝,友引,先負,仏滅,大安,赤口
----------------------------------
.月曜 .火曜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) );
}
}
0453デフォルトの名無しさん
2009/06/16(火) 01:55:53[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] その他の制限: なし
お願いします
0454デフォルトの名無しさん
2009/06/16(火) 02:49:44#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]);
}
0455デフォルトの名無しさん
2009/06/16(火) 05:32:480456デフォルトの名無しさん
2009/06/16(火) 05:50:240457#
2009/06/16(火) 08:56:020458デフォルトの名無しさん
2009/06/16(火) 09:41:21[2] 問題文(含コード&リンク):
n*n行列A、Bをそれぞれキーボード から入力し、積を求めろ。
行列の大きさnもキーボードから入力せよ。多次元配列を使ってください。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cのみ
[4] 期限: 明日
[5] その他の制限: 配列ぐらいまでしかわかってません
よろしくお願いします。。
0459デフォルトの名無しさん
2009/06/16(火) 10:01:50とりあえずやってみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9467.txt
0460デフォルトの名無しさん
2009/06/16(火) 10:56:12#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;
}
0461#
2009/06/16(火) 10:57:23ありがとうございます
ですが、できれば参考プログラムを元にして作っていただけたらうれしいです
あと、C++言語ではなくC言語でお願いします
すみません;;
[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を使うとのことです。
困っています!よろしくお願いします!!
0463残りの問題まとめ
2009/06/16(火) 11:23:26>>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バイト以下のテキストファイルをソートするプログラム。 なし
0464デフォルトの名無しさん
2009/06/16(火) 11:31:170465デフォルトの名無しさん
2009/06/16(火) 11:36:10#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;
}
0466デフォルトの名無しさん
2009/06/16(火) 12:01:08#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;
}
0467デフォルトの名無しさん
2009/06/16(火) 12:22:30申し訳ありません。
#ifndef、#endifの二つは習って無いので使わずに書くことはできますでしょうか?
0468デフォルトの名無しさん
2009/06/16(火) 12:26:35[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] その他の制限:関数に入ったばかりです。よろしくお願いします。
0469デフォルトの名無しさん
2009/06/16(火) 12:27:12ttp://wisdom.sakura.ne.jp/programming/c/c40.html
今習ったから大丈夫
0470デフォルトの名無しさん
2009/06/16(火) 12:27:21#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;
}
0471デフォルトの名無しさん
2009/06/16(火) 12:28:06#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;
}
0472デフォルトの名無しさん
2009/06/16(火) 12:30:37[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の問題です。よろしくお願いします。
0474デフォルトの名無しさん
2009/06/16(火) 12:35:16#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;
}
0475デフォルトの名無しさん
2009/06/16(火) 12:40:54>>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;
}
0476デフォルトの名無しさん
2009/06/16(火) 13:41:12[2] 問題文(含コード&リンク):滑降シンプレックス
[3] 環境
[3.1] Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C++
[4] 期限:6月19日
[5] その他の制限:各点の大きさを比べるところまでは出来ました。
その後の最良点、2番目に良い点を結びその中点を最悪点が通る部分が分かりません。
WEB上では完成してあるアルゴリズムがあるのですが自分には難しく、計算時間がかかってもいいので分かりやすい関数でと思い書き込みました。
よろしくお願いします。
0477デフォルトの名無しさん
2009/06/16(火) 15:27:25問題文がたった9文字とは凄い課題だな
0478デフォルトの名無しさん
2009/06/16(火) 15:55:05[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] その他の制限: 特にありません。
三問ありますが、どうぞよろしくお願いします。
0479デフォルトの名無しさん
2009/06/16(火) 16:38:33(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;
}
0480デフォルトの名無しさん
2009/06/16(火) 16:51:07一問目は自分で対応したいと思います。
お疲れ様でした。
0481デフォルトの名無しさん
2009/06/16(火) 18:12:28[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] その他の制限: アルゴリズム論とデータ構造の序盤です。特に指定はないです。
長文になってしまい、申し訳ありません
よろしくお願いします
0482デフォルトの名無しさん
2009/06/16(火) 20:24:44[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日
ソースコードが中途半端な上に分かりづらいと思いますが
空白出力→★出力→空白出力→★出力という流れでやってます
根本的にアプローチの仕方が間違ってるかもしれませんが
よろしくお願いします
0483デフォルトの名無しさん
2009/06/16(火) 20:34:08#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;
}
0484食う負名無
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時)
0485デフォルトの名無しさん
2009/06/16(火) 20:50:320486デフォルトの名無しさん
2009/06/16(火) 20:52:11入力の文章の形が微妙だけど、
文章内には改行なし/最後のみ改行の形を想定し
プログラムを作ってあります。
入力は何とでもなると思うので、
main関数内いじくってください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9474.txt
0487デフォルトの名無しさん
2009/06/16(火) 20:53:479行目:MAX_LEN -> MAX_LEN+1
0488デフォルトの名無しさん
2009/06/16(火) 20:55:35両方とも void irekae(int& a, int& b) を void irekae(int a, int b) にかえるだけだと思われ
思ったんだけど両方とも同じ問題じゃない?
0489食う負名無
2009/06/16(火) 21:04:46注意書き??ヒント??のようなところには『関数main で関数irekae を呼び出し a,bを入れ換えると(2)ではmainの中の実引数は入れ換わるが
(1)の実引数は入れ替わらない』と書かれています。
自分本当の初心者なので参照渡しと値渡しの違いも分からないのですが。。。
教えてください。
0490初物
2009/06/16(火) 21:08:36[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
0491デフォルトの名無しさん
2009/06/16(火) 21:21:55#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;
}
0492初物
2009/06/16(火) 21:31:19ありがとうございます。!
0493デフォルトの名無しさん
2009/06/16(火) 21:45:31[2] 問題文(含コード&リンク):サブルーチンを使用した成績処理のプログラムを基に、それにさらに
構造体を取り込んだプログラムを作成しなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: TurboC
[3.3] 言語: どちらでも可
[4] 期限: 2009年6月28日
[5] その他の制限:#include<stdio.h>の形で始まるようにお願いします。
よろしくお願いします。
0494デフォルトの名無しさん
2009/06/16(火) 21:48:15何を基にするのか分かんない
0495食う負名無
2009/06/16(火) 21:54:180496デフォルトの名無しさん
2009/06/16(火) 21:58:59>>488
だいたい、こういう「どうなるか」とか「確かめよ」という問題は、
正しいプログラムを作る話とは限らないんだよ。
うまく行かないのを「確かめよ」ということだ。
0497デフォルトの名無しさん
2009/06/16(火) 22:06:40問題文にプログラミングを作り直せと書かれているんだから正しいプログラムを作れってことだろ??
というかそれができないから>>484は質問してんじゃない?
0498デフォルトの名無しさん
2009/06/16(火) 22:10:57その答えが>>488じゃねーの
0499デフォルトの名無しさん
2009/06/16(火) 22:13:28>>496に書いた「正しい」というのは、
問題文に対する正解と言う意味じゃなくて、
プログラムが意味のある処理をする意味で、正しいということ。
>>484 の問題の意図は、わざと間違ったプログラムを作れということで、
わざと間違ったプログラムを作ると、それが正解。
ともかく、正解はもう出てる。 >>488
エディタで置換すればいいだけだ。
0500デフォルトの名無しさん
2009/06/16(火) 22:15:22#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");
}
}
0501デフォルトの名無しさん
2009/06/16(火) 22:15:34悪かった。
0502デフォルトの名無しさん
2009/06/16(火) 22:16:57わかりにくくて申し訳ありませんでした。
サブルーチンを使っているプログラムなら何でもいいのでそこに構造体を取り込んだプログラムを作成せよという問題です。
それだけではわかりにくいだろうということで例として成績処理のプログラムをサブルーチンを使って作成して、それに構造体をという教授からの指示でした。
プログラム自体はなんでもいいのでサブルーチンと構造体を使用したものをお願いいたします。
0503デフォルトの名無しさん
2009/06/16(火) 22:19:55[2] 問題文(含コード&リンク):[0,1]の一様乱数をを発生させるプログラムを作成しなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual Studio
[3.3] 言語:C++
[4] 期限:6月22日まで
[5] その他の制限:特になし
0504デフォルトの名無しさん
2009/06/16(火) 23:29:56#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;
}
0505デフォルトの名無しさん
2009/06/17(水) 00:48:16[2] 問題文
(1)
文字列を受け取る関数(charポインタを使用)
その文字列の一番最後の文字を消去する関数を作る。
(2)
文字列を受け取る関数(charポインタ使用)
その文字列の一番最初の文字を消去する関数を作る。
(3)文字列を入力し、ある文字を入力。その文字列の中にその入力した文字がいくつあるかを数える関数。
例 文字列 asdfgvbfdcaa 文字aと入力したら 3となる
その関数は二つのパラメータをもち、一つ目は文字列へのポインタ、二つ目は数えた文字の数である。[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VisualC++;
[3.3] 言語:C
[4] 期限:6月19日
[5] その他の制限:問題文の指示のポインタは使用すること
0506デフォルトの名無しさん
2009/06/17(水) 00:54:56#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]
}
0507デフォルトの名無しさん
2009/06/17(水) 01:05:40#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;
}
0508デフォルトの名無しさん
2009/06/17(水) 01:14:47ありがとうございます。
0509デフォルトの名無しさん
2009/06/17(水) 01:37:39void 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;
}
0510デフォルトの名無しさん
2009/06/17(水) 01:41:58助かりました。ありがとうございました。
0511デフォルトの名無しさん
2009/06/17(水) 01:52:32>一つ目は文字列へのポインタ、二つ目は数えた文字の数である。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
2つ目の引数は「文字」じゃなくて「文字数」っぽいよ
0512デフォルトの名無しさん
2009/06/17(水) 01:53:37s/>>506/>>505/
0513デフォルトの名無しさん
2009/06/17(水) 08:08:48>>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;
}
0514デフォルトの名無しさん
2009/06/17(水) 08:41:22[2]問題文:画面より入力した成績データをファイルに登録する。
画面より入力する項目は以下のとおり。
・生徒コード、数字6桁、数字であること。
・氏名、文字列20文字、1字以上、20字以内
・国語(点数)、数字3桁、数字であること、0<=点数<=100
・算数(点数)、国語と同じ
・社会(点数)、国語、算数と同じ
生徒コードに999999が入力されたら終了する。
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ名とバージョン:C machine
[3.3]言語:C
[4]期限:明日
[5]その他の制限:入力は、gets()にて行い、ファイルに出力する。
期限ギリギリですが、よろしくお願いします。
0515デフォルトの名無しさん
2009/06/17(水) 08:48:23ありがとうございました
0516デフォルトの名無しさん
2009/06/17(水) 09:09:26http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9476.c
0517デフォルトの名無しさん
2009/06/17(水) 10:00:51mainが危険だな
0518デフォルトの名無しさん
2009/06/17(水) 10:08:00ありがとうございます。
でも、点数や文字数などの判定はどうするんでしょうか?
0519デフォルトの名無しさん
2009/06/17(水) 10:47:54スマン、判定も必要だったのか
その場合、点数とかは指定された桁数で入力しないといけないの?
たとえば、国語の点数で
「85」と入力 => エラー
「085」と入力 => 成功
みたいな
0520デフォルトの名無しさん
2009/06/17(水) 10:50:15nは実体で定義してポインタ渡しじゃないとダメじゃね?
0521デフォルトの名無しさん
2009/06/17(水) 10:58:13>>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;
}
0522デフォルトの名無しさん
2009/06/17(水) 11:17:140523デフォルトの名無しさん
2009/06/17(水) 12:00:21桁は関係ないけど、0の三ケタ(000)は通らないようにしてほしいです。
0524デフォルトの名無しさん
2009/06/17(水) 12:34:19[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] その他の制限:なし
0525デフォルトの名無しさん
2009/06/17(水) 12:39:23[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時くらいまで
よろしくお願いします。
0526デフォルトの名無しさん
2009/06/17(水) 12:48:47>>222 と一緒?
0527デフォルトの名無しさん
2009/06/17(水) 14:52:56Q1
#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;
}
0528デフォルトの名無しさん
2009/06/17(水) 14:58:46Q3
#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;
}
0529デフォルトの名無しさん
2009/06/17(水) 15:02:41do {
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);
0530デフォルトの名無しさん
2009/06/17(水) 15:21:20#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;
}
0531デフォルトの名無しさん
2009/06/17(水) 17:59:48open cvの画像回転サンプルプログラムをfor文で変形できますか.
教えてください..
0532デフォルトの名無しさん
2009/06/17(水) 18:23:39STSとDMYの使い方がわからないんですが…
0533デフォルトの名無しさん
2009/06/17(水) 18:29:28>>529じゃないが、STSがstsのことを指してるならstatusのことだと思うよ
DMYがdmyのことを指してるならdummyのことだと思うよ
0534デフォルトの名無しさん
2009/06/17(水) 19:05:33http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9477.txt
0535デフォルトの名無しさん
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まで
0536デフォルトの名無しさん
2009/06/17(水) 20:02:33どこで行き詰ったの
0537デフォルトの名無しさん
2009/06/17(水) 20:03:31>>525
>>530
0538デフォルトの名無しさん
2009/06/17(水) 20:07:43#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;
}
0539デフォルトの名無しさん
2009/06/17(水) 20:09:56getcでファイルから1文字ずつ受け取り、
if文で空白、ピリオド、コロン、改行をはじいて単語を表示させるところまではできたんですが、
その受け取った文字列を単語として扱うところで行き詰まってます。
単語の文字数をカウントして、単語配列の要素数に当てはめるまではいいんですが、
その後どうすればいいのか・・・orz
0540デフォルトの名無しさん
2009/06/17(水) 20:11:54char array[ARRAYSIZE][BUFFSIZE];
こうじゃね?
0541デフォルトの名無しさん
2009/06/17(水) 20:14:43そうですね。失礼しました。
0542デフォルトの名無しさん
2009/06/17(水) 20:21:47単語を入れるのに配列が必要で、たくさんの単語を入れるのに配列が必要なので
2次元配列を使うのがわりと楽だし、素直。
単語を取得することができてるなら後はそれを詰めるだけだよ。
あと少しがんばれ
0543デフォルトの名無しさん
2009/06/17(水) 20:29:24区切り文字ってあるでしょ?
それを受け取ったらそこで区切られれて単語が一個出来上がってる計算になるわけだ。
後で表示なりの処理が必要なら、どこかのバッファに一端保存しておいて、後でがんばる。
0544デフォルトの名無しさん
2009/06/17(水) 20:40:23#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;
}
0545デフォルトの名無しさん
2009/06/17(水) 20:52:24ありがとうございます。
参考にしてがんばります!
0546529
2009/06/17(水) 20:59:08#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;
0547デフォルトの名無しさん
2009/06/17(水) 21:19:010548デフォルトの名無しさん
2009/06/17(水) 22:16:09[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] その他の制限: 上記の旨
0549デフォルトの名無しさん
2009/06/17(水) 22:29:47[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日です。変数と式ってとこでみんなが何やってるか
わからない状態です。
0550デフォルトの名無しさん
2009/06/17(水) 22:38:28[4] 期限: 2008年6月29日
2008年?
0551デフォルトの名無しさん
2009/06/17(水) 22:59:52[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軸で囲まれた・・・のところが分かりません。
よろしくお願いします。
0552デフォルトの名無しさん
2009/06/17(水) 23:02:58http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Sin_and_cos.png
cos(x)のグラフはこの黄緑のやつだよ。
0553551
2009/06/17(水) 23:03:160554デフォルトの名無しさん
2009/06/17(水) 23:06:57[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] その他の制限:簡単めのコードでお願いします。
0555デフォルトの名無しさん
2009/06/17(水) 23:10:140556デフォルトの名無しさん
2009/06/17(水) 23:12:00[2] 問題文(含コード&リンク):六科目の試験の得点を入力すると、合計点と平均点を出力するプログラムを作成せよ
[3] 環境
[3.1]LInux
[3.2] gcc
[3.3]C
[4]2009年6月18日
[5]scanfぐらいまでしかならってないです。お願いします
0557デフォルトの名無しさん
2009/06/17(水) 23:12:060558デフォルトの名無しさん
2009/06/17(水) 23:15:30// ∫[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;
}
0559デフォルトの名無しさん
2009/06/17(水) 23:17:47ミスった
#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;
}
0560デフォルトの名無しさん
2009/06/17(水) 23:20:39[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ぐらいまでしかならってません。なにもわからない初心者ですお願いします
0561デフォルトの名無しさん
2009/06/17(水) 23:26:18char toupper(char c) {
if(c>='a'&&c<='z') return c+'A'-'a';
else return c;
}
0562デフォルトの名無しさん
2009/06/17(水) 23:32:38だからソートアルゴリズムも問わないってなってんだとおもった
0563デフォルトの名無しさん
2009/06/17(水) 23:34:11[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]素人です、お願いします
0564デフォルトの名無しさん
2009/06/17(水) 23:40:02floatの有効桁は23ビットだから7桁弱だろ?写し間違い?
0565デフォルトの名無しさん
2009/06/17(水) 23:56:320566デフォルトの名無しさん
2009/06/18(木) 00:01:18printfが%fで表示する際にdoubleの15桁くらいまで頑張ってくれる。
足して小数点以下22〜23桁を表示する。
0567デフォルトの名無しさん
2009/06/18(木) 00:03:27足す理由はよく分からないが
無効桁まで表示したいだけじゃないか?
0568デフォルトの名無しさん
2009/06/18(木) 00:04:08for文を習ってないなら、
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;
}
0569デフォルトの名無しさん
2009/06/18(木) 00:04:45頭7桁は0.000000だから。「小数点以下」ってとこ読み落としてる?
0570564
2009/06/18(木) 00:06:15でも23桁は無理じゃね?
0571デフォルトの名無しさん
2009/06/18(木) 00:07:420572デフォルトの名無しさん
2009/06/18(木) 00:10:53#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;
}
0573デフォルトの名無しさん
2009/06/18(木) 00:20:56こういう風に単純に同じのコピペしたコードって
volatileつけないと最適化されてしまったりしない?
0574デフォルトの名無しさん
2009/06/18(木) 00:21:50-O0 とか指定してやってください
0575デフォルトの名無しさん
2009/06/18(木) 00:23:11まー、誤差が二通り出るのも含めて学習意図かもしれないが。
0576デフォルトの名無しさん
2009/06/18(木) 00:30:12#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;
}
0577デフォルトの名無しさん
2009/06/18(木) 01:17:42皆さんありがとうございます。
無事に提出できそうです。
0578デフォルトの名無しさん
2009/06/18(木) 01:56:19>>558
ありがとうございます。
助かりました。
0579デフォルトの名無しさん
2009/06/18(木) 01:56:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9480.c
0580デフォルトの名無しさん
2009/06/18(木) 02:44:49[1] 授業単元: プログラミング演習
[2] 問題文: 人の名前(ローマ字)を検索(部分一致)することができるプログラムを作成せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 今日の午前
[5] その他の制限: 検索できる機能が充実していれば他は特にないです。よろしくお願いします。
0581デフォルトの名無しさん
2009/06/18(木) 02:55:51exec*()とgrep(1)かregex.hを利用する。
strstr()でもいいかもしれないが、やる気がしない。
今、プリプロセッサをハック中だから無理無理絶対無理。
0582デフォルトの名無しさん
2009/06/18(木) 03:06:13ハックがんばってね
0583デフォルトの名無しさん
2009/06/18(木) 10:49:32[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] その他の制限: なし
お願いします。
0584デフォルトの名無しさん
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にコピー渡しすると思っていいます。
0585デフォルトの名無しさん
2009/06/18(木) 11:11:58#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;
}
0586デフォルトの名無しさん
2009/06/18(木) 11:17:15マルチスレッド対応でリアルタイム処理可能かどうかに
関わってくる問題なので処理系依存
0587デフォルトの名無しさん
2009/06/18(木) 11:56:54#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;
}
}
}
0588デフォルトの名無しさん
2009/06/18(木) 11:59:35[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] その他の制限:特になし
何がなんだか
よろしくお願いします
0589デフォルトの名無しさん
2009/06/18(木) 13:49:40ありがとうございました。
0590デフォルトの名無しさん
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] その他の制限: 特になし
よろしくお願いします。
0591デフォルトの名無しさん
2009/06/18(木) 16:06:43[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]素人です
0592デフォルトの名無しさん
2009/06/18(木) 16:11:54[2] 問題文(含コード&リンク):入力した文字の種類を表示するプログラムを作成せよ。ただし、表示は次に従うとする
入力キーA〜Z 表示メッセージ 英大文字です
入力キーa〜z 表示メッセージ 英小文字です
入力キー0〜9 表示メッセージ 数字です
上記以外 表示メッセージ その他のキャラクターです
[3] 環境
[3.1]linux
[3.2] gcc
[3.3]C
[4]6月19まで
[5]
0593デフォルトの名無しさん
2009/06/18(木) 16:16:44[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]お願いします
0594デフォルトの名無しさん
2009/06/18(木) 16:32:28問題文の通りに作ったけど、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");
}
}
0595デフォルトの名無しさん
2009/06/18(木) 16:40:43ctype.h
isupper が真、入力キーA〜Z
islower が真、入力キーa〜z
isdigit が真、入力キー0〜9
isalnum が偽、上記以外
0596デフォルトの名無しさん
2009/06/18(木) 16:43:19#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;
}
0597180
2009/06/18(木) 16:45:45# 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したってことだろ。
0598デフォルトの名無しさん
2009/06/18(木) 16:53:33[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] その他の制限:
0599デフォルトの名無しさん
2009/06/18(木) 16:58:53#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;
}
0600デフォルトの名無しさん
2009/06/18(木) 17:04:27すいませんが、初心者なのでunsignedというのが解りません。
なるべく難しいものを使わずに、教えて下さい。
0601デフォルトの名無しさん
2009/06/18(木) 17:07:09unsigned をすべて int にすればおk
0602デフォルトの名無しさん
2009/06/18(木) 17:07:290603デフォルトの名無しさん
2009/06/18(木) 17:17:50でもキーボードからの入力って要件を満たしてるから一応書いとく
#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;
}
0604デフォルトの名無しさん
2009/06/18(木) 17:35:35scanf("%d%d%d",&a,&b,&c);
要件を満たしてるとはいえ、これはちょっとと思わなくもないけど
0605デフォルトの名無しさん
2009/06/18(木) 17:48:400606デフォルトの名無しさん
2009/06/18(木) 17:54:51printf("a...");
scanf("%d",&a);
printf("b...");
scanf("%d",&b);
printf("c...");
scanf("%d",&c);
0607デフォルトの名無しさん
2009/06/18(木) 17:59:000608デフォルトの名無しさん
2009/06/18(木) 19:11:08[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] その他の制限:特になし
0609デフォルトの名無しさん
2009/06/18(木) 19:15:43このスレ内で回答済み
0610デフォルトの名無しさん
2009/06/18(木) 19:51:34[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] その他の制限:今日中にお願いします。
よろしくお願いします。
0611デフォルトの名無しさん
2009/06/18(木) 20:02:480612デフォルトの名無しさん
2009/06/18(木) 20:08:16依存関係に必要とは限らないからな
0613デフォルトの名無しさん
2009/06/18(木) 20:11:53まあ、.hがないならないで.c間の依存関係が必要だと思うんだけど
0614デフォルトの名無しさん
2009/06/18(木) 20:12:37make によって書き方が違うからよく分かんない
$(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 $<
0615デフォルトの名無しさん
2009/06/18(木) 20:19:39[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等 ループ文を使ってはいけないそうです
0616デフォルトの名無しさん
2009/06/18(木) 20:28:440617デフォルトの名無しさん
2009/06/18(木) 21:07:03ほとんど自分の練習のため作った。結構本気で作ったが動作は保障しない。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9484.zip
次回はスレッドをちゃんと検索しような!
0618610
2009/06/18(木) 21:11:40どうでしょう?
これを何とかならないでしょうか?
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
0619デフォルトの名無しさん
2009/06/18(木) 21:18:11デバッグあんまりしてないから、検算してね!
あと、動作は保障しない。
#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;
}
0620デフォルトの名無しさん
2009/06/18(木) 21:18:42順番に見ていったらいい。
axを作るよ
aaa.c xxx.c が更新されてるなら
${CC} -o ax ${SRCS_AX} -lm
(更新されてないなら何もしない)
aaa.oを作るよ、という動機(依存関係)がかかれていないから
aaa.o: aaa.cのルールは使われない
make aaa.o とやれば作られるが、そういう話でもない。
0621デフォルトの名無しさん
2009/06/18(木) 21:47:05教科書 P.316 例14.7を参考にしてみては?
0623デフォルトの名無しさん
2009/06/18(木) 22:25:43[2] 問題文:√(x)をsqrtを使わず、足し算掛け算でもとめるプログラム。
r1*r2=xとおいて、考える。while文を使う。
[3] 環境
[3.1] OS: Windows xp
[3.3] 言語: C++
[4] 期限: 2009年6月22日
[5] その他の制限:sqrtをつかわない。
お願いします(><)
自分でも考えてみましたがどうしてもうまくいかないので・・・
0624デフォルトの名無しさん
2009/06/18(木) 23:24:53二分法かニュートン法使うしかないな
他の方法は収束が遅すぎる
0625デフォルトの名無しさん
2009/06/18(木) 23:48:15#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;
}
0626デフォルトの名無しさん
2009/06/19(金) 00:03:06#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;
}
0627デフォルトの名無しさん
2009/06/19(金) 00:33:09#define square(x) x*x
4
ではなくて
#define square(x) (x*x)
と定義しなければならない理由を教えて下さい
0628デフォルトの名無しさん
2009/06/19(金) 00:34:37どっちもだめじゃね?
0629デフォルトの名無しさん
2009/06/19(金) 01:07:440630デフォルトの名無しさん
2009/06/19(金) 01:08:330631デフォルトの名無しさん
2009/06/19(金) 01:09:381.
#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;
}
0632デフォルトの名無しさん
2009/06/19(金) 01:10:19double 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;
}
0633デフォルトの名無しさん
2009/06/19(金) 02:01:34[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] その他の制限:なし
よろしくお願いします。
0634デフォルトの名無しさん
2009/06/19(金) 02:46:11データの入力は標準入力からにしたけど、こんな感じでいい?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9485.txt
0635デフォルトの名無しさん
2009/06/19(金) 02:55:21[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日
0636デフォルトの名無しさん
2009/06/19(金) 02:58:40oddsum(1)==0 ?
0637デフォルトの名無しさん
2009/06/19(金) 03:00:41#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;
}
0638デフォルトの名無しさん
2009/06/19(金) 03:03:39例 国語の得点:83
数学の得点:100
英語の得点:98
化学の得点86
物理の得点:90
世界史の得点80
合計点は537点です
平均点は89.5点です
のように表示したいんですが、どなたか関数を使わずにする書き方ご教授お願いします。
0640デフォルトの名無しさん
2009/06/19(金) 03:07:13>>561はやりかたを書いているわけじゃない
>>639が何を行ったか書かないと、何を教えればわからないだろjk
0641デフォルトの名無しさん
2009/06/19(金) 03:12:04表示結果の例として
判別したい文字:H
英大文字です
判別したい文字:ж
その他のキャラクターです
と表示されるようにしたいんですが、どなたかご教授お願いします。
0642デフォルトの名無しさん
2009/06/19(金) 03:13:28期限過ぎてるな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;
}
0643デフォルトの名無しさん
2009/06/19(金) 03:14:29全角かよw
それは手ごわい
0644デフォルトの名無しさん
2009/06/19(金) 03:19:53#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;
}
0645デフォルトの名無しさん
2009/06/19(金) 03:40:04会員番号:3524
Uグループです。
会員番号:0
会員番号が適切ではありません。
のように作れと書いてあるんですが、>>596のように書いたんですがうまくいかないです。
あと>>596のlongとかreturn1の意味がわからないんですが・・。素人なものなんで何が何かわからない状態です
どなたかご教授お願いします。
0646デフォルトの名無しさん
2009/06/19(金) 03:48:020647デフォルトの名無しさん
2009/06/19(金) 03:49:34そんな指示は初耳でござる
0648デフォルトの名無しさん
2009/06/19(金) 03:53:14[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]繰り返しまでです
0649デフォルトの名無しさん
2009/06/19(金) 03:59:23#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;
}
0650デフォルトの名無しさん
2009/06/19(金) 04:01:55[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]繰り返しまでです、関数まではいっていません、お願いします
0651デフォルトの名無しさん
2009/06/19(金) 04:05:13宿題ためこみすぎじゃね?
あと全角の処理って面倒なんだぜ
0652デフォルトの名無しさん
2009/06/19(金) 04:14:50[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]繰り返しまでです、よろしくお願いします
0653デフォルトの名無しさん
2009/06/19(金) 04:19:12#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;
}
0654デフォルトの名無しさん
2009/06/19(金) 04:31:08#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;
}
0655デフォルトの名無しさん
2009/06/19(金) 04:36:21ちゃんと0になると思うんだけど
0656デフォルトの名無しさん
2009/06/19(金) 04:48:13[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] その他の制限: 関数まで。
お願いします。
0657デフォルトの名無しさん
2009/06/19(金) 04:53:021 になるべきでは
0658デフォルトの名無しさん
2009/06/19(金) 05:09:56http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9486.txt
これ合ってるかなあ、誰か検算してよ
0659デフォルトの名無しさん
2009/06/19(金) 05:15:310660デフォルトの名無しさん
2009/06/19(金) 05:28:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9487.txt
0661デフォルトの名無しさん
2009/06/19(金) 05:34:32もういいや、めんどくせ〜
役に立てなくてごめんね
0662デフォルトの名無しさん
2009/06/19(金) 05:44:57int 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箇所
}
0663デフォルトの名無しさん
2009/06/19(金) 05:50:50これでおk
int m=(n+1)/2;
return m*m;
0664デフォルトの名無しさん
2009/06/19(金) 06:40:04return 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]) );
}
0665デフォルトの名無しさん
2009/06/19(金) 07:37:17square(a+b)ってやったら、どっちもダメだなあ。
0666デフォルトの名無しさん
2009/06/19(金) 09:04:08>if(c>='a'&&c<='z') return c+'A'-'a';
ここがダメ
0667デフォルトの名無しさん
2009/06/19(金) 12:59:20[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
よろしくお願いします
0668デフォルトの名無しさん
2009/06/19(金) 13:27:46コンピュータの手はランダムに決定するものとする(空いてるところに打つ)
盤面を表現する配列は3×3の二次元配列とし、グローバルに宣言する。
以下のような関数を宣言すること
盤の表示、○×を打つ、3つ並んだかチェック。
0669デフォルトの名無しさん
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まで
0670デフォルトの名無しさん
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);
}
0671デフォルトの名無しさん
2009/06/19(金) 13:43:51お願いします;;
0672デフォルトの名無しさん
2009/06/19(金) 13:53:02>>670 の差分 (最低限: 関数名やコメント printf の内容はノータッチ)
-- return (n * factorial(n - 1));
++ return (n + factorial(n - 1));
-- return (1);
++ return (0);
0673デフォルトの名無しさん
2009/06/19(金) 14:03:110674デフォルトの名無しさん
2009/06/19(金) 14:03:18[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
0675デフォルトの名無しさん
2009/06/19(金) 14:41:09#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);
}
0676デフォルトの名無しさん
2009/06/19(金) 14:50:52#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;
}
0677デフォルトの名無しさん
2009/06/19(金) 15:01:400678デフォルトの名無しさん
2009/06/19(金) 15:30:24tasukatta!
0679デフォルトの名無しさん
2009/06/19(金) 15:51:06http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9490.txt
0680デフォルトの名無しさん
2009/06/19(金) 18:54:05>>679はバグありなので修正
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9491.c
0681デフォルトの名無しさん
2009/06/19(金) 20:36:56[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 などの構文や関数を習いました。
0682681 ◆WMGclVKsR2
2009/06/19(金) 20:41:19解説もできればお願いしたいです。
0683デフォルトの名無しさん
2009/06/19(金) 20:55:01既に1期終わるのに習っていないとな
0684デフォルトの名無しさん
2009/06/19(金) 20:58:23#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;
}
0685684
2009/06/19(金) 21:05:08scanfで数値読み取り
scanfは返り値が読み取った値の個数なので
この場合1以外は読み取れなかったことを示す
1<=num<=10の条件と一緒に判断してエラー表示
メインループ1から50まで順番に回す
倍数かどうかは%演算(あまりを求める)で==0のときで判断
dispはいくつ表示したかを把握するためのカウンタ
5の倍数で改行を入れる
こんなもん?
0686デフォルトの名無しさん
2009/06/19(金) 21:27:22#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;
}
0687デフォルトの名無しさん
2009/06/19(金) 21:45:04[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、コピーまで習いました。
問題文に書いてある参照のリストはファイルに一緒に入れてあります。
宜しくお願いします。
0688デフォルトの名無しさん
2009/06/19(金) 23:38:49の
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] その他の制限: 無し
0689デフォルトの名無しさん
2009/06/19(金) 23:49:21[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] その他の制限: 制限なし
よろしくお願いします。
0690デフォルトの名無しさん
2009/06/20(土) 00:40:40課題2だけやった
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9495.txt
0691デフォルトの名無しさん
2009/06/20(土) 01:08:36using 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円出ます。
誰か助けてくれませんか?
0692デフォルトの名無しさん
2009/06/20(土) 01:08:47ちょっと興味を持ったので
大学?院?
0693デフォルトの名無しさん
2009/06/20(土) 01:13:04課題1だけやった
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9496.txt
0694デフォルトの名無しさん
2009/06/20(土) 01:23:40課題3だけやった
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9497.txt
0695デフォルトの名無しさん
2009/06/20(土) 01:52:13大学です。
0696デフォルトの名無しさん
2009/06/20(土) 05:10:41有難うございます。
助かりましたm(_ _)m
0697デフォルトの名無しさん
2009/06/20(土) 09:29:32教科書買ったの?
0698デフォルトの名無しさん
2009/06/20(土) 10:55:25#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;
}
0699デフォルトの名無しさん
2009/06/20(土) 13:07:47[2] 問題文: a行a列の数値を.exeの時に入力し、
対角要素を並びかえをするプログラムを作れ。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: 不明です
[3.3] 言語:C言語でお願いします。
[4] 期限: 2009年6月22日まで
よろしくお願いします。
0700デフォルトの名無しさん
2009/06/20(土) 14:32:52#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;
}
0701デフォルトの名無しさん
2009/06/20(土) 14:34:26#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("");
}
}
0702700
2009/06/20(土) 14:41:18700は無しで
0703未解決まとめ
2009/06/20(土) 15:28:01>>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
0704デフォルトの名無しさん
2009/06/20(土) 16:10:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9498.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9499.c
0705デフォルトの名無しさん
2009/06/20(土) 17:42:250706デフォルトの名無しさん
2009/06/20(土) 17:53:14[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にあるコードを使って
ヒープソートとクイックソートを完成させる課題です。
どのコードをどう使ってどのように実装すれば良いのか分かりませんでした。
よろしければどなたか完成版をお願いします
0707デフォルトの名無しさん
2009/06/21(日) 00:03:56問1が二つ書いてあるんですが、どっち書けばいいんですか?
本当は、問1が
以下のように出力されるプログラムを出力せよ
年齢を入力してください
16
生まれた年を入力してください
1992
好きな数字を入れてください
8
って問題ですがそれは合ってると思うから書きました。
しかし、問2が、『上の問題をcinを一度だけ使って実現せよ』って問題なんですが…
あと()の中のvoidっているんですか?そしてreturn0;は必要ないんでしょうか
0708デフォルトの名無しさん
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] その他の制限:初心者なので解説があるとうれしいです。何かを使ってはいけないという制限はありません
0709708
2009/06/21(日) 00:21:08よろしくおねがいします
0710デフォルトの名無しさん
2009/06/21(日) 00:26:40アルファベットを3つ入力してください
a
b
c
キーボードからa、b、cが入力されました←a、b、cは上の文字
#include <iostream>
using namespace std;
int main(){
return0;
}
はなんか鉄板みたいなんですよね
0711698
2009/06/21(日) 00:27:35#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;
}
0712デフォルトの名無しさん
2009/06/21(日) 00:27:580713デフォルトの名無しさん
2009/06/21(日) 00:34:27#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;
}
0714デフォルトの名無しさん
2009/06/21(日) 00:34:39ごめんなさいありがとうございます。しかし、
問1の問題と問2の問題ってこうやって続けて書かないとダメですか。
//問1って書かないとダメですか。
0715デフォルトの名無しさん
2009/06/21(日) 00:35:35istream &customcin = cin;
と書くのはどうだろう。
0716デフォルトの名無しさん
2009/06/21(日) 00:35:48return 0; の上はこれに置き換えて
cout << "キーボードから" << a << "、" << b << "、" << c << "が入力されました←a、b、cは上の文字" << endl;
0717デフォルトの名無しさん
2009/06/21(日) 00:38:130718デフォルトの名無しさん
2009/06/21(日) 00:40:41問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;
}
0719デフォルトの名無しさん
2009/06/21(日) 00:43:30問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;
}
0720デフォルトの名無しさん
2009/06/21(日) 00:43:33cin >> a; cin >> b; cin >> c;はいいんですか。aとかの次って,じゃなくて;でよいんですか
0721デフォルトの名無しさん
2009/06/21(日) 00:43:51#define Cout cin
でよくね?
0722デフォルトの名無しさん
2009/06/21(日) 00:46:010723デフォルトの名無しさん
2009/06/21(日) 00:46:25「○○じゃなくて△△でよいんですか」
って言いたいだけだろ
0725デフォルトの名無しさん
2009/06/21(日) 00:49:570726デフォルトの名無しさん
2009/06/21(日) 00:54:06#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円出ます。ってなるんですが、間違ってますか?
0727デフォルトの名無しさん
2009/06/21(日) 00:55:51#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;
}
0728デフォルトの名無しさん
2009/06/21(日) 00:59:50入れていけないわけではないですが、cinをひとつだけ入れよというのは>>691にもあるように割り勘の問題ではないですよ。
0729698
2009/06/21(日) 01:00:160730デフォルトの名無しさん
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] その他の制限:
指定されたプログラム例を使ってとのことらしいです。それ以外だと再提出になるので
大変かもしれませんがよろしくお願いします。
0731デフォルトの名無しさん
2009/06/21(日) 01:04:04そうですか。すみませんでした。でも、cinを一度だけ使ってと言うのは2番の問題なんで、これはcinって入れなくてもいいんですが、入れてもできるんですか。
そして、>>727でcoutを大文字小文字分けているのは何でですか教えてください。
0732デフォルトの名無しさん
2009/06/21(日) 01:08:31一人当たり3285円とあるが、それを7倍してみよ。
23000円には足りないのだ!
つまり、店員は怒り出すし、警察を呼ばれてしまう可能性すらある。
>>698はそこまで考えた上で、
ちゃんと全員が払うべき額と、それで返ってくる額まで算出している。
ただしい。
0733デフォルトの名無しさん
2009/06/21(日) 01:13:19つまり教科書が間違ってるんですか
0735デフォルトの名無しさん
2009/06/21(日) 01:16:34「1人当たり3285円です。ただし一人だけ5円多く出してもらいます。」
ならよかったのにね。
0736デフォルトの名無しさん
2009/06/21(日) 01:17:21#define Cout cin っていらなくないんですか?必要ですか?
0737デフォルトの名無しさん
2009/06/21(日) 01:17:39一円単位で計算しておいてそれはひどいw
0738デフォルトの名無しさん
2009/06/21(日) 01:19:240739698
2009/06/21(日) 01:31:180740デフォルトの名無しさん
2009/06/21(日) 03:33:59using 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
}
こうじゃね?
0741デフォルトの名無しさん
2009/06/21(日) 03:35:51using 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;
}
こっちのがいいか。
0742デフォルトの名無しさん
2009/06/21(日) 03:45:58[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]関数までです。お願いします
0743デフォルトの名無しさん
2009/06/21(日) 04:06:35[2] 問題文(含コード&リンク):じゃんけんゲームを作成せよ。ただし、main()は下記のものを用いよ。具体的には、get_hand_player(),
print_hand(),judge()をついかすればよい。
表示結果の例
じゃんけんぽん(1-3):1
コンピューター:グー
あなた:グー
あいこ
じゃんけんぽん(1-3):2
コンピューター:パー
あなた:チョキ
あなたの勝ち!
じゃんけんぽん(1-3):3
コンピュータ:チョキ
あなた:パー
私の勝ち!
0744デフォルトの名無しさん
2009/06/21(日) 04:07:56#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;
}
0745デフォルトの名無しさん
2009/06/21(日) 04:19:17main()は?
0746デフォルトの名無しさん
2009/06/21(日) 04:19:56int 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]関数までです
0747デフォルトの名無しさん
2009/06/21(日) 04:28:14[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]関数までです
0748デフォルトの名無しさん
2009/06/21(日) 04:32:24[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]関数までです、よろしくお願いします
0749デフォルトの名無しさん
2009/06/21(日) 04:43:38[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]配列までです
0750デフォルトの名無しさん
2009/06/21(日) 04:55:37[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]
0751デフォルトの名無しさん
2009/06/21(日) 04:58:37int 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];
}
}
0752デフォルトの名無しさん
2009/06/21(日) 05:08:49#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;
}
0753デフォルトの名無しさん
2009/06/21(日) 06:00:14#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;
}
}
0754デフォルトの名無しさん
2009/06/21(日) 06:28:240755デフォルトの名無しさん
2009/06/21(日) 13:54:49#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);
}
0756デフォルトの名無しさん
2009/06/21(日) 14:05:57どなたか分かる方いらっしゃいましたら>>706をお願いします。
0758デフォルトの名無しさん
2009/06/21(日) 16:08:03お願いします;;
0759デフォルトの名無しさん
2009/06/21(日) 16:10:15[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] 配列までです、お願いします
0760デフォルトの名無しさん
2009/06/21(日) 16:17:01>>674 -> >>676
0761デフォルトの名無しさん
2009/06/21(日) 16:33:17()の中のvoidっているんですか?すみません
0762デフォルトの名無しさん
2009/06/21(日) 16:38:39別になくてもいいよ
あと、端数をおつりに変えてるから
0763デフォルトの名無しさん
2009/06/21(日) 17:37:53ありがとうございます
0764デフォルトの名無しさん
2009/06/21(日) 17:58:540765デフォルトの名無しさん
2009/06/21(日) 18:05:58[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] その他の制限: 特になし
よろしくお願いします
0766デフォルトの名無しさん
2009/06/21(日) 18:07:40作ったというより >>436 のコピペでしょ
こうじゃなくて・・・という反応を期待していたのにスルーされただけの話
0767デフォルトの名無しさん
2009/06/21(日) 18:25:28そうなんですが、これのどこにcinを入れればいいのかなと思って
0768デフォルトの名無しさん
2009/06/21(日) 18:33:39#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"
};
0769デフォルトの名無しさん
2009/06/21(日) 18:34:54std::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;
}
0770デフォルトの名無しさん
2009/06/21(日) 18:35:43#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;
}
0771デフォルトの名無しさん
2009/06/21(日) 18:37:38#include <iostream>
using namespace std;
int main() {
return 0;
}
はそれでいいと思うんですが肝心な中身はどうすればいいか教えてください
0772デフォルトの名無しさん
2009/06/21(日) 18:46:25[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
0773デフォルトの名無しさん
2009/06/21(日) 19:09:40[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)->...
というようにイメージしているのですが、これをなかなか実装することができません。
0774デフォルトの名無しさん
2009/06/21(日) 19:11:18>>769
本当にありがとうございました!
でも今気づいたら依頼のとこの言語間違えてましたorzせっかく作っていただいたのに申し訳ないですm(__)m
0775デフォルトの名無しさん
2009/06/21(日) 19:13:56グラフの始点は節0で終点は節(節の数-1)です。
0776デフォルトの名無しさん
2009/06/21(日) 19:15:24何度もすいません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] その他の制限: 特になし
よろしくお願いします
0777デフォルトの名無しさん
2009/06/21(日) 19:54:50[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] その他の制限: 特になし
0778デフォルトの名無しさん
2009/06/21(日) 20:51:36#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;
}
0779デフォルトの名無しさん
2009/06/21(日) 21:11:06using 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円って出るんですが、ダメなんですかねそれだと
0780デフォルトの名無しさん
2009/06/21(日) 21:19:340781デフォルトの名無しさん
2009/06/21(日) 21:21:03#define Cout cin 使ってやるのってすごい高等テクニックだったりしないんですか?
0782デフォルトの名無しさん
2009/06/21(日) 21:23:24もうどうでもいいじゃん。
0783デフォルトの名無しさん
2009/06/21(日) 22:11:04品物の単価を入力してください
100
品物の個数を入力してください
3
税率を%で入力してください
5
合計金額は税込みで315円(税抜きで300円)
0784デフォルトの名無しさん
2009/06/21(日) 22:20:09税込み、税抜き金額を計算して出力するような感じ
ちなみに税込み金額っていうのは単価×個数×(100+税率)÷100で計算できるよ
0785デフォルトの名無しさん
2009/06/21(日) 22:22:11全然。
理念すら理解できん。
0786デフォルトの名無しさん
2009/06/21(日) 22:23:23[2] 問題文(含コード&リンク):
ガウス・ジョルダンを使ってn元連立1次方程式を解き
係数マトリクスの逆行列とその解を表示するプログラムを作れ。
[3] 環境
[3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン: VC++
[3.3] 言語: CでもC++でも可
[4] 期限: 2009/6/23
[5] その他の制限:
C言語の入門書に載っているレベルから逸脱しなければ特に制限はありません。
数値を入力させて(もしくはtxtなどから読み込み)解くプログラムでお願いします。
0787785
2009/06/21(日) 22:28:13吊ってくる
λ...
0788デフォルトの名無しさん
2009/06/21(日) 22:35:38今の国の法律では内税表示が義務付けられているから、
単価100円のものは「税込みで」100円でないといけない。
つまり、単価100円のものを3個売ると、
税込み300円であり、税抜きは286円だ。
0789デフォルトの名無しさん
2009/06/21(日) 22:45:41>>783のプログラムを誰かorz
0790デフォルトの名無しさん
2009/06/21(日) 22:47:42おまえは>>1を大声で音読して来い。
0791デフォルトの名無しさん
2009/06/21(日) 22:49:20お礼を言わずにはいられない!
ありがとうございました!
0792デフォルトの名無しさん
2009/06/21(日) 23:16:45ああそっか、内税になったんだった。
すっかり忘れてた。ありがとん
0793デフォルトの名無しさん
2009/06/21(日) 23:26:57>って問題ですがそれは合ってると思うから書きました。
0794デフォルトの名無しさん
2009/06/21(日) 23:39:54>>784
0795デフォルトの名無しさん
2009/06/21(日) 23:59:36[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] その他の制限:問題文内にあります。
以前に、お世話になりました者です、
自由課題なのですが、座席指定予約部分がどうにも、解決出来ないです。
どうか、宜しくお願いします。
また、ソース全体に関する、ご指摘等を頂けたらと思います、
なにぶん自信がないものなので。
0796793
2009/06/22(月) 01:27:48#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;
}
0797デフォルトの名無しさん
2009/06/22(月) 01:39:59[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関数を用いて行うこと
0798デフォルトの名無しさん
2009/06/22(月) 01:40:380799デフォルトの名無しさん
2009/06/22(月) 02:08:370800デフォルトの名無しさん
2009/06/22(月) 02:10:01んじゃ>>796の下のやつであってんのかな
0801デフォルトの名無しさん
2009/06/22(月) 03:19:11期限は気にしなくていいのでお願いします。
0802デフォルトの名無しさん
2009/06/22(月) 04:01:02#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;
}
0803デフォルトの名無しさん
2009/06/22(月) 11:33:45もうひとつ、問題がはっきりしないんだよね。
鍵を与えて文章の中の名前らしきローマ字名を切り抜くのか。
ローマ字の字並びの定義も必要なのか。
姓・名の間にスペースが入らないこともあり得るのか、とか。
0804デフォルトの名無しさん
2009/06/22(月) 15:24:10検索氏名が Futaro Yamada だとして
文の中にamaが出てきたら適合するとか、
そういう意味じゃないの?
0805デフォルトの名無しさん
2009/06/22(月) 15:35:420806デフォルトの名無しさん
2009/06/22(月) 16:07:42[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] ポインタまで教わりました、よろしくお願いします
0807デフォルトの名無しさん
2009/06/22(月) 16:11:17[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問あります。 どうぞよろしくお願いします。
0808デフォルトの名無しさん
2009/06/22(月) 16:54:37#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;}
0809デフォルトの名無しさん
2009/06/22(月) 17:05:190810デフォルトの名無しさん
2009/06/22(月) 17:12:27実行例に x / y = 2.67ってのがあったから。
課題2
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9512.txt
0811デフォルトの名無しさん
2009/06/22(月) 17:18:030813デフォルトの名無しさん
2009/06/22(月) 17:22:24hogeとhageがsameってなったんだけどなんで?
0814810
2009/06/22(月) 17:28:58if (str1[i] != str2[i]){
return 0;
}
}
return 1;
}
これでおk
0815810
2009/06/22(月) 17:32:42またまちがえてた。
なんどもごめんねw
0816デフォルトの名無しさん
2009/06/22(月) 17:34:46結局は異なるという結果が返るから問題ないよ
0817デフォルトの名無しさん
2009/06/22(月) 17:35:280818デフォルトの名無しさん
2009/06/22(月) 17:36:150819デフォルトの名無しさん
2009/06/22(月) 18:46:400820デフォルトの名無しさん
2009/06/22(月) 18:47:55テンプレ書けやぁ〜
0821デフォルトの名無しさん
2009/06/22(月) 18:57:13[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>
0822デフォルトの名無しさん
2009/06/22(月) 19:00:34404NotFound!
0823デフォルトの名無しさん
2009/06/22(月) 19:02:34こっちでした
http://www.ncc-1701.jp/kakei/InteractiveComm/Class6/InteractiveComm_6.html
0824デフォルトの名無しさん
2009/06/22(月) 19:22:59こんな感じで。動作は保障しない。
ちょっと汚い実装になったが勘弁してくれ。
#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;
}
0825デフォルトの名無しさん
2009/06/22(月) 19:39:01わざわざありがとうございます。残念ながら動きませんでした
これってtime_tを使わずは無理ですか?
0826デフォルトの名無しさん
2009/06/22(月) 19:44:110827デフォルトの名無しさん
2009/06/22(月) 19:44:43getch();入れたら動きました。
0828デフォルトの名無しさん
2009/06/22(月) 19:45:54多分だが、動きませんでしたという主張が間違えている
0829デフォルトの名無しさん
2009/06/22(月) 19:47:44stdinになんか不純物混ざってないか?
0830デフォルトの名無しさん
2009/06/22(月) 19:49:490831デフォルトの名無しさん
2009/06/22(月) 19:57:40ありがとうございましたm(__)m
0833デフォルトの名無しさん
2009/06/22(月) 21:12:49課題1やってみたけど正直なんか動作が違うw
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9513.txt
0834デフォルトの名無しさん
2009/06/22(月) 21:27:29{
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');
}
}
}
0835デフォルトの名無しさん
2009/06/22(月) 21:32:15[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] その他
よろしくお願いします
0836デフォルトの名無しさん
2009/06/22(月) 21:37:26Cで何か作れってわけでなし。スレチじゃね?
動かした結果及び動作の説明をするんでしょ?
0837デフォルトの名無しさん
2009/06/22(月) 22:08:42例えば3と入力した時、
*****
***
*
となるようなプログラムです。
どうか早急にお願いします。
0838デフォルトの名無しさん
2009/06/22(月) 22:11:36>>372
0839デフォルトの名無しさん
2009/06/22(月) 22:16:40#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");
}
}
0840デフォルトの名無しさん
2009/06/22(月) 22:29:100841デフォルトの名無しさん
2009/06/22(月) 22:33:51半角スペース使うな
0842デフォルトの名無しさん
2009/06/22(月) 22:43:09[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ループを使い作成すること
0843デフォルトの名無しさん
2009/06/22(月) 23:09:15こうかな
#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;
}
0844デフォルトの名無しさん
2009/06/22(月) 23:21:28[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] その他の制限: 特になし
0845デフォルトの名無しさん
2009/06/22(月) 23:22:40本当に助けてください。コンパイルのサイトでコンパイルしたら変な風に出てきました。
品物の単価を入力してください
-1084811224
品物の個数を入力してください
0
税率を%で入力してください
3.99994e-34
合計金額は税込みで0円(税抜きで0円)
合計金額は税込みで0円(税抜きで0円)
0846デフォルトの名無しさん
2009/06/22(月) 23:32:07万一そのサイトしか使えなかったら、cinの行をコメントアウトして
tanka = 1980;
kosuu = 5000;
ritu = 12.5;
とか数値を入力してみてコンパイルしてもらうと安心できるかな。
0847デフォルトの名無しさん
2009/06/22(月) 23:33:21説明不足でどうもすみませんでした。
0848デフォルトの名無しさん
2009/06/22(月) 23:34:23ほい。配列の名前間違えたけど。
#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;
}
0849デフォルトの名無しさん
2009/06/22(月) 23:36:39[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グローバル変数を取らない。
期限ギリギリですが、よろしくお願いします。
0850デフォルトの名無しさん
2009/06/22(月) 23:37:02#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;
}
0851デフォルトの名無しさん
2009/06/22(月) 23:41:18/*かきくけこ*/
さしす/*せそ
なにぬ*/ねの
というファイル(test.txt)から文字数、改行数、コメント文字数をカウントし、出力するプログラムです。
お願いいたします。
0852デフォルトの名無しさん
2009/06/22(月) 23:45:39>>1を見て、テンプレ書いてくれ
0853デフォルトの名無しさん
2009/06/22(月) 23:46:59だからそれ>>802じゃだめなの?って。
0854デフォルトの名無しさん
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] その他:特になし
よろしくお願いします。
0855842
2009/06/23(火) 00:10:03せっかくやっていただいたのに申しわけありません。
格納する配列はn行5列の状態で格納しなければいけませんでした。
(1,1,1,1,2)
(1,1,1,1,3)
のような感じです。
説明不足で申し訳ありませんでした。
0856デフォルトの名無しさん
2009/06/23(火) 00:11:03文字コード指定無しだし
0857デフォルトの名無しさん
2009/06/23(火) 00:52:07解釈が微妙な所だったな。
まぁループ数の変化のみなので。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9517.txt
0858デフォルトの名無しさん
2009/06/23(火) 00:55:01それ組み合わせじゃなくて、順列じゃね?
0859デフォルトの名無しさん
2009/06/23(火) 01:03:35(´・ω・`)
>>842
ごめんなさい。
余力があれば作り直します。
0860デフォルトの名無しさん
2009/06/23(火) 01:17:06すんませんでした。
汚いけど一応順列…のはず。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9518.txt
0861デフォルトの名無しさん
2009/06/23(火) 01:24:44年齢を入力してください
16
生まれた年を入力してください
1986
好きな数字を入力してください
7
あなたは1986年生まれの16才で、7が好きですね
0862861
2009/06/23(火) 01:25:29using 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を一回だけ用いて表現せよってどうすればいいんですか。本当に誰か教えてください
0863796
2009/06/23(火) 01:27:290006: int tanka=100, kosuu=3, goukei; float ritu=5;
0864デフォルトの名無しさん
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;
}
0865デフォルトの名無しさん
2009/06/23(火) 01:33:20疲れてるのかな…俺。
0867862
2009/06/23(火) 01:46:47生まれた年を入力してください
好きな数字を入力してください
あなたは134539285年生まれの134539136才で、-1079911224が好きですね
僕が作ったやつだって、そのコンパイルにかけると上のように出るんです。本当に誰か助けてください。数字も入れてないのに何で勝手に最後の数字だけ変な風に出てくるんですか
0868デフォルトの名無しさん
2009/06/23(火) 01:48:21私の推理では、1970年生まれで現在40歳近い。
0004: int age=16,year=1986,number=7;
0010: return 0;
0869デフォルトの名無しさん
2009/06/23(火) 01:49:34「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;
}
0870862
2009/06/23(火) 01:54:13すみません。でも僕がやって元々のやつは何もデータ入れてなくても結論だけ出ますよね
0871デフォルトの名無しさん
2009/06/23(火) 01:56:42何もデータを入れなくとも、というのはどういうことをやるの?
0872デフォルトの名無しさん
2009/06/23(火) 01:57:330873862
2009/06/23(火) 02:02:38862で書いたのを863のでコンパイルしたら、
年齢を入力してください
生まれた年を入力してください
好きな数字を入力してください
あなたは134539285年生まれの134539136才で、-1079911224が好きですね
って出るんですが、年齢も生まれた年も好きな数字も入れてないのにこんな風に出ちゃいます
0874デフォルトの名無しさん
2009/06/23(火) 02:08:09ちなみに>>862はコンパイル通らなかったよ
0875862
2009/06/23(火) 02:16:16ってことは次のも違うし
0877デフォルトの名無しさん
2009/06/23(火) 02:27:450878874
2009/06/23(火) 02:31:32コンパイル通らなかったのは別の話だよ。
>>862そのままだと「結論だけ出ます」という状態にはならなかったでしょ?
で、それが原因で入力できないのではないよ。
だから「値を入れられる環境でやれば?」と言った。
0879デフォルトの名無しさん
2009/06/23(火) 02:45:22[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] その他の制限: 構造体まで習いました
0880デフォルトの名無しさん
2009/06/23(火) 05:44:04http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9520.c
0881デフォルトの名無しさん
2009/06/23(火) 06:24:42だれかお願いします。
0882デフォルトの名無しさん
2009/06/23(火) 08:55:17お待たせ
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
0883882
2009/06/23(火) 09:02:32ごめん間違えた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9522.txt
0884デフォルトの名無しさん
2009/06/23(火) 10:50:01[2] 問題文(含コード&リンク):
List型を継承し、StackクラスとQueueクラスを作成する
(ただし、実行されている様子がわかるmain関数も記述すること)
[3] 環境
[3.1] OS:Windows
[3.3] 言語: C++
[4] 期限: 6月26日23時59分
[5] その他の制限:C++習い始めて2ヶ月です
どうかよろしくお願いします・・・。
0885デフォルトの名無しさん
2009/06/23(火) 11:03:17List型も一から作るの?
0886デフォルトの名無しさん
2009/06/23(火) 11:27:460887デフォルトの名無しさん
2009/06/23(火) 12:09:51で?制限はなんなんだ?
「○○は習ってないから使わないでください」っていうなら
使ってるテキストの習ったところを全部うpしろよ
0888デフォルトの名無しさん
2009/06/23(火) 12:19:11ありがとうございます。
ちなみにMAXを使わないでソートする方法はどうするんでしょうか?
0889デフォルトの名無しさん
2009/06/23(火) 12:21:420890デフォルトの名無しさん
2009/06/23(火) 12:31:56[2] 問題文(含コード&リンク):http://www.mns.kyutech.ac.jp/~kamada/suuributuri/sub8.html
の課題3のプログラムで解くところまで
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:分かりません
[3.3] 言語:どちらでも可
[4] 期限:今日中にお願いします
0892デフォルトの名無しさん
2009/06/23(火) 13:06:02そうですね。一人ずつ比較していくやり方なんですが…
説明がへたですいません。
0893882
2009/06/23(火) 13:49:58バブルソートのことかな?
とりあえずやってみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9523.txt
0895デフォルトの名無しさん
2009/06/23(火) 14:58:170896デフォルトの名無しさん
2009/06/23(火) 14:58:570897デフォルトの名無しさん
2009/06/23(火) 15:08:32ありがとうございました!
無事に間に合いそうです!
0898デフォルトの名無しさん
2009/06/23(火) 15:22:10結果も記せ
今コンパイルがパソコンできないのでありません。誰か助けてください
0900デフォルトの名無しさん
2009/06/23(火) 15:44:48クラスの?
0901デフォルトの名無しさん
2009/06/23(火) 15:56:22通らないですよ
0902デフォルトの名無しさん
2009/06/23(火) 16:03:07http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9524.txt
0903デフォルトの名無しさん
2009/06/23(火) 16:54:18[2]5個の実数型データを配列bに入力してから、最大値max、最小値min、合計kei、平均値heikinを求めなさい。
[3]
[3.1] xp
[3.2] turbo c 5.01
[3.3] c++
[4] 期限:今週末
[5] お願いします
0904デフォルトの名無しさん
2009/06/23(火) 16:57:140905デフォルトの名無しさん
2009/06/23(火) 17:25:06[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] お願いします
0906デフォルトの名無しさん
2009/06/23(火) 17:36:05[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] お願いします
0907デフォルトの名無しさん
2009/06/23(火) 17:45:00[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] お願いします
0908デフォルトの名無しさん
2009/06/23(火) 17:46:189+3が11になる加算は無理w
0909デフォルトの名無しさん
2009/06/23(火) 17:51:41[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] お願いします
0910デフォルトの名無しさん
2009/06/23(火) 17:54:26すいません。 12でした
0911デフォルトの名無しさん
2009/06/23(火) 18:00:23[2]要素の数51の1次元配列a[1]〜a[50]に、0〜100点までの点数を入力した後、
最高点と最低点および平均点を同時に求めて表示するプログラムを作りなさい。
[3]
[3.1] xp
[3.2] turbo c 5.01
[3.3] c++
[4] 期限:今週末
[5] お願いします
0912デフォルトの名無しさん
2009/06/23(火) 18:40:48パソコン室て何だよ。コンパイルや実行が自分で出来ない環境なのか?
それなのに実行結果が知りたいとは、何を提出するつもり。
>>868 で答え終ってるから、もう一度読んでソース修正してみて。
0913デフォルトの名無しさん
2009/06/23(火) 18:52:160914デフォルトの名無しさん
2009/06/23(火) 19:04:15PCが置かれている教室などはあるが、学校に通ったことないのか?w
0915デフォルトの名無しさん
2009/06/23(火) 19:12:12いい年したおっさんで大学行ってないとかかな。
0916デフォルトの名無しさん
2009/06/23(火) 19:16:360917デフォルトの名無しさん
2009/06/23(火) 19:17:08>>868で終わったというのもよくわからん話だな。
0918デフォルトの名無しさん
2009/06/23(火) 19:30:213問まとめてひとつのプログラムにした↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9526.txt
0919デフォルトの名無しさん
2009/06/23(火) 19:36:07[2] 問題文(含コード&リンク):二分木を用いて小さい順にソートする関数
void sort(int x[], int size)を作りたい。
ソートするデータとしてint型配列に格納した整数を関数に渡している。
なお、出来た二分木を中間順に走査して再帰的にアルゴリズムを作ること。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 明日まで
よろしくお願いします。
0920デフォルトの名無しさん
2009/06/23(火) 20:12:24http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9527.txt
0921デフォルトの名無しさん
2009/06/23(火) 21:03:03[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] その他の制限: 特になし
0922デフォルトの名無しさん
2009/06/23(火) 21:12:45[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] その他の制限: 特になし
0923699
2009/06/23(火) 21:33:24701さんの回答で、
if((a = malloc(n*n*sizeof(float))) == NULL) return 1;
の部分がエラーになってしまい(line 11 で'int'から'float *'への指定です。:`='演算子)
コンパイラできませんでした。
どうしたらいいのか分からないです。
回答よろしくお願いします。
0924デフォルトの名無しさん
2009/06/23(火) 21:48:15malloc.hをインクルード。いや今はstdlib.hだっけ?まあどっちかだ。たぶん
0925デフォルトの名無しさん
2009/06/23(火) 22:25:35Listクラスも双方向リストを完全自作しようと思ったが面倒すぎたのでSTLを利用…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9529.txt
0926920
2009/06/23(火) 22:30:55作り直した。>>920は忘れてくれ(謝)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9530.txt
0927デフォルトの名無しさん
2009/06/23(火) 22:42:10解答が正しいかどうかの動作確認は、依頼者の責任だろう。
そもそも、入力して出力するだけで計算もifもないプログラムにこんなに…。
0928デフォルトの名無しさん
2009/06/23(火) 22:47:25エスパーだが、
コンパイラはVCだろうけど、ソースの拡張子がcppなせいで出来ない。
ソースの拡張子をcにすると通ると思う。
0929デフォルトの名無しさん
2009/06/23(火) 22:49:27忘れてくれ。
0930デフォルトの名無しさん
2009/06/24(水) 00:59:35[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] その他の制限: とくになし
0931未解決と期限前
2009/06/24(水) 11:32:19>>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 画像の解像度と同じサイズの二次元配列を作りなさい。 なし
0932デフォルトの名無しさん
2009/06/24(水) 12:24:05[2] 問題文(含コード&リンク):http://www.mns.kyutech.ac.jp/~kamada/suuributuri/sub8.html
の課題3のプログラムで解くところまで
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:分かりません
[3.3] 言語:どちらでも可
[4] 期限: 3日後までにお願いします
0933デフォルトの名無しさん
2009/06/24(水) 13:01:28数学はド素人なのであってるかはわからない。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;
}
0934デフォルトの名無しさん
2009/06/24(水) 13:10:35[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] その他の制限: 特になし
よろしくお願いします
0935デフォルトの名無しさん
2009/06/24(水) 13:18:05ttp://codepad.org/AqCeztBC
CodePad使ってみたかっただけなんだからね。
次からはちゃんとテンプレ書いてくれ。
0936デフォルトの名無しさん
2009/06/24(水) 14:11:27[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] その他の制限:特になし
よろしくお願いします。
0937デフォルトの名無しさん
2009/06/24(水) 14:14:07すみません。
0938デフォルトの名無しさん
2009/06/24(水) 14:46:26求められてる出力が不明だけど、
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;
}
0939デフォルトの名無しさん
2009/06/24(水) 15:24:43ttp://codepad.org/L3y8kLf7
VCで開発してるんだが、何でポインタ版のコードで配列が表示できないのかよくわからなかった。
配列版のコードは引数変えただけで、関数内部はいじってないし。
なんでだぁ〜。
0940939
2009/06/24(水) 15:26:29適時対処願いたい。
0941デフォルトの名無しさん
2009/06/24(水) 15:28:17構造が違うから
0942デフォルトの名無しさん
2009/06/24(水) 15:31:44問題文 上底,下底。高さ、それぞれの値をキーボードから4回入力し4つの台形の面積の合計を求めよ。
コンパイラ gcc
os ソラリス
言語 c
その他条件 単純に大きさの違う4つ台形の面積の合計を求めてください。if文やfor文を使わないようお願いします。ひとつひとつの台形の面積を表示するようにしてください。お願いします。
0943デフォルトの名無しさん
2009/06/24(水) 16:17:25#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();
}
0944デフォルトの名無しさん
2009/06/24(水) 16:40:15台形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));
}
0945884
2009/06/24(水) 16:41:00しかし提出したら先生に「pop関数とpush関数をつくり、main関数内で動作させ
その様子が分かるようなソースを作れ」と言われ跳ね返されてしまいました・・。
お手数ですがこの条件に沿うように修正していただけないでしょうか。
0946デフォルトの名無しさん
2009/06/24(水) 16:44:23+ 演算子は左結合だけど,関数の呼び出しの順番は不定だったはずだから
そこは分離するといいのでは
0947デフォルトの名無しさん
2009/06/24(水) 17:09:44条件は満たしていると思うが違うのか?
違うならどう違う?
0948デフォルトの名無しさん
2009/06/24(水) 17:11:16レスありがとうございます。
無事出力が上手くいきました。
ありがとうございました。
0949デフォルトの名無しさん
2009/06/24(水) 17:27:23printf("%f %f %f %f\n台形4つの合計面積は:%f\n", daikei(1),daikei(2),daikei(3),daikei(4), 0);
0950デフォルトの名無しさん
2009/06/24(水) 17:31:10>>944では関数の返却値コピーのところで副作用完了点が発生して
ちゃんと1,2,3,4の順に。
ますらお。
0951デフォルトの名無しさん
2009/06/24(水) 18:03:20#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';
}
}
0952デフォルトの名無しさん
2009/06/24(水) 18:27:38[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] その他の制限: 特になし
0953デフォルトの名無しさん
2009/06/24(水) 18:52:02[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文、関数の使い方、まで習いました。
0954デフォルトの名無しさん
2009/06/24(水) 19:29:11なんとなく先生の言いたいことがわかった
配列かなにかを利用してスタックとキューを自分で作れてことだな。まちがいない
そうなると「List型を継承して」うんぬんがよくわからんけど・・・
とりあえずその方針で
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9535.txt
これで正しければ俺はエスパー初段
0955デフォルトの名無しさん
2009/06/24(水) 19:37:51#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);
}
0956884
2009/06/24(水) 19:48:25ちょうど今具体的にどうすれば良いかメールで尋ねていて、返信がきましたので要約してみます
まずListクラスに値と次のヘッダアドレスを入れる場所を作る。
メインに書いても問題ないが、関数にまとめたほうがよい。(同じ工程を繰り返すので)
作る関数は
Listクラス
・値を入れる場所を生成し、値を入れ、一つ前の値に連結する
・連結して入れた値を表示する
スタッククラス
・プッシュ
・ポップ
キュークラス
・エンキュー
・デキュー
とのことです。
0957デフォルトの名無しさん
2009/06/24(水) 19:58:15もしかしてC++じゃなくてCの課題なんじゃないの?
0958デフォルトの名無しさん
2009/06/24(水) 20:00:34うわ、線形リストも自作するのかマンドクセ・・・
しょうがないので最後まで付き合う。明日までに作る
0959デフォルトの名無しさん
2009/06/24(水) 20:05:02[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] その他の制限:ソースの提示は無しなので、制限無し。
結果と、計算過程がソースから分かるようなプログラムだとありがたいです。
0960884
2009/06/24(水) 20:12:58いえ、C++の授業です
>>958
申し訳ありません、授業聞けかったばっかりに・・・。
当方も教科書代わりにと買わされたC++実践プログラミングを読んでなんとか理解しようとしているのですが
理解力がなく質問できる相手が近くにいないので期日に間に合いそうにありません、すみません。
0961デフォルトの名無しさん
2009/06/24(水) 21:11:060962デフォルトの名無しさん
2009/06/24(水) 21:12:530963デフォルトの名無しさん
2009/06/24(水) 21:15:36目つけられててもおかしくないと思うからその方がいいとは前々から思ってたw
次スレにでもテンプレにメールで送って欲しいか否かの項目追加してくれてもかまわんよ
俺は、だけどな
0964デフォルトの名無しさん
2009/06/24(水) 21:18:41なぁ。死ぬときは一緒だろ?へへ。
0965デフォルトの名無しさん
2009/06/24(水) 21:21:56それだと質問者の方もメールとかにしないとあんま意味ないだろw
まあ初歩の授業だったら同じ時期に同じような範囲やってるだろうし
完全に特定はできんだろうけどw
俺は独学で勉強中だからこのスレを勉強に使ってるから
正解のソースが見れなくなると少し寂しいかもわからんね
0966デフォルトの名無しさん
2009/06/24(水) 21:23:08直接転送だけはやめたほうがいいと思う。
コードがある程度公開されることによる最小限の問題チェックがされる
担保が無くなるんで。(現状のやり方(CodePadを含む)が良いとも言えないが)
0967デフォルトの名無しさん
2009/06/24(水) 21:24:31勉強するときには注意が必要だぜ。
最近はそういうのに突っ込む人も減って、スルーされてるしな。
0968デフォルトの名無しさん
2009/06/24(水) 21:35:08って思いながらニヤニヤ見てる
0969デフォルトの名無しさん
2009/06/24(水) 21:44:51STLとの整合性とろうと思うと、並大抵の努力じゃないぞ。
0970デフォルトの名無しさん
2009/06/24(水) 22:27:52しかしlist継承してstackとqueue作れって
どこのjavaだよって感じだな
回答者がどう頑張ってもクソ汚い構造になる
0971デフォルトの名無しさん
2009/06/24(水) 22:34:24これでおしまい…であってほしい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9537.txt
>>969
STLとの整合性なんか知るか!w
0972デフォルトの名無しさん
2009/06/24(水) 22:53:03>>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()をインタフェイスに持つのはおかしい。)
0973デフォルトの名無しさん
2009/06/24(水) 22:59:16あとはまかせた
0974デフォルトの名無しさん
2009/06/24(水) 23:07:00C/C++の宿題片付けます 128代目
http://pc12.2ch.net/test/read.cgi/tech/1245853701/
0976デフォルトの名無しさん
2009/06/24(水) 23:38:400977デフォルトの名無しさん
2009/06/24(水) 23:41:43こういう業界だし
0978701
2009/06/24(水) 23:51:00if((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>
の追加も必要。
0979デフォルトの名無しさん
2009/06/24(水) 23:51:28俺が通ってた専門の糞教師が自分は分かってることをいいことに
適当な説明を1時間して向こう1ヶ月は課題やる時間でーすで授業終わってたし
0980デフォルトの名無しさん
2009/06/24(水) 23:53:51えっ今までわからなかったのか
君には宿題を与えよう
C++にはstd::sortがあるがそれを使わず敢えて
qsort()を使ってソートするプログラムが書けるか?
0981デフォルトの名無しさん
2009/06/25(木) 00:09:160982デフォルトの名無しさん
2009/06/25(木) 00:22:28口だけだとあれなんで一応やったぜー
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9538.txt
2ヶ月もやってりゃ演算子オーバーロードやテンプレートくらいわかるよなwww
0983デフォルトの名無しさん
2009/06/25(木) 00:34:46ttp://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;するときに落ちる。詳しい人いたら原因教えて。
0984デフォルトの名無しさん
2009/06/25(木) 02:10:16ひとつめ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9540.txt
aとbが同じサイズの24ビットのbmpファイルであるという条件で作りました
0985デフォルトの名無しさん
2009/06/25(木) 02:59:48[2] ボールの軌道を計算する。直径12cmのボール(質量;125g)を毎時85kmの速度で地上から50度上方へ発射する。
1.オイラー法とルンゲクッタ方を用いて地上に落下するまでの軌道を計算せよ。
2.空気抵抗が速度の二条に比例して働くとすると、軌道はどのように変化するか。ルンゲクッタ方を用いよ。
抵抗係数は0.42、空気の密度を1.23kg/m^3とする。
3.実験結果に対する考察を行え。
(4.)考察しなきゃいけないので、着眼点とか教えてもらえるとネ申
[3] 環境
Windows vista
C++
[4] 本日の午前8:00
[5] いちよ本人が理解しないとまずい
助けてくれたらうんこもらす
0986デフォルトの名無しさん
2009/06/25(木) 03:05:49>>1 ・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
すごくねむい
0987デフォルトの名無しさん
2009/06/25(木) 04:03:25問題文全てでコレだけ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です。
レポート提出は明日ではないので、期限は過ぎても大丈夫。
よろしくお願いします
0988デフォルトの名無しさん
2009/06/25(木) 04:05:58[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] その他の制限
問題文に答えも書いてあるんですが、実行できません。
どこが間違っているかわからないので、添削をお願いできますか?
よろしくお願いいたします。
0989デフォルトの名無しさん
2009/06/25(木) 04:22:29調べる素振りすらしないとはすげーな、おまいwww
0990デフォルトの名無しさん
2009/06/25(木) 04:24:14kを初期化
0991デフォルトの名無しさん
2009/06/25(木) 05:01:47kの初期化忘れは致命的だけど、実行は出来るだろう。
0992988
2009/06/25(木) 05:10:48それでも実行結果はかわらないんですが…
実行できないのではなくて、正整数を入力したあとにnが表示されてくれない状態になります。
for文の中のM>kあたりが怪しい気がするんですが…
0993デフォルトの名無しさん
2009/06/25(木) 05:31:470994デフォルトの名無しさん
2009/06/25(木) 06:00:400995デフォルトの名無しさん
2009/06/25(木) 08:34:44これがゆとりなのか・・・
0996デフォルトの名無しさん
2009/06/25(木) 08:54:48> [5] いちよ本人が理解しないとまずい
言葉にどうこう言うつもりはないが、理解するつもりがあるなら困っている点を上げる方が楽じゃないか?
0997デフォルトの名無しさん
2009/06/25(木) 09:32:57面白そうだな。
1ヵ月ぐらい休みがあったらやってみてもいいんだけどなあ。
#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);
}
#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);
}
数字(2〜9)を入力してください:3
***
*****
*****
*****
***
あってる?
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。