C/C++の宿題を片付け ..
75:デフォルトの名無しさん
07/05/15 08:49:08
フォーマットはわかってるんだから自分で作れと?
>>18の場合はそんなに面倒じゃなさそうだけど・・・
76:デフォルトの名無しさん
07/05/15 08:53:44
>>40もお願いします
77:デフォルトの名無しさん
07/05/15 08:54:48
>>76
>>1読んで書き直し
78:デフォルトの名無しさん
07/05/15 08:55:48
txtの下の方に書いてあったのね、スマソ
79:デフォルトの名無しさん
07/05/15 10:02:18
カプセル化はなぜ必要なんですか?って課題です
80:デフォルトの名無しさん
07/05/15 10:10:08
>>27
今更だけどC++化した。1.5秒ほどで終了する。
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <iomanip>
int main(void)
{
char hexstr[256][3];
char *fname_in = "in.dat", *fname_out = "out.dat";
unsigned char buf[32 * 1024];
int i;
std::ostringstream str;
str << std::hex << std::uppercase;
for (i = 0; i < 256; i++) {
str << std::setw(2) << std::setfill('0') << i << '\0';
}
str << std::dec << std::nouppercase;
std::memcpy(hexstr, str.str().c_str(), 256 * 3);
std::ifstream fp_in(fname_in, std::ios::in | std::ios::binary);
std::ofstream fp_out(fname_out, std::ios::out | std::ios::trunc);
if (!fp_in || !fp_out)
return 1;
for (;;) {
if (!fp_in.get(reinterpret_cast<char*>(buf), sizeof(buf)))
break;
81:デフォルトの名無しさん
07/05/15 10:10:47
str.str("");
for (i = 0; i < static_cast<int>(sizeof(buf)); i++) {
str << hexstr[buf[i]];
if ((i + 1) % 32 == 0)
str << "\n";
}
fp_out << str.str();
}
}
ただし出力にostringstreamを使っても使わなくても速度はほとんど
変わらないようだ。
82:デフォルトの名無しさん
07/05/15 10:41:35
>>80
俺の所では0.5秒ほどだった。
C++でも結構速いな。
83:ニュートン・ラフソン法
07/05/15 10:45:16
次の式をN−R法でとけ、ε=10^-2(←0.1以下に収束),
(x1[0],x2[0]) = (0.8,0.2)とする。
f1 = x1^2 + x2^2 -1
f2 = x1 + x2 -1
とありますが、先生から提示されたヒントとして
「まずx1を微分してx2を微分してその後に初期値を入れる」
といわれましたが、どうのように微分をしたらよいのかわかりません
[3] 環境
[3.1] OS: WindowsXP
[3.2] bcc32
[3.3] 言語: C言語
期限は今日中です><
教えてください!
84:デフォルトの名無しさん
07/05/15 10:46:47
プルグラマは数学が苦手
85:ニュートン・ラフソン法
07/05/15 11:18:24
そうですか...
どうもありがとうございます
86:デフォルトの名無しさん
07/05/15 11:27:16
x1で微分というのは偏微分の事だろ
df1/dx1 = d(x1^2 + x2^2 -1)/dx1 = 2*x1
df1/dx2 = d(x1^2 + x2^2 -1)/dx2 = 2*x2
df2/dx1 = 1
df2/dx2 = 1
87:デフォルトの名無しさん
07/05/15 11:34:33
変微分の記号は違うだろ
88:デフォルトの名無しさん
07/05/15 12:01:07
>>83
↓これの式を変えればいいんでない。
URLリンク(www.geocities.jp)
89:デフォルトの名無しさん
07/05/15 12:31:21
>>88
すげえなこんなのどっから見つけてくるんだよ。
取り敢えずやってみたらX1=1.0、X2=0.0となった。
別解としてX1=0.0、X2=1.0というのもあるはずだが、ニュートン法なので
一つしか出ないのだろう。
90:デフォルトの名無しさん
07/05/15 14:14:00
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):乗算合同法を用いて、(0,1)の範囲の値を取る
乱数を生成せよ。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:2007年5月21日
[5] その他の制限:なし
よろしくお願いします。
91:デフォルトの名無しさん
07/05/15 14:25:04
>>90
URLリンク(www5.airnet.ne.jp)
92:デフォルトの名無しさん
07/05/15 16:19:25
>>53
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct word word;
struct word{
char *en;
char *jp;
word *next;
};
word *makenode(FILE *fp);
void search(word *temp);
void mfree(word *temp);
int main()
{FILE *fp = fopen("ta.doc","r");word *temp = makenode(fp);show(temp);search(temp);
mfree(temp);return 0;}
word *makenode(FILE *fp){ word *temp = NULL;word *now = NULL;char *ctemp;
char buff[256] = {'\0'};char en[256] = {'\0'};char jp[256] = {'\0'};
while(fgets(buff,sizeof(buff), fp)){if(ctemp = strchr(buff, '\n'))*ctemp = '\0';
if(ctemp = strchr(buff, ','))*ctemp = '\0';
strcpy(en, buff);strcpy(jp, ctemp + 1);temp = malloc(sizeof(word));temp->en = malloc(strlen(en) + 1);
temp->jp = malloc(strlen(jp) + 1);strcpy(temp->en, en);strcpy(temp->jp, jp);
if(now == NULL){ temp->next = now;now = temp;}else{now->next = NULL;temp->next = now;
now = temp;}}return now;}void search(word *temp){ char buff[256] = {'\0'};word *wtemp;
char *ctemp;for(;;){puts("英和辞典");printf("英単語:");fgets(buff, sizeof(buff),stdin);
if(ctemp = strchr(buff, '\n'))*ctemp = '\0';if(strcmp(buff,"q") == 0)break;
for(wtemp = temp; wtemp != NULL; wtemp = wtemp->next)if(strcmp(buff, wtemp->en) == 0)
printf("日本語で「%s」\n",wtemp->jp);}}void mfree(word *temp){word *wtemp = temp;word *wftemp = NULL;
char *cjtemp = NULL;char *cetemp = NULL;while(wtemp != NULL){wftemp = wtemp;cjtemp = wtemp->jp;
cetemp = wtemp->en;wtemp = wtemp->next;free(cjtemp);free(cetemp);free(wftemp);}}
93:92
07/05/15 16:28:08
修正
//now->next = NULL;
temp->next = now;
now = temp;
94:デフォルトの名無しさん
07/05/15 17:31:04
>>80
istream::get()はstdioのfgets()のC++版だからこの用途には向かないよ。
改行文字で切れるし、何バイト読めたか分からない。
95: ◆90k6K4GDF6
07/05/15 17:45:42
スレ違いだったらスマソ
授業が始まったばかりで、レポートにまとめるフローチャートの書き方が分かりません。
初歩の初歩ですがググっても今一理解出来なかったのでお願いします
(a,b,cのデータをc,b,aの順に表示するプログラム)
#include <stdio.h>
int main(vold)
{
int a, b, c;
printf("a,b,cの順に整数型データを入力してください--> ">;
scanf("%d%d%d", &a, &b, &c);
printf("c,b,aの順に表示すると--> %d %d %d \n",c,b,a);
return 0;
}
96:デフォルトの名無しさん
07/05/15 17:49:37
>>95
スレ違い。
○main
|
□プロンプト表示
|
□数値入力
|
□数値表示
|
○return
97:66
07/05/15 17:51:17
#include <stdio.h>
int main(void){
int i;
char a[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int b[]={'01','10','11','02','20','22','03','30','33','04','40','44','05','50','55','06','60','66','07','70','77','08','80','88','09','90'};
printf();
scanf();
while(){
}
printf();
return 0;
}
これを改良してプログラムを作成してもらえないでしょうか?
お願いします。
98: ◆90k6K4GDF6
07/05/15 17:52:44
>>96
やはりスレチでしたか、すみません;
でもありがとう
99:デフォルトの名無しさん
07/05/15 17:55:35
与えられた金額に対して、コインの最小化問題の解(枚数)を求める。(複数の場合には1つでよい)
期限: 5/18(金)まで
コインはA[n]の配列に入れて、日本円みたいに1,5,10,50…というコインではなく、
どんなコインの組み合わせに対しても、最小の枚数を求めさせる。
日本円だと大きいコインから順に取っていけばいいのですが、
1円、3円、4円のコインの組み合わせで、6円だったら3円×2枚が最小になる、
みたいな場合があるのでどうすればいいのか分からないです><
再帰を使った疑似コードをかけって言われたんですけど誰か分かる人いませんか?
よろしくお願いします。
100:デフォルトの名無しさん
07/05/15 17:56:05
>>97
なんだ、ぼるじょあスレとマルチかYO!
101:気まぐれアナスイ
07/05/15 18:04:02
#include <stdio.h>
int main(void>{ int i;
char a[]={"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"};
int b[]={01,10,11,02,20,22,03,30,33,04,40,44,05,50,55,06,60,66,07,70,77,08,80,88,09,90,99"};
printf();
scanf();
while(){ }
printf();
return0; }
102:気まぐれアナスイ
07/05/15 18:08:58
!(Φ_Φ+){こっちかな?}
#include <stdio.h>|(/n)
int main(void>{ int i;|(/n)
char a[]={"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"};|(/n)
int b[]={01,10,11,02,20,22,03,30,33,04,40,44,05,50,55,06,60,66,07,70,77,08,80,88,09,90,99"};|(/n)
printf();|(/n)
scanf();|(/n)
while(){ }|(/n)
printf();|(/n)
return0; }|(/n)
103:デフォルトの名無しさん
07/05/15 18:17:32
こんなもんでしょ。
#include <stdio.h>
#include <string.h>
void encryptPrint(const char * str)
{
static char const src[] = "abcdefghijklmnopqrstuvwxyz";
static char const dest[] = {
1, 10, 11, 2, 20, 22, 3, 30, 33, 4, 40, 44, 5,
50, 55, 6, 60, 66, 7, 70, 77, 8, 80, 88, 9, 90};
int len = strlen(str);
for (int ic = 0; ic < len; ++ic) {
char * ptr = strchr(src, str[ic]);
if (ptr != NULL) {
printf("%02d", dest[ptr - src]);
} else {
putchar(str[ic]);
}
}
}
int main()
{
char buf[200];
while (fgets(buf, sizeof(buf), stdin) != NULL) {
encryptPrint(buf);
}
return 0;
}
104:気まぐれアナスイ
07/05/15 18:37:09
!(Φ_Φ+)
#include "1179025919/[>>???]"
((1179025919/[>>???] "this line harmony");)|#pref=()/
((1179025919/[line 101] "no");)|#pref=()/
((1179025919/[line 102] "used no");)|#pref=()/
if|<end>
</end>
105:気まぐれアナスイ
07/05/15 18:39:54
!(Φ_Φ+){頑張ってください}
では、また。
106:デフォルトの名無しさん
07/05/15 20:51:45
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文:
8×4、9÷4をそれぞれ四則演算子を用いずに計算し、その計算結果を表示させない。
(ヒント:シフト演算子を使用)
<実行結果>
・8×4=32
・9÷4=商2、余1
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語: C言語
[4] 期限: [2007年05月16日まで]
[5] その他の制限:なし
107:デフォルトの名無しさん
07/05/15 20:57:41
>>80
バグってるじゃん
108:デフォルトの名無しさん
07/05/15 21:03:45
>>106
#include<stdio.h>
int main(){
printf("8×4=%d\n", 8<<2);
printf("9÷4=商%d、余%d\n", 9>>2, 9%4);
return 0;
}
109:デフォルトの名無しさん
07/05/15 21:29:55
1] 授業単元: C言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: Cのみ
[4] 期限:出来る限り早くお願いします。
[5] その他の制限:C言語初心者です。今習っているのは、制御文と配列です。
110:デフォルトの名無しさん
07/05/15 21:35:16
>>108
> printf("9÷4=商%d、余%d\n", 9>>2, 9%4);
あまりは 9&3 だろ?
111:デフォルトの名無しさん
07/05/15 21:37:10
中途半端に知ってたんだな
112:デフォルトの名無しさん
07/05/15 21:42:02
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
気温のデータを5℃単位に丸めたい。
キーボードからdouble型変数kに気温を入力し、
丸めた数値はint型変数gに求め、gを画面に出力する。
ただし入力データに負の気温はないものとする。
また必要なら、計算途中の中間結果を格納するint型変数wなど、
適宜変数を用意すること。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: なるべく早くお願いします。
[5] その他の制限: 結構序盤なので、初心者といえば初心者です。
よろしくお願いします。
113:デフォルトの名無しさん
07/05/15 21:42:13
人にやさしく
114:デフォルトの名無しさん
07/05/15 21:44:46
うほっ
>>108
return0;は美しくないな。
void main(void) でよくね?
115:デフォルトの名無しさん
07/05/15 21:45:11
>>109
#include<stdio.h>
int main(){
char c1,c2,c3;
printf("Input character1 : ");
scanf("%c",&c1);
fflush(stdin);
printf("Input character2 : ");
scanf("%c",&c2);
fflush(stdin);
if(c1 == c2) c3 = '=';
else if(c1 > c2) c3 = '>';
else c3 = '<';
printf("'%c'(%d) %c '%c'(%d)\n",c1,c1,c3,c2,c2);
return 0;
}
116:デフォルトの名無しさん
07/05/15 21:46:11
>>114
void mainの話をするとスレが荒れるぞ
117:デフォルトの名無しさん
07/05/15 21:51:55
>>114
mainの戻り値がvoidなんて処理系依存の方法を持ち出す奴が
どういう了見でreturn 0;が美しくないとか言ってんだ
118:114
07/05/15 21:52:14
>>116
うほっw
まあいいか、return 0; でも。
>>108だっが、余りは9%4でよくねぇ?なぜに9&3 ?
119:デフォルトの名無しさん
07/05/15 21:54:12
沈黙は金
120:デフォルトの名無しさん
07/05/15 21:54:45
>>114 ん〜〜〜、な・ん・で?敢えて言うんでしょうか?理由は?何か問題でも?
int main なら return 0;はANSI、ISO準拠でなんら問題なし。幅広い環境で通用する。
void main?それはもはや世界基準にあらず、自立環境でmain関数をプログラムの開始と
定めていないようなところでなら問題ないが、あくまでもANSI、ISO準拠重視なソースであれば
なおさらvoid mainはありえない。これらのことは、ちゃんとISOにも記されているので
必要とあらば確認すべし。なお、void mainは使っちゃだめということではないので、あしからず。
あくまでも世界基準、標準化、幅広い環境で通用させるんであればint mainが望ましいとの話。
121:デフォルトの名無しさん
07/05/15 21:56:17
くせえ!
コピペの臭いがプンプンするぜ!
122:デフォルトの名無しさん
07/05/15 21:56:42
>>118は責任もって>>120を引き取るように。
123:デフォルトの名無しさん
07/05/15 22:19:31
>>112
#include <stdio.h>
int main()
{
double k;
int g;
scanf("%lf", &k);
g = 5*(int)(k/5 + 0.5);
printf("%d\n", g);
return 0;
}
124:デフォルトの名無しさん
07/05/15 22:23:55
>>118
%も四則演算子に含むという解釈なんじゃね?
実際どっちなんだろう。
125:デフォルトの名無しさん
07/05/15 22:34:28
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): キーボードから5教科のテストの成績を入力し、
合計点sumと平均点aveを計算して画面に出力するプログラムを作成しなさい。
ただし、各教科の点数とsumはint型とし、aveはdouble型とする。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C言語
[4] 期限: 今日の夜11時半まで
[5]その他の制限:
お願いします!
126:デフォルトの名無しさん
07/05/15 22:43:15
>>125
#include<stdio.h>
int main(){
int n, sum = 0;
double ave;
printf("国語:"); scanf("%d",&n); sum+=n;
printf("英語:"); scanf("%d",&n); sum+=n;
printf("社会:"); scanf("%d",&n); sum+=n;
printf("算数:"); scanf("%d",&n); sum+=n;
printf("情報:"); scanf("%d",&n); sum+=0;
printf("合計点:%d\n", sum);
ave = sum / 5.0;
printf("平均点:%lf\n", ave);
return 0;
}
127:デフォルトの名無しさん
07/05/15 23:00:35
>>110
なぜ余が、9&3になるの?教えてください。確かに実行結果は余り1になるわけだが。
128:デフォルトの名無しさん
07/05/15 23:04:57
1001=9
0011=3
------&
0001=1
129:デフォルトの名無しさん
07/05/15 23:06:40
>>99
こんな感じかなぁ(あんまり再帰を使ってないけど)。
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define NMAX (INT_MAX / 2)
struct P {
int sum;
union {
struct P *p[2];
int n;
} as;
};
int Count(struct P *p, int n)
{
return (p->sum != 1) ? (Count(p->as.p[0], n) + Count(p->as.p[1], n)) : (p->as.n == n);
}
130:デフォルトの名無しさん
07/05/15 23:06:43
>>128
thanks!
131:129
07/05/15 23:08:10
続き
void Factorize(int total, int ctbl[], int ctblnum)
{
struct P *ptbl, *p, *q, *r;
int ptblnum = total;
int i, j, n;
for (i = 0; i < ctblnum; i++)
if (ptblnum < ctbl[i])
ptblnum = ctbl[i];
ptblnum ++;
if ((ptbl = calloc(ptblnum, sizeof(*ptbl))) == NULL)
fprintf(stderr, "メモリ不足です\n");
else {
for (i = 0; i < ptblnum; i++)
ptbl[i].sum = NMAX;
for (i = 0; i < ctblnum; i++) {
p = &ptbl[ctbl[i]];
p->sum = 1;
p->as.n = ctbl[i];
}
132:デフォルトの名無しさん
07/05/15 23:08:27
>>115
fflush(stdin); ってどうゆうことですか?
133:129
07/05/15 23:09:10
続き
for (i = 1; i <= total; i++) {
p = &ptbl[i];
for (j = 1; j < i; j++)
if ((n = (q = &ptbl[j])->sum + (r = &ptbl[i - j])->sum) < p->sum) {
p->sum = n;
p->as.p[0] = q;
p->as.p[1] = r;
}
}
printf("%d円の内訳:\n", total);
if (ptbl[total].sum == NMAX)
printf("組み合わせが存在しません\n");
else for (i = 0; i < ctblnum; i++)
if((n = Count(&ptbl[total], ctbl[i])) != 0)
printf("%d円 × %d枚\n", ctbl[i], n);
free(ptbl);
}
}
int main(void)
{
int ctbl[] = { 1, 3, 7, 9, 13, 66, };
Factorize(179, ctbl, 6);
return 0;
}
134:デフォルトの名無しさん
07/05/15 23:23:29
>>115
入力ストリームに対するfflushは未定義動作
scanfで読み飛ばしとけ
135:115
07/05/15 23:28:10
>>134
適当に書いただけだから>>132に言ってやってくれ
136:デフォルトの名無しさん
07/05/15 23:54:52
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク)
7bitのASCIIコード表を出力するプログラムを作成せよ。
出力例
0 1 2 3・・・・7
-------------------
0:** ** 0 p
1:** ** ! 1 q
2:** ** " 2 r
3:** ** # 3 s
・
・
F:** ** / ? **
印刷できない文字は、**を出力しなさい。
[3] 環境
[3.1] OS: Win XP
[3.2] コンパイラ名とバージョン: Borland
[3.3] 言語: C
[4] 期限: 5月16日AM:10:30まで
[5] その他の制限: 2つのforとisprintという関数を使用する
よろしくお願いします。
137:デフォルトの名無しさん
07/05/16 00:08:37
10個の整数データを木構造に保存するときを考える.まず,ポインタにより木を実現し,データを保存せよ.(ファイルからデータを読み込み,木構造ができるようにすると良い)
次に,キーボードから前順,中順,後順を選択する.
すると,その順で木をなぞり,指定した順にデータを表示する(再帰プログラミングで作成せよ).
すみませんが教えて下さい。
138:デフォルトの名無しさん
07/05/16 00:20:03
>>136
#include<stdio.h>
#include<ctype.h>
int main(){
int i,j,k;
for(i=0;i<=0xF;i++){
for(j=0;j<=7;j++){
k = i*8+j;
if( isprint(k) )printf(" %c ", k);
else printf("** ");
}
printf("\n");
}
return 0;
}
なんか激しく間違えてるけど直すのたるいから誰かよろしく
139:デフォルトの名無しさん
07/05/16 00:20:18
>>27です。
>>39を参考に、1秒程度で出力するものができました。
>>43->>44も試したんですが、これも凄いですね。
でも、これだとオレが書いてないって明白なので、参考としていただきます。
他にもいろいろと勉強になるコードありがとうございました。
140:デフォルトの名無しさん
07/05/16 00:27:01
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限:今日のPM13:00
[5] その他の制限:
問題1:キーボードより2つの値を入力し、比較結果を表示しなさい
実行画面
変数aの入力==>3
変数bの入力==>8
結果:8>3
変数aの入力==>8
変数bの入力==>3
結果:8>3
変数aの入力==>5
変数bの入力==>5
結果:5=5
141:140の続き
07/05/16 00:31:43
問題2:2人の得点を入力し勝者を表示しなさい
実行結果
aさんの得点==>200
bさんの得点==>150
aさんの勝ち
aさんの得点==>100
bさんの得点==>250
bさんの勝ち
aさんの得点==>120
bさんの得点==>120
引き分け
問題3:点数を入力し、合否を表示せよ
60点以下合格、範囲(O〜100)以外はエラーとする
実行結果
点数入力==>60
合格です
点数入力==>59
不合格です
点数入力==>−1
点数を入力エラー(0未満)です
点数入力==>101
点数の入力エラー(100を超える)です
142:140の続き
07/05/16 00:32:53
問題4:キーボードより入力した文字を変換(大文字→小文字、小文字→大文字)し表示しなさい
実行結果
文字入力==>A
変換後:a
文字入力==>n
変換後:N
文字入力==>S
変換後:変換できない
以上の問題がどうしてもわからないのでよろしくお願いします
143:デフォルトの名無しさん
07/05/16 00:32:53
[1]c言語
[2]raw画像を読むためfreadを使ったの関数を作る。
void FIO_read_raw(char *filename, unsigned short *ad, int width, int height){
FILE *fp_in;
if((fp_in==fopen(filename,"rb"))==NULL){
printf("Can't File Open!\n");
exit(1);
}
fread( ad, sizeof(unsigned short),width*height,fp_in);
fclose(fp_in);
}
と作ったのですが、
error C2143: 構文エラー : ')' が 'constant' の前に必要です。
error C2143: 構文エラー : ';' が 'constant' の前に必要です。
fatal error C1004: 予期せぬ EOF が検出されました。
とでてしまいました。どのようにすればいいか教えてください。よろしくお願いします。
144:140 141 142の問題
07/05/16 00:33:54
この4問わかる方がいましたら教えてください
145:デフォルトの名無しさん
07/05/16 00:37:06
if((fp_in=fopen(filename,"rb"))==NULL)
146:デフォルトの名無しさん
07/05/16 00:52:34
>>136
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int ch[128],a[16][8];
size_t i,j,cnt,sz=sizeof(ch)/sizeof(ch[0]);
size_t wd=2;
for(i=0; i<sz; i++) ch[i]=i;
for(i=0,cnt=0; i<8; i++) {
for(j=0; j<16; j++) {
a[j][i]=ch[cnt++];
}
}
printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<16; i++) {
printf("%X:",i);
for(j=0; j<8; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
puts("");
}
return 0;
}
147:デフォルトの名無しさん
07/05/16 00:57:01
>>136 訂正。いらんことしてたわ。
#include <stdio.h>
#include <ctype.h>
#define ROW 16
#define COL 8
int main(void)
{
int a[ROW][COL];
size_t i,j,cnt,wd=2;
for(i=0,cnt=0; i<COL; i++)
for(j=0; j<ROW; j++)
a[j][i]=cnt++;
printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<ROW; i++) {
printf("%X:",i);
for(j=0; j<COL; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
printf("\n");
}
return 0;
}
148:デフォルトの名無しさん
07/05/16 00:58:59
>>136 ぐぼぉ、またはり間違えた。すまそ。たぶんこれで最後でおkかと。
#include <stdio.h>
#include <ctype.h>
#define ROW 16
#define COL 8
int main(void) {
int a[ROW][COL],i,j,cnt,wd=2;
for(i=0,cnt=0; i<COL; i++)
for(j=0; j<ROW; j++)
a[j][i]=cnt++;
printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<ROW; i++) {
printf("%X:",i);
for(j=0; j<COL; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
printf("\n");
}
return 0;
}
149:>140
07/05/16 02:34:04
...高難度ぢゃね?
#include <stdio.h>
int getVal(char *val)
{
int v;
char buf[256];
printf("変数%sの入力==>", val);
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &v);
return v;
}
void printCmp(int a, int b)
{
char sign[3], Num[][3]={"0","1","2","3","4","5","6","7","8","9"};
if(a<b) sprintf(sign,"<");
if(a>b) sprintf(sign,">");
if(a==b) sprintf(sign,"=");
printf("結果:%s%s%s\n", Num[a], sign, Num[b]);
}
int main(void)
{
int a,b,loop;
printf("1:キーボードより2つの値を入力し、比較結果を表示\n");
for(loop=0; loop<3; ++loop){
a=getVal("a");
b=getVal("b");
printCmp(a, b);
}
return 0;
}
150:>142
07/05/16 02:58:46
> 文字入力==>S
> 変換後:変換できない
kwsk
151:デフォルトの名無しさん
07/05/16 03:16:44
同じ問題前にも見たな。
で、同じようにそこ突っ込まれてた。
152:デフォルトの名無しさん
07/05/16 06:49:17
>>143
if((fp_in==fopen(filename,"rb"))==NULL){
を
if((fp_in=fopen(filename,"rb"))==NULL){
に
153:デフォルトの名無しさん
07/05/16 07:07:57
>>138さん >>146さん >>148さん
ありがとうございます
154:デフォルトの名無しさん
07/05/16 07:35:14
1:C言語
テーマ:繰り返し処理(for文)
問題1:1〜10までの合計を求め表示しなさい
実行画面
合計:55
問題2:キーボードより入力した数分の、"*"を表示しなさい
実行画面
整数入力==>5
結果:*****
問題3:2つの数値を入力し、範囲の合計を表示しなさい
実行画面
整数1(小)入力==>5
整数2(大)入力==>7
5〜7の合計:18
以上の3問ですよろしくお願いします
155:デフォルトの名無しさん
07/05/16 07:43:22
>>154
問題1
for(;;){
printf("合計:%d\n", 1+2+3+4+5+6+7+8+9+10);
goto EndRuupu;
}
EndRuupu:
問題2
int n;
printf("整数入力==>"); scanf("%d" &n);
printf("結果:");
for(;;){
printf("*");
if(--n==0) goto EndRuupu;
}
EndRuupu:
printf("\n");
156:デフォルトの名無しさん
07/05/16 07:49:18
問題3
int show, die, kei=0;
printf("整数1(小) 入力==>"); scanf("%d", &show);
printf("整数2(大) 入力==>"); scanf("%d", &die);
printf("%d〜%dの合計:", show, die);
for(;;){
kei += show;
if(++show>die) goto EndRuupu;
}
EndRuupu:
printf("%d\n", kei);
157:デフォルトの名無しさん
07/05/16 08:08:20
>>154
こっちは悪い例。
問題2
int n;
printf("整数入力==>"); scanf("%d" &n);
printf("結果:");
for(; n!=0; n--) printf("*");
printf("\n");
問題3
int show, die, kei;
printf("整数1(小) 入力==>"); scanf("%d", &show);
printf("整数2(大) 入力==>"); scanf("%d", &die);
printf("%d〜%dの合計:", show, die);
for(kei=0; show<die; show++) kei += show;
printf("%d\n", kei);
158:デフォルトの名無しさん
07/05/16 09:14:33
>>94
本当だな。std::read()の方がいいな
159:デフォルトの名無しさん
07/05/16 10:43:32
>>158
この場合はiosのフォーマット変換層自体いらないので、実はfstreamでなくて
filebufのほうが無駄が無くていい。
↓のような感じ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ただし、filebufの内部を直接読み書きしない限りは
ファイルバッファのバッファに読み込み→ユーザバッファにコピー
という無駄が発生するので、どうしたって低水準I/Oよりは遅くなると思われ。
160:デフォルトの名無しさん
07/05/16 10:48:36
>>159
なるほど。こういうのは初めて見ました。
rdbuf()を使った物は見た事があるのですが。
Cに勝てないのは辛い所ですね。
161:デフォルトの名無しさん
07/05/16 12:26:06
1:C言語
2:
問題1:数値を入力し、以下のように表示しなさい
実行画面
整数入力==>8
********
*******
******
*****
****
***
**
*
162:161の続き
07/05/16 12:34:17
問題2:10進数を入力し8ビットの2進数に変換し表示しなさい
実行画面
10進数入力==>118
2進数:01110110
以下の2問よろしくお願いします
163:デフォルトの名無しさん
07/05/16 12:40:41
(1):C言語
(2):制限時間あと3時間
(3):問題文
問題:2重のfor文を使って、以下のような九九表を完成させなさい
実行画面
1 2 3 4 5 6 7 8 9
_ _ _ _ _ _ _ _ _ _ _ _
1| 1 2 3 4 5 6 7 8 9
2| 2 4 6 8 10 12 14 16 18
3| 3 6 9 12 15 18 21 24 27
4| 4 8 12 16 20 24 28 32 36
5| 5 10 15 20 25 30 35 40 45
6| 6 12 18 24 30 36 42 48 54
7| 7 14 21 28 35 42 49 56 63
8| 8 16 24 32 40 48 56 64 72
9| 9 18 27 36 45 54 63 72 81
わかる方が居ましたらお願いします
164:デフォルトの名無しさん
07/05/16 12:53:34
>>163
#include <stdio.h>
int main()
{
for (int iy = 0; iy <= 9; ++iy) {
if (iy == 0) {
printf(" | 1 2 3 4 5 6 7 8 9\n"
"-+--------------------------\n");
continue;
}
for (int ix = 0; ix <= 9; ++ix) {
if (ix == 0) {
printf("%1d|", iy);
} else {
printf("%2d%c", ix * iy, ix < 9 ? ' ' : '\n');
}
}
}
return 0;
}
165:デフォルトの名無しさん
07/05/16 12:59:16
>>161
#include <stdio.h>
int main()
{
int i, n;
printf("整数入力==>");
if (scanf("%d", &n) == 1) {
while (i = n--) {
while (i--)
putchar('*');
putchar('\n');
}
}
return 0;
}
166:デフォルトの名無しさん
07/05/16 13:02:59
>>162
#include <stdio.h>
#include <string.h>
int main()
{
printf("Input decimal number.:");
int num = 0;
scanf("%d", & num);
if (num > 255 || num < 0) {
fprintf(stderr, "Illegal number.\n");
return 1;
}
char buf[4];
sprintf(buf, "%03o", num);
printf("binary number:");
for (int ic = 0; ic < 3; ++ic) {
static char const * const binaries[] = {
"000", "001", "010", "011", "100", "101", "110", "111"
};
printf("%s", binaries[buf[ic] - '0'] + (ic == 0 ? 1 : 0));
}
printf("\n");
return 0;
}
167:デフォルトの名無しさん
07/05/16 13:10:56
>>162
// 前半は>166を流用
#include <stdio.h>
int main()
{
printf("Input decimal number.:");
int num = 0;
scanf("%d", & num);
if (num > 255 || num < 0) {
fprintf(stderr, "Illegal number.\n");
return 1;
}
static char const * const binaries[] = {
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111",
};
printf("binary number:%s%s\n", binaries[num >> 4], binaries[num & 0xf]);
return 0;
}
168:デフォルトの名無しさん
07/05/16 13:55:23
>>161
これ一ヶ月ほど前に見たような
169:デフォルトの名無しさん
07/05/16 13:59:46
スレリンク(tech板:473番)
だったわ、宿題じゃなかったか
170:デフォルトの名無しさん
07/05/16 14:07:31
俺も見たような気がしたけどこれだった
スレリンク(tech板:417番)
171:デフォルトの名無しさん
07/05/16 14:12:41
これってprint増やす以外に作る方法ってありますか?
// 配列を反転するプログラム(の予定)
#include <stdio.h>
int tables[10];
void print(void)
{
for (int i = 0; i < 10; i++) {
printf("%d:", i);
printf("%d\n", tables[i]);
}
printf("\n");
}
void reverse(void)
{
for (int i = 0; i < 10/2; i++) {
tables[i] = tables[9-i];
tables[9-i] = tables[i];
}
}
int main(void)
{
for (int i = 0; i < 10; i++) {
tables[i] = i + 100;
}
172:デフォルトの名無しさん
07/05/16 14:27:26
>print増やす
意味が分からん。
それよりもmain内で関数が呼ばれてない。
あと、配列をグローバルにする必要性は無い。
173:デフォルトの名無しさん
07/05/16 14:59:42
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
10個の実数データをキーボードから入力し,配列data[10]に格納しなさい。そして,各要素の小さい方からの順位を決定して,別の配列rank[10]に格納しなさい。最後に,入力データdata[10]と順位rank[10]をともに出力しなさい。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:borland
[3.3] 言語:C
[4] 期限:日曜日
[5] その他の制限:
よろしくお願いします。
174:デフォルトの名無しさん
07/05/16 15:23:15
>>133
助かりました!ありがとうございます!
175:デフォルトの名無しさん
07/05/16 15:43:15 BE:139752498-2BP(222)
>>173
#include<stdio.h>
#include<stdlib.h>
int cmpdbl(const double* a,const double* b){return (int)(*a-*b);}
int main(void){double data[10],rank[10];int i;char tmp[256];
for(i=0;i<10;i++){printf("実数%i:",i);fgets(tmp,255,stdin);data[i]=atof(tmp);}
qsort(data,sizeof(data)/sizeof(double),sizeof(double),cmpdbl);
printf("data:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,data[i]);}
printf("rank:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,rank[i]);}return 0;}
176:デフォルトの名無しさん
07/05/16 15:44:04
C言語ではないんですがアルゴリズムのフローチャートを書ける方居ますか?
問題1:平均点計算
点数を入力して、平均点を出力するフローを答えなさい[入力した点数が0より小さい時終了する]
問題2:合計
1+(1+2)+(1+2+3)+・・・(1+2+・・・+10)を計算し、計算結果を出力するフローを答えなさい
の2問のフローチャートがどうしてもわからないので何方か解る方がいましたら教えてください
いくら考えても解らないので何方かお願いします
177:デフォルトの名無しさん
07/05/16 15:44:40
>>171 こういう事か?
今、××を見ながらCの勉強をしています。
そこに「ある配列を反転した内容を別の配列にコピーする」というプログラムあり、
それを改造して、「あるひとつの配列の内容を反転する」プログラムを自力で作ってみました。
しかしコンパイルは通るのですが、実行してみると思ったとおりの結果にならなくて困っています。
元のプログラムでは表示用の関数printが2つに分かれており、
それをひとつにまとめてしまったのが原因なのでしょうか?
配列がひとつしか無いので表示用の関数は1つだけにしたいのですが、
上手いやり方はありませんか?
178:デフォルトの名無しさん
07/05/16 16:08:13 BE:67935757-2BP(222)
>>175訂正
#include<stdio.h>
#include<stdlib.h>
int cmpdbl(const double* a,const double* b){return (int)(*a-*b);}
int main(void){double data[10],rank[10];int i;char tmp[256];
for(i=0;i<10;i++){printf("実数%i:",i);fgets(tmp,255,stdin);data[i]=rank[i]=atof(tmp);}
qsort(rank,sizeof(rank)/sizeof(double),sizeof(double),cmpdbl);
printf("data:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,data[i]);}
printf("rank:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,rank[i]);}return 0;}
179:デフォルトの名無しさん
07/05/16 16:13:28
CUIばっかじゃねーか
180:デフォルトの名無しさん
07/05/16 16:37:06
10個の整数データを木構造に保存し、
順に木をなぞる再起プログラミングを作成せよ.
C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。
181:デフォルトの名無しさん
07/05/16 16:39:22
マルチ
スレリンク(tech板:851番)
182:デフォルトの名無しさん
07/05/16 16:39:26 BE:34937892-2BP(222)
>>180
>順に木をなぞる再起プログラミングを作成せよ.
何の順だ。
183:デフォルトの名無しさん
07/05/16 16:46:38
他人に質問できるレベルにさえ達してないのか
184:デフォルトの名無しさん
07/05/16 17:01:22
>>183
課題をそのままコピーしただけなのですが・・・すいません。
>>182
「順」っていう言葉がなければ大丈夫ですかね?
分かる範囲でいいので、ぜひご指導お願いします。
10個の整数データを木構造に保存し、
木をなぞる再起プログラミングを作成せよ.
C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。
185:デフォルトの名無しさん
07/05/16 17:04:21
>>173
#include <stdio.h>
int main(void){
int i,j,rank[10]={0};double data[10];char buf[256];
for(i=0;i<10;){
printf("%d番目の実数を入力して下さい:",i+1);
fgets(buf,255,stdin);
if(!sscanf(buf,"%lf",data+i)) continue;
++i;
}
for(i=0;i<10;++i){
for(j=0;j<10;++j){
if(data[i]<=data[j]) ++rank[j];
}
}
for(i=0;i<10;++i) printf("data[%d]=%f\n",i,data[i]);
for(i=0;i<10;++i) printf("rank[%d]=%d\n",i,rank[i]);
return 0;
}
186:デフォルトの名無しさん
07/05/16 17:18:00 BE:69876094-2BP(222)
>>184
情報が足りねえって言ってるのにさらに減らすのはどういう嫌がらせですか。
「どんな木をどうやってなぞるのか」と聞いてるのに。
187:デフォルトの名無しさん
07/05/16 17:30:17
【質問テンプレ】
[1] 情報基礎論演習
[2] 課題1:2つの正方行列の和・差・積を求め、計算結果を見やすく画面に表示するプログラムを作成せよ。
ただし、両行列の要素はプログラム実行時にキー入力するものとする。(scanf)また、行列のサイズは4×4とする。
課題2:1で作成したプログラムを以下のように修正せよ。
・行列の要素はキー入力ではなくファイルから読み込む。(入力ファイルは自分で作成)
・計算結果は画面でなくファイルに出力すること。
[3] 環境
[3.1] Windows
[3.2] cygwin
[3.3] C
[4] 期限:5月18日
[5] 特になし
よろしくお願いします。
188:デフォルトの名無しさん
07/05/16 17:47:49
高校1年です
[1] プログラミング
[2] キーボードから固定費・変動費・単価・商品の売れた数を受け取り、収益と収益における固定費・変動費それぞれの割合、純利益を表示するプログラムをC言語で記述せよ
[3] 環境
[3.1] 窓達XP
[3.2] Borland C++ Compiler 5.5
[3.3] C
[4]明日の情基の時間までに提出
[5] 専用のプリントに記述し提出、プログラムの動作を確認できる環境があれば確認して提出。その際、失敗したプログラムは消さないようにすること
動作確認は出来る環境です
一応書いたのですが、固定費割合と変動費割合が算出されません
189:デフォルトの名無しさん
07/05/16 17:49:33
>>188の課題で私が書いたプログラムを晒しときますね
固定費・変動費の割合が0.000000000になる以外は正常に算出されます
{
int tanka,kote,hen,rie,ure_kazu,ure_kane;
float kote_wari,hen_wari;
printf("単価はいくら?\n");
scanf("%d",&tanka);
printf("いくつ売れた?\n");
scanf("%d",&ure_kazu);
printf("固定費用は?\n");
scanf("%d",&kote);
printf("変動費用を算出して入力してください\n");
scanf("%d",&hen);
ure_kane = ure_kazu * tanka;
rie = ure_kane - (kote + hen);
kote_wari = (kote / ure_kane) * 100;
hen_wari = (hen / ure_kane) * 100;
printf("収益は%d、収益における固定費と変動費の割合はそれぞれ%f%、%f%です。よって貴社の利益は%dです。",ure_kane,kote_wari,hen_wari,rie);
return 0;
}
190:デフォルトの名無しさん
07/05/16 17:55:23
>>189
スレ違い。
整数割る整数は整数になる。実数にしたいなら、キャストしとけ。
ついでに言えば、特にケチる理由がないならdoubleにしとけ。
floatでは、10進換算で7桁程度しか精度がないぞ。
Ex.
double kote_wari = (double) kote / ure_kane * 100.;
191:デフォルトの名無しさん
07/05/16 17:56:03 BE:104814296-2BP(222)
>固定費・変動費の割合が0.000000000になる
理由をまず考えろ。
192:デフォルトの名無しさん
07/05/16 17:56:54
小手割りって何かの技みたいだな。
193:デフォルトの名無しさん
07/05/16 17:58:48
>>190
わかりました
100.0000を超えることはないのでfloatで十分だと思ったのですが…
doubleでやってみますね
キャストはまだ習ってませんがjavaで学んだのでやってみます
ありがとうございました
194:デフォルトの名無しさん
07/05/16 17:59:59
>>191
分かりませんでしたのでここで質問させていただきました
あれ?もともとの公式が間違ってるのかな…?
195:デフォルトの名無しさん
07/05/16 18:04:55
>>194
>190
196:デフォルトの名無しさん
07/05/16 18:05:37
>>190
キャストがよく分からなかったので変数を全てfloatで宣言したら正常に動作しました
本当にありがとうございました
197:デフォルトの名無しさん
07/05/16 18:06:33
hen_wari = (hen / ure_kane) * 100;
hen=200,ure_kane=400の場合、200÷400=0余り200
hen_wari = (200 / 400) * 100;
hen_wari = 0 * 100;
hen_wari = 0;
198:デフォルトの名無しさん
07/05/16 18:10:42
>>196
その大雑把な応用性は現場にはとても必要なものだ
しかし大雑把過ぎると精密さが要求されるプログラムでしくじるかもな
199:デフォルトの名無しさん
07/05/16 18:44:55 BE:104814296-2BP(222)
最低限、作用機序を理解していることが前提だがな。
「理由は分からないけどこうしたら直った」という対処は迷惑でしかない。
200:デフォルトの名無しさん
07/05/16 20:05:27
>>188
この前入学したばかりなんだろ?
なんかレベル高い授業やってんな
201:デフォルトの名無しさん
07/05/16 20:11:29
>>188は高学歴
202:デフォルトの名無しさん
07/05/16 20:14:51
>200
用語が難しそうに見えるだけで、やってることは数字入力に四則演算程度の入門レベルだろ。
203:デフォルトの名無しさん
07/05/16 20:17:02
>>202
高校一年でだぞ?
204:デフォルトの名無しさん
07/05/16 20:45:25
私が高校一年の時はCじゃなくてアセンブリだったな orz どう考えても低(ry
205:デフォルトの名無しさん
07/05/16 20:47:36
高1でアセンブラか。
そりゃずいぶんと低レベルだな。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4179日前に更新/299 KB
担当:undef