1 :
デフォルトの名無しさん :
2010/10/31(日) 22:27:38 BE:596427697-S★(531777)
[1] 授業単元:C言語入門 [2] 問題文):最大24個の整数が格納できる配列を用意する。 この配列の先頭から10個分には1を代入し, つづく6個分に は0を入れ,最後の8個分には-1を入れよ。 [3] 環境 [3.1] OS:Win [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限:11月2日 良ければよろしくお願いします
>>3 int main(void)
{
int ary[24]=
{
1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,
-1,-1,-1,-1,-1,-1,-1,-1
};
return 0;
}
>>3 #include<stdio.h>
int main(void)
{
int array[24];
int i, index=0;
for(i=0;i<10;i++) array[index++]=1;
for(i=0;i<6;i++) array[index++]=0;
for(i=0;i<8;i++) array[index++]=-1;
return 0;
}
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) *記号を使ってでsin曲線を描け。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:11月2日 [5] その他の制限: なし よろしくお願いします。
助けてください Windowsコンポーネントの情報の取得を教えてください 環境 MFC (VS2003) COMは苦手です。何かヒントのページでも構いません 見つかりません 誰かお願いします。
11 :
9 :2010/11/01(月) 02:55:15
9です。 追加で質問です。 WindowsコンポーネントはWin2003はレジストリから取得なのでしょうか? もしそうならばキーとパスを教えていただけないでしょうか? お願いします
12 :
9 :2010/11/01(月) 03:02:14
9です。 事故解決しました
9です。 解決してません。 そういうのはやめていただけませんか?
>>8 追加させていただきます。
実行結果が下のような感じでお願いできますか。
|
|
|
___________________________
|
|
|
>> 14 途中送信してしまいました 正弦曲線だけではなくグラフの縦と横線も表示できるようにお願いしたいです。
何度も言わせないで頂戴。早くカレンダーの課題を出して頂戴。
>>17 西暦元年以降の二つの実在する年月日から、
経過日数を計算し、結果を返す関数を作成して
くれないか?w
>>20 修正ユリウス日が求められれば後は引き算するだけ
今日から1億年後の曜日を調べよ
>>21 >修正ユリウス日が求められれば
だからそれが難しいって言ってんだよ馬鹿?
>>23 ごめん、調べれば公式やサンプルがゴロゴロでてくるから難しいとか考えたこともなかった
よく考えれば検索自体初心者にはハードルが高いよね
>>23 そんなものが難しいとか言っているお前がマジで馬鹿だろ?w
( ´,_ゝ`)プッ( ´,_ゝ`)プッ( ´,_ゝ`)プッ
n人の成績データを一次元配列に格納し、平均点を求めるプログラムを作成せよ。 ただし、データ入力部、計算部、出力部は関数化せよ。 点数を入力するときに関数を使うらしいのですが 関数における配列の使い方がよくわかりません。 動的メモリを使うらしいのですが・・・。
暦って各国ばらばらに導入されてるから、その事も考慮しないといけないな
失礼しました。 [1] 授業単元:応用プログラミング [2] 問題文(含コード&リンク): n人の成績データを一次元配列に格納し、平均点を求めるプログラムを作成せよ。 ただし、データ入力部、計算部、出力部は関数化せよ。 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン: VB 2005 [3.3] 言語: C++ [4] 期限: ([2010年11月02日まで [5] その他の制限: n人の成績データを一次元配列に格納し、平均点を求めるプログラムを作成せよ。 ただし、データ入力部、計算部、出力部は関数化せよ。
コンパイラがwwww
>>33 すいませんww
visual studio2005です
ベーシックじゃないですw
すいません、
>>32 の補足です。
成績データ入力はテキストファイル(data.txt)入力で、出力はコンソールへお願いします。
nはテキストファイルの中身より求める。
一次元配列にはvectorってのを使うと良いらしいってことです。
data.txtの中身:
10
40
50
90
...
ってな感じでn人分成績があります。
36 :
32 :2010/11/01(月) 18:52:32
>>36 そういう荒らしを防ぐためにトリップというものがあるので利用してね。
>>27 x=(int)(365.25*y)+(y/400)-(y/100)+(int)(30.59*(m-2))+day-678912;
1,2月は前年の13,14月で計算
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):以下の手順でプログラムを作成せよ a)実数型配列内の最大値を求める関数MAXを作成(引数は実数型配列とその要素数とし、戻り値は最大値) b)実数型配列内の最大値の要素番号を返す関数INDEXを作成(引数は実数型配列とその要素数,戻り値は最大値の要素番号) c)a,bで作成した関数を呼び出して、配列内の最大値・要素番号を求めるプログラムを作成せよ [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2010年11月1日00:00 [5] その他の制限:最大値の要素番号は0も含む。またsizeof演算子を使用して配列の要素数を求めること よろしくお願いします
MAXとINDEXを別々の関数にするのは二度手間で無駄だからやだなあ
>>38 ありがとうございます。
2重ポインタも使わない感じでお願いしたいです・・・。
1] 授業単元: プログラミング2 [2] 問題文(含コード&リンク): 二次元平面上のある点はx座標とy座標とで表わされる。(x、yはそれぞれ実行値とする) また、点a(2.0,3.0)と点b(6.0,5.0)とを考える。このとき次の問題を解くプログラムを作成せよ。 プログラムは全部まとめて1つのプログラムでよい。 1.二次元平面の天を表わす構造体struct pointを定義せよ。 2.点aと点bの中点を求めよ。 3・点aから点bまでの距離を求めよ。 4.点aと点bを結ぶ直線y=px+qのp,qを求めよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C
>>44 使って良いのと駄目なの言わないで、あとからこうしてと言うと回答者やる気でないよ
C++でこの問題なら
>>32 の言うvector、algorithmを使って参照渡しで実現するのが普通
CとC++の区別付いてなくて、実はこれC言語の問題じゃないのか
>>49 今更何を言ってるんだ。もう少しROMった方がよいんじゃないか。
C++と記載してある課題の大体7割はCの課題だよ。
>>49 この程度のサイズの問題(たかだか30行程度)の書き直しが面倒なのですか?
あと、new したものを delete しないのはお行儀がわるいですね。
52 :
デフォルトの名無しさん :2010/11/01(月) 23:41:37
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) count をもつqueue(待ち行列)を実現せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月3日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
>>43 与えられた実数型配列が負の数ばかりだと、最大値が狂います。
54 :
デフォルトの名無しさん :2010/11/01(月) 23:42:53
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 連結リストでqueue(待ち行列)を実現せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月3日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 連結リストでqueue(待ち行列)を実現せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月3日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。 より目立つように協力してあげる
>>55 さわるな、そいつは◆QZaw55cn4cだ
countって何のカウントだよ
60 :
デフォルトの名無しさん :2010/11/02(火) 00:01:09
>>58 これがcountなしの場合です
struct queue {
int *bd;
int hd;
int tl;
int mx;
char *id;
};
void error_id (char *frm, char *id)
{
fprintf(stderr, frm, id);
exit(1);
}
struct queue *newqueue (int maxsize, char *name)
{
struct queue *q;
if ((q = (struct queue *)malloc(sizeof(struct queue))) == NULL)
error_id("malloc for %s\n", name);
if ((q->bd = (int *)malloc(maxsize * sizeof(int))) == NULL)
error_id("malloc for %s's body\n", name);
q->hd = q->tl = 0;
q->mx = maxsize;
q->id = name;
return q;
}
>>61 恐らく先生から配列じゃなく連結リストでやれって言われたんじゃないのかな
>>52 と
>>54 は別人なんだよな
>>52 count を持つキュー => リングバッファ
>>54 連結リストでキュー => ポインターリンク
と普通は考えるんだが、
>>52 が
>>60 で示した例だとポインターリンクだ
訳が判らん
64 :
デフォルトの名無しさん :2010/11/02(火) 00:14:42
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) *********の部分を埋めて双方向リスト(先頭にデータを追加していくを完成させよ。 #include<stdio.h> #include<stdlib.h> struct NODE{ int info; struct NODE *left; struct NODE *right; }; main(){ struct NODE *head,*p,*q,*r; int data; head=(struct NODE *)malloc(sizeof(struct NODE)); head->left=NULL; head->right=NULL; while(1){ scanf("%d",&data); if(data<=0){break;} r=(struct NODE *)malloc(sizeof(struct NODE)); r->info=data; r->left=NULL; r->right=NULL; ************* ************* ************* ************* } printf("双方向リスト(先頭から末尾へ):"); q=head->right; while(q!=NULL){ printf("%d ",q->info); q=q->right; } printf("\n");} [3] 環境 [3.1] OS: unix[3.2] コンパイラ名とバージョン: gcc[3.3] 言語: C [4] 期限:11月3日
[1] 授業単元: プログラミングU [2] 問題文(含コード&リンク): 下のプログラムを参考にして、次の条件に合うデータを検索するようにプログラムを変更せよ。 1.学生番号の変わりに氏名を入力させ、氏名で検索を行って見つかった学生データを表示させるプログラムを作成せよ。 (ヒント)文字列の検索にはstrcmp(s1,s2)を使うとよい。strcmpは文字列s1と文字列s2を比較し、同じなら0以外の値を返す。 またstrcmpを使用する際には、ヘッダファイル"string.h"をインクルードするのを忘れないこと。 2.学生のうち、成績が最大の学生のデータのを表示させるプログラムを作成せよ。 3.得点を入力させ、成績が入力した得点以上の全ての学生のデータを表示させるプログラムを作成せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:c
67 :
デフォルトの名無しさん :2010/11/02(火) 00:19:07
>>63 countなしの例として以下もありました
struct queue *enqueue (int v, struct queue *q)
{
q->bd[q->tl] = v;
q->tl = (q->tl + 1) % q->mx;
if (q->tl == q->hd)
error_id("%s overflows\n", q->id);
return q;
}
int dequeue (struct queue *q)
{
int v = q->bd[q->hd];
if (q->hd == q->tl)
error_id("empty %s is dequeued\n", q->id);
q->hd = (q->hd + 1) % q->mx;
return v;
}
int qsize (struct queue *q)
{
int s = q->tl – q->hd;
if (s < 0)
s += q->mx;
return s;
}
68 :
65続き :2010/11/02(火) 00:19:16
参考プログラム #include<stdio.h> #define MAX 20 #define MaxN 30 struct student{ int sid ; char name[MaxN]; int score; }typedef Student; Student St[MAX+1] = {{0,0,0}, {1001,"井上太郎",85}, {1002,"菊池次郎",60}, {1003,"佐々木三郎",70}, {1004,"中村四郎",55}, {1005,"藤井五郎",90}, {1006,"松本六郎",80}, {1007,"山本七郎",70}, {1008,"渡辺八郎",75}, }; int N = 8;
69 :
68続き :2010/11/02(火) 00:20:18
main() { int i; int qid; while(1){ printf("学生番号は?"); if( scanf("%d",&qid) ==EOF){break;} i=N; while(i>0){ if(St[i].sid == qid){break;} i--; } if(i==0){ printf("学生番号%dはありません。\n",qid); }else{ printf("学生番号=%04d 氏名=%s 得点=%d\n",St[i].sid,St[i].name,St[i].score); } } printf("\n***終了***\n"); } お願いします
70 :
デフォルトの名無しさん :2010/11/02(火) 00:24:19
>>64 r->right = head->right;
r->left = head;
head->right->left = r;
head->right = r;
71 :
デフォルトの名無しさん :2010/11/02(火) 00:31:16
73 :
72 :2010/11/02(火) 00:35:24
1文字を2文字に置き換える知能を持ち合わせておちません・・・ 頭の優れた方、宜しくお願いします。
74 :
デフォルトの名無しさん :2010/11/02(火) 00:48:20
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) infix2postfixプログラムの改善案を作れ。 – 空白に関する仮定なし – エラーチェック [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月3日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
75 :
74 :2010/11/02(火) 00:49:04
追記です infix2postfix プログラム char c; for (stackinit(); scanf(“%1c”, &c) != EOF; ) { if (c == ‘)’) printf(“%1c”, (char) pop()); if (c == ‘+’) push((int) c); if (c == ‘*’) push((int) c); while (‘0’ <= c && c <= ‘9’) { printf(“%1c”, c); scanf(“%1c”, &c); } if (c != ‘(’) printf(“ ”); } printf(“\n”); 仮定: 演算子,被演算子,括弧 は空白で区切られている。
>>72 >>73 以外は自分で出来るみたいだからこれで良いよな
string.h が禁止されてる場合は strlen() くらいは自作しろ
void ModefyString( char* src, char* dst, char c, char* new )
{
int i, len;
len = strlen( new );
while( *src ) {
if( *src == c ) {
for( i = 0; i < len; i++ )
*(dst + i) = *(new + i);
dst += len;
}
else {
*dst = *src;
dst++;
}
src++;
}
*dst = 0x00;
}
78 :
デフォルトの名無しさん :2010/11/02(火) 01:00:25
>>70 head->right == NULL のときに、head->right->left は何?
>>71 なんとなく理解した
君が参考で出したソースは count を持たないリングバッファのキューだから先に示した回答で
>>52 は良いと思う
参考ソースと同様にバッファサイズを可変にする必要があるなら修正が必要だけどね
81 :
デフォルトの名無しさん :2010/11/02(火) 01:04:33
>>81 それだと双方向リストになってないと思うよ。
83 :
70 :2010/11/02(火) 01:09:47
>>78-79 いけねっ初歩的なミスだ
r->right = head->right;
r->left = head;
if( head->right ) head->right->left = r;
head->right = r;
>>81 駄目な行を抜けば良いって考えは駄目だよ
>>77 そうか、でもまぁ出来る子なら読めば判るでしょ
>>84 >>77 じゃないが
ポインタも未修になっている
これ、main()と配列アクセスでがんばれってことだと思うが
ポインタ、関数駄目だから意外とやりづらいよ
>>72 ポインタ未修を見逃して書き直すハメに
#include <stdio.h>
int main ( void )
{
char string_a[256] ;
char string_b[512]={0} ;
char a ;
char b[3] ;
int ia, ib ;
printf ( "input a string:" ) ;
gets ( string_a ) ;
printf ( "input a char:" ) ;
a = getchar() ;
printf ( "input b char:" ) ;
scanf ( "%2s", b ) ;
for ( ia=0,ib=0 ; string_a[ia]!=0 ; ia++,ib++ ){
if ( string_a[ia]==a ){
string_b[ib] = b[0] ;
string_b[++ib] = b[1] ;
}
else{
string_b[ib] = string_a[ia] ;
}
}
printf ( "input-array is %s\n", string_a ) ;
printf ( "changed-array is %s\n", string_b ) ;
}
87 :
デフォルトの名無しさん :2010/11/02(火) 01:51:47
>>85 ポインタ使えないと文字列操作は書く気しないなぁ
学校もカリキュラムの組み立てを考えた方が良いと思う
>>74 まだ諦めてなかったの?
題意が掴めないから誰も回答できないよ
改善案を作れっていうなら元のソースを完全な形で提示しないと駄目だよ
>>75 中にも欠落している行がある様に思うし(空白に対する処理が無い)
多分、一般式→逆ポーランド式の変換だとは思うけどね
過去ログ検索ってもう使えない?
それなんて宿題?
>>89 >>75 が不完全なところや、実行速度に問題があるから、正しく直せって課題でしょ。
stack 関係のコードがないから、動作検証もできないけどね。
>>88 配列操作をすっとばして、ポインタを教えるカリキュラムの方がどうかしてると思うけど。
>>92-93 new[]したものを delete []しないのはお行儀がわるいですね。
なんで参照にしないんだろう
>>95 ほぼ同時に教えるべきモノだと思う、同じモノなんだから
配列を教えた段階で宿題にするならN人の点数を配列に入れて平均出せくらいの問題で良いと思うよ
下手に同時に教えると、混乱しやすいと思うが
なぜ無意味な問題批判が止まないのか
>>98 配列とポインタが同じって考えない方が良いな。
sizeof(a) / sizeof(a[0])
の結果が、a が配列かポインタかで異なることからも明らか。
>>101 同じようなモノね、言いたかったのは
>>99 関連性が高いから同時に教えた方が良いと思う
2次元配列と配列へのアドレス配列は異なる事とかポインタを理解していないと教えにくい部分もあるから
ポインタで躓く生徒が多いからカリキュラムの後ろに配置するより、ポインタを理解できなければC言語は
理解できないくらいの思想でカリキュラムを組むべきだと思う
>>93 average() に問題ないか?整数値の答えしか返ってこないと思うが
(double)が無くなってsumがdouble型になってるな
>>102 データ構造としての配列と実装としての配列を一緒に考えることが
正しいかどうかはかなり疑問、まあ学習者のタイプにもよるんだろうけど
>>104 sum は double か、被除数が double だと問題ないんだっけっか?
なんか気持ち悪いけど
>>102 自分の言いたいことを正しく日本語にしないと、相手には正確に伝わらないよ。
>>98 の書き方では、ほとんどの人があなたのことを誤解するんじゃないかな。
>>103 ,104,106
通常の二項演算子では、被演算数の一方が double のときは、もう一方も double に変換され、結果も double になります。
(Usual arithmetic conversions)
K&R2 付録 A6.5
ISO/IEC 9899:1999 6.3.1.8
ISO/IEC 14882:2003 5.0.9 (としか書きようがないのですけど、こういう場合どうするんでしょうね)
>>87 の
node = new CNode<T>;
if( ! node ) {
cout << "Alloc error, cannot push" << endl;
return 0;
}
で割り当て失敗時にif( ! node )の{...}が実行されることがあるんですか
実行させるためには
node = new(nothrow) CNode<T>;としないといけないんじゃないですか
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
生年月日を入力してその曜日を求めるプログラムです。
西暦での入力まではできたのですが、これを西暦年ばかりでなく日本の元年の年数でも利用できるようにしたいです。
http://codepad.org/SU0xXKWS 年数の第1文字がCなら西暦年数、
Mなら明治の年数(元年1867)、
Tなら大正の年数(元年1912)、
Sなら昭和の年数(元年1926)、
Hなら平成の年数(元年1989)とする。
例:H22 11 2、あなたの誕生日は、火曜日です。
[3] 環境
windows xp
C言語
[4] 期限: 11月5日
[5] その他の制限: 特になし。
よろしくお願いいたします。
>>17 ほれほれ、カレンダーの課題が出ましたよ。さあ、どうぞ。
113 :
112 :2010/11/02(火) 20:49:43
ごめ 昭和の元年のが間違ってた 1626→1926で
>>112 nEra が間違ってないか?
あと、1867, 1911, 1925, 1988 にしておけば、atoi 後の -1 も不要。
>110 一応atoi使わない版 余り変わらない上に邪道臭いけど… 年号データを最初から-1しとくかどうかはお好みで #include <stdio.h> int main() { int year, month, day, day_of_week; int c, y, m, d; int i ; char ys[256] ; char cEra[4] = { 'M', 'T', 'S', 'H' } ; int nEra[4] = { 1868, 1912, 1926, 1989 } ; printf("誕生日を入力して下さい="); gets(ys) ; sscanf ( ys+1, "%d %d %d",&year, &month, &day); if ( *ys!='C' ){; for ( i = 0 ; i < 4 ; i++ ){ if ( *ys==cEra[i] ){ year=nEra[i]+year-1 ; break ; } } if ( i==4){printf ( "Error\n" );return -1;}// エラーチェックする? } // 後は一緒
昭和64年とかチェックしないとね
えっ
やるなら明治5年のグレゴリオ暦採用以前をどうするかってとこか そんなやつもう生きてないだろうが
>>117 ありえない和暦を入れたらNG出さないと駄目だよな
平成1年1月1日
昭和64年12月31日
全然問題と関係ないし
最近本当に余計な茶々を入れる奴が増えたな 自分では全くプログラムを書かず、人の書いたプログラムを重箱の隅をつつく ようにしてケチばかり付ける奴
124 :
デフォルトの名無しさん :2010/11/02(火) 23:11:34
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) infix2postfixプログラムの改善案を作れ。 – 空白に関する仮定なし – エラーチェック [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月3日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
125 :
124 :2010/11/02(火) 23:12:59
配列による実現(エラーチェックなし) #define max 100 static int stack[max+1], sp; stackinit () { sp = -1; } push (int v) { stack[++sp] = v; } int pop() { return stack[sp--]; } int isempty () { return (sp < 0); }
126 :
124 :2010/11/02(火) 23:13:56
配列による実現(エラーチェックあり) struct stack { int*bd; /* stack body */ int pt; /* stack pointer */ int mx; /* stack body size */ char *id; /* stack identifier */ }; void error_id (char *frm, char *id) { fprintf(stderr, frm, id); exit(1); } struct stack *newstack (int maxsize, char *name) { struct stack *s; if ((s = (struct stack *)malloc(sizeof(struct stack))) == NULL) error_id("malloc for %s\n", name); if ((s->bd = (int *)malloc(maxsize * sizeof(int))) == NULL) error_id("malloc for %s's body\n", name); s->pt = -1; s->mx = maxsize; s->id = name; return s; }
127 :
124 :2010/11/02(火) 23:15:10
配列による実現(エラーチェックあり)その2 struct stack *push (int v, struct stack *s) { if (++(s->pt) >= s->mx) error_id("%s overflows\n", s->id); s->bd[s->pt] = v; return s; } int pop (struct stack *s) { if (s->pt < 0) error_id("empty %s is popped\n", s->id); return s->bd[(s->pt)--]; } int top (struct stack *s) { if (s->pt < 0) error_id(“empty %s is referred\n”, s->id); return s->bd[s->pt]; } int isempty (struct stack *s) { return (s->pt < 0); }
>>123 やっぱり言うと思った
お前の事だよカス
129 :
124 :2010/11/02(火) 23:16:03
infix2postfixプログラム char c; for (stackinit(); scanf(“%1c”, &c) != EOF; ) { if (c == ‘)’) printf(“%1c”, (char) pop()); if (c == ‘+’) push((int) c); if (c == ‘*’) push((int) c); while (‘0’ <= c && c <= ‘9’) { printf(“%1c”, c); scanf(“%1c”, &c); } if (c != ‘(’) printf(“ ”); } printf(“\n”); 仮定: 演算子,被演算子,括弧 は空白で区切られている。
>>129 改善案を作れって具体的に何すりゃいいんだ?
131 :
124 :2010/11/02(火) 23:56:51
>>130 エラーをなくしたり、空白に関する仮定なしになるように作ってくだされば
大丈夫だと思います。
>>131 それだと問題が「改善せよ」になるんじゃないか?
133 :
124 :2010/11/03(水) 00:15:36
>>132 そういうことになります
134 :
124 :2010/11/03(水) 00:37:02
誰か出来る人いないでしょうか・・・
>>96 は都合が悪いから無視か、理解できてないのかどっちだろうな
>>124 じゃなくても良いけど
infix2postfixってstackを用いて何をするプログラム?
なんかあまりに美しくないコードすぎて読む気もしないんだが
>>129 は「演算子,被演算子,括弧は空白で区切られているのを仮定してる」ので
これを空白で区切られてなくてもOKにしてエラーチェックすれば良いってこと?
>>141 中置記法から逆ポーランド記法への変換関数。
143 :
124 :2010/11/03(水) 01:28:24
>>142 私には理解不能の言葉がでて><ですが、どうもです。
>>144 すごく簡単に言えば、「1 + 2」 → 「1 2 +」ってこと。
詳しくは wikipedia とかで勉強してください。
146 :
124 :2010/11/03(水) 02:09:11
期限が今日の12時までなので誰か分かる方がいたらよろしくお願いします。
>>109 まぁそうだけど、malloc() のエラーなら強制終了しても問題ないじゃん
...というか、そこまで考えて書いてなかったよ
>>124 まぁ諦めろ、後から小出しで情報を追加する態度も良くないし
>>125 がエラーチェックなしで
>>126-127 がエラーチェックありだって?
両者の本質的な差はそんな事ではないよ
大方、手元にあったプリントかなんかを打ち込んで適当にコメント付けたんだろ
多分、講義の中で使った例題を基とした出題なんだろうと思う
どんな問題を出されたかも把握できない状態なら単位を落とした方が君の為だ
151 :
デフォルトの名無しさん :2010/11/03(水) 05:06:59
[1] 授業単元:プログラミング C++ [2] 問題文(含コード&リンク): 文章を標準入力ストリームから単語ごとに読み, その単語がはじめて単語であれば listに加え出現回数を1とする. 既に出現した単語ならリスト最後に単語をアルファベット順にソートし,出力するプログラムを作成せよ. ただし以下の点に注意せよ: 文章の最初は大文字で始まるが(例えば"The"), これはすべて小文字(the)に変換せよ. 文章の最後や切目にはピリオド「.」やカンマ「,」がつくが, これは単語には加えない. 同様に単語さらに単語先頭と末尾のカッコ「(」「)」も単語には加えない. 先頭と末尾のシングルクォーテーションやダブルクォーテーション 「'」「"」も単語には加えない. [3] 環境 [3.1] OS:unix [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限:11月7日まで よろしくおねがいします
>>151 [5] その他の制限
を書いてください
>>152 [5] その他の制限
特にないですけれども
今回の講義の内容はlist型と反復子(イテレータ, iterator)でした
>>154 std::string使ってもいいの?
>>155 はい問題文の条件を満たしていれば何であってもいいです
それ以前に
>>151 の問題文は所々日本語がおかしすぎるw
もう少し落ち着いてこれで他人に通じるかどうか見直した方がいいんじゃないか?
>>157 でもこれが原文なんですぅ
どこがおかしいですか?
>>151 質問
1)最後にアルファベット順に出力とは
a 15
an 14
apple 4
be 17
みたいな感じかな?
2)can't みたいな単語はどうするの?「'」 が先頭や末尾ではないから有効な単語と考えると少し難しいね
>>159 1)
はいそうです
2)
can'tで1つの単語としてください
162 :
161 :2010/11/03(水) 08:57:04
20行目間違ってるな if( *s >= 'A' && *s <= 'Z' ) に直しとけ
>>163 テストしろよな、俺は大雑把なテストしかしてないから穴が有る可能性は高い
まぁこんな場所でムキになっているあんた、C言語を何の為にやっているか 人生の目的なのか?金儲けの為なのか?授業で単位を取るだけなのか? どちらにせよ、俺ら人間はどうせいつかは死ぬ生物だから マターリいこうや?死ぬときの遺影とか墓のことも考えておけよ。
誰と戦ってるの?
過ぎ去り、二度と戻れない、そしていつか死ぬその日に向かって 生きられる時間が刻一刻と失われている、その時空と戦っているのさ。 しかし戦っても無駄。いつ自分が死ぬかなんて分からないが 必ずその日は来る。来たその後は自分はこの世に存在しない。 しかし、これからもC言語やコンピュータは人間の生活で使われていく。
【質問テンプレ】 [1] 授業単元:プログラミング設計演習U [2] 問題文(含コード&リンク): 0 から 9 の数字から異なる n 個の数を取り出して合計が s となる組み合わせの数を出力して終了するプログラムを作成してください。 n 個の数はおのおの 0 から 9 までとし、1つの組み合わせに同じ数字は使えません。 たとえば、n が 3 で s が6 のとき、3 個の数字の合計が 6 になる組み合わせは、 1 + 2 + 3 = 6 0 + 1 + 5 = 6 0 + 2 + 4 = 6 の 3 通りとなります。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC++2010 [3.3] 言語: C++ [4] 期限: 2010/11/5 13:00 [5] その他の制限:
>>151 ・ listに加え出現回数を1 の意図不明。
・ 既に出現した単語ならリスト最後に単語を ...,出力する も意味不明。
素直に読むと index を idenx に変換してリストの最後に出力(付加する?) の意味に読み取れる。
170 :
169 :2010/11/03(水) 16:42:34
失礼、 deinx でした・・・
[1] 授業単元: アルゴリズムとデータ構造 [2] 問題文(含コード&リンク): typedef struct{char name[256]; unsigned char sex; unsigned char age;} PERSONAL_DATA 上記の構造体PERSONAL_DATA型の配列(要素数n)に格納された n人の名前・性別・年齢のデータの中から同じ年齢の2人組の名前を全て表示せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Borland [3.3] 言語: C++ [4] 期限: ([2010年11月6日まで] または [無期限] のいずれか) [5] その他の制限: 特に無し 自分でも考えてみたのですが、まず性別・年齢がunsigned char型の意味が、 そして年齢比較のアルゴリズムも、もう一つ構造体を定義して比較すれば良いのかが分かりません。 どうぞよろしくお願いします。
>>172 0〜255の数字を表現するのには unsigned char で十分だから int の代わりに使ってるだけだよ
今時、メモリを節約する必要はあんまり無いから奇異に写るかもしれないけど昔は普通だった
FF7のパラメータ最大値が255なのはそんな理由だ
同じ年齢の二人組の意味が良くわからないな
同じ年齢のA、B、Cが居た場合、組み合わせ別に表示しろって事?
174 :
デフォルトの名無しさん :2010/11/03(水) 17:40:27
[1] 授業単元:データ構造 [2] 問題文(含コード&リンク):リストを先頭から順に調べて和を求める [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語: C [4] 期限: 2010年11月3日 [5] その他の制限: 特になし 考えてみたのですが、うまくできず困っています。 よろしくお願いします。
>>172 >同じ年齢の2人組
のところをもう少し詳しく
そのデータの中には同じ年齢の人が2人しかいないの?
それとも例えば4人いたら6通りの2人組みが出来るわけだけどそれら全てを表示するの?
>>174 リストってなんのリストだよ
データ構造ってことは線形リストの類だとは思うけどそっから作るのか
>>173 >>175 早速の返信ありがとうございます。
unsigned charについては納得です。
同じ年齢の2人組について、出題プリントにはこれ以上書かれていませんが、
おそらくはnを各自に設定して、配列の要素をscanf等から取り込んだ後、
>>175 さんの仰る通り、4人いたら重複しない6通りの2人組を画面に出力せよということだと思います。
178 :
110 :2010/11/03(水) 21:19:57
ありがとうございました。 無事できました。
180 :
デフォルトの名無しさん :2010/11/03(水) 22:01:10
[1] 授業単元:アルゴリズムとデータ構造 [2] 問題文 ************を埋めて昇順にデータを保存する双方向リストを作成 #include<stdio.h> #include<stdlib.h> struct NODE{ int info; struct NODE *left; struct NODE *right; }; main(){ struct NODE *head,*p,*q,*r,*s; int data; head=(struct NODE *)malloc(sizeof(struct NODE)); head->left=NULL; head->right=NULL; while(1){ scanf("%d",&data); if(data<=0){break;} r=(struct NODE *)malloc(sizeof(struct NODE)); r->info=data; r->left=NULL; r->right=NULL; p=head->right; q=head; while(p!=NULL){ if(p->info > r->info){ **************** } ************* } ********* } printf("双方向リスト(先頭から末尾へ):"); s=head->right; while(s!=NULL){ printf("%d ",s->info); s=s->right; } printf("\n");} [3] 環境 Linux gcc 言語 C また、よろしくお願いします。
前から思ってたけどこの双方向リストのleftとrightって 中身を読まないとどっちが前から分からないセンスの無さがイラっとくる 先生に突っ込んであげた方がいいんじゃないの?
左が前だろ
183 :
デフォルトの名無しさん :2010/11/03(水) 22:27:57
>>181 「どっちが前から分からない」
あなたは日本語のセンスがないみたい。
普通はprev/nextだな left/rightとかかれると「んん?二分木か?」と思ってしまう
日本人なら右が前ですよね
左前って不吉だなw
錠前は堅いです!
192 :
デフォルトの名無しさん :2010/11/04(木) 03:21:31
>>176 線形リストの話です。すみません。説明不足で….
193 :
デフォルトの名無しさん :2010/11/04(木) 03:30:10
>>176 の補足です。
線形リストで
ヒントで
int sum_list(Cell *p){
sum = 0;
while(p!=NULL){
データを足しこむ;
p = p->next;
}
合計を返す;
}
をもらいました。
[1] 授業単元:C言語入門 [2] 問題文(含コード&リンク): 縦の長さがheight、横の長さがwidthのマス目で構成された盤面があります。 このマス目の中に適当に石を置きます。 この時、石を入れたマス目の中心の距離がちょうど2マス分だけ離れたマスに石を置くことはできません。 このルールに従うとき、この盤面に最大いくつの石を置くことができるでしょうか? ただし、height、widthともに取れる値は1から1000とする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2010年11月8日 [5] その他の制限: 特になし
[1] 授業単元:プログラミング(1) [2] 問題文(含コード&リンク): 0000000000 0000000001 0000000010 0000000011 0000000100 ~中略~ 1111111110 1111111111 上記のように10進数の0~1023の数字を順に2進数で出力するプログラムを書け [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11/7 18時 [5] その他の制限: 特にありませんが現在if文やfor文を学んでいるというレベルなので 出来るだけ簡単な文で書いてもらえると有難いです。
連投すみません [1] 授業単元:プログラミング(1) [2] 問題文(含コード&リンク): 1~1000までの整数のうち「3の倍数と3の付く数字」の 総和を求めるプログラムを書け [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11/7 18時 [5] その他の制限: 特にありませんが現在if文やfor文を学んでいるというレベルなので 出来るだけ簡単な文で書いてもらえると有難いです。
>>198 ぐぐってみましたが多分やってないと思います
>>200 putcharだけ習っていませんがこれなら理解出来そうです
深夜なのに即レスありがとうございます!
>>193 それヒントっちゅうより答えだろ、Cell の構造が示されてないから
typedef struct _cell {
int data;
struct _cell* next;
} Cell;
だと仮定すると
データを足しこむ→ sum += p->data;
合計を返す→ return sum;
だぉ
>>196 #include <stdio.h>
int main(void)
{
int i;
char str[11] = {0};
for(i = 0; i < 10; i++) str[i] = '0';
do {
printf("%s\n", str);
for(i = 9; (str[i] = '1' + '0' - str[i]) == '0';) if(--i < 0) break;
}while(i >= 0);
return 0;
}
ああ、今気づいたけどナベアツネタなのか 全然気づかんかんた
>>205 0から始まってるのが見えない盲が何か言ってるよw
>>196 ちょっと短くしてみた
#include <stdio.h>
int main(void)
{
int i;
char str[11] = "0000000000";
while(1) {
printf("%s\n", str);
for(i = 9; (str[i] ^= 1) == '0'; ) if(--i < 0) return 0;
}}
209 :
194 :2010/11/04(木) 06:46:21
>>195 斜めは考慮にいれません。
あくまで縦方向、横方向のみ2マス離れた先に石が置けないルールです。
○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ って風に置いてくのか?
211 :
194 :2010/11/04(木) 07:01:28
>>210 その形が恐らく最大に石が置けるケースだと思います。
>>204 それだと5の倍数でも何かしなければならないよ
213 :
デフォルトの名無しさん :2010/11/04(木) 08:36:33
>>188 条件文などなしでもっとコンパクトに書けると言われました。
本当にそれだけ言われたんなら先生節穴すぎだろwwww
>>214 穴埋め問題で、埋めた箇所以外で指摘されるわけないだろ。
>>214 2番目の穴埋めで、リストの後ろとだけ双方向に繋げて
3番目の穴埋めで、リストの前と双方向に繋げば、条件文はいらなくなるね。
>>215 なに勘違いしてんだ?
結果がだめなんだがそれの指摘はいいんだろうかと
[1] 授業単元:コンピュータプログラミング [2] 問題文(含コード&リンク): 以下のアルゴリズムを使用しプログラムを作成せよ <プログラム概要> ・256文字以内で文字列を入力させる ※半角文字のみで可。入力制御不要 ・画面に入力された文字列を表示 文字列を前・後(中央折り返し)で反転 ※シーゲンゴゴーゲンシ ※ジュギョウウョギュジ ・入力文字列と反転後の文字列を表示 <アルゴリズム> @データ入力用と文字配列を宣言 A入力用と出力用の文字列を宣言 B文字列は文字列操作関数を使用 C出力用文字配列の先頭アドレスをポインタに設定 D最終文字一の中身を出力用文字配列の現在位置に代入 E以降、入力用は前方向、出力用は後方へポインタをずらす F出力用配列の最終位置へ文字列終端子を代入 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VS [3.3] 言語: C [4] 期限: 13:00まで 長文スイマセンお願いいたします
220 :
218 :2010/11/04(木) 10:41:12
修正します
>『画面に〜文字列』を
文字数
>>219 誤爆ですか?
>>217 ああ、すまん。結果が昇順じゃなくて降順になってるな。
他人のコードをコピペして実行するほど暇じゃなくて気づかなかったよ。
222 :
デフォルトの名無しさん :2010/11/04(木) 10:44:45
>>213 ***になってる近辺だけ書くとこうかな
p=head->right; q=head;
while(p!=NULL){
if(p->info > r->info){
r->right = p; p->left = r; break; //***
}
q = p; p = q->right; //***
}
q->right = r; r->left = q; //***
224 :
デフォルトの名無しさん :2010/11/04(木) 10:50:31
>>218 駄目だ理解できねぇ、特にアルゴリズムが訳わかんね....
ABC[return] ←入力
3 ←文字数出力
ABCCBA ←入力と反転を出力
こんなイメージか?でも訳わかんねアルゴリズムに則って書くのは無理っぽいな
226 :
218 :2010/11/04(木) 10:56:42
230 :
218 :2010/11/04(木) 11:33:21
>>230 てか、それって最後の}をコピペミスしただけじゃ・・・
232 :
218 :2010/11/04(木) 11:38:17
>>231 すいませんそうでした
ありがとうございました
これで、何とか提出用のソースはできたので
授業ギリギリまで、自力でどこまで出来るかやってみます
打ち切ります
>>229 アルゴリズムの 4, 5 を満たしてない気がする。
出力用文字列の先頭が入力の最終文字だから、単に入力の反転だけ作るだけかな。
最後に、入力用の文字配列と出力用の文字配列を続けて出力。
よく読めよ
235 :
188 :2010/11/04(木) 12:29:22
C++の宿題なのですが、 さっぱり手が出なくて困ってます どなたか手を貸していただけないでしょうか キーボードから入力された正の整数xに対して、 2^n < x を満たす最も大きな整数nを求めるプログラムをwhile分を用いて書きなさい というものなのですが…
>>236 すいません、テンプレでも書いておきます
[1] 授業単元:情報
[2] 問題文(含コード&リンク):キーボードから入力された正の整数xに対して、2^n < x を満たす最も大きな整数nを求めるプログラムをwhile分を用いて書きなさい
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ名とバージョン: Cygwin
[3.3] 言語: C++
[4] 期限: 11/9
[5] その他の制限:特になし
239 :
デフォルトの名無しさん :2010/11/04(木) 18:25:05
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):文字列の入出力をサブルーチンとして実行する プログラムを作成せよ。ただし、文字列の入力は複数回行うことができ、 1回入力するたびに入力した文字列を標準出力へ出力すること。 [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: Visual Studio 2005 [3.3] 言語: C++ [4] 期限: 11/5 [5] その他の制限:グローバル変数を使用しないこと。 連投しますが、よろしくお願いします。
241 :
デフォルトの名無しさん :2010/11/04(木) 18:30:37
[1] 授業単元:プログラミング演習(テーマ:関数の使い方とデータの受け渡し方) [2] 問題文(含コード&リンク):要素数が6つの配列を用意する。 その要素1,2に数値を代入し、配列の先頭アドレスを関数に渡し、 関数内で四則演算を行い、main関数内で結果を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: Visual Studio 2005 [3.3] 言語: C++ [4] 期限: 11/5 [5] その他の制限:グローバル変数を使用しないこと。
242 :
デフォルトの名無しさん :2010/11/04(木) 18:32:12
[1] 授業単元:プログラミング演習(テーマ:関数の使い方とデータの受け渡し方) [2] 問題文(含コード&リンク):文字列ポインタを戻り値とする関数を使用する プログラムを作成せよ。その他の処理は各自実装すること。ただし、戻り値を 処理内容に含むこと。 [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: Visual Studio 2005 [3.3] 言語: C++ [4] 期限: 11/5 [5] その他の制限:グローバル変数を使用しないこと
243 :
デフォルトの名無しさん :2010/11/04(木) 18:33:58
[1] 授業単元:プログラミング演習(テーマ:関数の使い方とデータの受け渡し方) [2] 問題文(含コード&リンク):関数の再帰呼び出しを用いて、 入力した数値の階乗を求めるプログラムを作成せよ。 また、再帰呼び出しをしない場合のプログラムも作成せよ。 [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: Visual Studio 2005 [3.3] 言語: C++ [4] 期限: 11/5 [5] その他の制限:グローバル変数を使用しないこと 以上、よろしくお願いします。
[1] 授業単元:プログラミング演習B [2] 問題文(含コード&リンク):二つのフォームを作成し、フォーム2で設定したパラメータを フォーム1に反映させよ。 フォーム1にはこれまでやったOpenGLでのオブジェクトを描画し、フォーム2はフォーム1のオブジェクト色を変えるようにすること [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: Borland C++Builder [3.3] 言語: C++ [4] 期限: 11/5 [5] その他の制限:OpenGLを使うこと
>>241 #include <stdio.h>
int func(int* array)
{
return 1+2;
}
int main(void){
int array[6];
array[1] = 10;
array[2] = 20;
printf("%d\n", func(array));
return 0;
}
>>242 #include <stdio.h>
char* func(void)
{
return "fuck you!!";
}
int main(void){
printf("%s\n", func());
return 0;
}
>>243 #include <stdio.h>
int saiki(int num)
{
if(num == 1){
return 1;
}
else{
return num * saiki(num-1);
}
}
int no_saiki(int num)
{
int result = 1;
int i;
for(i=0; i<num; i++){
result *= (num-i);
}
return result;
}
int main(void){
printf("%d, %d\n", saiki(5), no_saiki(5));
return 0;
}
>>244 「これまでやったOpenGLでのオブジェクト」ってのはどこだよ
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):正の整数をキーボードから入力し、1からその整数までの和を計算し、出力するプログラムを組みなさい [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語: C++ [4] 期限:11/5 制約は特にないです よろしくお願いします
251 :
デフォルトの名無しさん :2010/11/04(木) 19:59:44
もう我慢できなくなったのか
[1]プログラミング演習 [2]真分数を入力して、小数点以下20桁までの小数を表示するプログラムを作成してください。 ただし、分子と分母をそれぞれ引数として、小数表示を実現する処理は浮動小数点演算を使用しない関数 void to_float(int a, int b)として実現すること。 実行例 分子:1 分母:7 0.14285714285714285714 [3] [3.1] windows [3.2] visualstdio2010 [3.3] C言語 [4] 2010/11/7 [5] 関数までです。循環小数を使用しない方法が望ましいと言われました。 ただ、循環小数でもできるならそれでいいとのことです。お願いします。
>>255 #include <stdio.h>
int main(void){
int bunsi, bunbo, counter;
int flag_first_time = 1;
printf("bunsi:"); scanf("%d", &bunsi);
printf("bunbo:"); scanf("%d", &bunbo);
while(1)
{
if(bunsi < bunbo){
bunsi *= 10;
printf("0");
if(flag_first_time){
flag_first_time = 0;
printf(".");
}
}
else{
printf("%d", bunsi / bunbo);
bunsi %= bunbo;
bunsi *= 10;
}
if(20 < ++counter){
break;
}
}
return 0;
}
259 :
デフォルトの名無しさん :2010/11/04(木) 21:57:54
>>239 お願いします
追加で
[1] 授業単元:プログラミング演習(テーマ:関数の使い方とデータの受け渡し方)
[2] 問題文(含コード&リンク):文字列ポインタを引数として渡し、
戻り値として文字列ポインタをセットする関数を使うプログラムを作成せよ。
その他処理は、各自で実装すること。ただし、戻り値を処理内容に含むこと。
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ名とバージョン: Visual Studio 2005
[3.3] 言語: C++
[4] 期限: 11/5
[5] その他の制限:グローバル変数を使用しないこと
こちらもお願いします。
>>258 >[2]真分数を入力して
ってあるから、オーバースペックかも
>>259 問題の意味がよく分からんな。
char* func(char* p) { return p; }
こんな関数を使うプログラムを作成してもOKなのかな。
263 :
デフォルトの名無しさん :2010/11/04(木) 22:27:00
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): スタックを利用して、与えられたnに関するFarey数列の要素数を求めるプログラムを完成させよ。 #include <stdio.h> #include <stdlib.h> #define MAX 100000 main(){ int count,n,top,x[MAX],y[MAX],w; scanf("%d",&n); x[0]=0; y[0]=1; x[1]=1; y[1]=1; count=2; top=2; while(top>1){ } printf("%dに関するFarey数の個数:%d\n",n,count);} [3] 環境 [3.1] OS:unix [3.2] コンパイラ名:gcc [3.3] 言語: C
合計の関数あたりが無難じゃね?
>>263 そのソースは問題文の一部なの?
それとも君が考えたもの?
問題文の一部ならそんな単位落としていい。
>>263 要素数だけなら、単純にループ回しながら最大公約数見るだけで十分な気が
[1] 授業単元:コンピュータ工学 [2] 問題文(含コード&リンク): 構造体配列のhairetu x[10]という名前の入れ物の すべてに0と1を入れるプログラムを作成せよ。 ただし、ポインタの扱いで動作させるものとする。 [3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン:Visual Studio [3.3] 言語:C [4] 期限:明日の午前中までです。 [5] その他の制限:ありませんが、できればソースコードは文字数が少なくて シンプルなものを作っていただけるとありがたいです
>>268 構造体の中身がどうなっててどこに0と1を入れるのか不明
勝手に構造体作っていいのか?
構造体が配列なのか 配列のメンバを持つ構造体なのかよくわからんな どっちにしても0と1をどう入れるんだって話だが
>>268 >>269-270 そう思いますよね。
#include <stdio.h>
struct nakami
{
int zero;
int one;
} zero_one = { 0, 1};
struct nakami hairetsu[10];
int main()
{
int i;
for( i = 0; i != 10; i++ ){
*(hairetsu + i) = zero_one;
printf("%d: %d, %d\n", i , hairetsu[0].zero, hairetsu[0].one );
}
return 0;
}
printf("%d: %d, %d\n", i , hairetsu[i].zero, hairetsu[i].one ); だorz
275 :
デフォルトの名無しさん :2010/11/05(金) 01:56:01
>>266 空行の部分の穴埋め問題で、それで全文です。
提出はしないので単位には関係ありませんが、答えが気になったので。
276 :
デフォルトの名無しさん :2010/11/05(金) 02:01:10
>>191 172です。mallocなんて関数があったんですね。
strcpyで逐次代入するより断然便利です。
どうもありがとうございました。
>>263 こんな大きな配列を自動変数で取るように教えるってどうかなと思う。
大丈夫な環境でやってるんだろうけど。
たったの80MBじゃん まさかただの課題プログラムに対して可搬性とか言い出すのか
そういうつまらない突込みをするのは◆QZaw55cn4cしかいない
281 :
デフォルトの名無しさん :2010/11/05(金) 07:41:02
なんだこいつ
麻ー呂っくを使うなんて、粋な計らいでおじゃる。
283 :
191 :2010/11/05(金) 08:42:19
>>277 ゴメン、何を言ってるのか全然わかんない (?_?)
アンカーが全て間違っている事を切に望む
>>238 #include <stdio.h>
int main(void) {
int x;
int n;
if (scanf("%d", &x) != 1 || x <= 0) {
printf("正の整数を入力してください\n");
return 0;
}
n = 0;
while (n < 31) {
if (x <= (1<<n)) {
printf("%d\n", n - 1);
return 0;
}
n++;
}
printf("%d\n", n - 1);
return 0;
}
>>238 #include <stdio.h>
int main(void)
{
int i = 1, n = 0, x;
scanf("%d", &x);
while(1) {
i <<= 1;
if(i >= x) break;
n++;
}
printf("2^%d < %d\n", n, x);
return 0;
}
while(1)をbreakしてるのみるとforでやれと思ってしまう
n++の前でbreakすることに意味があるんだから、forにしてもなw
whileでやるなら breakする意味が無いだろお馬鹿さん while((i<<=1)<x) { n++; }
それなら最初からそう書いたら? forとか言わないでw
ぷぷぷ
>>290 それは while のなかでいわば複文を書いているだけなのでは。
(i<<=1) のように短ければいいものの、この部分が長大なものになると、for(初期化;;) { 前処理; if()break; 後処理 } とかくのが自然な場合が多いものです。
forを使って書き換えたのマダー
だからそう言ってるじゃん
条件処理部とインクリメントを空白にするなら、forである必要もないと思うが
単に気持ちも問題でしょ 俺も個人的にwhileは終了条件を指定するものであって 無限ループに使うのはなんか条件判定が一個増えてるような気がして気持ち悪い 感情論なんで人それぞれだとは思うが
>>296 while (1) { }
とすると警告してくるコンパイラがありまして
っていうか問題の指定がwhileになってるだけなのになw
「whileを使って」という指定であるなら なおさら途中でbreakしないといけないような書き方は避けるべきとも受け取れるが… whileの使い方を勉強させるための宿題なんでしょ?
while(1)程度でそんなに熱くなるなよw
試しにforで書いてみた breakどころか中身もなくなった for ( i=1,n=-1 ; i<x ; i<<=1,n++ );
while(1)の方が分かりやすい
どっちにしても小さい間だけループを回せばいいのに 大きくなった段階で抜けると実装するのはセンス無いってことか
そんな話は誰もしてないw
語尾にwつけて必死な人が一人いますね
wつけてる人間を一人だと妄想して必死認定したい人がいますね
>>304 意味不明。あなたの言うセンスのあるループの実装ってどんなのよ。
いいから問題解けよ
>>278 800KBか
一般的な環境におけるデフォルトスタックサイズは1M程度だからセーフでは有るな
とはいえスタックに積むのは数KB程度と教えるほうが望ましいからヒープに逃がすべき
static って付けるだけで良いのにな
スタックに配列をおくのはどうか。 プログラムの失敗でバッファオーバーランを引き起こすと、いとも簡単にコード情報を壊してしまうし、セキュリティホールになったりする。 68アーキテクチャのようにシステムスタックとユーザースタックが別であればよかったのだが。
313 :
デフォルトの名無しさん :2010/11/05(金) 21:13:18
>>312 範囲チェックしないプログラマの方がおかしいだろ。
>>314 strcpy(), strcat(), etc
>>315 天下のMS舐めんなよ
strcpy_s(), strcat_s()
C1Xにも入る予定だしな
「ご利用は計画的に」がC言語だと思ってたよ
フェイルセーフは java や C# に任せれば良いと思う プログラマの不注意で暴走するのがC/C++の醍醐味だと思うんだが
暴走は慣れてくると快感にすら感じてくる
>>315 そんな関数使うときは、バッファオーバーフローしないと確認した後じゃなきゃダメだろ。
確認できないときに文字数指定付き関数を使えない奴はプログラム書くな。
だろ。
323 :
デフォルトの名無しさん :2010/11/06(土) 23:02:06
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 解析木をprefixに変換するプログラムを書き実行せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月3日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
324 :
デフォルトの名無しさん :2010/11/06(土) 23:03:20
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 解析木をinfixに変換するプログラムを書き実行せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月3日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
325 :
デフォルトの名無しさん :2010/11/06(土) 23:05:47
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 再帰版と非再帰版のフィボナッチ数計算プログラムを作れ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月3日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
[4] 期限:11月3日 1年あるじゃないか、時間あるから自分でヤレ
わらた
328 :
デフォルトの名無しさん :2010/11/06(土) 23:27:41
>>325 #include <stdio.h>
int f1(int n, int a, int b)
{
return n ? f1(n - 1, b, a + b) : a;
}
int f2(int n)
{
int a = 0, b = 1;
while(n--) {
a += b;
b = a - b;
}
return a;
}
int main(void)
{
int n;
scanf("%d", &n);
printf("%d %d\n", f1(n, 0, 1), f2(n));
return 0;
}
ここでオーダー厨登場 どいつもこいつも計算量が大きすぎる O(logn)だろ
>>332 オーダー厨って適当な事しかいわない奴の事なの?
オーダオーダ(そうだそうだ)
フィボナッチ数なんて 32bit の範囲だと 50個も無いし 64bit の範囲でも 100個もないんだからテーブルにしておけば O(1) ですむ
単純な加算なんだしbitに拘ることもない。
「再帰使うとシンプルに書ける場合もある」ということを伝えるための授業なんだからオーダーなんて気にするな まぁ、大抵の学生は 「ふーん、なんか便利そう。でも、結局どんな時に使うの?」 ってな感じで理解にまではいたらないんだけどなw
再帰使ったTMPでテーブル生成すればいいな
[1] 授業単元:C言語 [2] 問題文:以下の課題では、main関数を求めるなど、動作が可能なプログラムにして提出すること。 (1)3つのint型関数の最小値を返す関数を作成しなさい。 プロトタイプは次のようになる。int min3(int x, int y, int z); キーボードから値を 3つ入力し、これらの関数に引数で値を渡す。関数で処理した結果を表示すること。 (2)2つの整数の和を求める関数及び差を求める関数を作成しなさい。 プロトタイプは次のようになる。 int sum(int x, int y); int diff(int x, int y); キーボードから値を2つ入力し、これらの関数に引数で値を渡す。関数で処理した結果を表すこと。 [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月8日 よろしくお願いします
だからね、完全数とカレンダー算出の課題こいやー
>>340 でなくて良いけど
>(1)3つのint型関数の最小値を返す関数を作成しなさい
int型関数ってint型を返す関数と思う?
そうすると、3つの関数があり、それらはint返す。で作るのはそれらの返り値の最小値を返す関数
int min3(int x, int y, int z); ってこと?
>キーボードから値を 3つ入力し、これらの関数に引数で値を渡す。
int min3(int x, int y, int z)については引数のこと言うことないから、
これらの関数は3つのint型関数ことを言っているのかな?
3つint型関数って何をする関数なんだろ? 創造力養うために、自分で適当に
値(int double...なんか)を受け取って何かして、そしてintを返す関数を作れってことかな?
今の学生って頭良いね。僕があまり理解できない文でも何を言っているのか理解できるんだね
つまんない突っ込み
>>341 『main関数を求めるなど』にも突っ込んだ方が良いな
多分、黒板に書かれた問題を写し間違ったんだとは思うけど、『3つのint型関数』と『これらの関数に』が
文章として変に整合性が取れてるから悩むよな
348 :
341 :2010/11/07(日) 19:10:11
>>345 キーボードから値を入力してって書いてあるやん
>>349 mainを自分で適当に書き換えれば良いだけ。
他人の問題と関係ない部分のエラーチェックや型チェックの省略に対しては 鬼の首をとったかのような突っ込みをいれるのに、自分が言われるとコテを外してこの言い草とは… 他人に厳しく自分には甘く!ですね
普段の行いが悪いから許容の範囲内かと思われる事までつっこまれちゃうんだなw
353 :
デフォルトの名無しさん :2010/11/07(日) 20:34:08
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 解析木をprefixに変換するプログラムを書き実行せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月3日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
355 :
デフォルトの名無しさん :2010/11/07(日) 21:22:53
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 解析木をprefixに変換するプログラムを書き実行せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月10日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
356 :
347 :2010/11/07(日) 22:01:22
>>355 ツリー構造で表現された数式を prefix, infix, postfix の表記に変換せよって問題なのか?
すこし漠然としすぎるな
せめて、基本となるツリー構造を成す構造体くらいは示さないと回答は得られないと思うよ
[1] 授業単元:C言語
[2] 問題文(含コード&リンク)
5人でじゃんけんをした時に引き分けになる確率を、
モンテカルロ法を用いて求めよ。
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:11月11日
[5] その他の制限:乱数には stdlib.h のrand()
>>3 を使用せよ。
359 :
355 :2010/11/07(日) 22:19:40
>>357 postfixから解析木にへんかんするプログラムならありました
struct t2node {
int data;
struct t2node *left;
struct t2node *right;
};
struct t2node *postfix2tree ()
{
struct stack *s = newstack(SSIZE, SNAME) ;
struct t2node *n;
int c;
while ((c = getchar()) != EOF) {
n = (struct t2node *)malloc(size of *n);
n->data = c;
if (c == ‘+’ || c == ‘*’ || c == ‘-’ || c == ‘/’) {
n->right = pop(s);
n->left = pop(s);
} else {
n->left = n->right = NULL;
}
push(n, s);
}
return pop(s);
}
>>358 #include<stdio.h>
#include<stdlib.h>
#define TRY_COUNT 100000
#define N 5
int main(void)
{
int aiko_count=0;
int i, j;
for(i=0;i<TRY_COUNT;i++)
{
int each_count[3]={0};
int zero_count=0;
for(j=0;j<N;j++)
{
each_count[rand()%3]++;
}
for(j=0;j<3;j++)
{
if(each_count[j]==0) zero_count++;
}
if(zero_count!=1) aiko_count++;
}
printf("%d/%d = %.2f%%\n", aiko_count, TRY_COUNT, aiko_count*100.0/TRY_COUNT);
return 0;
}
>>359 数字は一桁に限定してるんだね
そのサンプルの手法で postfix 表記の数式からツリー構造(struct t2node の結合データ)を生成し、
生成されたツリー構造から prefix, infix 表記の文字列を作成しろって事か
() 付きで良いなら prefix は難しくないと思うけど infix は難しいな
362 :
デフォルトの名無しさん :2010/11/07(日) 23:07:58
>>359 追加の質問
struct stack, newstack(), pop(), push() のコードが提示されてないけど、これらは勝手にでっち上げて良いの?
pop() の戻り値、および push() の引数 n がキャストされていない事を考えると struct stack は t2node* 専用の
スタッカーと考えて良さそうだ(よって SSIZE はスタック上限と考える、SNAME は無視)
でっち上げるのは簡単だけど、授業の流れから派生した出題であるならば提示されたコードを流用しないと
マズイのではないのか?
そもそも、このコードは授業で提示されたコードなのか?
struct stack* s は newstack() 内で確保された領域であると考えられるのだが、このコードでは開放されていない
先に書いたように数字は1桁に限定されているから t2node の data は char で十分だ
また、空白等が入力された場合の考慮もなされていない
明らかに問題が多いこの様なコードを提示する講師が居るとも思えないのだが
>>359 本当にそれは動くコードの一部から持ってきたのだろうか。
sizeof の間にスペースあったらダメでしょ。
>>361 何か勘違いか、思い違いしてると思う。
prefix にカッコは全く要らないよ。
解析木を深さ優先で訪れた順に出力するだけ。
infix も省略可能な余計なカッコがあっても良いならすごく簡単。
演算子を訪れたときに開きカッコ、演算子から返るときに閉じカッコ、
left が NULL か left 側から戻ってきたときにノードの値を出力、の3つだけで良いはず。
>>363 細かいけど、「開放」じゃなくて「解放」ね。
365 :
デフォルトの名無しさん :2010/11/07(日) 23:43:04
>>364 動くかはわかりませんが、授業で例としてだされたコードです
これはひどい
なにがひどいんだ?
>>364 prefix って()を全部無くしても問題無いんだっけ?
いやさっき始めて前置演算式というモノを知った俺が『だっけ』はおかしいな
infix も確かにそんなに難しくは無いな右へ末端まで追ってから左枝をたどる感じで再帰するだけだな
>>368 そうか、どっかで見た様な関数名だと思った、じゃあ後出し小僧か、俺はオリようかな
>>369 大抵の人は、数式と同じように解析木の左が前になるようにノードを使用するから、
辿り方が左、右の順になると思う。まぁ、実装する人の自由だけど。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) キーボードから入力した1桁の整数の値に応じて、下記のswitch文と同等の動作をする処理を、if文を用いて作成しなさい。2つ処理の実行結果を確認しなしさい。 *実行結果は色々な入力値(switch文のcaseラベルで記述した値)を網羅して確認すること。
/* if文のとswitch文の動作を確認するプログラム */
#include<stdio.h>
int main(void){
int sw; printf("整数を入力してください:");
scanf("%d", &sw); printf("switch文を使用した判定結果\n");
switch (sw) {
case 1 : puts("A"); puts("B"); break;
case 2 : puts("C");
case 5 : puts("D"); break;
case 6 :
case 7 : puts("E"); break;
default : puts("F"); break;
}
printf("if文を使用した判定結果\n");
@ここにif文を使用した判定処理を入れる
return(0);
} [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:11月9日 [5] その他の制限: なし よろしくお願いします。
>>371 else if を使ったコードは親の遺言で書くのを禁じられている
>>367 出題者側の丸投げ具合がひどい、最低限の確認くらいしないんだなーって思った。
>細かいけど、「開放」じゃなくて「解放」ね。 こういうつまらない突込みをするのは◆QZaw55cn4c だから嫌われてるって気付かないのかな
↓に「俺は嫌いじゃないぜ?」と本人がレスをつける
>>375 悪いけど人違い。
誤字が誤解を生むことも多々あるから、できる限り気をつけた方が良いよ。
>>371 指定の通りif文で書きました。同じ動作になるか確認してない
if( sw == 1 ) {puts("A"); puts("B");}
if( sw == 2 ) {puts("C"); sw = 5;}
if( sw == 5 ) puts("D");
if( sw == 6 ) sw == 7;
if( sw == 7) puts("E");
if( sw < 1 || sw == 3 || sw == 4 || sw > 7 ) puts("F");
>>373 else if 使わないでも実装できるけど、何でコード晒さないの?
>>380 ヒントを与えれば自分で書けるんじゃないかと思ったから
>>381 そんなヒントかどうかわからない文章を見てプログラムが書けるレベルの人なら、
ここで質問はしないだろう。
少しでも自分で考えようという意思があったらこんなとこに丸投げしない
>>379 の、
if( sw == 6 ) sw == 7; は
if( sw == 6 ) sw = 7;
です。
ごめんなさい
>>384 sw の書き換えなんかしないで、
3行目を if (sw == 2 || sw == 5)
4~5行目を if (sw == 6 || sw == 7)
と書けば間違えなかったのに。
386 :
デフォルトの名無しさん :2010/11/08(月) 01:26:42
誰か355できないでしょうか?
>>386 もし必須なら今年度この授業の単位を取ることはあきらめて、選択なら切りなさい。
あなたの理解度と質問の仕方では、解答者は多分現れないよ。
388 :
デフォルトの名無しさん :2010/11/08(月) 01:57:56
>>363 授業で提示されたコードを使わなくても作れればOKだそうです。
>>355 回答者に対するレスも無いからな
問題投げて回答のチェックもろくにしてないんじゃあるまいか
どんだけ怠けもんなんだか
390 :
363 :2010/11/08(月) 02:19:28
関数A内で変数Bが一定以上の数値であるかどうかを判断(変数にはfor文で次々と値が代入されていく)し、以上なら1、以下なら0が結果として帰ってくるようにした後 main関数内で何番目の変数Aが1で何番目の変数Aが0だったかをcsvにひたすら書き込むプログラムを組んでもらえませんか?
392 :
デフォルトの名無しさん :2010/11/08(月) 03:25:59
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 解析木をprefixに変換するプログラムを書き実行せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月10日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。 次の構造を使用すること struct t2node { int data; struct t2node *left; struct t2node *right; }; オペランドは一文字 スタックの値のタイプを変更 int → struct t2node *
>>391 #include <stdio.h>
#include <stdlib.h>
#define SUUTI 50
int func_a(int b) {
if(SUUTI < b){ return 1; }
else{ return 0; }
}
int main(void){
int i;
char cmd[100];
for(i=0; i<10; i++){
sprintf(cmd, "echo %d banme no hensu ha %d >> csv", i, func_a(rand()%100));
system(cmd);
}
return 0;
}
ひたすらって書いてあるんだから無限ループで回してやればいいのに優しいな!
あいかわらず問題まともに読めないんだな 脳のどっかに障害でもあんじゃねーのw
長文粘着と同一視されてよほど根にもっているんですね。お気の毒なことです。
その仮想敵を妄想するのが長文とそっくりなんだよw
ご指摘感謝と言いつつなぜ(2)だけを修正して(1)はそのままなのか理解できないw
長文が誰かも特定できていないのに、見えない敵と戦う気持ち悪い奴が 2ちゃんねるには増えましたね。他の板でも誰のことを言っているのか 分からないくらい身に覚えの無い言い掛かりをされることがありますが・・・
>>398 みたいな見えない敵と戦う気持ち悪い奴ってまじで困るよな
久々にここを見たら、ここもおかしくなってたし。一匹頭のおかしなのが 別のことで口論になった時、getcharがどうとか言い出して こっちは何のことかさっぱり、身に覚えがなかったし。あれは気持ち悪かった。
お前が一体何と戦ってるのかわからない
別に自分が戦っていなくても、相手が自分を別の人と勘違いして 見えない敵と戦っているだけだが・・・身に覚えが無くて無視していると 逃げたとか言い出すし。本当にキモイ、被害妄想で生きている奴って。
◆QZaw55cn4cはほんとにキモイなぁ
とりあえず、◆QZaw55cn4cが問題を読むのが不自由なのは事実だしなあ
408 :
デフォルトの名無しさん :2010/11/08(月) 17:07:12
俺が仮想敵だ
>>408 ビシッ / ̄ ̄ ̄ ̄\
/ ̄\.( 人____)
,┤ ト|ミ/ ー◎-◎-) int main() (笑)
| \_/ ヽ (_ _) ) if((c=getchar()) == EOF) { }
| __( ̄ |∴ノ 3 ノ return は省略可
| ___)_ノ ヽ ノ
ヽ__) ノ )) ヽ
人気に嫉妬ってやつか
#include <stdio.h> int main() 笑
>>409 ,411
ISO/IEC 9899:1999 5.1.2.2.1 の "or equivalent" という文言に ISO/IEC 9899:1999 の 6.7.5.3 14 を適用すれば、
int main() { ... }
が C99 に準拠していることがわかります。
>>409 ISO/IEC 9899:1999 の 5.1.2.2.3.1 によれば、
reaching the } that terminates the
main function returns a value of 0.
とあり、return は省略可能と考えてもいいと思います。
C99は規格として認められていませんので。
418 :
358 :2010/11/08(月) 20:59:41
#include <stdio.h> int main(void) { double a, b, c; char d; printf("数字 演算子 数字 のように入力して下さい。 \n"); printf("例 12.4 * 4.0 \n"); scanf("%lf %c %lf", &a, &d, &b); /*判定文により、加算、減算、乗算、除算を判定して計算。*/ printf("答えは, %lf です。 \n", c); } 未完成な部分をどなたかやっていただけないでしょうか
420 :
デフォルトの名無しさん :2010/11/08(月) 22:28:22
[1] 授業単元:
[2] 問題文(含コード&リンク):アンプを(pic16f84aを用いた)赤外線リモコンで制御するためのプログラム
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: sdccとgputils(どちらもXP対応)
[3.3] 言語: C
[4] 期限:2010年11月10日
http://shino.pos.to/eda/remocon2.htmlに参考プログラムがあるのですが ,エラーがでて上手くコンパイルできません。
どなたかわかる方がいらっしゃれば教えていただきたいと思います。
何懐かしいAA貼ってんだよ、俺にもやらせろw ビシッ / ̄ ̄ ̄ ̄\ ←ISO準拠、標準スタイルが理解出来ない時代遅れの島国根性ジャポネーゼ / ̄\.( 人____) ,┤ ト|ミ/ ー◎-◎-) int main() (笑) | \_/ ヽ (_ _) ) if((c=getchar()) == EOF) { } | __( ̄ |∴ノ 3 ノ return は省略可 | ___)_ノ ヽ ノ ヽ__) ノ )) ヽ
>>414 あんたまた墓穴掘ったなw
ISOを参考にしたらって、CとC++で別に存在するんだが???
C++に関してはコンパイラで確認もしたがreturnの省略は可能で
エラーも警告もなかったが、Cでやればどうなる?
CもC++でいけるから区別しないって言うなら、C言語限定に限らないんで
その話は通用しないよ。あとint mainに関してもプログラムの開始をmain関数にすると
前提条件もあり、引数についてもvoid または2つのパラメーターについて明記されているから。
断っておくがあくまでも「ISO準拠の標準スタイル」についてであって そうでなくても通用するかしないかについては言及していないし 独自の環境であればそれに限らずとも補足したのにいつまでもしつけぇんだよ!
ISO準拠とかトリッキーな技は必要ねーんだよ 出題のレベルと意図を汲んで丁寧に書いてやればいいのに それが分かってない◆QZaw55cn4cが多すぎる
#include <stdio.h> int main(void) { // return 0; } -------------------------- #include <iostream> int main() { // return 0; } -------------------------- retunr 0; をコメントアウトしてあるが、//ありと無しでこれらをコンパイルすれば コンパイラが出す警告を見れば分かる。それでもコンパイルが通ったからだの C++では省略可能だからと言って、int mainのintを無視するような解釈とか するからおかしくなる。コンパイラが自動的に処理している部分もあるんで 使用している環境によっては気づかない人がいるんだろうけど、そういう人は 適切なコードが書けているとは思えない。
430 :
デフォルトの名無しさん :2010/11/08(月) 23:40:49
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 解析木をprefixに変換するプログラムを書き実行せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月10日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。 次の構造を使用すること struct t2node { int data; struct t2node *left; struct t2node *right; }; オペランドは一文字 スタックの値のタイプを変更 int → struct t2node *
しねばいいのに
そろそろ新しいネタで頼む
>>427 >トリッキーな技
別にトリッキーでもないけど?
434 :
417 :2010/11/09(火) 00:24:27
>>430 だから書いてやったよ
#include <stdio.h> から始めたければ、ソースの先頭に追加すれば良い
struct t2node は data が int な為、この問題には適さない( data は char であるべきだ)
これも使いたければ、構造体定義を適当な位置に追加し、main() で無意味に変数定義を行えば良い
435 :
デフォルトの名無しさん :2010/11/09(火) 00:40:05
436 :
434 :2010/11/09(火) 00:59:59
437 :
デフォルトの名無しさん :2010/11/09(火) 01:22:43
>>437 馬鹿の1礼儀を知らない
単に見落としていたなら
>>435 でその非礼を詫びるべき
見た上で条件(#include <stdio.h> で始まる等)を満たしていないと判断していたならアンカーを付けて、
その諭旨を伝えるべきで、問題を張り重ねるべきではない
馬鹿の2題意を理解していない
通常、<stdio.h> から始めると指定されているならC言語で書く事が条件となるし、struct t2node を
使用する事が条件なら無意味に定義しただけでは駄目
つまり、
>>434 に書かれている様な対応では問題が有る
まぁ馬鹿の2に関してはここに来てる以上は仕方ないけど、馬鹿の1はコミュニケーション能力の問題
人と接する礼儀も知らずプログラミング能力も無いならプログラマとしては全く役に立たないよ
早いうちに進路を見直すことをお勧めする
いやよ、年収1千万円程度の貧乏人だから、お前らみたいに優れた プログラミングは出来ないけど、PCならそれなりの環境を整えているから 俺に金儲けになるプログラムを作ってくれYO!
>>438 あんた、悪いことは言わん。変な奴は相手にしない方が良い。
長文のあんたの方が精神的に問題があるようにしか思われないぞ?
進路がどうとか言うけど、最初は成績が悪く、実力が無かった人が イチローみたいにメジャーで活躍するくらいにまで成長する可能性はある。稀だがw まあどうせいつかは死ぬ人間だし、とんとんで良いんじゃない? 極めたつもりになっている奴は危険。例え平均以下でも、何か 他人には無い優れた能力があれば、それを利用して金儲けした方がマシ。 C言語が出来なくても生きていけますよ?それよりもまともに活動できる 身体こそまさに自分にとって一番の資本、財産。健康を害してからでは遅いよ。 頑張れば健康を悪化させる前の様に元気になる訳でもなく、ただでさえ経年劣化で 年を取れば能力が劣っていくというのに。 長年世話になった、一緒に仕事をしてきた人が末期がんになっちまった。 自分もいつか、何かしら病気か、運良く寿命まで生きられるか知らんが こんな場所でガミガミしている人生が楽しいかい?
>>440 もう相手にする気は無いよ、あれが最後だ
>>417 をそのまま提出して講師にどんな突っ込みを入れられるは知りたいが、それ以外の興味は無い
いつもの長文粘着君じゃねーかw
え?だって誰もが一生は一度きりでしょ?明日死ぬかも知れない人生で いつまでも単なる自己満足で、金にもならない知識の使い方をし続ける訳? 自分一人がこの世に存在していなくても、困る人は身内や接していた人の中には いるかもしれないが、世の大半の人間から見たらちっぽけな存在だから 社会全体から見たら大して困らないよ。そういう自覚ありますか? 例え総理になった人でも、歴史に名の残る人物だろうと、所詮は1人の人間ですよ。
チラシの裏にでも書いてろよ、このゴミがw
449 :
デフォルトの名無しさん :2010/11/09(火) 07:36:50
[1] 授業単元:cプログラミング [2] 問題文(含コード&リンク): キーボードから数字(2〜9)を入力し、入力された数字を辺の長さとする正方形 を表示する。なお、入力が間違っている場合、再度入力を要求する。 ↓こんな感じ 実行結果例 数字(2〜9)を入力してください:0 入力エラーです!! 数字(2〜9)を入力してください:3 * * * * * * * * [3] 環境 [3.1] OS: unix [3.2] コンパイラ名:gcc [3.3] 言語:C [4] 期限:11月11日 [5] その他の制限:whileを使って。
>>425 典拠を示してください。コンパイラの振る舞いはコンパイラ実装者の考えであり、ISO/IEC 9899:1999 や ISO/IEC:14882:2003 の中にそれを示す箇所がありますか?
>>428 原典でどうぞ。 ISO/IEC 9899:1999 からしめしてください。JIS でもいいです。
>>449 #include <stdio.h>
int main(void)
{
int i, j, n;
while(1) {
printf("数字(2〜9)を入力してください:");
scanf("%d", &n);
if(2 <= n && n <= 9) break;
printf("入力エラーです!!\n");
}
for(i = 1; i <= n; i++) {
for(j = 1; j <= n; j++) printf("%c ", i == 1 || j == 1 || i == n || j == n ? '*' : ' ');
printf("\n\n");
}
return 0;
}
453 :
218 :2010/11/09(火) 12:21:54
>>453 問題が変わってるな
>>218 の時は ABC -> ABCCBA の問題と認識してたんだよね
でも実は ABC -> CBA の問題だったから再提出になったんじゃね?
そんで
>>229 の *out = *in で ABC を代入してる部分を外せばOKって考えたんじゃね?
マルチしないで少しくらいは自分で考えなよ、
>>229 が優しければ教えてくれるよ
単純に反転でいいのか?
457 :
455 :2010/11/09(火) 13:50:25
(1) in :ABC out:CBA (2) in :ABC out:ABCCBA (3)中央折り返しってこうとも受け取れる in :ABCDEF out:ABCFED 実は(1)で printf ( "%s", in ) ; printf ( "%s\n", out ) ; としてるから一見(2)に見える表示になるとも予測できる さぁ、どれだ?
こうだろ in: ABCDE out: BACED
[1] 授業単元: コンピュータ基礎 [2] 問題文(含コード&リンク): 3行3列の実数行列aijとbijの積を計算するプログラムを作成せよ。 ただし、乗算結果の行列をcijとして計算を行うものとする。 行列の要素への入力は、代入文あるいは初期化子を用いること。 [3] 環境 [3.1] OS: Windows 7 [3.2] コンパイラ名 gcc [3.3] 言語: C [4] 期限: 本日17時まで 急ぎで申し訳ありませんがよろしくお願いします。
#include <stdio.h> int main(void){ int aij[3][3] = { {1,1,1}, {1,1,1}, {1,1,1}, }; int bij[3][3] = { {1,2,3}, {4,5,6}, {7,8,9}, }; int cij[3][3]; int i,j; for(j=0; j<3; j++){ for(i=0; i<3; i++){ cij[j][i] = aij[j][0]*bij[0][i] + aij[j][1]*bij[1][i] + aij[j][2]*bij[2][i]; } } printf("===result===\n"); for(i=0; i<3; i++){ for(j=0; j<3; j++){ printf("%d ", cij[i][j]); } puts(""); } return 0; }
実数だった。反省はしないし修正もしない。
463 :
デフォルトの名無しさん :2010/11/09(火) 17:10:33
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 以下のような動作をするプログラムを作成せよ。 ・main()関数の引数を用いて整数値xを与える。 ・fgetsを用いて、標準入力(キーボード)から英単語と英文字cを与える。 ・英単語のx番目以降の文字をcに変える関数を作って使用する。 ・変更された英単語と整数値を使って文字列"変更された後の英単語_整数値"を作る ・puts()またはfputs()を用いて出力 実行例:./a.out 5 キーボード入力:information p 実行結果(表示):infoppppppp_5 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2010年11月11日まで
>>464 の問題を下のように解いたのですが
実行結果がinfo_5となります。
どこを修正すればよいのか教えてください。
#include<stdio.h>
#include<stdlib.h>
#define MAXSTR 30
void change_str(char *s1, char c, int x)
{
int i;
for(i=x-1; s1[i]='\0'; i++){
s1[i] = '!';
}
}
int main(int argc, char *argv[])
{
char str_a[MAXSTR];
char str_b[MAXSTR];
char str_c[MAXSTR];
char moji;
int n = atoi(argv[1]);
puts("英単語と英文字を入力してください");
fgets(str_a, MAXSTR, stdin);
sscanf(str_a, "%s%c", str_b, moji);
change_str(str_b, moji, n);
sprintf(str_c, "%s_%d",str_b,n);
fputs(str_c,stdout);
printf("\n");
return 0;
}
俺は嘘は1つも言ってないぜ?一度、重病に罹って病気になる前の 健全な体に戻るとでも?例え著しく悪化させただけで、薬や手術で 一時的に悪化が食い止められても、それ以上は良くならない。 人間の肉体もこうしている間に経年劣化で衰え続けているというのに。 成人するまでの成長なんて、平均寿命の約80年の間の1/4に過ぎない 生まれた時は何も知らない、出来ない所から何か出来るようになるまでの 未熟な時期に過ぎない。その何かが出来るようになったら さっさと金儲けの為に、得た知識や知恵を使わないと、老化して 時代遅れになって使い物にならなくなったら、存するのは自分だよ。 自分の肉体が一番の資本、財産。
>>429 申し訳ありませんが、個々のコンパイラの事情はともかく、
ISO/IEC 9899:1999 の 5.1.2.2.3.1 には
reaching the } that terminates the
main function returns a value of 0.
とはっきりかいてあり、また、
ISO/IEC 9899:1999 の 6.7.5.3.14 には、
An identifier list declares only the identifiers of the parameters of the function. An empty
list in a function declarator that is part of a definition of that function specifies that the
function has no parameters. The empty list in a function declarator that is not part of a
definition of that function specifies that no information about the number or types of the
parameters is supplied.124)
とかいてあります。
実存するコンパイラにはそのコンパイラなりの事情があるとおもいますので、規格にそってお話しできないものでしょうか?
>>422 みたいですね。gcc には gcc の事情があるのでしょうね。でも、
ISO/IEC 9899:1999 6.7.5.3 14 には、
An empty list in a function declarator that is part of a definition of that function specifies that the
function has no parameters.
とありますから、C99 的には func() と func(void) は関数定義の一部であるかぎり同一ですね。
でもね、もともとは、
int main(void) とかかずに int main() とかくと「ISO に従っていない」という人がいるので、「int main() もC99に準拠しているよ」と主張しているわけです。
C89 ならばなんの問題もなく int main() は C89 に準拠しているわけです。
int main() と int main(void) とに違いがあれば、int main() はC89に準拠した書き方ですし、
int main() と int main(void とに違いがなければ、ISO/IEC 9899:1999 5.1.2.2.1 の "or equivalent" という文言にしたがって、C99 に準拠していることになります。
この辺の論理に追いついていない人がまだまだいるみたいですね。
規格うんぬんは後付理由で 「ちょっとうっかり忘れちゃいましたw」って認めちゃいなよ
これがツン期ってやつか
>>468-469 規格とかじゃなく、このスレでは宿題の指定環境でエラー、警告でないが重要
VC2005でC言語と指定されているのに、サポートしていないC99の規格ではあーだこーだと言ってもしょうがない
規格の話したければ、このスレじゃなくC言語スレで汁
>>468 さすがにお前には日本語も英語も、事情を把握する頭もないわw
黙っとけ、自分の方が理解力がないと思われますよ?
>>468-469 相手が言ってもいないことを言った、そう思ったとか妄想して反論するから悪い。
お前の方が標準スタイルという意味を全く理解していない。
そもそも、コンパイラにまで話が及ぶと、環境の話にまでもつれ込むんでやめとけ。
あくまでもISO、ANSI準拠の標準スタイルでは、独自の環境はそれに限らずと
補足してあるのも見落としているよ。
※C99は正式な規格ではありません。
>>475 これくらいの分量で長文とは、ゆとり脳もいいところですな。
>>478 すぐに「ゆとり」という言葉で片付けようとするのが典型的な思考停止人間ですな。
こんなことしてるよりちゃんと小学校行ったほうがよいですな。
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 配列の中の値をランダムで選択し、表示。また、ランダムでも、大きな値の方が選択されやすくして表示。配列の値={2,2,4,5,5,8,9,10,2,3} [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: :cygwin [3.3] 言語: C [4] 期限:2010年11月09日24:00まで [5] その他の制限:なし なんか何言ってるかわかりづらいと思いますが、よろしくお願いいたします。
#include <stdio.h> #define SIZE 10 int main(int argc, char* argv[]){ int i, max=0, ransu1, ransu2; int array[SIZE] = { 2,2,4,5,5,8,9,10,2,3}; int count[SIZE] = {0}; for(i=0; i<SIZE; i++){ if(max < array[i]){ max = array[i]; } } for(i=0; i<100000; i++){ do{ ransu1 = rand() % SIZE; ransu2 = rand() % max; }while(array[ransu1] < ransu2); count[ransu1]++; } printf("=== result ===\n"); for(i=0; i<SIZE; i++){ printf("array[%d] was %d times selected\n", i, count[i]); } return 0; } $ ./a.exe === result === array[0] was 5074 times selected array[1] was 5051 times selected array[2] was 8391 times selected array[3] was 10081 times selected array[4] was 10138 times selected array[5] was 15477 times selected array[6] was 16865 times selected array[7] was 17056 times selected array[8] was 5105 times selected array[9] was 6762 times selected
483 :
デフォルトの名無しさん :2010/11/09(火) 22:00:46
>>420 昨日書き込みした420ですが,リンク先に行けばわかるのでしょうか?
>>481 ありがとうございます!
助かりました(;_;)
大きい値が選択されやすい、というプログラムがつくりたかったかんじです。
do{} whileの条件は<=だったかな…
#include<stdio.h> #include<stdlib.h> #include<time.h> #define NITEM(arr) (sizeof(arr)/sizeof(arr[0])) int main(void){ int value[]={2,2,4,5,5,8,9,10,2,3}; int weight[NITEM(value)], weight_sum; int i, j, r; srand(time(NULL)); weight_sum=0; for(i=0;i<NITEM(value);i++) weight_sum+=(weight[i]=value[i]+0); for(j=0;j<100;j++){ r=rand()%weight_sum; for(i=0;i<NITEM(value);i++){ if(r<weight[i]) break; r-=weight[i]; } printf("%d\n", value[i]); } return 0; }
>>425 >CとC++で別に存在するんだが???
Cの場合(ISO/IEC 9899:1999 5.1.2.2.3 1)は
>>414 で示したとおり return なしでも return 0 と同じとありますし、
C++ の場合は、ISO/IEC 14882:2003 3.6.1.5 で、
A return statement in main has the effect of leaving the main function (destroying any objects with automatic
storage duration) and calling exit with the return value as the argument. If control reaches the end
of main without encountering a return statement, the effect is that of executing
とあり、return なしで main() を抜けるのは exit() を呼ぶのと同じ、とあります。
C でも C++ でも main() で return を省略した場合の振る舞いが規定されている以上、main() での return は省略可能と考えて問題ないでしょう。
>C++に関してはコンパイラで確認もしたがreturnの省略は可能で
>エラーも警告もなかったが、
どこぞのコンパイラがエラーや警告を吐くとか吐かないとかで判断するのは間違ってやしませんか?
>>432 「float 使う奴は馬鹿」
by ISO/IEC 9899:1999 6.5.2.2.6
はどうですかね。
489 :
デフォルトの名無しさん :2010/11/10(水) 02:12:02
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月13日 [5] その他の制限:#include<stdio.h> int main() breakを使う 円周率 π の値を近似式 π ≈ 4Σ(−1)^n[{(1/2)^2n+1} +{(1/3)^2n+1}]/( 2 n + 1 ) を用いて小数第8位まで正しい値(3.14159265)を出力し,(Σはn=0。100まで) その π の値を用いて入力された数値 ε に対して,次の不等式を満た す最小の自然数 N を求めるプログラムを作れ. |{π^2}/6-Σ(k=1.N)1/k^2|<ε できる方がいたらやり方を教えてください。
490 :
デフォルトの名無しさん :2010/11/10(水) 02:51:13
マルチポストすみません。後からこのスレを発見したもので。。
#include <stdio.h> #include <math.h> int main() { int i, k, n = 0; double e, p = 0, f; printf( "e :" ); scanf( "%lf", &e ); for( i=0; i<=100; ++i ) p += 4 * pow( -1.0, i ) * ( pow( 1.0 / 2.0, 2 * i + 1 ) + pow( 1.0 / 3.0, 2 * i + 1 ) ) / ( 2 * i + 1 ); do { ++n; f = p * p / 6.0; for( k=1; k<=n; ++k ) f -= 1.0 / ( k * k ); } while( !( fabs( f ) < e ) ); printf( "N = %d\n", n ); return 0; }
πの表示とbreak使用が無くね?
>>492 thx
#include <stdio.h>
#include <math.h>
int main()
{
int i, k, n = 0;
double e, p = 0, f;
printf( "e :" );
scanf( "%lf", &e );
for( i=0; i<=100; ++i )
p += 4 * pow( -1.0, i ) * ( pow( 1.0 / 2.0, 2 * i + 1 ) + pow( 1.0 / 3.0, 2 * i + 1 ) ) / ( 2 * i + 1 );
printf( "pi = %.8f\n", p );
while( 1 ) {
++n;
f = p * p / 6.0;
for( k=1; k<=n; ++k )
f -= 1.0 / ( k * k );
if( fabs( f ) < e )
break;
}
printf( "N = %d\n", n );
return 0;
}
494 :
デフォルトの名無しさん :2010/11/10(水) 03:44:48
489に追加です。すみません。 表示は以下のようにする. Input the volume of error: 0.000001【Enter】 Pi is 3.14159265. the smallest integer N is ␣␣␣␣. 配列,数学関数は使ってはいけない.
後出ししね
#include <stdio.h> #define ABS( x ) (((x)<0)?-(x):(x)) double dnpow( double x, int n ) { return n > 0 ? x * dnpow( x, n - 1 ) : 1.0; } double af( double p, int n ) { int k; double f = p * p / 6.0; for( k=1; k<=n; ++k ) f -= 1.0 / ( (double)k * k ); return ABS( f ); } int find_n( double p, double e, int n_min, int n_max ) { int n_mid = ( n_min + n_max ) / 2; return n_min + 1 == n_max ? n_max : af( p, n_mid ) < e ? find_n( p, e, n_min, n_mid ) : find_n( p, e, n_mid, n_max ); } int main() { int i, n = 1; double e, p = 0; printf( "Input the volume of error: " ); scanf( "%lf", &e ); for( i=0; i<=100; ++i ) p += 4.0 * dnpow( -1.0, i ) * ( dnpow( 1.0 / 2.0, 2 * i + 1 ) + dnpow( 1.0 / 3.0, 2 * i + 1 ) ) / ( 2 * i + 1 ); printf( "Pi is %.8f.\n\n", p ); for( n=1; ; n*=2 ) if( af( p, n ) < e ) break; n = n == 1 ? n : find_n( p, e, n / 2, n ); printf( "the smallest integer N is %d.\n", n ); return 0; }
497 :
デフォルトの名無しさん :2010/11/10(水) 08:05:09
codepadでscanf()すりゃそうなるだろ
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 143 から3224 までの自然数n のうち、 13 で割ると余りが6 の倍数になる自然数の個数とその総和を求めよ [3] 環境 [3.1] OS:Windows [3.2] gcc [3.3] 言語: C [4] 期限: 特にありません [5] その他の制限: for,if文をやった程度なので出来るだけ簡単な文でお願いします。
連投すいません 後1問あります [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 60 から7352 の自然数n のうち、9 または14 または19 の倍数に該当する自然数の総和を求めよ [3] 環境 [3.1] OS:Windows [3.2] gcc [3.3] 言語: C [4] 期限: 特にありません [5] その他の制限: for,if文をやった程度なので出来るだけ簡単な文でお願いします。
最後です よろしくお願いします。 [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 素数の総和の計算 2+3+5+…+n+… のとき、総和が初めて9129 以上になる素数nを求めよ [3] 環境 [3.1] OS:Windows [3.2] gcc [3.3] 言語: C [4] 期限: 特にありません [5] その他の制限: for,if文をやった程度なので出来るだけ簡単な文でお願いします。
503 :
484 :2010/11/10(水) 10:36:10
いつの間にか回答が複数も! ありがとうございました!
>>500 #include <stdio.h>
int main()
{
int i, count = 0, sum = 0;
for (i = 143; i <= 3224; i++) {
if (i % 13 == 6) {
count++;
sum += i;
}
}
printf("count=%d, sum=%d\n", count, sum);
return 0;
}
>>501 #include <stdio.h>
int main()
{
int i, sum = 0;
for (i = 60; i <=7352; i++) {
if (i % 9 == 0 || i % 14 == 0 || i % 19 == 0) {
sum += i;
}
}
printf("sum = %d\n", sum);
return 0;
}
>>502 #include <stdio.h>
int main()
{
int i, j, sum = 0;
for(i = 2; ; i++) {
int f = 1;
for (j = 2; ; j++) {
if (j * j > i)
break;
if (i % j == 0) {
f = 0;
break;
}
}
if (f == 0)
continue;
sum += i;
if (sum > 9129)
break;
}
printf("prime number = %d, sum = %d\n", i, sum);
return 0;
}
>>504-506 ありがとうございます
>>504 はif文6だけでなく他の6の倍数も条件に付け足せば大丈夫そうですかね
後お手数なんですが
>>506 ってcontinueとbreak使わずに表せますか?
すみません、もう1つお願いします 何度も申し訳ない [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 21 から1324 までの自然数n のうち、10 の位の数字が3 となる素数の個数を求めよ [3] 環境 [3.1] OS:Windows [3.2] gcc [3.3] 言語: C [4] 期限: 特にありません [5] その他の制限: for,if文をやった程度なので出来るだけ簡単な文でお願いします。
21からと中途半端な、自然数の内って1324までの 素数の中で10の位が3となる値の個数を求めればおkね
おまいら直接貼るときは全角空白2つでインデント付けろよ。みにくいアヒルの子かよ
>>511 #include<stdio.h>
int main(void)
{
int i, n, count=0;
for(n=21;n<=1324;n++)
{
if((n/10)%10==3)
{
for(i=2;i*i<=n;i++)
{
if(n%i==0) break;
}
if(i*i>n) count++;
}
}
printf("\n%d\n", count);
return 0;
}
ちなみにviなら以下のコマンドを実行するだけでいい :%s /\t/ /g
コピペ前提なのに全角スペース入れろって頭沸いてるんだろうか
全角インデントとかアホすぎるなw
じゃあ醜いソースを晒してろよクズ
こいつは真性だな
日本人て他人をこきおろすの大得意だよな そりゃ萎縮して新しいことやる気が失せるは
codepad使えは解決 なんか常駐的に張り付いてる人で頑なにcodepadの使用を拒否してる人がいるよね コーディングスタイルが全く一緒だからたぶん同じ人だろうとは思うけど
コード見るのに一手間かけないといけないのがめんどい
うちの環境だとcodepad重いんだよな
2chがtabに対応してないのが悪い
直接貼り付けられたソースを読み解く労力と ワンクリックする労力を比べたら俺は後者を取るな
>>522 ◆QZaw55cn4cみたいな妄想野郎だなw
>>526 それは自分が質問者じゃないからだよ。
質問者はただ一刻も早く答えが欲しいだけなんだ。
読み解こうなんてそもそも考えない。
質問者に置換機能で 全角スペースをタブに一発変換なんて頭ないから よく分からないエラーが出ますって言い出すに1票
質問者でもないのに読み解いて間違いを指摘してくれるのはとてもありがたい。 しかしそれでも質問者のニーズを第一に考えるべきだと思う。
こんな時間に、あんたらニーズとか言ってないでニートをどうにかしろ
中国人だったらこういうことでも商売にしてしまえるんだろうがな。 知識や情報は無償であるべきだと思ってしまう。
ニートは三日やったらやめられない
535 :
デフォルトの名無しさん :2010/11/10(水) 17:17:32
わざわざワンクリするぐらいだったらコード見ない方を選ぶは
536 :
デフォルトの名無しさん :2010/11/10(水) 17:27:59
>>496 ありがとうございます。
できたらABS dnpow pow を使わないやつもお願いできますか?
まだ習ってないもので。。。
あと int main(void)使っていただけると助かります。
何度もすみません。
ぶはっ!選ぶは!!
好きに生きようぜ
>>536 af,find_nは習ったのか? dnpowを習ってないんだから習ってないだろ?
>あと int main(void)使っていただけると助かります。
>>489 [5] その他の制限:#include<stdio.h> "int main()" breakを使う
ポカーーーン
>>536 >>489 の
>[5] その他の制限:#include<stdio.h> int main() breakを使う
これで言いたいのは
#include<stdio.h>:
stdio.hにある関数は使って良いが、これにない関数は使用しないこと
int main():
プログラムで自分で作成してよい関数はint main()のみで、それ以外の関数は
自分で作成しないこと
break:
問題はループ処理で求めよ(caseで求めよじゃないよな)と強制している
が条件ですと言いたいのじゃないの?
[1] 授業単元:C言語 [2] 問題文: 次に表示します [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月12日 よろしくお願いします
[2] 問題文: (1)10個の最大値を求める 10人の身長データを順にcmで入力したとき、一番大きな身長は何pかを表示するプログラムを作成しなさい。 実行結果は次の形らしいです。 1人目の身長を入力してください (単位 : cm) (入力待ち) 2人目の身長を入力してください (単位 : cm) (入力待ち) .....略..... 10人目の身長を入力してください (単位 : cm) (入力待ち) この中で身長が高い人は、○○cmです。 ・指定 for文を使い処理を10回繰り返す。 最大値を記憶する変数を用意し、0を代入しておく。
(2)買い物金額を計算し、整理するプログラムを次の使用で作成しなさい。 「税抜き単価」と「個数」を入力すると、次の出力が得られる。 1.合計金額と税込み合計金額 2.一番単価の安かったものの金額(税抜) 3.一番単価の高かったものの金額(税抜) ・ただし、すべての商品が課税対象で税率5%とする。 ・単価に0を入力したら処理を終了する。 実行結果は次の形らしいです。 買い物をした単価は? : (入力待ち) 何個買いましたか? : (入力待ち) これまでの合計金額は、○○(税込 : △△)円です。 一番安いものの値段は、税抜××円です。 一番高いものの値段は、税抜□□円です。 ...............処理の繰り返し 買い物の単価は : (0を入力して終了) ・指定 単価の最小値・最大値を記憶する変数、単価の最大値を記憶する変数、金額合計を記憶する変数を用意し、それぞれ、10000、0、0を代入しておく。 while(l)で無限ループ作る
(3)関数f(x)の最大値と最大値となる場合のxの値を求め、表示しなさい。 f(x)=x2乗-3x+4 ただし、xは0.0001刻みとし、範囲は-10<=x<=10とする (4)掛け算九九の票を作成する。 ・出力例 1 2 3 4 5 6 7 8 9 2................ 3................ 4................ 5................ 6................ 7................ 8................ 9................ ・指定 for文を用いた2重ループを使い、九九の各値は計算式で求める。表示桁数を調整して見栄映えよく出力すること。
以上ですよろしくお願いします。
>>544 (3) は最小値じゃないのですか?f(x) は下に凸ですから、この問題だと、最大値は区間の端のf(-10), f(10) のいずれかになるのですが?
548 :
デフォルトの名無しさん :2010/11/10(水) 19:14:04
>>540 その通りです!
c言語後期から始まったばかりで全然わかんないんで
質問の仕方も雑になってしまいました。
すみません。
ではよろしくお願いします。
549 :
デフォルトの名無しさん :2010/11/10(水) 19:15:54
なんだか楽しくなってきたな。
関数を使用してはいけないって明記してないから講師じゃなくて生徒の都合って気がしてくるぜ
552 :
デフォルトの名無しさん :2010/11/10(水) 19:54:57
今は乗り切れてもこんなん解けなくて卒業出来るの?
コピペするだけの奴に都合なんて有るのかなぁ....
555 :
デフォルトの名無しさん :2010/11/10(水) 22:24:49
Perl忍者は糞
fftw_complex の定義は? 普通の複素数なら構造体だと思うんだけど しかも一次元配列でとってるのに代入は二次元配列で代入してるのは何故?
>>556 >普通の複素数なら構造体だと思うんだけど
そうだね。実部配列ってことから
67: V[v].re = in[a];
と妄想
他の実部配列アクセスも同様
558 :
デフォルトの名無しさん :2010/11/10(水) 22:40:52
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):
問題コード
http://codepad.org/1iH3TBS7 線形リストを用いた括弧チェッカーです。
1:対象要素を増やす(例えば< > の組み合わせ)
2:/* */のような2文字での判定
3:コメント文内の括弧については判定をしない
4://もコメント文として対応
等の改造をしてください。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2010年11月11日まで
とのことで
上記のコードを参考にしろと言われましたが
いまいちコードを理解することができず困っています。
よろしくお願いします。
>>558 参考ってこれ動くのか?
Push において双方向リンクの設定が正しくないから一つポップしたら壊れそうだけど
しかし、汚いコードだなぁ、久しぶりに見た
560 :
559 :2010/11/10(水) 23:12:57
>>558 聞くの忘れたので追記
言語Cって書いてあるからC++使っちゃ駄目?
561 :
デフォルトの名無しさん :2010/11/10(水) 23:26:43
>>560 C言語でお願いします。
講義でC++を使用していないので・・・。
参考コード自体にもバグがあるって言ってましたが。。
>>559 bracket.Hidari の処理は間違ってないと思し、ちゃんと動く。
ただし、bracket.Migi は全然使っていない。
双方向リストではなくて単方向リストみたいだ。
アセンブラを読んでいる気持ちになった。
で、全面的に書き直したいのだけれどもいいですかね?
>>558
563 :
デフォルトの名無しさん :2010/11/10(水) 23:44:21
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク):下のプログラムを参考にして、太郎さんと花子さんの各教科の平均点を関数で作る(オブジェクトで渡す)
http://imepita.jp/20101022/678990 [3] 環境
[3.1] OS: linux
[3.3] 言語: C++
[4] 期限: [2010年11月12日まで
[5] その他の制限: なるべく出力はcout 入力はcinを使ってください。あと、なるべく簡単にしてください。コンストラクタとか、アクセス指定子とか、クラスを関数に渡すとかは習いました。
564 :
563 :2010/11/10(水) 23:46:14
あと、実行結果も教えてください。家ではvisual c++を使ってます
>>558 もう一点気が付いたんだけど、このプログラムがC言語の括弧をチェックする為のものなら
<>に対応するのはどうかと思うぞ
for( i = 0; i < n; i++ ) ここで<>の整合性が取れなくなるから 『) に対応する ( が無い』とかのエラーで
処理中断してしまう、良いのか?
>>562 駄目じゃね? end->hidari は end を指してるから一つ pop すると end = end になると思うよ
>>565 最初に
end = NULL;
push のとき:、
new = malloc();
new->hidari = end;
のあとで
end = new;
と end を更新しています。
pop のとき
tmp = end;
end = end->hidari;
free(tmp);
だから普通の線形リストとすれば問題なく動いているようにみえるのですが。
最初のpush では end->hidari は もともとの end の値である NULL で、end 自身は新しく確保した領域をポイントし、
そのあと pop したときには、スタックの要素がなくなって、end = end->hidari で NULL になるのは問題ないのでは?
>>566 俺の勘違いだな、動くような気がする
後ろから片方向リンクってのが見慣れないから引っかかったよ
でもスタックなら後ろから片方向が効率は良いな...真似する気にはならんけど
569 :
568 :2010/11/11(木) 08:11:44
570 :
568 :2010/11/11(木) 08:23:05
さらに見直したら、
>>569 の 80,82,83 行目は無意味だ、清書する習慣は何処へ行ったのだろう...
>>558 すみません。括弧チェッカーって何ですか?
572 :
デフォルトの名無しさん :2010/11/11(木) 11:18:13
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 5個の果物から3個取り出してかごに入れるときの入れ方は何通りあるか。 この組み合わせを計算するプログラムを作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 11月13日まで [5] その他の制限: ユーザ定義関数化すること。 よろしくお願いします。
果物の種類がわからない
574 :
572 :2010/11/11(木) 11:35:05
>>573 すみません。
りんご、みかん、ぶどう、桃、いちごです。
printf("%d",5*4*3);
組み合わせだぞw
577 :
575 :2010/11/11(木) 11:45:35
P(){printf("%d",5*4*3/3/2/1);}
578 :
デフォルトの名無しさん :2010/11/11(木) 13:38:25
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 実数を10個キーボードから入力として受け付け, その後,最初の5個のデータの平均値,及びすべて(10個の) データの平均値を実数値で出力しなさい。 (この問題は配列を使用してはいけない) 入力例: 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 入力例に対する出力: 2.500000 5.000000 注) %fで出力の書式を指定した場合,小数点以下何桁表示されるかは処理系に依存するので気にしなくてよい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc4 [3.3] 言語: C [4] 期限: 11月11日まで [5] その他の制限: 問題文に,「実数」と記述されていればdouble型を, 「整数」と記述されていればint型を使用すること。
>>578 #include<stdio.h>
int main(void)
{
double x=0., ave10=0., ave5=0.;
int i;
for(i=0;i<10;i++)
{
scanf("%lf", &x);
if(i<5) ave5=(ave5*i+x)/(i+1);
ave10=(ave10*i+x)/(i+1);
}
printf("%f %f\n", ave5, ave10);
return 0;
}
ひでえなw
581 :
デフォルトの名無しさん :2010/11/11(木) 13:54:25
582 :
デフォルトの名無しさん :2010/11/11(木) 14:21:19
>>578 #include<stdio.h>
int main(void)
{
double x, ave10=0, ave5=0;
int i;
for(i=0;i<10;i++)
{
scanf("%lf", &x);
if(i<5) ave5 += x;
ave10 += x;
}
printf("%f %f\n", ave5/5, ave10/10);
return 0;
}
>>572 #include <stdio.h>
int combination(int n, int m){
int i, ans=1;
if(n-m < m) m = n-m;
for(i=1; i<=m; i++)
ans *= n--;
for(i=1; i<=m; i++)
ans /= i;
return ans;
}
int main(void){
int n, m;
char buf[20];
while(1){
printf("n m = ");
fgets(buf, sizeof(buf), stdin);
if(sscanf(buf, "%d%d", &n, &m) != 2)
continue;
printf("%dC%d = %d\n", n, m, combination(n, m));
}
}
585 :
デフォルトの名無しさん :2010/11/11(木) 14:24:01
582 追記 フローチャートは いりません。
586 :
デフォルトの名無しさん :2010/11/11(木) 14:26:32
[1] 授業単元:プログラミング演習(テーマ:関数の使い方とデータの受け渡し方) [2] 問題文(含コード&リンク):main 関数内の標準入力から入力された 文字列を引数として関数に渡し、関数内で表示するプログラムを作成せよ。 [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: Visual Studio 2005 [3.3] 言語: C++ [4] 期限: 11/12 [5] その他の制限:グローバル変数を使用しないこと お願いします。
>>586 #include<iostream>
#include<string>
void str_disp(const std::string & str)
{
std::cout << str << std::endl;
}
int main(void)
{
std::string str;
getline(std::cin, str);
str_disp(str);
return 0;
}
>>582 pdf をダウンロードするの面倒くさい
>>582 C言語の内定者課題って、まさかプログラマにはならないよね?
【質問テンプレ】 [1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク):複数の変曲点があるデータ系列の極大点と極小点を検出するプログラムを作成 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:VisualC++ [3.3] 言語: どちらでも可 [4] 期限:無期限 [5] その他の制限:for文、if文、while文などの基本的な使用方法は習っています。 8点ほどの極大と極小を求めたい。 データ系列は数値で500点与えられており、精度の問題から同じ値が2点並ぶ場合もあります。 検出結果として極大4点、極小4点がそれぞれの配列として出力されても、極大と極小が交互に並ぶ配列として出力されても問題ありません。
>>589 多分、そうじゃないの
ソフト屋の内定段階で課題の出来が酷いのは落とすとかそんなんでしょ
簡単すぎて話しにならない問題だけど
>>582 フローチャート必要って書いてるけど、君は貰ったソースに合わせてフローを書くつもりなの?
フローが書けるなら書いたものを提示してそれに合わせたソースを貰うほうが良いと思うけど
そもそも、フローが書けるならソースも書けると思うが....
いきなり出されて「これ書き起こして」ってならともかく 家に帰ってまでできないってどういうこった。
答えられない無能はレスしなくて結構ですので…
>>592 >多分、そうじゃないの
ですよね。 プログラマになる人が簡単な問題を宿題依頼するなんて異常ですよね
きっと土方さんになるから宿題依頼するんですよね
自分で答えられない無能は課題の解答を提出しなくて結構ですので… 内定会社より
こんなので釣れるんだな
598 :
デフォルトの名無しさん :2010/11/11(木) 20:09:09
>>590 #include<stdio.h>
#define SIGN(x) ((x)<0.0?-1:1)
int main(void)
{
double value=0.0, value_prev=0.0;
int i, sign=1, sign_prev=1;
for(i=0;scanf("%lf", &value)==1;i++)
{
sign=SIGN(value-value_prev);
if(i>1 && sign!=sign_prev)
{
printf("%d %f\n", i, value_prev);
}
value_prev=value;
sign_prev=sign;
}
return 0;
}
>>590 >>599 の修正 同値が連続した場合と精度落ち対策
#include<stdio.h>
#include<string.h>
#define SIGN(x) ((x)<0.0?-1:(x)>0.0)
int main(void)
{
char buf[256], buf_prev[256];
double value=0.0, value_prev=0.0;
int i, sign=1, sign_prev=1;
for(i=0;scanf("%s", buf)==1;i++)
{
if(sscanf(buf, "%lf", &value)!=1) break;
sign=SIGN(value-value_prev);
if(sign==0) sign=sign_prev;
if(i>1 && sign_prev && sign!=sign_prev)
{
printf("%d %s\n", i, buf_prev);
}
strcpy(buf_prev, buf);
value_prev=value;
sign_prev=sign;
}
return 0;
}
>>598 unsigned char c;
c = (unsigned char)getchar() (爆笑)
>>598 char s1[128];
fgets( s1, 127, stdin ); (笑) なぜ1減らすのですか?
>>601 なんか変か?厳格なキャストが染み付いてるだけの話だが
>>602 fgets() は指定文字数まで読み込むが終端にNULLを付加するんじゃなかったっけ?
604 :
デフォルトの名無しさん :2010/11/11(木) 21:37:36
[1] 授業単元: プログラム [2] 問題文(含コード&リンク):10人分の各教科の平均点を計算する関数を実装してください。 [3] 環境 [3.1] OS: linux [3.3] 言語: C++ [4] 期限: [2010年11月12日まで] [5] その他の制限: なるべく出力はcout 入力はcinを使ってください。あと、なるべく簡単にしてください。コンストラクタとか、アクセス指定子とか、クラスを関数に渡すとかは習いました。
>>603 長さが128文字以上の文字列を入力すると、おかしな動作しませんか?
◆QZaw55cn4c が
>>598 に喧嘩売ってきたぉ
それもトリップ入りで売ってきた
>>598 を敵と認識としたんだ
>>601 unsigned char じゃまずかったな signed じゃないと EOF と比較できねぇや
>>605 おかしな動作というかストリームに残ってる文字列が次の fgets に渡されるだろうね
業務等で書くコードならストリームが空になるまで読み込みを繰り返すとかを行うんだけど、
所詮は問題だからね
先の例題だとこんな感じかな
char s[16], dum[16];
fgets( s, 15, stdin );
while( fgets( dum, 15, stdin ) )
;
>>598 >#define C08
>printf( "%d: %c\t", v, (unsigned char)v );
まず、v < 128 であるし、integer promotion により、関数の引数は int に格上げされるから、char や unsigned char でキャストするのは意味がありません。
(ISO/IEC 9899:1999 6.5.2.2.6)
v == 127 のときは v は printable でないから、そのまま printf() にわたすのはどうでしょうか。
せめて
printf("%d: %c\t", v, (isprint(v)) ? v : ' ');
くらいのガードをしておくのが安全というものです。
>>607 まだまずいと思う。
sの末尾が改行でないときは、getcharを使って、
改行コードがくるまで読み捨てるのがいいかも
>>607 ISO/IEC 9899:1999 7.19.7.6
int getchar(void);
この手の関数の返り値は int で受ける。
>>603 get指定した文字数-1 まで読み込み終端に \0 をつける。
ISO/IEC 9899:1999 7.19.7.2
>>608 明示的なキャストが染み付いてるだけだって、習慣だよ
例えば整数の除算結果を実数に代入する場合
d = (double)a/b; とする人も居るだろうけど俺は必ず d = (double)a / (double)b; とする
暗黙のキャストが有るから無駄なキャストは意味が無いなんて考える人は業務でコードを書いてない人だけ
明示的なキャストは他者に誤解を与える可能性を低下させる意味が有るからね
127が printable じゃないのは知らんかったよ
>>609 言っている意味が判らないな、fgets() を NULL が返るまで繰り返せば同じだと思うが
>>611 そうか俺の記憶違いみたいだね
なんかバッファサイズ - 1 にする習慣が付いてるんだけど、なんでそんな習慣が付いたのか謎だな
同じような誤解をしてる人に教わったんだろうか?
614 :
デフォルトの名無しさん :2010/11/11(木) 22:27:23
>>613 char buff[256] ;
fgets( buff, 256, stdin ) ;
はこれでOK
scanf ( "%255s", buff ) ;
はこうじゃないとバッファオーバーフローする
>>612 1行目と2行目を別々に変数に代入したい訳で
1行目が長いときに、あふれた分を捨てたいけど、
fgetsを使うと2行目も捨ててしまいませんか?
もうそういう時はscanfを使うのやめようぜ。 俺なら256を変更しても通用するコードを書く。
>>615 なるほど謎は解けた、確かに最初に覚えるのは scanf だもんなぁ、有難う
>>616 どうしてそう思うの?そもそもそう思うんならテストコード書いて試してみればいいじゃん
620 :
618 :2010/11/11(木) 22:44:15
>>616 テストコード書けば良いのは俺だった
確かに、fgets() で無限ループ作ったらそこで止まるわなwwww
先のコードはこうか
while( fgets( dum, 16, stdin ) )
if( strchr( dum, '\n' ) ) break;
確かに適性をみるにはこの程度の問題でもよいことがよくわかる。
printf(" %3d: %c %3d: %c %3d: %c %3d: %c %3d: %c %3d: %c\n", i,i,i+16,i+16,i+32,i+32,i+48,i+48,i+64,i+64,i+80,i+80); こんな風にする奴は適性0かなw
623 :
デフォルトの名無しさん :2010/11/11(木) 23:45:08
誰か563をお願いします
getchar で unicode を扱う機会なんか有るのか? そも、このスレ以外で getchar やら scanf を使う機会が有るのかとも言えるが
返り血を浴びてしまう前に戻れ!
>>624 int getcharなのにcharで受けるってのが、そもそも異常でしょ
なんで、int getcharなのにcharで受けるんですか?
>>623 >>563 その問題は既に回答されていたぞ
前スレかも知らんけど、スキャンされたページの記憶が有る
>>612 「キャストしておれば無問題」という思考・態度に疑問を感じます。そのうち promotion ではまります。いや、もうはまりかけです。でも早い段階ではまることをお勧めします。
>>630 さすがにお前の思い上がりには脱帽したよ。あんた、大掛かりなものになると
すぐに失敗して、その初歩的なミスに気づかないタイプだろ。
問題文を読み間違えるくらいだし。
>>623 私の場合画像が読めなくて保留になっている。
叩かれまくった仕返しをしてるんだと思うけど、叩いた人とは別人なんだよねw
>>600 sign_prev=1
↓
sign_prev=0
>>590 #include<stdio.h>
#include<string.h>
#define SIGN(x) ((x)<0.0?-1:(x)>0.0)
int main(void)
{
char buf[256], buf_prev[256];
double value, value_prev;
int i, sign, sign_prev=0;
for(i=0;scanf("%s", buf)==1;i++)
{
if(sscanf(buf, "%lf", &value)!=1) break;
if(i==0) value_prev=value;
sign=SIGN(value-value_prev);
if(sign==0) sign=sign_prev;
if(sign_prev && sign!=sign_prev)
{
printf("%d %s\n", i, buf_prev);
}
strcpy(buf_prev, buf);
value_prev=value;
sign_prev=sign;
}
return 0;
}
>>634 ISO/IEC 9899:1999 6.3.1.1
>>639 Integer Promotion ならそう書けば良いのに、新しいライブラリセットかなんかと思ったよ
「値が失われるかも知れません」というワーニングを無視できる人なら嵌るかもね
ワーニングって何ですか?
発音がどうとか表記がどうとか
アテンションプリーズ
まぁ、みんな内心おかしいとは思ってるけど 国内では「ワ」の方が通りがいいからそう言ってるんだ、言わせんなよ恥ずかしい だってほとんどの人が向こうの人と話するときだけはちゃんと発音してるし
main() がどうしたとか発音がどうしたとか問題が出ないと退屈なんだろうな
退屈なのはお前だろw
忙しい人は来ないです、多分
649 :
デフォルトの名無しさん :2010/11/12(金) 15:04:02
[1] 授業単元: プログラム [2] 問題文(含コード&リンク):行頭でピリオド(.)が入力されるまで、 入力された文字を出力するプログラムを作成しなさい。なお、行頭ピリオド自身は表示しない。 [条件] 配列を使用しないこと。つまり、1 文字ずつgetchar で入力し、 putchar で出力することになる。<入出力情報> 入力出力 キーボードディスプレイ <エラー仕様> 行頭ピリオドの後に文字がある場合は、 行頭でピリオドと認識し、プログラムを終了 [3] 環境 [3.1] OS: Windows [3.3] 言語: C [4] 期限: [2010年11月15日まで] [5] その他の制限: <エラー仕様> 行頭ピリオドの後に文字がある場合は、 行頭でピリオドと認識し、プログラムを終了
このスレに2人も質問者が居るとは....内定出したのはどんな会社だろうか?
[1] プログラミング演習 [2]非負の整数値をキーボードから入力して、その整数値から8個の数字を取り出す。 unsigned int型を使い、4bitごとに区切ることによって8桁分の数字を格納する。とあります。 [3] 環境 [3.1] windows7 [3.2] visual stdio2010 [3.3] c言語 [4] 2010/11/14まで [5] 関数までポインタ、構造体、文字列はまだならっていません。 実行例 unsigned int 型変数から8この数字を取り出す。 非負の整数を入力してください 679772770 二進数表示:??????? 8個の数字:??????? ?部分は隠されていてわかりません。問題文そのままです。 お願いいたします。
>>652 #include <stdio.h>
int main(void)
{
unsigned int u;
int i;
printf("非負の整数を入力してください ");
scanf("%u", &u);
printf("二進数表示:");
for(i = 31; i >= 0; i--) printf("%d", u >> i & 1);
printf("\n");
printf("8個の数字:");
for(i = 7; i >= 0; i--) printf("%d ", u >> i * 4 & 15);
printf("\n");
return 0;
}
>>652 構造体習ってないって事はビットフィールドも習ってないって事だよな
つまりはビットシフトとマスク演算だけで処理しろって事だ
[5] の書き方が不明瞭だけど関数は習っているの?
656 :
655 :2010/11/12(金) 17:07:20
>>652 入力が8桁以下の場合はどうするの?右詰め or 左詰め?
657 :
655 :2010/11/12(金) 17:13:36
入力された数字の各桁を4bitに入れると考えたが、よく見ると入力例は9桁だな しかも出力の8桁の数字は入力と同じになるから意味無いし... 謎の仕様と言えよう....
>>652 制限が厳しいな。共用体は?
/* 未確認 */
#include<stdio.h>
#define _INT_BITS 32
int main( int, char** )
{
unsigned int number = 0;
int i = 0;
if( ( 8 * sizeof(int) ) != _INT_BITS )
{ return (-1); }
scanf("非負の整数を入力してください: %u", &number);
printf("二進数表示: ");
i = _INT_BITS;
do { putchar( ( ( number >> (--i) ) & 0x01 ) ? '1' : '0'); }
while( i > 0 );
printf("\n8個の数字: ", );
i = ( _INT_BITS / 8 );
do { printf( "%d ", ( number >> ( --i * 4 ) ) & 0x0f ) ); }
while( i > 0 );
return 0;
}
謎解きでもしよう。事例、679772770からは7個の数字しか取り出せない。ということは、 重複を当然と思っているということだ。 つまり、3 が入力されたら、8個の数字は 3,3,3,3,3,3,3,3 だということになる。 34だったら 3,3,3,3,3,3,3,3 から 始まって、4,4,4,4,4,4,4,4 まで256通りの可能性がある。 Prolog的に非決定性で解を列挙していけばよいのかな?
どんだけ時間かかってるんだ、俺w
>>659 しまった。5個の数字しか取り出せない、だ。
>>640 >「値が失われるかも知れません」というワーニングを無視できる人なら嵌るかもね
そして考えもなくキャストを連発する人も。
お前ら、俺の妄想でゲソ >その整数値から8個の数字を取り出す だから、8個(桁)以上の値からなる数値列の入力するが前提条件になるんじゃない烏賊 で、問題になるのがunsigned intで表せる数値を超えた数値列(9が100個とか)の入力があったときでゲソ この場合、その数値列の数値を自分で適当に8個選んで、unsigned intで表せる数値を作るでゲソ (超えない場合は、頭から8個そのまま選べば良いんじゃない烏賊) そして、そのunsigned intを2進、と16進で表すでゲソ 679772770の場合、使える数値およびその個数は 0:1個、2:1個、6:1個、7:5個、9:1個 でゲソ これから8個の数値、77777692とか作れってことじゃな烏賊
4bitはどこ?
確かにゴミ過ぎたわ。 というかCを忘れ始めている自分に凹んだ。
>>666 Hex表示をするための入れ物に4bitじゃな烏賊
Hex表示用の入れ物8個を作り、それにuintを4bitづつ分解して入れるでゲソ
>>668 >行頭ピリオドの後に文字がある場合は、
>行頭でピリオドと認識し、プログラムを終了
これのときはピリオドの後の文字を表示しないで終了じゃないのか?
<エラー仕様>
行頭ピリオドの後に文字がある場合は、
行頭でピリオドと認識し、プログラムを終了
>>582 と同じだよ。pdfでもそうなっている。
>>652 です
>>654 御回答有難うございます!
>>655 関数は習っています。
>>656 その点については何も書いていないんです…。
>>658 有難うございます。
しかし、エラーが出ました…。
余計かなと思って書かなかったのですが、ヒントに
4ビットのみ有効にするためには、それ以外のビットを無効、すなわち0にする必要がある。
とあります。
そのヒントが余計かどうか判断できるなら、問題解くのも簡単だろw
>>673 ヒントを聞いても題意が掴めないのは俺だけではないだろう
非負の整数値をキーボードから入力して、その整数値から8個の数字を取り出す。
unsigned int型を使い、4bitごとに区切ることによって8桁分の数字を格納する。
『4bitごとに区切ることによって8個の数字を取得する』ならば
>>654 の回答で良いんだけどね
>>674 すみません。なんとなくで判断しました。
イントロダクションみたいなところに
0〜9までの1桁の数字は、2進数で 0000)2〜 1001)2 と4bitの幅があれば表現することができます。
32bitコンピュータ環境において符号無し整数型unsigned intは通常32bitの大きさを持ちます。
このことから、unsigned int型の変数には、それを4bitごとに区切ることによって8桁分の数字を格納することが可能です
とありますが。まったく分からないです…。
>677 すみません、私自身理解できないんです。 課題の実行例には679772770がありまして…。
>>676 それは皆判ってるよ、問題は
>>652 に曖昧な部分が有って題意が掴めないって事なんよ
>>654 の解釈は入力された unsigned int を 4bit 毎に分割して8個の整数(0〜15)を表示するなんだけど、
問題文の格納が引っかかるんだよね
俺がイメージしたのは入力された8桁の整数の各桁を4bitに格納して出来た unsigned int を2進表示する、
なんだけど、それだと入力と出力の2行目が同じになるから変だし例題が9桁なのも変
まぁ問題文が少しおかしいだけで
>>654 の解釈が正しいとするのが妥当だろうなぁ
#include <stdio.h> int main(void) { unsigned int u, ans = 0; int i; scanf("%u", &u); for(i = 0; i < 8; i++, u /= 10) ans |= (u % 10 & 15) << i * 4; for(i = 31; i >= 0; i--) printf("%d", ans >> i & 1); return 0; }
>>680 確かに両方の回答を提出しとくってのも考えだわなぁww
要するに10進数 12345678 を16進数 0x12345678 に直しないさい。 って問題かね。
>>676 問題文に自分なりの解釈を入れるな。
可能な限り一字一句正確に問題を書くこと。
自分の解釈を入れたければ、
問題文の後に、
自分はこう解釈しました
と自分の考えだと分かるように入れろ。
まさかBCDの事ではあるまいな。
int変数に二進化十進形式で格納された8桁の数値を、元に戻すということかな
#include <stdio.h> void eratos(int *array,int n) { int i,j,sum; array = (int*)malloc(n * sizeof(int)); for (i=0;i<n;i++){ array[0]=array[1]=-1; array[i]=1; } for (i=2;i<=n;i++) { for (j=i+i;j<n;j+=i) { array[j]=-1; } } for (i=0,sum=0;i<=n;i++) { if (array[i]==1) { printf("%6d",i); sum++; if (sum%10==0){ printf("\n"); } } } if(sum%10!=0){ printf("\n\n"); printf("素数の数:%d \n",sum); } }
int main() { int *a; int n; n=0; printf("要素数:"); scanf("%d",&n); eratos(a,n); return 0; } error C3861: 'malloc': 識別子が見つかりませんでした とエラーが出ます。どなたか教えてください! ちなみにプログラムは、この形じゃないとダメだそうです。
>>688 #include <stdlib.h>
>>688 この形って何?言ってる意味がわからない。
とりあえず、最初の行に
#include<stdlib.h>
を追加しる。
691 :
デフォルトの名無しさん :2010/11/12(金) 21:41:22
24bitのビットマップ画像から16bit(R5bit G6bit B5bit)のデータに変換したいのですが、どのようにしたらいいのでしょうか? カラーごとに RとBは取得した8bitの値/255*32 G取得した8bitの値/255*64 で問題はありませんか?
>>690 この形って言うのは「ポインタと関数」を使用したプログラムのことです。
わかりづらくしちゃってすいません!
あと、プログラムが正常に動作しました。ありがとうございます!
bitmapのフォーマットを調べれ fopenで普通にバイナリ単位で処理していけば良い
>>691 > RとBは取得した8bitの値/255*32
> G取得した8bitの値/255*64
型によるが、おそらく↓にした方が良い。
32*RとBは取得した8bitの値/255
64*G取得した8bitの値/255
>691 再量子化ねぇ C = R, B floor(C / 255. * 31.) G floor(G / 255. * 31.) 僕ならYCbCrにしてさらに削るけどな
>695 G floor(G / 255. * 63.) だった、超笑い
697 :
694 :2010/11/12(金) 21:57:50
間違えた。こうか。 31*RとBは取得した8bitの値/255 63*G取得した8bitの値/255
ビットマップは圧縮されてないからいいよね。 jpegなんかはライブラリ使わないと直接扱う気にはちょっとなれない。
Perl忍者の宿題はここでいいんですか
702 :
691 :2010/11/12(金) 22:56:31
みなさんレスありがとうございます 16bitの画像をバイナリエディタの構造体編集で見てみたのですが 001C 2 BiBitCount ピクセルあたりのビット数(1,4,8,24)。それぞれ16進では(0x01,0x04,0x08,0x18) の値が10進数で56という値になっていました。 24bitの場合は40です。 これは保存した画像データのヘッダが何かおかしいのでしょうか? それともバイナリエディタの方で何かズレが生じしてしまっているものなのでしょうか?
>>702 どこ見て言ってるのか分からないけど
biBitCountは
16bitビットマップなら16(0x10)
24bitビットマップなら24(0x18)
のはずだぞ
>>702 Windows環境で見れるなら、画像ファイルを選択して
そのプロパティを見るといいよ。概要に情報が載るから。
>>705 エスパーすると
BITMAPFILEHEADERの読み取りがずれてるんじゃない?
この中には2byteの型が含まれてるから
アライメントが4byteだと後ろがどんどんズレてしまう
Cで言うと
#pragma pack(push,2)
typedef struct tagBITMAPFILEHEADER {
unsigned short bfType;
unsigned long bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned long bfOffBits;
} BITMAPFILEHEADER;
#pragma pack(pop)
としないと構造体単位で読む場合は
みたいにアライメントを2byte境界にしないと正しく読めない
>>705 先頭のSizeからして変
4D42って”BM”だけど、もしかして先頭から読ませてない?
まさか BITMAPFILEHEADERを読まずにいきなり BITMAPINFOHEADERを読んでるってオチか?
fopenで開いて先頭から一バイトずつ見ていけよ
711 :
デフォルトの名無しさん :2010/11/12(金) 23:55:36
>>629 >>638 それは、人ごとの平均点なんで、
教科ごとの平均点を出すプログラムを今度は作るんです
712 :
デフォルトの名無しさん :2010/11/13(土) 00:05:51
[1] 授業単元:TCP/IPソケットプログラミング
[2] 問題文(含コード&リンク):
(1)
ttp://www.ohmsha.co.jp/data/link/4-274-06519-7/index.htm ここにあるオープンソースのTCPEchoServer-Forkを改造しSIGCHILDでゾンビプロセスを回収するようにする。その際にはsignalかsigactionシステムコールを用いる
(2)
マルチプロセス版のサーバーがクライアントと接続を確立させるまでの流れについて詳しく記述説明せよ
(3)
マルチプロセス版のサーバーが子プロセス(ゾンビプロセス)を回収する方法について2通り説明せよ
[3] 環境
[3.1] OS:Ubuntu
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限: 11月15日17:00まで
[5]オーム社のホームページのソースコードを流用しています。■範囲を改造して動くものにしたいんですが…
ネットワークプログラミングの初歩で躓いてしまったのでどなたか教えてください。
画像を保存したソフトがバグってんだろ。ペイントとか普通に間違ったヘッダ情報入れることあるぜ
ねーよw
>>717 高さ biHeight が負ならイメージ情報が上から下へ、そうでなければ下から上へ格納されることを示しているとのことですので、
それに対応しました。
調べてみると、幅 biWidth が負になることはないようで、
>>714 で絶対値をとっているのは余計でしたね。
>>716 いや普通にある。
今試しに新規画像作って、ImageAsっていうソフトで32ビットに変換した後、
ペイントで24ビット指定で上書き保存した後プロパティで見ると32ビットのままになってるし。
>>719 私もペイントで作業していたのですが、ペイントは正しく動いており、プロパティの方がいいかげんなようです。
ねむれなひ。未解決の問題なにかある?
俺の年収が一向に上がらない問題がある。解決してくれ。
なんでMSDN見ないの
[1] 授業単元:中級プログラミング
[2] 問題文(含コード&リンク):0から99までの範囲で整数の乱数を1000個、配列mとして生成させた後、ターゲットとなる整数を1つ定めて検索する。ターゲット数はコマンド引数 (プログラム開始時に与える引数 argv)として与える。
何番目の数字でターゲット整数が見つかるか、番兵を使わない関数 NonSentinel と、番兵を使う関数 Sentinel の 2つで求めるプログラムを完成させなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc バージョンは最新
[3.3] 言語:C
[4] 期限:日曜日まで
[5] その他の制限:特になし
授業資料でこれを参考にしろとのことです。txtでうpしたのでよろしくお願いします。
http://www.dotup.org/uploda/www.dotup.org1247688.txt.html 「ここを作る」が2箇所あるので、よろしくお願いします。
番兵って誰だよw
>>728 多分、こんな話じゃないかと思うけど、Sentinel() の方が有利である事を強調した実装にした方が良いのかな?
int NoSentinel(int target, int* m, int n)
{
int i;
for( i = 0; i < n; i++ )
if( m[i] == target ) return i;
return -1;
}
nt Sentinel(int target, int* m, int n)
{
int i = 0;
m[n] = target;
while( m[i] != target )
i++;
if( i == n ) return -1;
else return i;
}
ストッパー用に要素一つ増やさないとならないね
>>729 最近現れるようになった文末w野郎は「番兵」を知らない情弱であったことが判明した。
最近は自宅警備と言ってあげる方がわかりやすい
>>728 のソースだと番兵を何も設定してないんだけどw
そら、これから番兵をつかってコードをかくんやから、なんもなくてあたりまえや。
番兵に設定した値がデータの終端を示すのが普通なのに、 配列の最後に値入れてないし、sentinel()の引数にサイズ渡してるしで意味わかんない
739 :
732 :2010/11/13(土) 16:21:51
>>734 俺も知らなかったぉ
>>728 の main() には誤りが有るし、"40" って意味不明な行もあるけど写し間違えたのかな?
744 :
741 :2010/11/13(土) 16:32:13
>>729 番兵って、検索する値を配列の一番最後に入れて
検索する値と一致したらループを終了。
その値が一番後ろで検索された場合、求める値が
配列には存在していないことが分かる。
番兵って線形リストのNULL終端と同じだからな 線形リスト知ってるやつはどういうものかわかる 配列でわざわざ番兵って使っているのいるのかな
このスレの回答見る限り
>>732 みたいな効率化はしない人間の方が多そうだな
>>746 すまね。
>配列でわざわざ番兵って使っているのいるのかな
は誤解をまねくな。固定長配列で数字検索するのにわざわざ....だな
文字列(配列)の場合は'\0'が番兵だよな
>>713 シグナルハンドラーを用意して SIGCHILD が来たときに wait() するだけじゃないの?
static void sigProc( int sig )
{
if( sig == SIGCHAILD ) wait(0);
}
int main( 〜 )
{
〜
signal( SIGCHILD, sigProc );
みたいな感じ
但し、これには落とし穴が有る
select(), recv(), send() 等を実行中にシグナル受信した場合、そのシグナルは関数内で受信され、
関数はエラーとなり errno に EINTR が設定される
さらに受信したシグナルはシグナルハンドラーに渡らない
見た感じでは上記の関数は親プロセスで使用されていないので問題なさそうだけど、accept() も同様の
問題を抱えている可能性は有る(良いリファレンスのページが見つからなかったから自信無し)
これを回避するには sigprocmask で一時的にシグナルの受信をブロックするんだけど、環境依存が有ったかも知れん
[5] に関してはオームのページの何処かも、■範囲が何かも判らんから回答できないな
751 :
750 :2010/11/13(土) 18:01:55
記述に誤りが有ったので訂正と補足 ×上記の関数 ○上記のシステムコール accept() もシステムコールだから先の問題を抱えているのは確かだな しかももっと悪い事に accept() は接続を受けるまでリターンしない 困ったなwww もし、受信するシグナルが SIGCHILD だけで有るなら accept() がエラーを返したときに errno が EINTR だったら wait(0) を実行するという荒業は有効かも知れない 正しく処理したいなら 0) sigprocmask() で SIGCHILD をブロックする 1) select() で accept 要求が存在するか確認する 2) 要求が存在したならば accept() を実行する 3) sigprocmask() でブロックを解除する 4) accept() を行った場合は fork() 等の処理 5) sleep() で1秒程度停止する この様な処理でループを形成すれば1秒に一回はシグナルハンドラーにシグナル受信するチャンスを与えられる ソケット通信のサンプルコードでここまでする必要があるかは疑問だけどな
分散させるプログラムが課題が出たのですが、小数は%fでよめません、読めるはずですが おしえて
>>752 日本語でおk
まぁ、doubleなら%lfで読めばいいと思うよ
>>752 #include <stdio.h>
int main() {
double d;
do {
scanf("%lf", &d);
printf("d = %f\n", d);
} while (d > 0);
return 0;
}
/* end */
756 :
デフォルトの名無しさん :2010/11/13(土) 19:38:01
>>636 多分学校のではインストールされてると思うんですが…
757 :
デフォルトの名無しさん :2010/11/13(土) 19:39:16
>>638 のプログラムを
人ごとの平均点じゃなくて科目ごとの平均点を出すように変えてほしいんです。
>>753 ありがとうございましたできました。
lが必要とは先生の説明が間違ってたとは思わず、。
先生はfloatでも使ってたんじゃ?
>
>>761 いい講義ではscanfを使わないdobleを使う平均でした、
課題のクストにscanの関数%fで指示でしたが講義ではキーから入力を使わなかったよ
ここ見て思ったこと。 能力のない講師は、能力のない生徒より10000000倍ぐらい厄介だ。
here look think thing. no intel instructor is no intel student than 10000000 mul about yakkai.
765 :
728 :2010/11/13(土) 23:20:01
番兵の件で書き込んだ者です、なんか混乱を招いたみたいですみませんorz 頂いたレス参考にやってみます! ありがとうございました。
俺が番兵だ
番兵君RX
番兵ちゃん、マラソン世界一周は無事に終わるかな・・・
769 :
デフォルトの名無しさん :2010/11/13(土) 23:57:57
>>759 ありがとうございます。どうして次の問題が10人分の平均ってわかったんですか?
宿題スレの回答者はエスパー
772 :
デフォルトの名無しさん :2010/11/14(日) 00:08:18
>>750 >>751 アドバイスありがとうございます!!
urlのサイトのサンプルコードのTCPEchoServer-Forkの40~48行間を改造するだけなんです
>>773 >40~48行間を改造するだけなんです
そうなん。たった40-48行間を改造するだけなら、まだ時間あるから自分で出来るよ
名無しゲト、ずさーーーー
775 :
デフォルトの名無しさん :2010/11/14(日) 01:13:47
>>759 因みに10人分の方はどうなるんでしょうか?
776 :
デフォルトの名無しさん :2010/11/14(日) 02:18:10
>>759 あと、オブジェクトで渡すというのはどういう意味なんでしょうか
777 :
750 :2010/11/14(日) 05:40:08
>>774 40-48 を改造するというより 40-48 が不要になると思うよ
シグナルハンドラが SIGCHILD を拾うのは子プロセスが exit() した直後
そこで wait() を実行する事で子プロセスは完全に開放される
だから childProcCount をグローバル変数としてシグナルハンドラ内で wait() 直後にデクリメントするべきだ
40-48 を残した上でシグナルハンドラを実装すると子プロセスの2重殺しが生じるかも知れない
1) 子プロセスが SIGCHILD を送信
2) 親プロセスが waitpid() を実行
3) 親プロセスが SIGCHILD を受信
この順番で処理されると childProcCount が実際より小さくなってしまう
この辺は実際に動かして確認してごらん
childProcCount をデ/インクリメントした直後にその値を表示するようにして確認してみると良い
>>765 無知な奴が勝手に混乱してただけだから気にするな
779 :
750 :2010/11/14(日) 09:22:03
>>773 >>777 はアンカーミスで
>>773 に対するモノだった
ちょっと実務で嵌った件を思い出したので補足
シグナルハンドラ内で wait() を実行した時に、既に waitpid() で処理されていた場合は wait() が制御を返さないので
親プロセスは停止してしまうな
よって、シグナルハンドラ内でも waitpid() をノンブロックで実行すべきだ
サンプルコードでは waitpid() が 0 を返した場合は childProcCount を減じてないから、
同様の処理をシグナルハンドラ内でも行うなら先に述べた2重殺しによる問題は生じないだろう
一般に親プロセスのメインループ内で waitpid() を行うというのは少数派の様な気がする
シグナルハンドラ内で子プロセスの開放を処理できる事を前提として、
何らかの理由で開放できなかった子プロセスが無いかを確認する意味で
メインループを抜けてから waitpid() が 0 を返すまで実行する、これが普通じゃないかな
もっともサンプルコードだとメインループを抜ける事は無いんだけどね
>>713 の 3) の2通りは上記2パターンの事だろう
1)ループ内で waitpid() を実行し状態変化が有った子プロセスを検出・開放する、言わば能動的手法
2)シグナルハンドラ内で waitpid() または wait() を実行し終了報告を送ってきた子プロセスを開放する、言わば受動的手法
なんか文章下手でスマン
780 :
デフォルトの名無しさん :2010/11/14(日) 09:29:02
よろしくお願いいたします。 [1] 授業単元:C++言語入門 [2] 問題文(含コード&リンク): ネットワークのルートアドレスとネットマスク、そしてチェックしたいIPアドレスを 渡して、チェックしたいIPアドレスがそのネットワークに含まれているかどうかを チェックする関数int checkIPAddress(unsigned int root,unsigned int mask,unsigned int address)を以下のように書いた。空欄をうめよ。 ただし、あるIPアドレスがネットワークに含まれているかどうかチェックするには、 ネットワークのルートアドレス(root)と、チェックしたいIPアドレス(address)の ネットワークIDを比較してその値が同じであったら、そのネットワークに含まれていると 判定します。IPアドレス中のネットワーク部は、ネットマスクのビットパターンが1である部分と 考えます。IPアドレスからネットワークIPを取り出すには、IPアドレスをネットマスクの ビットごとのANDを取り出します。詳細はインターネットの検索エンジンで「ネットマスク」 をキーワードに調べてください。 int checkIPAddress(unsigned int root,unsigned int mask,unsigned int address) { return(root 空欄@ 空欄A)==(root 空欄B 空欄C) } [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: ([2010年11月30日まで
こんにちは。基礎クラスで恐縮ですがよろしくお願いします。 [1] 授業単元: C基礎T [2] 問題文(含コード&リンク): 問題1 int型変数 i , j が -10 < i <10 , -20 < j < 20 を満たすとする。 11*i + 7*j がちょうど1となるi , jの組み合わせを全て求めるプログラムを作成せよ。 問題2 キーボードから正の整数を1つ入力しその数が素数であるかを判定するプログラムを for文 break文などを用いて作成せよ 問題3 キーボードから正の整数を1つ入力し、その数を二進数に変換して出力するプログラム。 forを用いること。表示形式は任意で正しければよい。 例えば、2で割ったあまりと商の値によって下の桁のビットから求めるなど。 [3.1] Linux [3.2] gcc [3.3] C言語 [4] 期限:11月15日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 習ったのはfor文までで、配列などはまだ使ってません。
>>780 return ( root & mask ) == ( root & address );
か?でも、root == address の場合は偽になっちゃうな
return ( root & mask ) == ( address & mask );
の方が正しいと思うんだけど
784 :
デフォルトの名無しさん :2010/11/14(日) 12:13:36
<
[1] 授業単元:C言語 [2] 問題文: (1)10個の最大値を求める 10人の身長データを順にcmで入力したとき、一番大きな身長は何pかを表示するプログラムを作成しなさい。 実行結果は次の形らしいです。 1人目の身長を入力してください (単位 : cm) (入力待ち) 2人目の身長を入力してください (単位 : cm) (入力待ち) .....略..... 10人目の身長を入力してください (単位 : cm) (入力待ち) この中で身長が高い人は、○○cmです。 ・指定 for文を使い処理を10回繰り返す。 最大値を記憶する変数を用意し、0を代入しておく。 [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月15日 よろしくお願いします
[1] 授業単元:C言語 [2] 問題文:買い物金額を計算し、整理するプログラムを次の使用で作成しなさい。 「税抜き単価」と「個数」を入力すると、次の出力が得られる。 1.合計金額と税込み合計金額 2.一番単価の安かったものの金額(税抜) 3.一番単価の高かったものの金額(税抜) ・ただし、すべての商品が課税対象で税率5%とする。 ・単価に0を入力したら処理を終了する。 実行結果は次の形らしいです。 買い物をした単価は? : (入力待ち) 何個買いましたか? : (入力待ち) これまでの合計金額は、○○(税込 : △△)円です。 一番安いものの値段は、税抜××円です。 一番高いものの値段は、税抜□□円です。 ...............処理の繰り返し 買い物の単価は : (0を入力して終了) ・指定 単価の最小値・最大値を記憶する変数、単価の最大値を記憶する変数、金額合計を記憶する変数を用意し、それぞれ、10000、0、0を代入しておく。 while(l)で無限ループ作る [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月15日 よろしくお願いします
[1] 授業単元:C言語 [2] 問題文:2〜1000の範囲すべての要素を求める 【指定】 ・整数変数は、iとjの2個用意する ・iが素数か否かを調べる。それを2〜1000まで変化させる。 ・iをjで割り、その余りが0ならば、iは素数でない。jは、2〜i-lまで変化させて、iが素数か否か調べる。 ・iをjで割った余りをi%jで計算する。 ・ループは2重 ・外側は、iのループで、2〜1000の範囲である。 ・内側は、jのループで2〜i-lまでの範囲。ただしiをjで割った余りが0になればループから抜ける(break文) ・iが素数か否かには、マークをつける。例えば、整数のprimeを用意し、これが1ならば素数、0ならば素数でないとする。 ・外側のループの始まりでは、prime=1とする。 ・内側のループでiをjで割ったとき余りが0ならば、prime=0として、break文をもちいてループから脱出する。 ・外側ループの終わりには、prime=1ならば、iをディスぷれぃに書き出す命令を書く。 [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月12日 どうかよろしくお願いします
scanfで値を読み取って何らかの計算をしてprintfで出力するプログラムは秋田
別に無理に答えなくて良いんだぞ?
>>775 >>759 じゃないけど
太郎、花子って2人の入力してるんだから、あとは同じように8人分のデータを記述
するだけじゃない? 10人の時はプログラムに入力データ記述じゃなく、実用性を持たせる
ためにキーボード/ファイルからのデータ入力に対応するようにしろと?
>>786 2年前の問題を同じ様に見間違える奴が居るのは面白いなw
同じ奴が再履修したとかだったらもっと笑えるけど
>>788 1) 税込み計算をする時に小数点以下はどう扱う?
2) 税込み計算は単価に対して行うのか単価*個数に対して行うのか( 1)の答えが『小数点以下も扱う』なら関係ないけど)
が不明だな
>>796 (
>>789 )
>for ( j = 2 ; j < i-1 ; j++ ){
j < i
の方が問題的にも数学的にも正確ですね。
>>795 情宣ありがとうございます。
>>798 >>789 >・内側は、jのループで2〜i-lまでの範囲。
j == i - 1 も含まれませんか?
for ( j = 2 ; j <= i-1 ; j++ ) ってことじゃねーの 何で指定どおりに作らないのが正だと思っているのか知らんけど。
◆QZaw55cn4c 自分で隔離スレ作っているのに、なんでここに来るんだ 客を隔離スレでひたすら待てよ 客が来ないもんだから、同業スレを荒らしに来たのか
>>801 客なんて簡単には来ないだろうから、大目に見てやれよ
1)無償のここで出題する
2)難問なので一日たってもレスが無い
3)仕方ないから有償スレを利用する
普通の客はこうするよ、つまりここで回答が得られない様な難問が一日期限が短くなって ◆QZaw55cn4c の客になる訳だ
頑張れよ >> ◆QZaw55cn4c
>>802 for ( j = 2 ; j * j < i + 1 ; j++ )
これじゃ駄目かい?
>>789 酷い問題文だと思うのだが、解答をだした人がいるのか・・・
問題文読む限りその通りに作らないとまずい部類だろ 大人しく指定に従った方が吉だよ
スレの性質上 どんなアホな質問でもテンプレに従ってる以上 回答は出さざるを得ないとは思うが
>>806 おとなしく指定に従いたいのは山々だけど、2〜i-lではねぇ。
>>1 気に入らない質問やその他の発言はスルーの方向で。
>>789 の依頼日、今日なのに
>[4] 期限:11月12日 には突っ込みいれないの
ゆとり世代だから、期限も超ゆとりなんだろ
811 :
デフォルトの名無しさん :2010/11/14(日) 23:11:09
813 :
デフォルトの名無しさん :2010/11/14(日) 23:19:27
>>812 あ、そうなんですか。
ファイルを別に用意するのかと思ってました。
814 :
デフォルトの名無しさん :2010/11/14(日) 23:24:59
wwwwwwwwwwwwwwwwww wぺっぺろぺーwwwwwwwwwww wwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwww
815 :
デフォルトの名無しさん :2010/11/15(月) 00:09:51
>>792 10人分にするのはfor文とか使うんですか…
816 :
デフォルトの名無しさん :2010/11/15(月) 00:18:31
[1] 授業単元: コンピュータシュミレーション [2] 問題文: 下記は入試の学科別出願数である。 この表を折れ線グラフ、棒グラフおよび円グラフにするプログラムを作りなさい。 数学345、情報873、電気848、材料563、機械886、交通456、建設238、環境255、建築556 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:visual stdio2010 [3.3] 言語: C++ [4] 期限:2010年11月16日まで [5] その他の制限: 特にないです。 よろしくお願いします。
817 :
デフォルトの名無しさん :2010/11/15(月) 00:21:16
>>759 って
kokutoになってたりkokugoになってたりするんですが、これって何か意味はあるんでしょうか?
>>815 妙な単発質問繰り返すまえにちゃんと他の人が聞いてることに答えろよ
10人分のデータはどこからもってくるんだ?
元画像みたいにソースに直接かきこまれてるのか?
配列になってるのか?
標準入力で打ち込むのか?
ファイルに読み込むのか?
その辺はっきりさせろ
819 :
デフォルトの名無しさん :2010/11/15(月) 00:31:39
>>818 どちらも別にファイルを作ってそこから持ってくるんです。
>>818 怒りに任せて書かないで、一度落ち着いてから書け。
ファイル「から」読み込むだろ。
822 :
デフォルトの名無しさん :2010/11/15(月) 00:35:37
823 :
デフォルトの名無しさん :2010/11/15(月) 00:44:00
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) ・ランダムな整数列を生成し,選択ソートにより並べ替えるプ ログラムを作れ。 (randを使用すること) •またその実行時間を計測せよ – UNIXのtime コマンドを使用すること [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月17日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
C++で<stdio.h>と来たか。乱数の個数の指定はなしか。
825 :
823 :2010/11/15(月) 01:21:39
すいませんが823は書き間違えました [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) ・ランダムな整数列を生成し,選択ソートにより並べ替えるプ ログラムを作れ。 (randを使用すること) •またその実行時間を計測せよ – UNIXのtime コマンドを使用すること [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月17日 [5] その他の制限: mainの中身もお願いします。
C++でstdio.h使ってることに過剰反応する馬鹿はまさかいないよな?
>>816 それをCUIで表示するの?
それとも Windowsアプリ を書くの?
どっちにしろ面倒だな、◆QZaw55cn4c のお客第一号候補かな?
>>713 はできたのか?
中途半端な解説で終わらせたけど何も反応ないな
>>829 中途半端とは失礼だな、少なくとも何の意見も出してない奴に言われる筋合いは無いぞ
そもそも、あれを中途半端だと言えるだけの知識が君に有るとも思えないがな
あえて回答は与えなかったのは、通信・プロセス管理まで実装するレベルならヒントだけ与えれば自力でなんとかするだろうと考えたから
まぁどうしても出来ないってレスが有れば回答を与えても良いけどな
>>816 つ
>>795 あと、キャラクタベースにするか Windows アプリにするか教えてください。
832 :
デフォルトの名無しさん :2010/11/15(月) 12:37:11
>>831 中途半端が悪いことかどうかは置いといて、
質問スレじゃなくて宿題スレなんだから
片付いてない場合中途半端と言われてもしょうがないだろ
完成品じゃないならゴミ
>>832 君よりは経験の有るプログラマだとは思うけどね
悔しかったら君が解けば良い
>>833 ×中途半端な解説で
○中途半端に解説で
後者なら失礼とは感じない
>>836 解けもしないくせに偉そうな奴だな
黙って引っ込んでろ
宿題スレで議論やウンチするのは禁止
自信があるのかないのかはっきりしない人だな
>>841 #include <stdio.h>
int calc_kaijo(int n)
{
int i=1;
for(;0<n; i*=n--);
return i;
}
int main(void)
{
int n;
while(1)
{
printf("input:");
scanf("%d", &n);
if(n < 0){ break; }
printf("output:%d\n", calc_kaijo(n));
}
return 0;
}
>>841 #include <stdio.h>
int result[9][9] =
{
{81,72,63,54,45,36,27,18, 9},
{72,64,56,48,40,32,24,16, 8},
{63,56,49,42,35,28,21,14, 7},
{54,48,42,36,30,24,18,12, 6},
{45,40,35,30,25,20,15,10, 5},
{36,32,28,24,20,16,12, 8, 4},
{27,24,21,18,15,12, 9, 6, 3},
{18,16,14,12,10, 8, 6, 4, 2},
{ 9, 8, 7, 6, 5, 4, 3, 2, 1},
};
int main(void)
{
int i, j;
for(i=0; i<9; i++){
for(j=0; j<9; j++){
printf("%2d ", result[i][j]);
}
puts("");
}
return 0;
}
>>841 #include <stdio.h>
void print_cyokkaku_sankakkei(int x)
{
int i;
if(x < 1){
return ;
}
else{
for(i=0; i<x; i++){
printf("*");
}
puts("");
print_cyokkaku_sankakkei(x-1);
}
}
int main(void)
{
int x;
printf("input:");
scanf("%d", &x);
print_cyokkaku_sankakkei(x);
return 0;
}
全角スペースw
846 :
デフォルトの名無しさん :2010/11/15(月) 16:02:44
[1] 授業単元:C言語入門 [2] 問題文):#include <stdio.h> void main( void ) { int a[10]; int i; int *p; for( i=0; i<10; i++ ) { a[i] = i; /* i番目の要素に値iを入れる */ } printf( "番号 : " ); scanf( "%d", &i ); p = a; /* 配列の先頭要素をポインタが指すようにする */ printf( "%d 番目=%d", i, *(p+i) ); return; } このプログラムを改造 1.a[i]の入力→キーボードから 2.*pの確認→while文を使う。 [3] 環境 [3.1] OS:Win [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限:11月16日
>>846 #include <stdio.h>
int main( void ) {
int a[10], i; int* p;
for( i = 0; i < 10; i++ ) { printf( "%d番目の数字を入力:", i + 1 ); scanf( "%d", a + i ); }
p = a;
while( 1 ) {
printf( "表示させたいのは何番目の数字ですか:" ); scanf( "%d", &i );
if( i < 1 || i > 10 ) { printf( "範囲外の数字が入力されたので終了します\n" ); break; }
printf( "%d番目の数字は%dです\n", i, *(p+i-1) );
}
return 0;
}
848 :
841 :2010/11/15(月) 17:22:33
>>842 御早い回答ありがとうございます。
参考にさせていただきます!
849 :
デフォルトの名無しさん :2010/11/15(月) 18:20:06
このスレには痛い「経験の有るプログラマ」がいるらしいな
経験のないプログラマきどりよりはマシだろ
余裕があるから痛さを演出できるのだ。 おまいらはエンターテナーとしての自覚に欠けている。
853 :
852 :2010/11/15(月) 19:09:01
申し訳ありませんが、問題文中(↓)の(2),(3)はミスですので無視してください 1. 数字を数値に変換する関数char_int の作成 (1) 数字を数値に変換する関数 char_int を作成せよ.ただし,引数として1 文字を値渡しで 渡し,戻り値は変換後の数値とする.また,数字以外の文字が渡された場合は戻り値を-1 とする. (2) 作成した関数 char_to_int が正常に動作するかどうかを次のmain 関数を使って確認せよ. (3) 実行結果
>>851 同意。
自ら隔離スレまで作る、ワタクシこと◆QZaw55cn4c の痛さといったら、もう誰にもまねできないんじゃないですか?
隔離スレ自体は速攻で存亡の危機にありますが。
巣に帰れ
857 :
デフォルトの名無しさん :2010/11/15(月) 19:20:37
痛さを演出できるのだ(笑)
>>840 ありがとおおおおおおおおおおおおおおおおおおおおおおお
時間にギリギリ間に合ったけど所々あやふやだった
誰か俺をコンパイルしてくれ
>>856 スレ違いだ、帰れ。
俺はお前より経験の有るプログラマだ。
>>852 #include <stdio.h>
int char_int(char c)
{
if(('0' <= c) && (c <= '9')){ return (c-'0'); }
return -1;
}
void str_to_int(char* str, int* result, int* num)
{
for(*num=0; *num<strlen(str); (*num)++){
result[*num] = char_int(str[*num]);
}
}
int main(void)
{
char str[6] = "12345";
int result[5];
int num, i;
str_to_int(str, result, &num);
printf("文字列\"%s\" -> %d 個の整数値", str, num);
for(i=0; i<num; i++){ printf("%d, ", result[i]); }
return 0;
}
すみません、ベルガモットティーの美味しいいれかたを教えてください。
>>856 なんで計算でやろうとするの?
そういうのはエミュレーターでマリオを走らせて1フレームずつ座標変化を確認してテーブル化するのが基本。
本物のマリオもテーブル化でやってると思う。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) キーボードからONを入力すると1を、OFFを入力すると0(ゼロ)を、その他の入力ではErrorとそれぞれ表示するプログラムを作れ。 この場合、ONとOFFは大文字、小文字、それらの混合を問わないものとする。 *注 Cのライブラリ関数の中にtoupper()とtolower()という関数があり、それぞれ文字型データを引数として受け取り小文字は大文字に、大文字はそのまま(tolower()は逆)返す関数がある。 使い方を調べて使用せよ。
[3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:11月17日 [5] その他の制限: なし よろしくお願いします。
#include <stdio.h> int main(void) { char str[100]; scanf("%s", str); int i; for(i=0; i<strlen(str); i++){ str[i] = toupper(str[i]); } if(strcmp(str, "ON") == 0){ puts("1"); } else if(strcmp(str, "OFF") == 0){ puts("0"); } else{ puts("Error"); } return 0; }
ひでえな
870 :
852 :2010/11/15(月) 20:02:04
>>861 で回答してもらったものが正常に動作しなかったので
すみませんがどなたか
>>852 をお願いします
>>870 >正常に動作しなかったので
って、どう期待する動作と違った?
期待した動作と
>>861 の駄目な動作ぐらい書かないと、はぁそうですかだよ
また解答貰っても、また正常に動作しなかったのでの繰り返しになる可能性ある
>>870 俺は
>>861 じゃないけど動いたよ
強いてケチつけるなら <string.h> が include されてない事と、出力の最後に改行コードが無いくらいだな
873 :
872 :2010/11/15(月) 20:15:53
874 :
852 :2010/11/15(月) 20:26:26
>>852 です。
>>861 でいただいた回答をコンパイルしたところ、
c.c:5 error: stray ‘\343’ in program
のようなエラーが大量に出てきてしまい、コンパイルできませんでした。
他の方はちゃんと動いているようなのですが、コンパイラの問題でしょうか?
全角スペースw
全角スペースの話は新参者の為にテンプレに追加すべきだと思う
全角スペースでインデントするアホが悪いだろw
>>861 全角スペースはともかく
strlenを使うのはちょっと問題から外れてる気がする
条件判定部でstrlen()とかバカ丸出しw
普通にヌル文字で終了判定すればいいものを
881 :
デフォルトの名無しさん :2010/11/15(月) 20:42:30
>>816 です
>>816 >>831 本当に基礎的な知識しかないので用語が分からないのですが
wordにプログラムを書いて提出しろとのことなのでアプリにする必要はないとおもいます。
お時間あって出来る方お願いします。
882 :
852 :2010/11/15(月) 20:50:10
みなさんありがとうございます。 半角で字数下げして無事にコンパイルできたのですが、どなたか strlenを使わないコードにしてもらえませんでしょうか
int main(int argc, char *argv[]) { return 0; }
>>881 Word だと?まさか Word にグラフ書けって問題じゃあるまいな
885 :
デフォルトの名無しさん :2010/11/15(月) 20:54:16
・キーボードから入力された2つの整数a,bに対して,aからbまでの総和を求めるプログラム ・二つの入力した整数値x,yのxのy乗を計算するプログラム ・画面に(m,n)(n=1....5,m=1....5)とその掛け算の結果を表示するプログラム ・画面の一行目には*を1個、二行目には2個、三行目には3個のように表示するプログラム 単位かかってるんだ。さっぱりわからんから頼む
>>882 str_to_int() の strlen() 使わない版だ、他は変更しなくて良い
void str_to_int( char* s, int* res, int*num )
{
(*num) = 0;
while( *s ) {
(*res) = char_int( *s );
s++; res++; (*num)++;
}
}
887 :
882 :2010/11/15(月) 21:01:33
888 :
デフォルトの名無しさん :2010/11/15(月) 21:06:10
>>884 書き方分かりにくくてすいません。
visual stdioでつくったプログラムとその実行結果をwordに移すというものです。
>>885 ============================
#include <stdio.h>
int main(void)
{
int a,b,sum=0;
printf("a:"); scanf("%d", &a);
printf("b:"); scanf("%d", &b);
sum = a;
while(a!=b){
if(a < b){ a++; }
else{ a--; }
sum += a;
}
printf("result:%d", sum);
return 0;
}
============================
#include <stdio.h>
int main(void)
{
int x,y,result=1;
printf("x:"); scanf("%d", &x);
printf("y:"); scanf("%d", &y);
while(y--){ result*=x; }
printf("result:%d", result);
return 0;
}
============================ #include <stdio.h> int main(void) { int m,n; for(m=1; m<=5; m++){ for(n=1; n<=5; n++){ printf("m:%d,n:%d,m*n:%d\n", m, n, m*n); } } return 0; } ============================ #include <stdio.h> int main(void) { int i=0,j; while(++i){ for(j=0; j<i; j++){ printf("*"); } puts(""); } return 0; }
>889 >890 y < 0のときはどうなの
ヌル文字判定で済む所をわざわざstrlenを使って可読性を上げているところに気づけないとはプログラミングセンスがない
894 :
885 :2010/11/15(月) 21:32:32
>>889 >>890 >>891 ありがとうございました!
あと本当にすみません。
四つ目の問題は、入力した整数値の行まで表示することでしたorz
それともう一つお願いします
キーボードから入力した5つの整数値を配列に入れて、その総和を求めるプログラムを作成
>>893 可読性云々前に
ループ回すたびにstrlenを呼び出すのがセンス無いんだよ
>>888 じゃアプリは必要だよね、VS指定って書いてるからwindowsのGUIアプリで間違い無さそうだ
そもそもCUIで円グラフなんて考えたくもないしね
んでもってその描画結果のスクリーンショットを Word に張ってプログラムと一緒に出せって事だね
はっきり言おう、それを明日の朝までに無償で書いてくれる物好きは多分居ない、諦めろ
駄目もとで
>>795 のスレに依頼するとなんとかなるかも知れない、500円掛かるらしいけど
....まぁ俺は断られる方に賭けるけどね
y < 0のとき対応 #include <stdio.h> int main(void) { int x,y; double result = 1.0; printf("x:"); scanf("%d", &x); printf("y:"); scanf("%d", &y); if(x != 0){ if(0 < y){ while(y--){ result*=x; } } else if(y < 0){ y *= -1; while(y--){ result*=x; } result = 1/result; } } printf("result:%f", result); return 0; }
致命的な問題が起きない限り可読性優先すべきだろ 処理速度優先ならプログラミング言語なんか全部破棄して回路設計で半田ごてでもやってろ
902 :
885 :2010/11/15(月) 21:54:27
回路設計では半田ごて使わなくね? っていうか今時半田ごてじゃなくて半導体パターンプリントじゃね?
それなんてゴテハン?
ゴッテゴテやな
>>905 FPGL を verilog とか VHDL とか SFL(笑)とか。
SFL(笑)だけ知らないんだけど、なんかダメな奴なの?
「回路設計で半田ごてする」というのはどういう作業なのだろう?
ということで
>>852 を
Verilog,VHDL,SystemVerilog,SystemC等好きなHDLで解答することになりました。
よろしくです。
今時半田ごてなんて単語を聞くとは思わなかった
半田このやろう!
>>911 大日本民国の誇る最強HDL
でNTTがやった
>>900 回路にしてしまうと、拡張や修正に莫大なコストがかかるんだな、これが。
もし就職して製品コードを書くんだとしたら、可読性も速度も両方重要だよ。
変な言い訳してないで、正しい指摘は受け入れなさい。
>>909 つ
http://ja.wikipedia.org/wiki/SFL だめではないと思いますが、知名度が‥‥‥。
1990 年代に学部の授業でいろいろとやらせてもらいました。
当時は GAL/FPGA (
>>908 で typo ってしまいました。) までは体験しなかったのですが、もしそこまでいける状況であればもっと楽しかったかもしれません。
C++ 風の OO (virtualはありません)だったことを記憶しています。
◆QZaw55cn4cは巣に帰れよ
>>917 ◆QZaw55cn4c付け忘れているんじゃない?
>>914 >>917 なるほど、Verilog、VHDLは知ってるけどSFLは聞いたこともなかったよw
宿題こないなー
たまにはエッチなC言語の宿題来いよ!
>>919 それはないだろ、◆QZaw55cn4c が40歳だと思うか?
半田後手
みかかの文字が目に入った時点で拒絶反応が
「〜てみた」
半田このやろう!
E()とかT()とかF()とか舐めてんの?その上コメントもない。読みたくねえよ
>>930 文句言う相手がちがうYo
講師が学生をなめきっているんだよ
それ、元出題者の講師に言え
講義にちゃんと出ている奴ならコメント無しでも問題ないんだろうがな
丸投げ君はね....分るだるよね
さすがにこれは酷いな、グローバル変数しか無いんじゃないのか?
C99環境ないからコンパイル通らないや 俺もパス
bcc 通してみたけど明確なミススペルが有ったよ
while() が While() だったり、RPALEN が PRALEN だったりとか、 '\' なんてのも有ったな
環境云々のレベルじゃないね
コードの意図としては数式の文法チェックだと思うけど、正しいと思う式を入力してもエラーになるからバグってる可能性大
ちゅかコンパイルも通してないソースがバグって無い可能性はかなり低いよね
『このプログラムを改造して』って言われたらパスするよ、
>>929 が不憫でならないよ
>>480 で質問させてもらった者です。
これを利用して、
http://codepad.org/AqL2FSg7このようにしたのですが 、
うまくいきません。
内容は、
no[]の最小値を選択してそこに+2をする、ここまではいいのですが、追加で、
no[]の配列から最小値を選択するときに、最小値が複数存在した場合、
value[]の配列の中の大きいほうの値をランダムで選択して(値が大きい方が選ばれやすくする)、
no[]の配列に、選択されたvalue[]と同じ位置に+2をして、その結果を出力する。
またよく説明できないんですが、
たとえば、最初はno[]がすべて0で最小値が等しいからvalue[]の値を見て、
8とか、9とか10とかの大きい値が(ランダムに)選ばれます。9が選ばれたとすると、
9はvalue[]の7番目だから、no[]の7番目に+2をします。
次は、no[]の7番目に2って入ってるから、それ以外、最小値を選択して、
value[]の値を見て8や10などの大きい値が(ランダムに)選ばれます。
10が選ばれたとすると10は8番目だからno[]の8番目に+2をする
これの100回くり返します。
すみません。よろしくお願いします。
866の者です。 867の方に作ってもらったプログラムですがどれを入力してもErrorとなってしまいます。 すみませんが修正の方をお願い出来ますか? よろしくお願いします
俺はちゃんと動くよ 具体的な実行結果を載せてくれよ
[1] 授業単元:組込み工学 [2] 問題文(含コード&リンク):入力された上位4bitと下位4bitを計算して その結果を16進数で表すプログラムを作成せよ。 例として上位4bitが12、下位4bitが5のときは11と出力。 応用として逆転したものも作ること。 例として上位4bitが12、下位4bitが5のときはEEと出力。 [3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン: visual studio [3.3] 言語:C [4] 期限:明日の12時まで [5] その他の制限:応用ではチルダ~を使わないで作ること。
>>939 入力は「1101」みたいに2進数ビット?
あぁごめん、書いてあるね >例として上位4bitが12、下位4bitが5のときは11と出力。
>>939 入力するのは19711みたいに数字1個でいいの?
すみません、説明不足でした。 入力は二回です 一回目のときに二進数で15までの上位4bit、 二回目のときに二進数で15までの下位4bitというのでお願いします。
2回にわけて入力して、しかもそのまま足すだけじゃ、上位でも下位でもないような
ちょっと計算方法が良く分からん
ただの足し算だろ
ただの足し算だろ(笑)
ビットフィールドでやるのか、シフト演算子でやるのか
>>939 上位4bitが12(0x0c)、下位4bitが5(0x05)のときは0x11(*1)と出力なのか?
単に加算してる様にしか見えないな、0xEE は 0xFF - 0x11 だから(*1)のビット反転したものだ
例から考えると問題はこうじゃないのか?
入力した数値(0〜255)の上位4bitと下位4bitを加算した結果を16進で表示せよ
また、結果のビット反転も16進で表示せよ
問題文とは似ても似つかないな...orz
950 :
デフォルトの名無しさん :2010/11/16(火) 12:05:45
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):キーボードからONを入力すると1を、OFFを入力すると0を、 その他の入力ではErrorとそれぞれ表示するプログラムを作れ。この場合ONとOFFは大文字、小文字、それらの混合を問わないものとする。 『注』 cのライブラリ関数の中にtoupper()とtolower()という関数があり、 それぞれ文字型データを引数として受け取り小文字は大文字に、大文字はそのまま(tolower()はその逆)返す関数がある。使い方を調べて使用せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: emacs [3.3] 言語:C [4] 期限: 2010/11/17
>>950 #include <stdio.h>
int main(void)
{
char str[100];
scanf("%s", str);
int i;
for(i=0; str[i] != '\0'; i++){ str[i] = toupper(str[i]); }
if(strcmp(str, "ON") == 0){ puts("1"); }
else if(strcmp(str, "OFF") == 0){ puts("0"); }
else{ puts("Error"); }
return 0;
}
952 :
939 :2010/11/16(火) 12:44:14
>>939 です。ごめんなさい。実は私、組込み的なことをやっているので
皆さんにはちょっとわかりにくかったかもしれません。
よく考えたらただの足し算でした。
>>949 さんのような解釈で間違いありません。
迷惑をかけてしまいすみませんでした。
953 :
デフォルトの名無しさん :2010/11/16(火) 12:51:54
>>951 950です。
すごく早い対応ありがとうございます。
>>952 組み込みやってる奴がみんなお前みたいな日本語不自由者に思われるからやめてください
すみません、以前
>>511 の質問をして
>>514 の解答をいただいたのですが
この文をbreak文を使わずに表せますか?
よろしければお願いします
何度も申し訳ないです
>>955 #include<stdio.h>
int main(void)
{
int i, n, count=0;
for(n=21;n<=1324;n++)
{
if((n/10)%10==3)
{
int is_prime=1;
for(i=2;i*i<=n;i++)
{
if(n%i==0) is_prime=0;
}
if(is_prime) count++;
}
}
printf("\n%d\n", count);
return 0;
}
>>956 すみません、[is_prime]の文を使わずに…
もうforとifの他は使わないくらい簡単にお願いできますか
>>958 ありがとうございます
学びはじめたばかりの自分でも理解出来ました
何度もお手数をおかけしました
>>959 理解できたなら別スレの質問も締めておいてね、やっていること殆ど同じなんで。
すみません、
>>958 で該当する数の総和を求める場合はどのようなものになりますか
前に
>>510 で回答している。
prime関数で素数かどうか調べて総和の入れ物のsumに入れているだけ。
半田このやろう!
965 :
デフォルトの名無しさん :2010/11/16(火) 17:35:51
[1] 授業単元:統計データ解析 [2] 問題文: 【時刻】【降水量】【気温】 1 10:00 10 10 2 10:30 10 20 ・ ・ 300000 22:30 20 25 上記のテキストデータをそれぞれ配列として読み取り、降水量の最大値と気温の平均値を求めるプログラムを作成せよ。尚、時刻は文字列として読み取ること。 [3] 環境 [3.1] OS:Windows [3.2] VC 6.0 [3.3] 言語:C [4] 期限: 2010年11月19日 コンパイルまでは出来たのですが、作成したexeファイルを実行するとエラーが出てしまいます。 要素数を300000ではなく、100にすると上手く実行できました。 口頭での課題でしたので、表現が曖昧かもしれませんがどうかよろしくお願い致します。
変数は全てグローバルにしろ
>>965 とりあえず100でOKだった時のソースをどっかに張れ
見れば一発系の不具合臭い
0か1かをランダムに出力する変数rndを作りたいのですが、以下のように記述し、ループを回すと ほとんど0しか出力されませんでした。どのようにすればこれより良い乱数が作れますか? rnd=(int)((double)rand() / ((double)RAND_MAX + 1) * 2);
971 :
デフォルトの名無しさん :2010/11/16(火) 18:08:18
皆さんご指導ありがとうございます。
>>956 授業中に作ったもので手元にソースは無いのですが、型の宣言?はこんな感じでした。
#define num 700000
char jikoku[num];
int kousui;
int kion;
static int rnd = 0; rnd = rnd ? 0 : 1;
973 :
デフォルトの名無しさん :2010/11/16(火) 18:11:49
すみません num 700000ではなく300000(100)です。 ソースの他の部分は参考書をそのままコピペしました。
>>971 1行ずつ読むんだろうから
そこは文字数じゃないと思うぞ
◆QZaw55cn4cはお帰り下さい 自分の技術知識を売り物にしようってんだからタダで答えちゃいかん
まぁべつに質問者は宿題が片付けられればなんでもいいわけだから、 回答者なんて気にしてないんじゃない?
10年前とかならともかく 今の乱数生成器はよくできてるから 普通にrand()%2でもそんなに偏ることはないと思うけどな 毎回srand()とかしてない限りは
えっ!?
下位ビット捨ててるだけだからある程度は偏ると思うけど 01交互とかはないだろうけど
交互が欲しいなら乱数いらなくね?
printf("0か1かをランダムに入力してください: "); scanf("%d", &rnd);
15パズルを解くプログラムを作りなさいという課題に 同じ盤面を通らないで後はランダムに状態を遷移させているのですが、4000回状態を遷移しても完成に至りません そういうものなのでしょうか?また、なぜか探索は使ってはいけないそうです・・
探索しないでランダムだったら運を天に任せるしか
15パズルこのスレで作った気がするw いや?あれはマインスイーパだったか。 数独もやったなぁ。不完全ながら。最近回答してないなぁ。 ◆QZaw55cn4cさんは相変わらずはっちゃけててワロタw
「同じ盤面を通らない」がうまくいってないんじゃ
試してみた #include <stdio.h> #include <stdlib.h> main() { int i; for (i=0;i<50;i++) printf("%d",rand()%2); return 0; } DMC :00111101001100111110001110110001001101100011101100 Turbo C++ :00001110000110001111101010110111100111010000100111 VC6〜10、Open Watcom1.9 :11001000001111111010100100100110101011101101101110 gcc(cygwin) :01101000001111101001011000110011100100000110001111
最初のシャッフルがおかしいとか? ランダムに詰め込んでも駄目だったはず。 並んでるのを、ずらしていかないと。
>>989 シードを固定するか、それか、
もっと沢山回して、0/1比を出しておくれ。
>>988 状態数が 15!/2 とするなら 4000回程度で完成する確率は 0.0000001% 未満
993 :
985 :2010/11/16(火) 20:12:21
>>988 そこはうまく行ってるはずなんですけどね・・・
3分C言語
メルセンヌツイスタでも使えよ
>>990 偶奇性(パリティ)があるんですよね、たしか。
>>991 自分でやれよと思いつつやってみた
#include <stdio.h>
#include <stdlib.h>
main()
{
int i,zero=0,one=0;
for (i=0;i<100000;i++)
rand()%2?one++:zero++;
printf("0:%d\n1:%d\n比(0:1):%g\n",zero,one,(double)zero/one);
return 0;
}
DMC
0:49961
1:50039
比(0:1):0.998441
turbo C++
0:49959
1:50041
比(0:1):0.998361
VC6〜10、Open Watcom1.9
0:49855
1:50145
比(0:1):0.994217
gcc(cygwin)
0:49579
1:50421
比(0:1):0.983301
VCと
途中で送ってしまった VCとwatcomのルーチン同じなのか?
999 :
985 :2010/11/16(火) 20:40:50
>>992 確かに状態数を考えるとランダムな状態遷移は現実的じゃないですね・・・
このスレの方に知恵を借りたいのですが、挙動はランダムに見えて、結果的に完成するような
動きをさせることはできますか?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。