あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。
気に入らない質問やその他の発言はスルーの方向で。
「著作」「違法」「Qz」はNGワード推奨。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
>>2以降にあります。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を
入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
テンプレここまで
【C 関数検索 man on WWW】【過去ログ検索】
の2つは使えなくなってたから外した
必要なら適当に補足して
4 :
デフォルトの名無しさん:2014/02/15(土) 13:49:22.52
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
struct node {int elem;struct node *next;};
struct node *list;
問1、中央のセルのポインタを返す関数list midcell(list L)を定義してください。
条件は単方向リストで。また中央のセルとは末尾のセルを除いて考えセルの個数が
2N個の場合N番目のセルのことをいいます。
問2、連結リストLとその途中のセルのポインタMが与えられたとき
先頭LからMの直前のセルまでを切り離し順序を逆転させリストを返す関数
list revfR(list L,list M)を再帰関数で定義してください。
リストLは空でないと仮定します。また本問も単方向リストでお願いします。
問3、問2の機能を持つ関数list revf(list L,list M)を再帰関数を用いず定義してください
よろしくお願いします。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2/16(日)
[5] その他の制限:
[1] 授業単元:統計分析
[2] 問題文(含コード&リンク):
確率分布が
if(x < c) f(x) = ax + b else f(x) = ac + b (定数)
という形であることが分かってる場合にサンプルデータから c を推定せよ
[3] 環境
[3.1] OS: Linux
[3.2] gcc 3.4?
[3.3] 言語: どちらでも可
[4] 期限: 2/19(水) 24:00
[5] その他の制限:
サンプルデータはこのタイプのデータはアップロードできませんっていわれたんですけど
200 18 255
230 18 402
250 18 269
210 14 189
150 54 723
:
っていう感じで
x 該当数 総数
が int型で改行で並んでるテキストファイルが与えられてます
単調増加の f(x) = ax + b の場合の推定方法は習ったんですが
途中で折れ曲がるグラフの場合にどうしたらいいのか分からなくて
よろしくお願いします
>>10 最小2乗法のように{ f(x[k]) - y(x[k]) }^2 を求めろってこと?
それとも最良近似のように max | f(x[k]) - y(x[k]) | ってこと?
>>11 リプありがとうございます
問題文に指定はなかったんですけど
直線グラフの場合に最小2乗法を習ったので最小二乗近似だと思います
13 :
デフォルトの名無しさん:2014/02/17(月) 21:46:09.73
[2]
http://wktcoder.blogspot.jp/2012/07/cstrcat.html の問題をaとbの文字列を受け取れるようにし、連結前と後を表示。
また、連結後の結果も表示する。
void my_strcat(char* str_a,char* str_b)を使用。
[3] 環境
[3.1] OS: Windows 7
[3.2] コンパイラ名とバージョン: Visual Stdio 2013
[3.3] 言語: C
[4] 期限: 2/17
よろしくお願いします。
14 :
デフォルトの名無しさん:2014/02/18(火) 10:03:24.34
期限きれてますやん
なんで2年前の問題をひっぱってくるのか
宿題じゃないのか
17 :
デフォルトの名無しさん:2014/02/18(火) 17:35:52.94
>>15 期限は誤りです
今日までです
>>16 たまたま同じ問題なので
よろしくお願いします
18 :
11:2014/02/18(火) 19:59:00.97
>>10 typedef struct tagPoint{
int x; int y;
}POINT;
typedef struct tagPointList{
POINT* pDataAry;
//メンバ変数 pDataAry の長さ
int size;
}POINTLIST;
typedef struct tagLsmInfo{
//想定関数 f(x)=ax+b の係数 a 。
double dCoefA;
//想定関数 f(x)=ax+b の係数 b 。
double dCoefB;
/**
想定関数とデータの誤差の √ 平方和 => √ ( { y(x[k]) - f(x[k]) }^2 )。
即ち √ { σ(y) ( 1 - 相関係数^2 ) } と同じ値
*/
double dSumError;
}LSMINFO;
/**
入力データから最小2乗法により想定関数 f(x)=ax+b の各係数と
想定関数と入力データの誤差の平方和の0.5乗の値を算出します。<br>
つまり、引数 pRcv のすべてのメンバ変数に適切な値を設定します。<br>
<b>未実装!大して難しくないから、自分で実装してね</b>
@param pData : 入力データ
@param pRcv : 計算結果の受け取りバッファ
*/
void calcLsmInfo(POINTLIST* pData, LSMINFO* pRcv);
19 :
11:2014/02/18(火) 20:02:12.76
/**
入力データをXの値が、指定値より大きいか、小さいかで2つに分けます。
@param pData : 入力データ
@param borderX : 入力データを2分する境界値
@param pSmaller : 計算結果の受け取りバッファ
@param pBigger : 計算結果の受け取りバッファ
*/
void splitData(POINTLIST* pData, int borderX, POINTLIST* pSmaller, POINTLIST* pBigger){
int i;
pSmaller->size = pBigger->size = 0;
for(i = 0; i < pData->size; i++){
if( pData->pDataAry[ i ] < borderX ){
pSmaller->pDataAry[ pSmaller->size++ ] = pData->pDataAry[ i ];
}else{
pBigger->pDataAry[ pBigger->size++ ] = pData->pDataAry[ i ];
}
}
}
20 :
11:2014/02/18(火) 20:03:10.71
/**
f(x)=ac+b と入力データの誤差の平方和の0.5乗の値の総和を計算します。
@param pData : 入力データ
@param iTheC : f(x)=ac+b の c の値
@param pFuncInof : 想定関数の情報
@return double : 計算結果。
*/
double calcErrOnHL(POINTLIST* pData, int iTheC, LSMINFO* pFuncInfo){
double dBuffer, dTmp;
int i;
dBuffer = 0.0;
for(i = 0; i < pData->size; i++){
//ac + b
dTmp = iTheC * pFuncInfo.dCoefA + pFuncInfo.dCoefB;
//y(x[k]) - f(x[k]) = y(x[k]) - { ac + b }
dTmp -= pData->pDataAry[ i ]->y;
dTmp *=dTmp;
dBuffer += dTmp;
}
return sqrt( dBuffer );
}
21 :
11:2014/02/18(火) 20:08:29.27
長過ぎてエラーが出るから2回に分けるよ。
/**
設問を解決する関数。
再急降下法で iCMax から iCMin に近づく方向で iTheC を推定する
@param pInputData : 入力データ
@param iCMax : データを分ける f(x)=ac+b の c の値の取り得る最大値
@param iCMin : データを分ける f(x)=ac+b の c の値の取り得る最小値
@param iSeepestDecentValue : 再急降下法で使用する最大傾斜の値。0 より大きくなければいけません。
@return int : 答えとなるデータを分ける f(x)=ac+b の c の値。
算出不可能なときは iCMin より小さい値を返します。
*/
int solveHomework(POINTLIST* pInputData, int iCMax, int iCMin, int iSeepestDecentValue){
double dPrevErr, dCurErr;
POINTLIST vSmallerList, vBiggerList;
LSMINFO lsmInfo;
int iTheC, iDiggingVal;
iTheC = iCMax; iDiggingVal = iSeepestDecentValue;
vSmallerList.pDataAry = (POINTLIST*)malloc( sizeof(POINTLIST)* pInputData->size );
vBiggerList.pDataAry = (POINTLIST*)malloc( sizeof(POINTLIST)* pInputData->size );
splitData( pInputData, iTheC, &vSmallerList, &vBiggerList );
calcLsmInfo( &vSmallerList, &lsmInfo );
//小さい方の想定関数 ax+b とデータの誤差の√平方和
dPrevErr = lsmInfo->dSumError;
//大きいの想定関数 ac+b とデータの誤差の√平方和
dPrevErr += calcErrOnHL( &vBiggerList, iTheC, &lsmInfo );
22 :
11:2014/02/18(火) 20:10:45.93
//前とのツナギ目 //大きいの想定関数 ac+b とデータの誤差の√平方和
////ツナギ目ツナギ目 //dPrevErr += calcErrOnHL( &vBiggerList, iTheC, &lsmInfo );
//想定関数とデータの誤差の√平方和 が最も小さくする iTheC を再急降下法で探す
while( 0 < iDiggingVal ){
iTheC -= iDiggingVal;
//入力データをXの値が iTheC より大きいか、小さいかで2つに分けます。
splitData( pInputData, iTheC, &vSmallerList, &vBiggerList );
//小さい方で最小2乗法
calcLsmInfo( &vSmallerList, &lsmInfo );
//小さい方の想定関数 ax+b とデータの誤差の√平方和
dCurErr = lsmInfo->dSumError;
//大きいの想定関数 ac+b とデータの誤差の√平方和
dCurErr += calcErrOnHL( &vBiggerList, iTheC, &lsmInfo );
if( dPrevErr <= dCurErr ){ iTheC += iDiggingVal; iDiggingVal /= 2;
}else{ dPrevErr = dCurErr; }
if( iTheC < iCMin ){ break; }
}
free( vSmallerList.pDataAry );
free( vBiggerList.pDataAry );
return iTheC;
}
23 :
10:2014/02/19(水) 00:51:01.38
>>18-22 ありがとうございます
まだ読んでないんですけどとりあえずお礼だけ
明日じっくりよませていただいて再度書き込みしにきます!
24 :
デフォルトの名無しさん:2014/02/20(木) 09:41:49.48
25 :
11:2014/02/20(木) 15:57:23.95
>>10 読み返したら結構単純なミスが多いな
アルゴリズムはOKだと思うけど実際にレポートに使用できた?
>>25 結局昨日時点ではよくわからなかったので提出起源あきらめました><
せっかくといていただいたのにすいません
いずれにしても遅れてもださないと単位こないので今考えてるところなんですけど
入力データの y 座標を何にすべきなのか分からなくて
該当したかどうかなので y 座標は 0 と 1 とみるべきなんですよね…
あと C++ は基本的なことはならったんですけどプリミティブな関数しか使えなくて
ファイル読み込みの時の文字列のパーズが面倒だったので
solver の関数だけかりて Java でかきなおしてしまいました
とりあえず自分で calcLsmInfo を実装して
メイン関数でデータの読み込みと solver の呼び出しをしてるだけなんですが
なぜか実行結果が -3850 っていう負の値になってしまいました…
solver を呼び出すときの初期値がまずいんでしょうか…
http://codepad.org/fBWf1Hp5
C/C++のスレなのにスレチになってしまって申し訳ありません
課題に言語指定がとくになくて Perl や Java でもかまわないみたいで…
>45行目 if(data.data[i].x < border_x)
//ここは間違えてて、ゴメンなさい。m(_ _)m
>100, 115行目 × //大きい の想定関数 ac+b とデータの誤差の√平方和
>100, 115行目 ○ //大きい方の想定関数 ac+b とデータの誤差の√平方和
//ここも間違えてて、ゴメンなさい。m(_ _)m
//159行目より修正
int max_x = Integer.MIN_VALUE;
int min_x = Integer.MAX_VALUE;
int iSeepestDecentValue;
while((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line);
int x = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
int sum = Integer.parseInt(st.nextToken());
for(int i = 0; i < n; i++)
data.add(new Point((double)x, 1.0));
for(int i = 0; i < sum - n; i++)
data.add(new Point((double)x, 0.0));
if(x > max_x)
max_x = x;
//修正
if(x < min_x)
min_x = x;
}
PointList input_data = new PointList(data);
//修正
//再急降下法で使用する最大傾斜の値。0 より大きくなければいけません。
iSeepestDecentValue = ( max_x - min_x ) / 100;
iSeepestDecentValue = ( 0 >= iSeepestDecentValue ) ? 1 : iSeepestDecentValue;
System.out.println(solve(input_data, max_x, min_x, iSeepestDecentValue));
29 :
11:2014/02/21(金) 04:27:24.98
>>27 >>28は俺ね。
取り敢えず見つけてバグを修正してみたけど。
ところで if(x<c)...略 の c って int型でいいのかい?
再急降下法はまだ習ってなかった?そうだったら使用してしまってゴメンなさい。
30 :
11:2014/02/21(金) 05:01:29.98
追記
//前とのツナギ目 //大きいの想定関数 ac+b とデータの誤差の√平方和
////ツナギ目ツナギ目 //dPrevErr += calcErrOnHL( &vBiggerList, ithe_c, &lsmInfo );
103,104のコメントは不要。俺の書き方が悪かった。
2回に分けたから、繋ぎ目が分かるようにしたつもりだったんだが…。
>106 × //想定関数とデータの誤差の√平方和 が最も小さくする ithe_c を再急降下法で探す
>106 ○ //想定関数とデータの誤差の√平方和 を最も小さくする ithe_c を再急降下法で探す
データファイルのフォーマットが分からないから何ともいえないが
Pointとして捉えるデータ方式が間違っているような悪寒が俺はするんだが
>該当したかどうかなので y 座標は 0 と 1 と
ではなく、通常は、この手の問題は、入力は
X値,Y値 [改行]
ってのがN行あるCSVファイルだと思うんだが。
>200 18 255
>230 18 402
>250 18 269
>210 14 189
>150 54 723
>:
>っていう感じで
>x 該当数 総数
と、言うのならば
200 0.0705882(=18/255)
230 0.0447761(=18/402)
250 0.0520446(=14/189)
150 0.0746888(=54/723)
:
じゃないだろうか?
31 :
デフォルトの名無しさん:2014/02/21(金) 06:32:11.11
[1] プログラミング言語 入門
[2] 変数を入力して、入力された値と以下の条件を満たした値を表示する
1 : 6の倍数なら2で割った値
2 : 3の倍数なら二乗した値
3: 2の倍数なら2で割った値
4: 上記以外の倍数は、二乗した値から元の値を引いた値
☆ 複数の条件が合致した場合は大きい倍数の条件のみとする
☆ 自作で関数を1つは作成する
なにとぞよろしくお願いします。
[3] 環境
[3.1] OS: Windows 7
[3.2] コンパイラ名とバージョン: Visual Stdio 2010
[3.3] 言語: C
[4] 期限: 2/22
32 :
デフォルトの名無しさん:2014/02/21(金) 06:37:30.54
>>31 1の条件を訂正させてください。
正 1 : 6の倍数なら2で割った値を二乗した値
です。
33 :
11:2014/02/21(金) 17:07:22.83
>>27 まだ修正箇所があった。スマンm(_ _)m
-- 152行目 --
lsm_info.sum_error = buf;
lsm_info.sum_error = java.Math.sqrt( buf );
×再急降下法
○最急降下法
34 :
11:2014/02/21(金) 17:22:26.78
>>32 改行が多すぎでエラーが出たから体裁が無茶苦茶なのは勘弁な
int solve(int inputValue){ int iBuffer;
//1 : 6の倍数なら2で割った値を二乗した値
iBuffer = inputValue % 6;
if( 0 == iBuffer ){ iBuffer = inputValue / 2; return ( iBuffer * iBuffer );
}else{ //2 : 3の倍数なら二乗した値
iBuffer = inputValue % 3;
if( 0 == iBuffer ){ return ( inputValue * inputValue );
}else{ //3: 2の倍数なら2で割った値
iBuffer = inputValue % 2;
if( 0 == iBuffer ){ return ( inputValue / 2; ); }
} }
//4: 上記以外の倍数は、二乗した値から元の値を引いた値
iBuffer = inputValue * inputValue - inputValue; return iBuffer;}
int main(int argc, char* argv[]){ int iBuffer;
printf( "Input Number : " ); scanf( "%d", &iBuffer );
solve( iBuffer ); return 0;}
35 :
11:2014/02/21(金) 17:27:27.90
>>32 最後の行が間違ってた
×: solve( iBuffer ); return 0;}
○: printf( "Anser %d\n", solve( iBuffer )); return 0;}
>>35 訂正後もスペル間違ってる
×Anser
○Answer
37 :
デフォルトの名無しさん:2014/02/22(土) 08:32:55.51
38 :
11:2014/02/22(土) 12:22:49.56
>>37 36!=11な
Linux+gccでは問題無く動作した。
ここ数年は Visual Studio は触ってないから確かなことは言えないけど
ビルドして「実行」とかいうボタンを押すと、DOSプロンプトが立ち上がって
”Input Number : ”ってコードで書いてあるとおりに入力を催促表示すると思うけど。
違っていたら Visual Studio スレで聞いてみて
40 :
13:2014/02/24(月) 09:56:37.62
>>38 アドバイスありがとうございます
>>39 cmd自体は出ますが、入力して結果が表示される前に消えてしまいます
>>40 3箇所誤り見つけた。
19行目の返り値
28行目、30行目の変数の渡し方
>>41 正常終了して画面が消えただけ。
main関数のreturn直前にsystem("pause");入れてみ。
>>41 6行目の空白行に
char* pHead = str_a;
とおいて、19行目の戻り値を pHead に変えてみる
>>42 >main関数のreturn直前にsystem("pause");入れてみ。
これよりはreturn直前にprinf("Input any key to quit. "); scanf("%s",&a);で
ダミーの入力受付の方が初心者向けじゃね。
まあ、どっちでもいいけどさ
>>43 人にコメントできないくらい色々ミスってるぞ
>>44 だっていちいちコンパイルするのが面倒いだもん(/ω\)ハズカシーィ
>>45 安価ミスは気づいてないのかな?
また、以下3点の理由で、42の勝ち
??標準入力にゴミデータがあったら停止しない
??charの配列が必須
??バッファオーバーフローの可能性
49 :
デフォルトの名無しさん:2014/02/26(水) 23:20:13.15
またできない人が偉そうに回答してるのか
このスレは全大学の教授に監視されています
>>50 しっかりした答えを書く責任があるということですね。
52 :
11:2014/02/27(木) 13:49:06.50
>>50 vimの練習のために、お題に答えていた俺は逝ってよしなんですか?
vim script, elisp入門の講義にしたら良いのに
このスレは全大学の情報学科出身の派遣社員が生暖かい目で見守っています
田舎大学のアホ教授なんて全員、クビにして然るべき
56 :
デフォルトの名無しさん:2014/02/27(木) 18:37:03.61
と奴隷が申しております。
派遣先輩の忠告は聞くべき。
卒業式の日に、お礼参りに角材で殴ったりしちゃダメだぞ☆
こいつには単位あげない
59 :
11:2014/02/28(金) 01:02:03.01
情報学科出身ではない、
派遣社員ではない、
そんな俺は逝ってよし!なんですか
60 :
デフォルトの名無しさん:2014/02/28(金) 05:19:23.69
61 :
11:2014/02/28(金) 05:30:23.48
>>59 このスレで11を獲った人
そういうお前こそ誰なのよ?
ニートです
>>31 fizzbuzzだな。
#include <stdio.h>
static int sqr(int n) { return n * n; }
static int div(int n) { return n / 2; }
int main(void)
{
int n, t;
scanf("%d", &n);
t = n;
if (n % 2 == 0)
n = div(n);
if (n % 3 == 0)
n = sqr(n);
if (t == n)
n = sqr(n) - t;
printf("%d\n", n);
return 0;
}
QZがまた糞回答をした
今流行のラムダ式でおね
今でしょ
>>69 入力値が6のとき、答えはいくつになればいいと思う?
73 :
69:2014/03/01(土) 16:38:35.00
ママーみんながボクをいじめるよ〜(´Д⊂ヽ
>>34のドキュソよりも、いいコードを貼り付けてやったのに
間違ってるって、言いがかりを付けてくるんだ〜
#include <iostream>
int main() {
int n; std::cin >> n;
std::cout << ([&](){ return !(n % 2) ? n / 2 : !(n % 3) ? n * n : n * n - n; })() << std::endl;
return 0;
}
あ、違った。
QZ渾身の糞コード
77 :
デフォルトの名無しさん:2014/03/02(日) 22:00:01.85
78 :
デフォルトの名無しさん:2014/03/04(火) 17:45:25.55
誰か助けて
79 :
デフォルトの名無しさん:2014/03/04(火) 17:51:14.19
誰か助けてください。お願いします。
来週に似たような問題の試験があるので解説付きだと嬉しいです。
now.ameba.jp/x12xxxy24x
出力しろってやつは無視しておkでっす。
>>79 URLをちゃんと記述してくれ、クリックして出ない URL なんか誰も見ない
81 :
デフォルトの名無しさん:2014/03/04(火) 22:31:45.84
>>80 俺見たよ。レベル低くてリンク張れないんだろ、察しろよ雑魚。
82 :
デフォルトの名無しさん:2014/03/05(水) 06:25:33.74
>>81 俺見ないよ。レベル低くて見る気が起きないんだよ、察しろよ雑魚。
83 :
デフォルトの名無しさん:2014/03/05(水) 06:28:11.60
84 :
デフォルトの名無しさん:2014/03/05(水) 06:34:23.08
忍法帖も知らないにわかが偉そうにURLがどうとかw マジ糞だなこいつ
>>80
>>79 見れるけど
Nexus7で見てるから
画像の文字が読み取れん
86 :
デフォルトの名無しさん:2014/03/05(水) 11:43:25.52
>>79 問2
(1)(a)2 出力の第2項がyの初期値
(b)x+y (a)の答えと出力の3項から
(2)BとD
問3
(1) (a)int cnt=0; 初期値0必要
(b)cnt
(c)"%sは%d文字です。\n",str,strcnt(str)
(2)for(;s[cnt]!='\0';cnt++){/*何もしない*/};
87 :
デフォルトの名無しさん:2014/03/05(水) 11:45:29.08
>>79 続き
問4(1)
#include <stdio.h>
typedef struct{ int x, y; } Pt;
Pt swap(Pt p){
Pt ret; /* 戻り値 */
ret.x=p.y; ret.y=p.x;
return ret;
}
(2)
int main(void){
unsigned int i;
Pt p;
Pt array[]={{-1,1},{1,0},{0,-1}};
for(i=0;i<sizeof(array)/sizeof(Pt);i++){
printf("入替前:(%d, %d)\n", array[i].x, array[i].y);
p = swap(array[i]);
printf("入替後:(%d, %d)\n", p.x, p.y);
}
return 0;
}
88 :
デフォルトの名無しさん:2014/03/05(水) 11:47:33.89
>>79 続き
問5 自信無い、誰か教えて。
#include <stdio.h>
int main(){
int *x = /*空欄*/
x += 5;
printf("%X\n", x);
return;
/* 出力:19 の時 空欄を埋めよ */
}
intが2byteなら,int *x=15;
intが4byteなら,int *x=5; で、一意には決まらない?
あと、ポインタ型を数値で初期化していいの?
89 :
デフォルトの名無しさん:2014/03/05(水) 11:49:38.79
>>79 続き
問6(2)
#include <stdio.h>
#include <string.h>
void freverse(char* c){
int n = strlen(c); /* 'H','e','l','l','o','\0' で n=6*/
while(n>0){
printf("%c", c[--n]);
/* [--n]:変数の値を使う前に-1するので n[5]からn[0]まで出力 */
}
printf("\n");
}
int main(){
char* c = "Hello";
/* c[0]='H',c[1]='e',c[2]=l,c[3]=l,c[4]=o,c[5]=w,c[6]='\0' */
freverse(c);
return 0;
}
問7
最後が見えないのでよく分からん。
90 :
86:2014/03/05(水) 14:01:17.39
>>79 ごめん、訂正。strlenの戻り値間違えた。
問6(2)
#include <stdio.h>
#include <string.h>
void rev_1(char* c){
int n = strlen(c); /* 'H','e','l','l','o' で n=5*/
while(n>0){
printf("%c", c[--n]);
/* [--n]:変数の値を使う前に-1するので n[4]からn[0]まで出力 */
}
printf("\n");
} /* 出力: olleH */
int main(){
char* c = "Hello";
/* c[0]='H',c[1]='e',c[2]=l,c[3]=l,c[4]=o,c[5]=w,c[6]='\0' */
rev_1(c);
return 0;
}
91 :
86:2014/03/05(水) 14:09:55.83
>>79 又間違えた。
>>90 mainの中のコメント
/* c[0]='H',c[1]='e',c[2]=l,c[3]=l,c[4]=o,c[5]=w,c[6]='\0' */
じゃなく、
/* c[0]='H',c[1]='e',c[2]=l,c[3]=l,c[4]=o,c[5]='\0' */ だわ。
>>79 int main(){
Pinfo ps[] = {{"taro",M},{"hanako",F},{"saburo"←この行が切れてて解答できません
printPerson(ps);
return 0;
}
これで合ってる?
Pinfo ps[] = {{"taro",M},{"hanako",F},{"saburo",M},{"",E}};
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&amp;リンク):
10×10のグラフにおいて、直接接続されたノード間のエッジの距離を1から10までの整数から無作為に選択した値、接続のないノード間の距離を無限大(実際には99999など)としてそれぞれ与え、配列などのデータ構造に記憶させる。
上記で作成したネットワークの任意のノードから、それ以外のすべてのノードまでの距離と経路をDijkstra法を用いて求め、表示する。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Borland c++ 5.5.1
[3.3] 言語: c++
[4] 3/8(土)
すみません、93の言語を修正させてください。
[3.3]言語c++ → c でお願いします。
95 :
93:2014/03/07(金) 11:44:08.01
>>93 糞レベルなこのスレで回答がつくとでも思っているのか?
97 :
93:2014/03/07(金) 19:36:20.18
お前ら、これくらいしか能が無いんだから、さっさと答えろ
98 :
86:2014/03/07(金) 20:51:32.26
>>93 初心者だけど練習で書いてみた。(リンク禁止なのでコピペで)
ideone.com/PUYFar
隣接行列の作成はかなりええかげんに書いたのでそこらはもっといいのに書き換えて。
俺には出来んかった。
99 :
デフォルトの名無しさん:2014/03/08(土) 05:55:58.24
>>93 用語適当すぎ
10×10のグラフって何や、完全二部グラフか?
知らないんならレスしないでください
ここでお願いをする人間は、これらが必要だよな
a. トリップを付ける。
b. 回答を受け取ったら感謝と報告を含んだ返答を書き込む。
c. E-mail欄は sage ではなく age 。
102 :
デフォルトの名無しさん:2014/03/08(土) 20:27:51.06
103 :
デフォルトの名無しさん:2014/03/08(土) 20:29:53.38
ろくに答えられない分際でルール作りにばかり力入れるやついるよなw
まずお前が出て行けとw
こういう宿題は解いても載せない
カス大生の問題は解いても掲載しない
106 :
デフォルトの名無しさん:2014/03/08(土) 21:05:29.08
>>105 解けないバカが妄想語ってんじゃねえよカスw
やったー!
煽るしか人間として能がないDQN(=暇潰し玩具)が降臨したぞー!
>>105さん、自分ここで回答してしまったバカです。
何かコメントくださいw
謎の勝利宣言
団塊世代のジジイ共をのさばらせないためにも、
ゆとりのクズ大生は甘やかしてはいけない
だね
自分で調べる力を身に着けさせよう
>>106 同様の問題をPrologで出されたわ
c++とか1,2時間も掛からないだろ
>>103 そうそう、wikipedia や wikisource をちょこちょこ書いているが、やたらとルール作りが好きな連中が多いね、あそこは
113 :
101:2014/03/08(土) 23:03:39.68
>>112 そうそう、このスレでちょこちょこ回答しているが、やたらと煽る以外脳がない低脳と同類の連中が多いね、ここは
IDが表示されるようになりました。
ありがとうございました。
116 :
デフォルトの名無しさん:2014/03/12(水) 22:55:36.30 ID:IkRDHIrE
[1] プログラミング言語 C
[2]
・ 指定したファイルに文字列を行数を指定して挿入するプログラム(ファイル名と位置,挿入する文字列を入力できるようにする)
・ また、上記のプログラムを直して文字列を挿入する場所を行だけでなく列も指定できるようにせよ。(まずは半角だけでよい)
[3] 環境
[3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C
[4] 期限: 3月14日
最近勉強を始めたんですが、ファイルの取り扱いでかなり苦戦しています。
どなたかよろしくお願いします。
上の方が使っていたWebのコンパイラも置いておきます。
ttp://ideone.com/
自分で調べろゴミ
118 :
デフォルトの名無しさん:2014/03/13(木) 03:17:23.49 ID:9GIXFBoB
119 :
デフォルトの名無しさん:2014/03/13(木) 03:18:17.41 ID:9GIXFBoB
>>118 春休みだもん
煽り目的の馬鹿が涌くいて出てくる時期だろ
uyじゃないか?
IDが出てさぞ荒らしにくくなってるだろうなあザマアww
最近勉強を始めたんですが、ファイルの取り扱いでかなり苦戦しています。
どなたかよろしくお願いします。
上の方が使っていたWebのコンパイラも置いておきます。
こいつ馬鹿だろ。この程度で苦戦とか本の読みこみが足りなすぎ
>>116 > ファイルの取り扱いでかなり苦戦しています。
どこまでできてるんだよ?
自分の能力も明示せず問題丸投げで回答を求める
これ質問できない馬鹿の見本
>>116 何か変なのが一匹居るけど、無視で良いよ。
初心者スレでしか暴れられない可哀想な人だから。
>>125 自己顕示欲で糞回答しろよ
糞コードを見せろQZ
IDが表示されるのと、この宿題スレをやめる問題は全く無関係な話
このスレはこのまま続ければいい
ただ質問する奴は大学側にバレバレなんで、それで単位を落としてもこのスレを逆恨みすんな
そんな大事な単位なら安易に問題を晒すな
素タップ細胞のコピペ事件知ってるならここで質問するのやめとけ
129 :
デフォルトの名無しさん:2014/03/13(木) 18:06:13.94 ID:jln8hkaw
質問者でもないのに必死になっている奴いて、ワロタ
ファイルやストリームもろくに調べることのできないクズが居ると聞いて
春休み真っ盛りだな
煽り目的のDQNがバカ丸出し♪
うーん、この低脳っぷりが芳ばすい〜(゜∇^d)!!
この質問者クズすぎだろ
ID:ZLHpPjTLの必死さにワロタ
本日22:00までに
>>116からお願いのカキコが
あったらやったるわ
136 :
デフォルトの名無しさん:2014/03/13(木) 21:30:42.10 ID:1FOo5v5s
C言語なんですけど
void swap(int *x int *y)
int temp;
temp = *x;
*x = *y
*y = temp
一時変数tempを使わないで、swapを実行するにはどうすればいいですか?
もう馬鹿すぎて何も言えねえ
139 :
デフォルトの名無しさん:2014/03/13(木) 21:35:22.78 ID:AgM9wxep
>>116 #include<stdlib.h>
#include<stdio.h>
#include<string.h>
void doit(char*fname,int lineno,char*str) {
FILE*fin,*fout;int i,line=0;
char buf[1024];char**lines=NULL;fin=fopen(fname,"r");
while(fgets(buf,1024,fin)) {lines=realloc(lines,(line+1)*sizeof(char*));
lines[line++]=strdup(buf);
}
fclose(fin);fout=fopen(fname,"w");
for(i=0;i<line;i++){
if(i+1==lineno)fprintf(fout,"%s",str);
fprintf(fout,"%s",lines[i]);
}if(i+1==lineno)fprintf(fout,"%s",str);fclose(fout);
for(i=0;i<line;i++)free(lines[i]);free(lines);}
QZやっとの糞コード排出
141 :
片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/13(木) 21:42:08.30 ID:AgM9wxep
>>138氏が先に片付けてしもうたか
ご苦労様ですm(_ _)m
あとは
>>116がお礼をするだけだな
アホ大学生ネット回答でコピペし教授にバレる
ID付きだとあぼーんが捗っていいな
友達いないからここで質問するんだろ
ほらまた自己顕示欲キチガイが必死になってる
145 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
147 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
149 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
素晴らしい
ID導入のおかげだ
ID:2dNSUwpyをNGIDにしよう
152 :
デフォルトの名無しさん:2014/03/14(金) 14:53:11.12 ID:KtWzfVn0
IDが役に立ってるw
>>150 ワロタ。おれも同じ所があぼーんになってるwww
ID良いな。自動的に雑音排除して普通にスレを読めるようになった。
俺もw
( ;∀;)イイハナシダナー
宿題を投稿するな
一つの糞質問に群がるゴミどもきもすぎる
結局こいつらがしたいのは自分の力の誇示ってやつなんだよな
まあどいつもヘボだらけなんだが
オタクってさ、使いどころのない知識を自慢して優越感に浸る傾向にあるよね
こいつらも同じキモオタ
>>160 っていうかなんでID導入されたのに悪化するのかね?
あぼーんできるからID導入は正解だった思うけれども
本物のオタクってさ、自分のために生きた知識を生かすんだけど
キモイオタクってのはくだらない知識を自慢するだめだけに使うんだよね
悪化してないでしょ
赤いIDによる印象操作だ!陰謀だ!
164 :
デフォルトの名無しさん:2014/03/14(金) 23:59:03.30 ID:S9zwpGGD
遅れてすいません。
インフルエンザB型に感染してしまったもので。
>>119 そうです。
ひとつは全角文字も読み、行数のみです
>>138 これでは入力した文字を挿入できないので問題とは違うようです。
ありがとうございます。参考にさせていただきます。
>>139 error C2598: リンケージ指定子がグローバル スコープで宣言されていません。
と出てしまいます。
doiit っていうのは初めて見ました。
>>148 string.hを追加したら動きました。
ありがとうございます。
>>93 10*10の隣接行列だね
でも隣接行列は、ほとんどが隣接しない99999となり、
メモリの無駄だから、一般的には隣接リストを使う
セル番号を、1-100とすると、
1->2,3,4
2->1,3,5
漏れは今、6マスタイプの大戦略のAIを考えている
首都からすべてのセルへの、最小移動コストと、
その経路をたどるパス
すべてのセルへ、ランダムな移動コストを与えて、
シミュレートしようと思っている
優先度キューを使うか?
文字列(string型)の先頭から数字として有効な文字数を返す関数ってどうやって作れば良いですか?
例
"126AB"→3
"-(1+2)"→0
"-9.25ABC"→5
strspn(s, "0123456789")
>>176 10進数でない文字列の場合はどういう扱いをすればいいの?
あぼーんじゃないからレス番ずれたな
171 :
116:2014/03/15(土) 23:43:49.16 ID:nqywdHbD
>>148 非常にわかり易かったです。
これを少し変えて
・指定したファイルに文字列を行数を指定して挿入するプログラム(ファイル名と位置)、挿入する文字列(全角)を入力できるようにする
にしたいんですが、どこをどのように変えたらいいでしょうか?
>>176 > 文字列(string型)の先頭から数字として有効な
数字?
なら、"-9.25ABC" は 0 じゃね?
数値なら、1.2e-3、0x1234、.123、1,234.56 等を数値として見なすかを決めてもらわないと
>>170 公開質問状でコードを見せろ、というつもりだったのに残念
>>171 >文字列を行数を指定して挿入
という事は、「最初に改行してから、指定行数挿入」という事ですか?
>32. fprintf(fp2,"%s",str);
この部分に改行を追加し、指定行数ループするのではだめでしょうか?
プログラマ=奴隷は事実だからしょうがないね
隠そうとしてもムダ
てか、会社次第では貴族待遇。
もっとも君らみたいなゴミには、そんな専門知識もスキルも期待できないからね
派遣ITの奴隷街道へまっしぐらだよ!
177 :
116:2014/03/16(日) 21:10:46.65 ID:JTOubL74
>>175 おそらく
>>172に対するレスですよね?
>>148の問題を変えて
挿入したい行数のみ指定し、(挿入したい)文字列(全角)を入力できるようにしたいのです
なにこれよくわかんない
ここで質問しても教授にバレバレだから
楽で出来ると持ったら大間違いで、結局は単位落とすだけなんだよなー
単位落とすだけならいいけれども‥‥
ネイチャーに出す人がいるとはさすがに‥‥
>>177 行数と文字列を引数でもらって、処理をする
行数を引数でもらって、文字列は入力させて、処理をする
処理をするところは変更する必要ないのが分かればあとは簡単でしょ。
文字列の入力を読み取ることもできないレベルなら素直に単位を落としましょう。
>>177 一応このスレのルールなんで、
>>1のテンプレに従って依頼内容をもう一度書き直して
このスレのルールより社会のルールが優先
184 :
デフォルトの名無しさん:2014/03/17(月) 08:56:25.05 ID:VXhVqDC5
>>182 >>183 [1] プログラミング言語 C
[2] 指定したファイルに文字列を行数を指定して挿入するプログラム(ファイル名と行数、挿入する全角文字列を入力できるようにする)
[3] 環境
[3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C
[4] 期限: 3月18日
自分なりにやってみたのですが、うまくいきません。
もしよければ修正お願いします。
http://ideone.com/GuocSg
>>184 >行数を指定
というのは、
挿入する行番号を指定という意味か、
入力された文字列を挿入する回数という意味か、
どちらでしょうか?
それから、
>挿入する全角文字列を入力できるようにする
というのは、入力時に漢字を入力すればいいだけに思います。
もしかして、IMEのON/OFFをするという事ですか?
>>184 >>148は非常に分かりやすかったんでしょ?
それを改造するに当たって、どこで困っているのかを書いたほうがはやいと思うよ。
必要な要素は
>>148に含まれているように思うし。
一点問題を挙げるとすると、「指定したファイルに」挿入していないというところだけど、
そこは気にしてなさそうだし。
そんなことするよりさっさと単位諦めて退学届出したほうがいいと思うけど
188 :
デフォルトの名無しさん:2014/03/17(月) 16:45:58.35 ID:VXhVqDC5
>>186 >挿入する行番号を指定という意味か
そうです。頭から数えていって〜という意味です。
>挿入する全角文字列を入力できるようにする
なるほど。マルチバイト文字でも気にしなくて良いのですね。
>>187 おそらくこの問題で指定したファイルというのは
「a.txt」といういファイルをあらかじめつくっておき、そのファイル名を入力したら挿入できていればいいと思います。
日本語の理解も不十分だったのか
ほんとに大学いってるのかな
191 :
デフォルトの名無しさん:2014/03/17(月) 17:18:19.98 ID:omlKKA03
>>188 28行目をcolに1を代入する文に直す。
32行目の出力フォーマットを%sから%s\nに代える。
これで意図する動作しないかな?
単位落とすの確定なのに答えてあげる優しい人がいるね
ダメ人間を育ててしまう人たちだ
193 :
デフォルトの名無しさん:2014/03/17(月) 17:30:34.31 ID:VXhVqDC5
君、次の課題もそんな調子でここに質問する気?
奇跡的にここで得られた回答でコピペして単位もらえても
そのうち大きな課題出てまったく太刀打ちできなくなってコピペ論文で退学になる運命だから
ほんと諦めたほうがいい
195 :
デフォルトの名無しさん:2014/03/17(月) 17:46:24.05 ID:VXhVqDC5
問題を解くにあたっての必要となるベースの知識が欠けているから丸投げするんでしょ
だったら反省して自分で基礎の勉強をまず始めなきゃ、
いつまでもここで解決できると想ったら大間違い
退学になるわけないだろ
せいぜい半期の単位を全部取り消されるくらいだ
退学同然だと思うけどね
と大口たたいて出て行った男性が10分後に血まみれになって帰ってきた
東大以外は行くだけ無駄らしいからさっさと退学した方がいいらしいよ。
いまさらだけどコードを最後まで読んでなかった恥ずかしい。
大学もなにも個人勉強でないの?
なんにせよガンバレ
人に頼ってる時点でプログラマとしては3流
206 :
デフォルトの名無しさん:2014/03/18(火) 13:31:43.10 ID:JEryyi3Z
>>206 馬鹿が頑張って解決しようとしてもムダ
お前の知識は何も役にも立たん
かえって質問者を惑わせ迷惑させようとしているのかね
本当にまる2日以上寝てるとき以外はPCに向かってるんだな
やっぱりここで宿題やってもらったのがばれて留年した人か
マジでここでのコピペがばれて単位落として泡吹いた奴は多いと思うよ
それをこのスレで報告していないだけで
これだとまだまだ自滅していく学生は多いのかな
一泡吹かせた人なのか、はたまた泡を食った人なのか。というのはさておき。
そもそもコピペに対する罰が単位を落とす程度で済ませる学校が悪いよ。
半期単位失効というところもあるが、それでもやはりぬるいといわざるを得ない。
基本的に退学、譲歩して全期単位失効が妥当。
それでも俺は回答し続けるけどね。
プログラムの課題をちゃんと書き換えるからと一人に渡したら
5人ぐらいが丸々コピーして提出してた。
うち一人はソース内の名前+学生番号も書き換えてなかった。
ドカタになろうとしている奴らの精神的レベルはこの程度
このスレは削除したほうがいい
彼らは学士や修士号を獲て、SIerやコンサルに成ろうとしているんだから、
課題の丸投げや不都合な事実の隠蔽は社会へ出る前の適切な訓練。
技術者になろうとするアホは課題を自力で解こうとするし、
人生の春を失うどころかキャリアさえ失う。バレなければ問題はないし、
社会的に優秀だし輝かしい名誉まで手に入る。
このスレに出るレベルの課題如きでプログラマになれると考えているのは、
かなり頭が悪い大学生だろうし、恐らく行くだけの価値がない大学に通っている。
この程度の課題で十分だと考える教授陣営も、常春の人生を満喫して、
全身にダニが湧いていることは確実。
>>214 しかしながら、学生のときに学んでいるはずであろう素養を備えていないプログラマが多いのも事実。
つまり、この程度の課題すらこなせない学生相手にする教授陣営も大変だということだ。
ま、単位あげなきゃいいだけなんだけどね。
>>172 カンマの妥当性判定が面倒だな
123,0000 は3になるんだろ、書きたくねぇw
>>216 こういう嘘回答する奴は回答者にもなれない
低学歴野郎です
218 :
デフォルトの名無しさん:2014/03/20(木) 14:03:23.20 ID:VJY+yRA6
カンマはデータの区切りにもなるから、
数値の一部として見るのはやめた方がいいかも
スレ違い誤爆だろageるなクズ
perlだとこんな感じか?
if ($str =~/(^\-{0,1}[0-9]+(\.[0-9]+|))/) {
printf("%d %s\n", length($1), $1);
}
>>220 突っ込みどころ
-{0,1}
[0-9]
(\.[0-9]+|)
と思ったけど、最後のやつは意図を読み間違えていた。けどなんか気持ち悪いね。
気持ち悪いのはお前の人生
スレ違いなのに勝手にPerlの話しだす迷惑野郎です
消えろ糞ニートが、ドカタにもなれないだろそんな協調性のない人間じゃ
こんな場所で宿題を解きたいって、どんな神経しているんだろう?
公開オナニーを趣味にしている変態
>>223 そういうレスばかりするのはどういう気持ちから?
出題する側、出題される側、回答する側、およびそれぞれの過去を持ついずれか、はたまた無関係。
このどれなんだろう。
少なくとも朝昼夜の3回レスをしているわけだから、無関係ってことはないと思うんだよね。
公開オナニーする馬鹿がこの板から出ていけばこのスレは必要なくなる
正直どうでもいい
公開オナニーをしてきた本人がこの一言
春休みかあ、と思ったけど16日はさすがにまだ春休みではないか?
234 :
デフォルトの名無しさん:2014/03/23(日) 02:02:35.42 ID:MnyK3jKs
>>230 本物のQZ?酉割れてるから本人かどうかわからないけど、
強制IDになっても自演しまくりの日々は続いてんの?
236 :
デフォルトの名無しさん:2014/03/23(日) 04:11:20.10 ID:BoG2P7C1
結果は人がいてもいなくても同じだ。
自己顕示欲さん仕事探せよ。
2ちゃんに引きこもっていても道は開けないぞ。
238 :
デフォルトの名無しさん:2014/03/23(日) 12:38:14.86 ID:wYZODv5U
このスレに職業プログラマの人ってどれくらいいるんだろうか
ちなみに俺はプログラマです
>>238 どこから職業プログラマなんだ?
社外には売らないけど、社内のシステム構築してる俺は対象か?
「勤務時間に業務としてプログラム開発をしている人」
じゃないかな?
社内システム開発にC使うの?
それとも趣味でCやるの?
どっちにしても謎だ
うちはCを使っている
もちろんそれ以外も使ってるけど
cronで動かしているものはほとんどがC
>>241 >社内システム開発にC使うの?
大量データを扱う技術系パッチ処理では、今でもCが使われているよ
いまだに勘定系でCOBOLが使われているのと同じ理由
>>241 C++ 使ってるが、何か?
C# の方が楽だけど、.NetFramework のインストールかいる環境とかあるとか色々面倒だったりするから。
あと、Linux 絡みは C だし。
245 :
デフォルトの名無しさん:2014/03/23(日) 15:23:08.28 ID:8jLtLR5A
社内利用ならスクリプトで十分。
C/C++は開発効率が悪い。
>>235 自演の定義はなんだい?
そのときの感性でトリップをつけたりつけなかったり適当にやっているだけだが、それでも自演というの?
トリップつきでもトリップなしでも問わず語りを紡いでいるだけで対話篇は意図していないんだが
それでも自演っていうの?
それなら違うよ、
病気なのはQZ
宿題がないと生きていけない
QZのバ回答を当てにしてる奴は間違いなく無能プログラマ
自分が生きていると貼ったスレの2/3がdat落ち。タイムマシンか何か?
>>251 誰もあてにしていないと思うよ体臭が強すぎて人目でQZってわかりやすすぎだし
いいね。回答者側は気楽なもんだ
宿題投げる奴が何故学生続けるか理解できない
暇つぶしのネタを提供してくれてる
>>254 法学部ですら退学にはならんということにビックリ
259 :
デフォルトの名無しさん:2014/03/28(金) 21:10:37.31 ID:QdKQU949
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
10000以下の自然数のうち素因数分解を行ったときにその因子の数が最多となる数を求め,その数,因子の数,素因数分解の結果を表示するプログラムを作成して下さい.
出力形
8192 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
因子数:13
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 3月30日まで
[5] その他の制限:
ヒントを教授に聞きに行ったら自分で考えろと一蹴されました
よろしくお願いします
260 :
デフォルトの名無しさん:2014/03/28(金) 21:32:30.39 ID:fFnbRaxR
>>259 それが正解だろ。小さい数(2か3)が有利。
ほぼ2で良いが、3もあり得る。
MAX次第。
エラトステネスの篩みたくやってけば良いんじゃない?
262 :
デフォルトの名無しさん:2014/03/28(金) 22:12:20.11 ID:fFnbRaxR
Nに対し、N >= 2^nとなる最大のnを見つける。
N >= 2^(n-1) * 3 であれば、2解。
10000ぐらいならテーブル化しちゃえ。
QZ糞コード連発
学生は泡吹くレベル
>264 は留年&退学
266 :
デフォルトの名無しさん:2014/03/28(金) 23:04:34.85 ID:QdKQU949
>>259ですが
8192 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
因子数:13
をもとめるソースコードが知りたいです
267 :
デフォルトの名無しさん:2014/03/28(金) 23:21:48.83 ID:fFnbRaxR
ギジコード
fnc(N) {
for(n=1;;n++) if( N < pow(2,n) ) break;
n--;
prt(n,0);
n--;
if( N < pow(2,n)*3 ) prt(n,1);
}
prt(a,b){
2をa個、3をb個出力
}
>>259 お前俺と同じ大学かよww
教授にチクっとくわ
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):入力した1桁の整数を行数と解釈し、その後、その行数分だけキーボードから入力された
文字をディスプレイに出力する。
[条件1]整数(行数)入力にはgetchar関数を使用する。
[条件2]行数入力後の文字入出力にはgetchar関数とputchar関数を使用する。
[条件3]入力された整数(行数)が、不正(整数でないまたは2桁以上の整数)の場合は、"Input error"と表示する。
[3] 環境
[3.1] OS:Windows7
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C
[4] 期限:2014/03/30
#include <ctype.h>
main()
{
int first, next, i;
first = getchar();
next = getchar();
if(! isdigit(first) || isdigit(next)) {
printf("Input Error\n");
exit(1);
}
for(i = 0; i < first - '0'; i++) {
putchar(next); putchar('\n');
}
}
>>217 7と答えるべきなのか?
仕様が曖昧だなぁ・・・
>>272 単位落として留年する馬鹿
教授は観てるぞー
期末になってこのレベルだったら単位を落としてやり直すべき
単位落とし記念カキコ
277 :
デフォルトの名無しさん:2014/03/31(月) 13:11:48.78 ID:qra824CY
期限に間に合ったのか?
何この小保方スレッドw
博士論文が2chのコピペ
まじできちがいじみてる
>>267 よくわからんが、10のとき何が出るの?
10以外出ると不可
[1] 授業単元:プログラミング基礎II
[2] 問題文(含コード&リンク):
課題:
double値を10進数表示せよ。
対象:
C言語
制約:
・出力にはfputc()またはputc()またはputchar()を使うこと。
・printf系の書式変換を一切使ってはならない。
・C標準ライブラリ以外のライブラリの使用は禁止する。
・system()による外部プロセスの利用も禁止する。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual Studio 2010
[3.3] 言語: C
[4] 期限: 2014年05月31日まで
[5] その他の制限: プログラミング基礎I で基本的なところ(入門書1冊丸々程度)は終了してます
285 :
283:2014/04/10(木) 21:39:20.95 ID:o2rx8JxT
それ
f(0.00031415926, 0);
はどんな結果を返すかな?
>>286 痛いところを‥‥
EPSILON をてきとーにいじらないといけないですね、まあ小ネタってことで
続きはお題スレにて
>>286 \n しか出さないな。
float.h を include して、EPSILON を DBL_EPSILON に変えればまぁいいんじゃない?
しかし、
if (x >= 10.0) {
f(x / 10.0, n + 1);
return;
}
これは流石に駄目だと思う。
問題の処理系においての double のフォーマットを明示しなかった出題側も手落ちなんだけど…。まぁ難しいか。
IEEE 754 と仮定して、何 bit かは sizeof で勝手に判断する分には問題は無いと思うんだが。
そもそも小数2進数を小数十進数でスパッと表せるわけがないしな……
桁数指定しないと無理ゲーだろ
dtoa(非標準ライブラリ)の実装を読んでみる方がいいじゃない。
netlib は良く出来ているらしいし。
>>289 お題は printf 禁止なんだが…。
>char Z[L] = "\0";
>char B[L] = "\0";
配列の限界越えているぞ
いや、超えてないか
期限まで1か月以上あるんだし焦る必要はない
>>293-294 配列の頭がポインタなら超えてる。ちゃんと領域を確保してそれにコピーしてるなら超えてない。
俺もそれ見てあれ?って思ったんだけど、配列だから大丈夫だと思うんだけど。どうだろう?????
普段からこういう書き方してるが、普段はC++ライクなんだよな〜〜。
領域確保とか面倒いし文字列とか string クラス使っちゃうしな
そうそう。今回もどうやってMallocしないで書こうか苦心したんだよ・・・。Orz
基本的に少数以下は1/nの足し算なので簡単に誤差が出る。
10進数の少数表現と言うのも規格化されてるんだけど、新しすぎて対応してないはず。
C++は暫定的に組み込み可能なクラスで対応するようだ。そのうち。
1/(2^N)だったかもしれん。
あぁ、この問題って消費税関係か。1.08倍ってすごいきりが悪いからな。
金融の話だったら、ハードに頼るな。ってとこだろう。
文字列の数字の四則演算を実装するのが結果的に早い気がする。
>>303 前の版もそうだけど出力が1/10になってない?
308 :
デフォルトの名無しさん:2014/04/15(火) 16:19:28.76 ID:+gsaL0ih
[1] 授業単元:基礎プログラミング
[2] 問題文(含コード&amp;リンク):入力した数が奇数の場合表示する。入力した奇数の和が20を超えるまで繰り返すプログラム。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual C++ 2010
[3.3] 言語:C++
[4] 期限:4月18日
309 :
デフォルトの名無しさん:2014/04/15(火) 18:09:39.29 ID:+gsaL0ih
↑自己解決しました
shitumo
test
test
314 :
デフォルトの名無しさん:2014/04/23(水) 21:05:40.39 ID:I5h19qdV
317 :
デフォルトの名無しさん:2014/04/28(月) 15:52:23.27 ID:k1ZU+eWD
[1] 授業単元:プログラミングII
[2] 問題文(含コード&リンク):
課題:
#include < stdio.h >
int main (void){
int i;
float taiju[10]={58.6,65.2,74.4,46.0,52.8,62.4,55.0,51.2,54.8,48.4};
float total,average;
total=0;
for(i=0;i<10;i++){
total+=taiju[i];
}
average=total/10;
printf("Total=%.1f\n",total);
printf("Average=%.1f\n",average);
return 0;
このプログラムを関数にするにはどこをどうしたらいいですか?
}
318 :
デフォルトの名無しさん:2014/04/28(月) 16:09:36.15 ID:PJcE9AjA
for(i=0;i<10;i++){
total+=taiju[i];
}
average=total/10;
320 :
デフォルトの名無しさん:2014/04/28(月) 16:35:48.86 ID:k1ZU+eWD
>>319 回答ありがとうございます。
渡しの部分が分からなかったのでしっかり覚えたいと思います。
アドバイスありがとうございます。
322 :
デフォルトの名無しさん:2014/04/28(月) 17:54:09.16 ID:k1ZU+eWD
>>321さん
sizeof関数まだ習ってないんですが、sizeof使わない場合はどうなるんですか?
なんども聞いてすいません。
>>322 別に配列サイズを別途与えてもいいけど、
sizeofを使って割り算で出すやり方がC言語では定番だということ
(学習用だからまだ習ってないsizeofは使えないんです><ってことなら「10」と決めうちしてもOK)
そもそも、計算させる際に配列サイズをベタ書きする方がおかしいわけで
(C言語なら#defineで定数宣言するといった分かりやすい手段があるのに)
324 :
デフォルトの名無しさん:2014/04/28(月) 18:31:47.37 ID:2XbObvdB
[1] 授業単元:プログラミング基礎
[2] 問題文
text.txtというファイルに以下のような個人情報が保存されているとする。これを読み込み、
実行例のように画面に出力するプログラムを作成しなさい。
ヒント: 氏名の読み込みでは"name: %s\n"のような変換仕様を用いると良い。
▼text.txtの内容
name: Ichiro
age: 20
weight: 65.5
e-mail:
[email protected] ▼実行例
氏名: Ichiro
年齢: 20
体重: 65.5
Eメール:
[email protected] ご教示願います
とりあえず模範解答。fscanfの書式指定が奇妙に見えるだろうが、
こうしないと名前に半角空白が入っていた場合途中で切れるからしゃーない
(例:「name: Taro Yamada」にしてた場合、「name: %255[^\n]\n」だと「Taro」までしか読まれない)
http://codepad.org/VbsaV5Qs
3行目ミスったw
× (例:「name: Taro Yamada」にしてた場合、「name: %255[^\n]\n」だと「Taro」までしか読まれない)
○ (例:「name: Taro Yamada」にしてた場合、「name: %255s\n」だと「Taro」までしか読まれない)
328 :
デフォルトの名無しさん:2014/04/28(月) 19:45:01.50 ID:CAFKzRDO
>325
>326
ありがとうございます。
おかげさまで解決できました。
100000000000000 16384
10000000000000 8192
1000000000000 4096
100000000000 2048
10000000000 1024
1000000000 512
100000000 256
10000000 128
1000000 64
100000 32
10000 16
1000 8
100 4
10 2
1 1
0.1 0.5
0.01 0.025
0.001 0.0125
0.0001 0.00625
0.00001 0.003125
0.000001 0.0015625
0.0000001 0.00078125
0.00000001 0.000390625
0.000000001 0.0001953125
0.0000000001 0.00009765625
0.00000000001 0.000048828125
0.000000000001 0.0000244140625
0.0000000000001 0.00001220703125
2048個の配列に初期値入れておけば、あとは10進の足し算でやって下さい。
>>言葉足らずでした。
>>331 で、何の意味があるの?
それが10進数の電卓作るときに役だつの?
>>283 #include <stdio.h>
#include <math.h>
struct str_aa {double a; int b; };
struct str_aa aa[2][1024] = {
1.0000000000000000,+0,
5.0000000000000000,-1,
4.4501477170144028,-308,
2.2250738585072014,-308,
1.1125369292536007,-308,
1.0000000000000000,+0,
2.0000000000000000,+0,
4.4942328371557898,+307,
8.9884656743115795,+307};
int main()
{
union bb_str {double a; int b[2];};
union bb_str bb;
int j;
bb.a = 1.4272476927059599e+45;
j = ((bb.b[1] >> 20) & 0x7FF) - 1024;
printf("%08X %08X %d\n", bb.b[1], bb.b[0], j );
printf("%.16fe%+04d", aa[1][j+1].a, aa[1][j+1].b );
return 0;
}
お、なんか魔法使い来たぞ
335 :
>>333:2014/05/01(木) 07:35:46.70 ID:kg1PsNpN
これは完成版ですか? 少数以下を16桁に変更させて頂いてOK?
>>305 後、ほめられたのでおまけ:
#include <stdio.h>
#include <math.h>
void putdouble(double d); //
>>305 int main(void){
int i;
double a = 123.4e+20;
putdouble(a);
a = 1.0;
for(i=0; i<1024; i++){
printf("%.16e\n", a);
a /= 2.0;
}
a = 1.0;
for(i=0; i<1024; i++){
printf("%.16e\n", a);
a *= 2.0;
}
return 0;
}
336 :
333:2014/05/04(日) 21:58:51.85 ID:T5QjrG4C
俺ならこうするぜ。(負数は未対応なんだぜ)
#include <math.h>
void disp(double);
main()
{
double d = 123.456;
disp(d);
}
void disp(double d)
{
int i,n;
double x = pow(10, ((int)log10(d)));
for(i=0; i<10; i++) {
n = d / x;
putchar('0' + n);
if(x == 1.0) putchar('.'); /* この比較はよくないぜ */
d = fmod(d, x);
x /= 10.0;
}
}
341 :
339:2014/05/07(水) 23:01:40.00 ID:5dQlzvFd
結果が大きすぎた。10倍する前にキャリーを足すのではなく10倍してから足してくれ。すまんかった
342 :
340:2014/05/11(日) 19:30:57.09 ID:aKdUIV9w
// wk &= 0x7ff0 0000 0000 0000;
wk &= 0x7ff0000000000000LL;
// longlong.ull += carry; //
// longlong.ull *= 10; //
longlong.ull *= 10; //
longlong.ull += carry; //
/* 指数が 0 〜 52 なら表示する */
// if(data_sisue >= 0 && data_sisue < 53){
/* 指数が 0 〜 48 なら表示する 48 + 1023 = 0x42F */
if(data_sisue >= 0 && data_sisue < 49){
case_seisueWithSyousue();
}
343 :
339:2014/05/12(月) 02:37:45.75 ID:MKmfYHpq
>>340 153: if(flg == 0){
154: //if(longlong.ul2[1] == 10){ //下から1.0が上がってきた
155: // printf("kuriagattaze ");
156: // ++(data_seisue[0]);
157: // longlong.ul2[1] = 0;
158: //}
159: //disp_seisue();
160: printf(".");
161: flg = -1;
162: }
190: }
191: }
new disp_seisue();
192:}
344 :
デフォルトの名無しさん:2014/05/14(水) 01:32:28.65 ID:Qd/1lT4o
{}
347 :
340:2014/05/15(木) 00:10:50.74 ID:4j/hvYC8
//void compute(){
/* 指数が 0 〜 52 なら表示する 52 + 1023 = 0x433 */
// if(data_sisue >= 0 && data_sisue < 53){
if(data_sisue >= -52 && data_sisue <= 52){
case_seisueWithSyousue();
}
//void case_seisueWithSyousueSisueLE11(){
if(data_sisue >= 0)
longlong.ull <<= data_sisue;/* 指数分(0 〜 11)だけ左シフト */
else
longlong.ull >>= -data_sisue;/* 指数分(-52 〜 -1)だけ右シフト */
//void disp_seisue(){
if(!data_keta)
printf("%d", 0);
for(int i = data_keta - 1; i >= 0 ; i--)
printf("%d", data_seisue[i]);
>>いじょ Good bye.
348 :
デフォルトの名無しさん:2014/05/16(金) 18:10:02.95 ID:LyHYCBhP
[1] 授業単元:基礎プログラミング
[2] 問題文(含コード&amp;リンク):
wavファイルを読み込みテキストデータに変換、そのデータをフーリエ変換したものを画面に出力
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual Studio 2010
[3.3] 言語:C
[4] 期限:5月19日
スペクトラムアナライザのフーリエ部分だけでいいのか?
全体記述するとかなり巨大になるぞ
そのフーリエ変換はライブラリ使ってもいいのか?
「基礎プログラミング」という名前から察するに
WAV読み込みすら課題として難しすぎる気がする……
>>348 ライブラリ使用可じゃないと時間的に難しいぞ
>>350氏がいうようにwavの読み込み、解析でも結構な手間だぞ
先生が口頭や板書でヒントとか出してることもあるだろうけど
だいたいこのスレで質問する質問者どもはそういうのを聞いてなかったり見逃してたりするんだろうね
OSとコンパイラが指定されているからdoubleの内部表現決め打ちでいいわけか
356 :
340:2014/05/18(日) 10:19:53.72 ID:BFkwxb50
3.14 x 1/2048 でも10進表現OKか
>>357 まあそうなんだろうけど、FFTじゃなくてDFTって時点で……
>>353無視するならそもそもFFTを自分で書かないけどな
359 :
デフォルトの名無しさん:2014/05/18(日) 14:26:18.43 ID:T4xlj6Hv
1] 授業単元:プログラミングII
[2] 問題文(含コード&amp;リンク):
3つの整数型一次配列vec1,2,3の先頭アドレスに要素数nを与えると、2つの配列vec1とvec2のそれぞれの和を計算し、vec3に代入する関数getarraysumを作成する。main関数では、5つの要素をもつ変数型配列vec1,2,3を定義する。
vec1は1,2,3,4,5で初期化し、vec2は10,20,30,40,50で初期化する。そして、作成した関数を呼び出し計算を行い、その結果で得られたvec3の値を表示する。
表示例
vec3[0]=11
vec3[1]=22
.
.
.
これをポインタにするとどうなりますか?
ご教授お願いします。
どこをポインタにしたいんだ
361 :
デフォルトの名無しさん:2014/05/18(日) 14:59:18.40 ID:T4xlj6Hv
>>359 C/C++は知らないので馬鹿な質問なのかも知れませんが、
「3つの整数型一次配列vec1,2,3の先頭アドレスに要素数nを与えると」
これって普通の表現ですか。
メモリポインタにしたいのか
コピペミスか出題者の日本語能力不足か分からないけど
三つの整数型の一次元配列vec1,vec2,vec3と、その要素数nを与えると
だろうね言いたいのは
表示例が配列になってるのをポインタにしたいってことですかね
例
*(vec3+0)=11
>>350>>352-354 WAVの読み込みは手間だけど、離散フーリエ変換はFFTじゃないDFTなら問題なくね?
サンプル数(ウィンドウサイズ)分のforループを二重に回せば演算時間はともかく変換はできる。
369 :
デフォルトの名無しさん:2014/05/18(日) 22:48:38.01 ID:T4xlj6Hv
>>368 回答ありがとうございます。
自分で考えてもう一度解いてみます。
>>367 いずれにせよスレのレベル超える難易度の宿題だよな
[1] 授業単元:プログラミング演習2
[2] 問題文:
malloc とrealloc を用いて、繰り返し入力された文字列を連結していく。文字列
quit が入力されたとき繰り返しを終了してできあがった文字列を表示するプログ
ラムを作成
[3] 環境
[3.1] OS:Windows 8
[3.2] コンパイラ名とバージョン:Borland C++ 5.5.1 for Win32
[3.3] 言語:C
[4] 期限:5月20日
http://pastebin.com/0BLX3vfH 上記のように作ってみたのですが、正常に動作していないようです。
30文字程度入力するとデータが飛ぶのでreallocあたりかと思うのですが、どこをどうすればいいのかわかりません。
よろしくお願いします。
後付けで申し訳ありません。
getchar()にて一文字ずつ付け足す方式の回答はできているのですがfgetsが大好きなのでできる限り改変なしで手直しかアドバイスをいただければ幸いです。
>>372 「好き」って一体何なんだよ……
だいたいソースコード中に「30」って数字が入ってるじゃねーかw
途中で気付いて入力制限を無くしたバージョンを作ったのですが、上のコードが動かないことが気持ち悪くて質問させていただきました。
また、"30文字程度"というのは一度にではなく合計でです。
>>371 ざっと見ただけだけど
reallocが返すアドレスをmainまで返してないからじゃない?
そうね。ポインタの使い方を間違ってる
str をポインタで渡すか
reallocで確保された ptr 値を返却して main 関数内で str に代入するかしないと
>>371 my_strcat();みたいな処理をmainのwhile内に書いたほうが悩まずに済むと思う
>>371 > 上記のように作ってみたのですが、正常に動作していないようです。
> 30文字程度入力するとデータが飛ぶのでreallocあたりかと思うのですが、どこをどうすればいいのかわかりません。
これは、
1. 28行目のfgetsで30bytesからあふれた分が次回のfgetsで拾われる
2. 8行目で強引に終端文字を\0 にしているから文字欠けが生じている
の2つが重なったのが原因だと思います。
http://ideone.com/Ff4R0x みたいにすれば良いかも。
ちなみに、realloc();が失敗した場合元のブロックは解放されたり移動されたり
しないそうなので、strのために確保したメモリは注意が必要。
>>375 >>376 関数とポインタについての理解が不十分だったようです。ご指摘ありがとうございました。
>>378 整ったコードをありがとうございます。参考にさせていただきます。
また、起きた事象の解説までしていただき恐れ多い限りです。
今夜はぐっすり眠れそうです。重ねてお礼申し上げます。
[1] 授業単元: Cプログラム
[2] 問題文: 国際ダイヤル通話料金システムは次のようになっている
@昼間料金(月曜日〜金曜日の午前8時から午後7時まで)
最初の1分まで300円
1分経過後6秒ごと15円
A夜間・休日割引料金(月曜日〜金曜日の午後7時から午後11時まで、および休日(土曜日、日曜日、祝日、正月三が日、振替休日)の午前8時から午後11時まで)
最初の1分まで240円
1分経過後6秒ごと12円
B深夜割引料金(日曜日〜土曜日の午後11時〜翌朝の午前8時まで)
最初の1分まで180円
1分経過後6秒ごと9円
通話時間と料金システムの区分(1~3)を入力して、それに該当する通話料金を計算して、出力するプログラムを作成せよ
例
通話時間を入力せよ(分 秒)- - - - >11 12
区分を入力せよ- - - - >2
あなたの通話料金は\1464です
[3] 環境
[3.1] OS: Windows)
[3.2] コンパイラ名とバージョン: 覚えてません
[3.3] 言語: C
[4] 期限: 5月21日か22日
[5] その他の制限: 特になし
よろしくお願いします
>>382 ここでの問題は区間入力だから、単純だが、それでも区間を跨る場合の定義が書いていない。
本来は通話開始時刻と通話時間の二入力で出題されるところだろうが、その場合、
国民の祝日、休日の確定が必要で結構やっかい。春分の日、秋分の日は前年の二月一日の
官報に掲載されるまで決定できない。
http://codepad.org/iSvhZg26 http://codepad.org/qjHj79OK ここであってるのかわかりませんが、RPCサーバの課題についてです。
double型の値(x)を受け取り、その値から2.4*x*(1-x)を計算した結果をdouble型で返す
RPCサーバとクライアント(データ(x)送信範囲は0<x<1)の作成なんですが、プログラミングについて理解があまりないので
教えていただけませんか?
RPCサーバをコンパイルするも
警告: 暗黙的な関数宣言: registerrpc
と表示されたり
RPCクライアントをコンパイルするも
警告: 暗黙的な関数宣言: callrpc
と表示され何が問題なのかさえわかりません。
>>386 >>警告: 暗黙的な関数宣言: registerrpc
その警告は「関数宣言がないから、暗黙的な関数宣言があったものとするよ」という意味。
#include <rpc/rpc.h>を入れれば消えるのでは?
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
プレイヤーvsモンスターの戦闘ゲーム
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual Studio 2010
[3.3] 言語:C++
[4] 期限:5月26日
[5] その他の制限: 1対1のターン制で宜しくお願いします
>>388 せめてパラメータとか攻撃方法とかぐらい書けよ!
と思ったら
>>389で出てた。Magic連打してたらすぐ勝てそうなのはきっと気のせい
>>389 サクセス!
どちらかのHPが0になった時に戦闘を終了するようにはできないのでしょうか……?
ああ、条件式間違ってたな
while (PlayerHP > 0 || MonserHP > 0)
じゃなくて
while (PlayerHP > 0 && MonserHP > 0)
だた
>>392 >サクセス
成功(Success)?
……この実装だと0キッカリというのは難しいな(負数になり得るので)
PlayerHPとMonsterHPをunsignedにするとかすれば大丈夫だろう
この状況でunsignedにしたら無限ループじゃないか
>>396 その場合は条件式をいじって……
いやまあ
>>395の時までは真面目にソース読んでなかったのよw
>>386 何ですが
double型で送信して、値の返却もdouble型でするには、どこをいじればいいのでしょうか?
2ch.netへ再送。
>>388 ubuntuとかのlinuxディストリならAnswer 1を参照。solarisなら-lrpcでいけるのかな?
http://stackoverflow.com/questions/13145930/undefined-reference-to-registerrpc >>401 extern int registerrpc(int, int, int, char *(*)(char [UDPMSGSIZE]),
xdrproc_t, xdrproc_t);
registerrpcの第4引数と第5引数を、xdr_intからxdr_doubleにすることで、
doubleを考慮したネットワークバイトに変換してくれるみたい。
funcの戻り値と引数はchar *func(char *udpmsg)にするのと、
xdr_doubleはxdrproc_tでキャストした方が良い。
static char *func(char *input)
{
static double output;
double *ptr = (double *) input; /** 第4引数のxdr_doubleで読み込み側のネットワークバイトオーダを、第5引数で書き込み側をケア */
output = *ptr + *ptr;
return (char *) &output;
}
401 :
400:2014/05/26(月) 18:41:14.32 ID:l2nsfm+B
ファック。レス番号までずれてやがる!もういいっす。
>>399 通信は基本的にビットを送信していると思ってください。ビットそのものには意味がありません。
ビットの塊にフォーマットを与えることでその仕事を成します。
基本的にはお約束にしたがってdoubleっぽいビット列をキャストしてやればいいんじゃないでしょうか。
わかってねえなら黙れよ。
シーン。
描き込まずにチンコ弄くります
406 :
デフォルトの名無しさん:2014/06/10(火) 01:27:04.86 ID:bRopYhGX
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
http://codepad.org/Tdb29gRf 以下の制約の下で、プログラムを改修し、処理にかかる時間を短縮しなさい。
1.グレースケール画像、エッジ画像、合成画像、それぞれ3つの作成は別の関数で行う。
2.画像のためのメモリは動的に確保する
3.画像のサイズ、リピート回数は変えない
4.改修する前にこのプログラムをそのまま実行した時に生成される画像と、改修後の結果画像が変わらない
よろしくお願いします。
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2014年6月11日17:00まで
[5] その他の制限:
407 :
デフォルトの名無しさん:2014/06/10(火) 07:42:12.24 ID:9RO//ztd
わっしょい
>>406 J( 'ー`)し タケシのコードをスクラッチで書き直してみたよ。
http://codepad.org/cQiOfJY8 (`Д) うるさい死ね 1割くらい遅えじゃねえか!
J( 'ー`)し ごめんね。お母さん1次元配列派だから、インデックス値の計算に時間が少し掛かるみたい。
(`Д) うるさいくたばれ、返信すんな
J( 'ー`)し ヘッダ処理も少し真面目にやってみました。たいせつにつかってね 食事はしていますか?
(`Д) 死ねくそ女
>>406 とりあえず
× irregal
〇 illegal
あとこっちでコンパイルしてみたらちゃんと(かどうか知らんが)
変な色の画像に変換された
410 :
デフォルトの名無しさん:2014/06/10(火) 11:43:36.28 ID:GmSg9gy+
>>408 ありがとうございます
環境の違いなのかこっちで計測したら処理時間が元の8倍くらいかかりました
結果画像も違ってますね...
>>409 わかりました
そうです!変な色の画像になりますね
411 :
デフォルトの名無しさん:2014/06/10(火) 11:46:42.70 ID:GmSg9gy+
>>406ですが、環境が Oracle VM VirtualBoxの仮想マシンで動かしてるLinuxなのが原因ですかね
その辺よくわからないんです
412 :
デフォルトの名無しさん:2014/06/10(火) 12:00:22.30 ID:xGEOixPR
[1] 授業単元:プログラミング技術β
[2] 問題文(含コード&リンク):
ディスプレイに「何時(0〜23)」と表示し、キーボードから整数を入力すると入力値によって、以下のように表示し、この操作を-1を入力するまで繰り返す。
0〜3 Goodnight
4〜11 Goodmorning
12〜17 Goodafternonn
18〜20 Goodevening
21〜23 Goodnight
上記以外の数値 再入力
よろしくお願いします。
[3] 環境
[3.1] OS: Windwos
[3.2] visualstdio 2013
[3.3] 言語: C++
[4] 期限: 2014年6月9日まで
[5] その他の制限:
>>411 わかんないけど念のため、
出力は別ファイル。もしかして同じファイルを上書きすると思ってない?
全面単色の画像を使ってたりしない?画像によっては変化ないかもしれない
415 :
デフォルトの名無しさん:2014/06/10(火) 13:38:14.58 ID:ItrQsGd1
>>413 そこは大丈夫です、出力は別だと理解してます。
元画像はカラー画像を使ってます
全面単色ではないです
グレースケールに変換する部分のループを改変すれば早くはなるんですけど結果画像が変わっちゃうんですよね
>>414 そこは大丈夫です、既に利用申請は通っています
>>415 ごめん課題を理解してなかった。409と413は無視して。
で改善の方法だけど、全く思い付かない
基礎の授業なんだよね・・
グレースケールのとこは小数点演算を整数演算にしたら
自分の環境では微妙に速くなったけど、こういうのは
期待値じゃないよね
//ans[g][r]=(UCHAR)((data[g][r][0]+data[g][r][1]+data[g][r][2])/3.0+0.5);
ans[g][r]=((data[g][r][0]+data[g][r][1]+data[g][r][2])*2/3+1)/2;
>>410 すんません。コメントのスキップがバグってて結果画像が変わってるかもしれません。
diff --git a/ppm/ppm.c b/ppm/ppm.c
index f31a799..6c72ede 100644
--- a/ppm/ppm.c
+++ b/ppm/ppm.c
@@ -120,9 +120,9 @@ static struct ppm *ppm_alloc_header_from_stream(FILE *text_stream)
{
struct ppm *ppm;
int width, height, color;
- char magic[4];
+ char magic[3];
- if (fscanf(text_stream, "%2s", magic) != 1 ||
+ if (fscanf(text_stream, "%2s\n", magic) != 1 ||
magic[0] != 'P' || magic[1] != '6') {
ppm_pr_err("Invalid magic number");
return NULL;
画像データが欲しいな・・・チラッ
421 :
420:2014/06/10(火) 20:19:41.98 ID:aONg9Rvp
あ、すまん、手元の画像サイズに変更しちゃったままだから注意
#同じく画像データが欲しいな・・・チラッ
422 :
420:2014/06/10(火) 21:08:07.09 ID:aONg9Rvp
>>406 以下2点の対応による高速化
・ループ内で固定のポインタは必ずループの最初に保持するように変更
・多次元配列の実現方法として、ポインタのポインタをやめ、1次元配列でメモリ確保するように変更
ttp://codepad.org/h7frFJ2g 画像サイズは手元に合わせちゃったので注意
手元(cygwin gcc4.8.2)では25%位高速化した
423 :
デフォルトの名無しさん:2014/06/10(火) 22:49:16.28 ID:nQmGr7gQ
>>417 いえいえ、わかりました
整数にしてしまうと、double型からint型に変わってしまって結果画像もかなり変わってきてしまうんです。
なので、*(1.0/3.0)にしてみたんですが、これでも少し変わってしまうんですよね...
>>418 ありがとうございます
読み方がよく分からないのでちゃんと書き換えられるか心配ですが...
画像なんですが、ppmファイルなので上手くアップ出来ないですすいません...
dropboxのリンクも貼れないですし何か方法ありますかね
>>423 とりあえずPNGにしてアップしてみよう。
変換はこっちでやる前提で。
>>419 Windows cmdで開かせるように出来ないか。
論理演算子使用して。
どうも、ループと-1もしくはctrl D入れて終了が出来んのだ。
if (0 && 23)
else if (a<0 && 3>a)
的な
そんなへんてこなグレースケールでいいのかい
427 :
デフォルトの名無しさん:2014/06/11(水) 02:36:34.93 ID:eXkj4KPK
428 :
デフォルトの名無しさん:2014/06/11(水) 02:39:37.52 ID:eXkj4KPK
429 :
デフォルトの名無しさん:2014/06/11(水) 07:15:26.20 ID:BC77khn/
[1] 授業単元:配列
[2] 問題文:文字列txtを"abcdefg"、
文字列ptnを"ef"で初期化し、力任せ法を用いてtxt内でptnが最初に出現する位置を求め、
途中経過、最初に出現する位置(txtの添え字)、比較回数を以下のように出力せよ。
(※txtとptnの値が変わっても正常動作するようにし、ptnが出現しない場合はそのことを出力せよ。)
[3]
[3.2]linux
[3.1] gcc
[3.3] C言語
[4] 期限:14/6/12
[5] その他の制限:ポインタはまだ習っとりません。
先日for、whileによる繰り返し処理を習いました。
430 :
デフォルトの名無しさん:2014/06/11(水) 07:23:51.87 ID:BC77khn/
連投すいません。よろしく願いします
出力例:
txt:abcdefg
ptn:ef
1回目の比較
abcdefg
e
失敗
2回目の比較
abcdefg
e
失敗
(省略)
N回目の比較
abcdefg
e
成功
N+1回目の比較
abcdefg
ef
成功
-----結果-----
添字: 4
比較回数: N+1回
>>423 417だけど417の変更では出力は変わらなかった。一応
>>429 入力がただのリターンだった時は出現しない?
> N回目の比較
> abcdefg
> e
> 成功
成功になってるのに途中経過がeなのはこれでいいのか
txt:1234
ptn:23
の時の全出力例も載せて
434 :
418:2014/06/11(水) 10:36:37.89 ID:oyooQxgj
>>428 画像の提供ありがとう。
>>418の修正で結果画像が同じになるのを確認しました。しかし、重い。クソースでサーセン。
>>422 x86_64版gcc 4.4.7とかだと最適化オプションなしでも、
UCHAR (*tmpgyou)[][DIM3]の領域はスタックコピーが発生せず、
&(*data)[g]のアドレスの先頭アドレスのみをスタックに入れるコードになるみたいですね。
不思議。おしえてgccに詳しい人。
最適化オプションつけた場合、make_grayはほぼ同じになりますが、
上記の影響なのか、他2つの関数はfor文がまとめられ(jump命令が減る)、
パイプラインフラッシュの回数現象で相当速くなりますね。
>>427 420=422です 勝手なオレオレ用語使ってしまってごめんなさい
ポインタラッチ=ポインタをラッチ(保持)する=
>>422の変更点1つ目 です(ラッチというとハードウェアの言葉だからソフトでは使わないかも)
1次元配列のほうが速いのは、時間を測った結果そっちのほうが速かったから
・・・というのは半分冗談半分ホントだけども
ポインタのポインタだと、一つ目のポインタの中身を知るためにメモリアクセスし、その値が指す先に再度メモリアクセスして値を取得する
(インデックス計算→メモリアクセス→インデックス計算→メモリアクセス)
1次元配列だと、インデックスの計算を複数回やった後に1度だけメモリアクセスする
(インデックス計算→インデックス計算→メモリアクセス)
この違いが後者のほうが速かったということ
基本的にはパイプライン処理してるプロセッサだとメモリアクセスはストールの原因になるので少ないほうが速い
(x86ってCISC?だけどパイプライン処理してる?よね?あまり詳しくないです)
実際にはほかの要因もいろいろあるはずで、処理時間は最終的には計測してみるのが確実
>>434 UCHAR (*tmpgyou)[][DIM3]は宣言がややこしいですが、配列を指すただのポインタ変数です
なので配列分の領域を持っているわけではないです
先頭アドレスを保持するためのポインタ変数として使ってるので意図通りですね
>>427 >ポインタを使ったほうが処理が早い認識でしたが、
>1次元配列だとなぜ早くなるのでしょうか
arr[i][j]で、1次元の要素数をA、
1ポインタのバイト数をBとして、アドレスを求めると、
(i * A + j) * B
この、i * A の掛算が余分なのかな?
ポインタは、p++ インクリメントで、Bバイトずつ進むが、
この時は掛算ではなく、Bずつ加算するので、
シーケンシャルアクセスした方が、キャッシュ乗りもよく速そう
>>436 最適化すればその掛け算は隠蔽されると思う
一次元配列にする方法の場合、踏み台の配列分のメモリアクセスが減るので
メモリアクセスのコストだけ早くなるんだろうね
cache hit してもそれなりのレイテンシはあるし。
ただ元のコードの柔軟性(callee側はサイズ依存しない)が
無くなるので、微妙な気もする
>>433 2重ループ内のprintfデバッグメッセージで
内と外の語彙が同一ってだけかと
成功
大成功
とかすりゃ分かりやすいかもねw
439 :
436:2014/06/11(水) 14:48:31.92 ID:QAZZuHs2
>>437 for(〜i++){
for(〜j++){
arr[i][j]
}}
こういう2重ループの場合、(i * A + j) * B の、
i * A の部分は、掛算が必要なのでは?
iが、0,1,2〜と変わるから
>>439 コンパイラによっては(gccなど)、アセンブラ用ソース出力可だから、最適化オプションを変えて出して見ればいい。
>>438 どこで2重使うのかわからないがなんとなくわかったありがと
443 :
429:2014/06/11(水) 16:27:13.24 ID:BC77khn/
>>432-433 コピペしたんですがスペースがうまくコピー出来てませんでした
正しい表示例は、
最終的にabcdefのefの真下にefが表示される、と言ったかんじで、失敗したらptnの文字列が1文字分ずつずれるようにしたいです。
444 :
デフォルトの名無しさん:2014/06/11(水) 16:44:15.61 ID:BC77khn/
>>442 str系の仕様を認められてるのかわからないから使わずに1重でやってたわ
結果ありきだから速度とかは度外視
447 :
429:2014/06/11(水) 17:24:34.58 ID:BC77khn/
448 :
デフォルトの名無しさん:2014/06/12(木) 05:33:24.07 ID:Abgsr/RV
450 :
デフォルトの名無しさん:2014/06/12(木) 16:02:13.86 ID:6KI3I0Lz
>>435>>436 説明ありがとうございます
よくわかりました
昨日ぎっくり腰になったりして色々もたつきましたが、
>>422の変更で問題なく出力されましたし、間に合いました
ちょっと整数演算に直しても上手く行ったので、最初に直した時は私の不手際があったのだと思います
最終的に最初の1/5以上高速化出来ました
本当にありがとうございました!
451 :
1/2:2014/06/12(木) 17:45:43.36 ID:25HL/Rbg
入力したのが、素数かどうか判定するプログラム。
自分で考えた。
#include <stdio.h>
int main(void)
{
int a,b,c=0;
scanf("%d",&a);
for(b=1;b<=a;b++)
{
if(a%b==0)c++;
}
if(c==2)printf("素数です\n");
else printf("素数ではありません\n");
return 0;
}
解答。
#include <stdio.h>
int main(void)
{
int a,b,c=1;
scanf("%d", &b);
for(a=2; a<=b/2; a++)
if((b%a)==0) c = 0;
if(c==1) printf("素数です");
else printf("素数ではありません");
return 0;
}
452 :
2/2:2014/06/12(木) 17:46:17.06 ID:25HL/Rbg
自分で考えたのは、整数を入力して、1からその数まで1ずつ増やし、割り切れたらcに1を足す。
for文から抜けて、cが2なら、1とその数でのみで割り切れるということなので素数。
1はc=1になるので含まれない。
って作ったのですが、解答の場合でも代入していって考えました。
代入していってだいたい分かりましたが、考え方は、公約数で1の次に大きな数が2で、
1と入力した数以外に約数がある場合、1番小さい数が2。だから、入力した数の半分まで
ループさせれば、足りる、みたいな感じでしょうか。
解答のほうがforループの回数が半分なので、これが莫大な量になったとき
処理は早くなると思います。やはり、自分の考えでプログラムを書いて正しい答えを出すより、
分かりづらかったり考える必要があっても、最小限の手数で
正しい答えが出せるプログラムも理解していくべきでしょうか?
仕事などをされてる方は、このようにパッと見で少し理解が難しくても、
少しでも速くなるプログラムを書いてる方は多いですか?
素数を知らない人(小学生とか)向けなら前者もいいけど
素数の計算で探索空間を半分にするのは常識というか
ほぼ100%そうするコードしかないから、深く考えるようなことじゃない
>>452 ゲーム作ることを考える。
たまにゲームでなんでこんな簡素な描画なのにこんなにくそ重たいねん。っていうゲームがあると思う。
そういうストレスを削減する意味でも計算オーダーを下げるのは重要。
そのうえで読めるコードを書くのも技術ですよ。
それと、逆算も技術。
>>453,454
なるほどですね。
ありがとうございました。
456 :
デフォルトの名無しさん:2014/06/13(金) 10:04:52.54 ID:eljxZ1z3
[1] 授業単元:グラフ理論
[2] 問題文(含コード&リンク):
http://codepad.org/zOQeEjA6 完全列挙法を用いてTSPを解くプログラムを作成しなさい
グラフの点を全て通って始点に帰ってくる経路の内、距離が最短なものを完全列挙法で導くプログラムです。
このプログラム内では点を都市としています
途中まで作った物がリンクのコードですが、最短の距離を算出するところが上手くかけません
そして順列の書き方がわからなかったのでコピペしたのですが、どう動いているのかがよくわかりません
また、こういう書き方の方が良いというのがありましたら教えていただきたいです
よろしくお願いします
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2014年6月16日17:00まで
[5] その他の制限:
>>456 ttp://codepad.org/Yu5KMoPW とりあえず計算できるようにはなってると思います
set関数の引数i(編集後pos_cnt)は、i番目に通る都市を決める関数です。
その中で通る都市を仮定して、次のi+1番目の都市を決めるために再度setを呼び出しています。(元34行目)
その際に、通る都市番号をposに保持し(元29行目)、通ったことを示すflagを1にしてます。(元33行目)
通る都市を決める際に、flagが1になっている都市を避けることで、同じ都市に何度も行かないようにしています。(元28行目)
iが都市数まで増えると全都市を回ったことになるので、結果をprintで出力してその経路は終わり。(元31行目)
編集後のコードでは、set関数に引数distを追加して、経路をたどっている際にその距離も一緒に計測するようにしました。
全都市を回った際に、これまでの最大距離よりも大きければ保持するようにしてます。
書き方のアドバイスとして
自分の書いたコードが半年後もすぐ意味が分かるように読みやすいようにしたほうがいいですよ
最低限以下に気を付けるくらいですね
・インデントをつけましょう
・変数名は意味のある単語もしくはその省略形にしましょう(1〜2文字で許されるのはループ用の変数iとかjぐらいと思ったほうがいい)
・意味が分かりにくい箇所には適宜コメントを入れましょう
しまった仕様1が未達ですね
すみませんが上記は破棄で
>>460 もったいない。
type __array[] = {...}
type *array = __arrayで目をつむろうぜ。
463 :
459:2014/06/13(金) 23:07:16.98 ID:M4x6Kn4S
468 :
デフォルトの名無しさん:2014/06/17(火) 20:25:40.64 ID:waqSsQEe
[1] 授業単元:画層処理演習
[2] 問題文(含コード&リンク):
長いのでこちらにまとめました。
http://codepad.org/WZx26C7D [3] 環境
[3.1] OS:Windows7
[3.2] Visual Stdio 2010
[3.3] 言語:C++
[4] 期限: ([2014年6月18日12時00まで])
[5] その他の制限:
自分でギリギリまで考えましたが分かりませんでした。
よろしくお願いします。
470 :
デフォルトの名無しさん:2014/06/17(火) 22:58:58.00 ID:waqSsQEe
>>469 一度最後まで作ったのですが
この課題を出した人にこれでは間違っていると言われてしまいました。
とりあえずソース上げます
471 :
デフォルトの名無しさん:2014/06/17(火) 23:16:06.68 ID:waqSsQEe
まずインデントを何とかしろや。
バグがあっても自力で見つけられんぞ。
例えば1番、9箇所全部の濃度値が8でも、8/9は0だから、9回足しても0になるぞ。
474 :
◆rVDRt1VsVI :2014/06/17(火) 23:33:44.49 ID:waqSsQEe
ググれ「インデント」
> 0にななった場合1にすれば良いのでしょうか
だめ。8/9 がちゃんと 0.8888... になるようにする。
3と4は見た目問題なさそうに見える。何か不具合あるの?
476 :
デフォルトの名無しさん:2014/06/17(火) 23:55:46.98 ID:waqSsQEe
1と2は割り算問題の影響が出てる感じ。
int/int は int になってしまうから、
double/int か int/double の形にすればいい。
3と4はバブルソートがだめだな。
jの初期値がj=i+jって何だよ。
・なにはともあれ原画像(入力する画像)を貼りなさい
・「これではダメ」←「メディアンフィルタがかかってないのが一目瞭然だから」だろうね
・ぱっと見だが:3,4,でソートしてるとこの for(j=i+j; はすごく変
カブったw
480 :
デフォルトの名無しさん:2014/06/18(水) 00:16:40.15 ID:dQXq5s2V
>>477 >>478 すいません。
図々しいとは思うのですが解決方法を教えてくれませんか?
かれこれ一週間試行錯誤してたのですが期限に達してしまいました・・・
481 :
デフォルトの名無しさん:2014/06/18(水) 00:17:38.88 ID:AXoUiaON
#include <stdio.h>
#include <string.h>
void display1(int a);
void display2(struct syouhin_data syouhin);
struct syouhin_data{
char name[20];
int tanka;
};
int main(void){
int a = 10;
struct syouhin_data syouhin = {"消しゴム",50};
display1(a);
display2(syouhin);
return 0;
}
void display1(int a){
printf("%d\n",a);
return;
}
void display2(struct syouhin_data syouhin)
{
printf("%s %d\n",syouhin.name, syouhin.tanka);
return;
}
教科書通りに打って関数display2がエラーになるのです
>>481 惜しいな。
void display2(struct syouhin_data syouhin);
(は、struct syouhin_data を使っているから)
その構造体の宣言よりも下の行に持っていけば動くよ。
>>480 スマン俺は寝る。
たぶん for(j=i; だと思うが未確認だし責任は取れん。
他の間違いは探してないし。悪しからず。
483 :
デフォルトの名無しさん:2014/06/18(水) 00:31:44.82 ID:dQXq5s2V
>>482 ありがとうございますありがとうございます。
もう12時間を切ってしまったあ
484 :
デフォルトの名無しさん:2014/06/18(水) 00:34:53.37 ID:AXoUiaON
動きました。ありがとう御座います。
動かなかった理由も理解出来ました。
教科書が間違っていました。クレーム入れます。
>>484 > 動かなかった理由も理解出来ました。
動かないのと、コンパイルできないのとは、区別した方がいいぞ。
間違い探しさせる目的とかじゃないの
何て教科書の何ページ
487 :
デフォルトの名無しさん:2014/06/18(水) 00:47:07.21 ID:dQXq5s2V
>>487 方法1: 9で割るんじゃなく9.0で割る
方法2: (double)をin_imageの前に付ける
方法3: 全部足してから9で割る
489 :
デフォルトの名無しさん:2014/06/18(水) 01:04:15.09 ID:dQXq5s2V
>>488 上手くできました!
これで1はもう大丈夫でしょうか
490 :
デフォルトの名無しさん:2014/06/18(水) 01:17:51.17 ID:dQXq5s2V
>>488 凄い今更なのですけど
自分の作ったプログラムは簡単に言うとどういった動作をしてるのでしょう
>>490 ……ォィォィ……
自分のわかる範囲を説明してみな
俺は寝るけど
>>490 インデントは4タブのようなので。
tp://codepad.org/4elO5klx
tp://www1.cts.ne.jp/~clab/hsample/Sort/Sort1.html
493 :
デフォルトの名無しさん:2014/06/18(水) 01:42:41.71 ID:dQXq5s2V
>>491 ゴメンなさい。
C言語苦手なんです・・・
とりあえず計算しているんだろうな・・・としか
494 :
デフォルトの名無しさん:2014/06/18(水) 02:36:44.35 ID:dQXq5s2V
ダメだぁ
どんな処理が行われているのかわからない
誰か助けてください
どこぞの馬鹿が書いた教科書よりK&R読んだ方がいいだろ
>>492で問題ない。
1. 元画像(x, y)を中心にした9x9の複数画素の平均値を新規画像の(x, y)に設定。
3. 元画像(x, y)を中心にした9x9の複数画素の中央値(hairetu[4])を新規画像の(x, y)に設定。
その際、元画像の複数画素をコピーしたhairetuにソートを実行。
2, 4についても同様。
処理の共通化と簡易化、コーディングの作法とかも教育現場で担当して欲しいね。
bitmapも画像処理の教材としては疑問。
>>493 教師に言いなよそれ。
何も理解できてないのに課題だけ通っても意味がない
>>496 オートマトンか?
Life Game、シムシティにも似ているような
>>498 メディアンフィルタって画像処理で使われてるフィルタが有りまして。
[1] 授業単元:プログラミング序論I
[2] 問題文(含コード&リンク):
1. 1から10までの階乗の値を計算して出力するプログラミングを作ってみなさい。
2, ∫[0→2]x^3dxを計算するプログラミングを作ってみなさい。
3.. 不定積分∫f(x)dxを求めるプログラミングを作ってみなさい。
4. ∫[0→1]f(x)dxを求めるプログラミングを作ってみなさい。
5. 与えられた2x2正方行列の固有値を計算するプログラミングを作ってみなさい。
6. 与えられた3x3正方行列の固有値を計算するプログラミングを作って見なさい。
さらに、正方行列の係数がいくつでもようようにするためにはどうしたらいいか?
f(x)は整式です。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2014年06月20日10:30まで
よろしくお願いします。。。
1だけ妙に簡単だな
あと「プログラミングを作る」などという変な言い回しは普通なの?
本題以外に着目するあすぺは消えろ
504 :
デフォルトの名無しさん:2014/06/19(木) 13:36:52.62 ID:u/NoNxMT
本題以外で妙な勘違いが発覚することもあるから一概には…
>>505 でもこれで、問題文を正確に写したのかという疑問が得られた
ボクは書かれているとおりに正確に入力できないので
コピペですぐ動くように一文字も間違いなく正確に書いてください
おながいします
>>501 固有値固有ベクトルは永遠の課題だと思う‥
で、「プログラミングを作ってみなさい」ってどこ学校だよ
511 :
デフォルトの名無しさん:2014/06/20(金) 04:50:17.43 ID:4RPq8AiU
【質問テンプレ】
[1] 授業単元:画像処理
[2] 問題文:
http://codepad.org/NGyKGC2c [3.1] OS:Windows7
[3.2] Visual Stdio 2010
[3.3] 言語:C++
[4] 期限: ([2014年6月17日00時00まで])
[5] その他の制限: bmpファイルを用いる予定です。
よろしくお願いします。
また君か壊れるなあ
授業でアルゴリズムの説明あったんだろ?
それ書かないと分からんよ
513 :
デフォルトの名無しさん:2014/06/20(金) 07:30:43.80 ID:4RPq8AiU
>>512 原理は習ったのですがそれをプログラムで組めません・・・
514 :
デフォルトの名無しさん:2014/06/20(金) 07:34:04.18 ID:4RPq8AiU
正直お前はその講義とるの諦めた方が良い
>>514 基本的には、前の課題と同様のプログラムでいいのでは?
各ドットに対し、for(i=-1; i<=1; i++) for(j=-1; j<=1; j++) の
二重ループでフィルタを適用すればいい
時間ないのでとりあえず。
こんなスレが167まで続いてるのか
518 :
デフォルトの名無しさん:2014/06/20(金) 08:20:21.70 ID:4RPq8AiU
>>515 頑張ってC言語覚えたいです。
>>516 前のプログラムを少しずつ改造すればいいのですか
>>518 C言語の問題じゃねえ画像処理の基礎の問題
覚えたい奴は人に課題放り投げない
[1] 授業単元:数値計算法
[2] 問題文(含コード&リンク):
与えられた零以上の実数(a,b,c,d)と正の実数(e,f)に対して
つぎのロンバーグ表と積分値を求めるプログラムを作成せよ
(分割数:n=2^k≧16,推定回数:m≧3)
I=∫ 1/(a*x^3+b*x^2+c*x+d)dx (e≦x≦f)
ただし、キーボードから(a,b,c,d,e,f)を入力すれば
上記の定積分のロンバーグ表の値と積分値が画面表示
されるようなプログラムを作ること。
[3] 環境
[3.1] OS:win8
[4] 期限: 無期限
過去スレにも同じ問題が挙がっていたみたいですが、解答が消えていたのでどなたかお願いします。
基本的に「○○言語を覚えたい」って言う奴は(プログラミングに)向いてない。
いや、
>>523は自己紹介してるだけだから気にせず、次の方どうぞ
[1] 授業単元: プログラミングT
[2] 問題文(含コード&リンク): テキストファイルの読みこみ、行頭文字が小文字の場合
http://pastebin.com/RKHNpMwy 大文字に置き換え、変換してファイル出力
[3] 環境: Xcode 5.1.1
[3.1] OS: OSX 10.9
[3.2] コンパイラ名とバージョン: gcc49
[3.3] 言語: C++
[4] 期限: 無期限
[5] その他の制限:
よろしくお願いします。
>>526 今読んだ文字が行末かどうかは判断のしかたわかる?
>>527 改行文字である\nになったらとかそんな感じでしょうか
gets使っちゃえ
530 :
デフォルトの名無しさん:2014/06/22(日) 15:18:59.75 ID:R6m2qV6z
>>511 0以下なら0
255以上なら255ってすればおk?
ゲッツはdeprecatedになったんじゃなかった?
>>531 while(文字全部読み取るまで) {
if(c==\n) {
行頭をなんかに格納
}
}
各行頭文字を変数として取得するのはこんなんでしょうか。
>>533 while(文字全部読み取るまで) {
if(c==\n) {
行頭をなんかに格納
この時点で行頭は読み込まれていない
}
}
2次元配列化して最初の文字を[0][0]として格納
それを大文字/小文字という処理というのは無理でしょうか
[行数][文字数]って事ならできるけど
最大行数、最大文字数を指定するかしないかでまた変わってくる
>>535 簡単に出来るよ。
ただ、この要件でキャッシュする必要ないから
無理ではないけど無意味。
元ソースを尊重しベッタベタに書くとこんな感じ
int flg=1;
while( (c = fgetc( fp )) != EOF ){
if(flg) {
if(c>='a' && c<='z') {
printf("%c", c+'A'-'a');
} else {
printf("%c", c);
}
flg = 0;
} else {
printf("%c", c);
if(c=='\n') {
flg=1;
}
}
}
toupperを使えばすっきりするしgets系なら概ね速くなる
sed 's/^\(.\)/\U\1/'
>>536 可変でいいじゃん
> [行数][文字数]って事ならできるけど
文字数、つまり可変長となり得る文字数の対策が出来てるなら
最大行数、最大文字数なんてちょろいでしょ
>>538 [0][0]としか無かったから想像で書いただけだよ
動的確保が出来るのなら可変でいいし、出来ないのなら最大を決めないといけない
出来るかどうか現時点でわからないからな
勝手に出来ると決め付けて可変で答えても出来なかったら無駄だしな
>>539 細かいコメントありがとうございます。言葉としては
whileでEOFにならない間は
行頭に来たらc(行頭文字)が小文字か判断
大文字に変換、行末に来たら次の行の読み取りを開始
処理をし続けて、という解釈で大丈夫でしょうか。
それと最後にファイル出力なのですが
fp = fopen("output.txt", "w");
fprintf(fp,"%c" ,c);
printf("text export to output.txt\n");
printf("---\n");
fclose(fp);
printf("file close\n");
return 0;
と書くとoutput.txtの中身が[...]となってしまいます。この場合fprintfがおかしいのでしょうか
追記: newLineComesからtoupperのところは
islower(c)で一文字目を判定、toupper(c)が通ったら
すぐnewLineComes=false;で頭文字だけ処理を終わらせて
次のnewLineを読み取っているということで大丈夫でしょうか
>>514 // 先鋭化フィルタ
for(y=1;y<YSIZE-1;y++)
for(x=1;x<XSIZE-1;x++)
if(x<2 || x>253 || y<2 || y>253)
out_image[y][x]=in_image[y][x];
else{
wa = in_image[y][x] * 5;
wa-= in_image[y][x-1] + in_image[y][x+1] + in_image[y-1][x] + in_image[y+1][x];
out_image[y][x] = wa;
}
// ラプラシアンフィルタ
for(y=1;y<YSIZE-1;y++)
for(x=1;x<XSIZE-1;x++)
if(x<2 || x>253 || y<2 || y>253)
out_image[y][x]=in_image[y][x];
else{
wa = in_image[y][x-1] + in_image[y][x+1] + in_image[y-1][x] + in_image[y+1][x];
wa-= in_image[y][x] * 4;
out_image[y][x] = wa;
}
>>543 それは擬似コードか?
bmp を与えると動作するように記述してくれ
>>544 x>253とかXSIZE何処行ったみたいなツッコミならまだしも、
出題文読まずに他人の回答にケチつけてるのか君は…
>>537 これは初心者にありがちなバグだね。ベタすぎ
550 :
デフォルトの名無しさん:2014/06/23(月) 19:56:29.92 ID:BmnMrvs4
>>511ですが
自分で作ってみたのですが
どうでしょう
for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++){
if(x<1 || x>254 || y<1 || y>254){
out_image[y][x]=in_image[y][x];
}else{
a=in_image[y][x+1]+in_image[y][x-1]+in_image[y+1][x]+in_image[y-1][x]-4*in_image[y][x];/*ラプラシアンフィルタ計算式をaに格納*/
}
if(a<=0){
a=0;
}
else if(a>=256){
a=255;}
out_image[y][x]=a;/*aに格納した値をout_image[y][x]にもどす。*/
}
}
551 :
デフォルトの名無しさん:2014/06/23(月) 19:57:18.95 ID:BmnMrvs4
二個目
for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++){
if(x<1 || x>254 || y<1 || y>254){
out_image[y][x]=in_image[y][x];
}else{
a=-in_image[y][x+1]-in_image[y][x-1]-in_image[y+1][x]-in_image[y-1][x]+5*in_image[y][x];/*ラプラシアンフィルタ計算式をaに格納*/
}
if(a<=0){
a=0;
}
else if(a>=256){
a=255;}
out_image[y][x]=a;/*aに格納した値をout_image[y][x]にもどす。*/
}
}
会心の出来だとは思うのですが
かいしんのいちげき!
553 :
デフォルトの名無しさん:2014/06/23(月) 21:14:19.55 ID:BmnMrvs4
>>543 今気がつきました!
思ったのですがout_imageに戻すときの処理ですが、0と256を忘れてませんか?
>>551-552 条件を括弧の中に入れた。コメントも気を付けるように。
for(y=0;y<YSIZE;y++)
for(x=0;x<XSIZE;x++)
if(x<1 || x>254 || y<1 || y>254)
out_image[y][x]=in_image[y][x];
else{
a = in_image[y][x+1]+in_image[y][x-1]+in_image[y+1][x]+in_image[y-1][x];
a -= 4*in_image[y][x];
if(a < 0)
a = 0;
else if(a > 255)
a = 255;
out_image[y][x] = a;
}
555 :
デフォルトの名無しさん:2014/06/24(火) 00:30:29.52 ID:gKXrKGrX
コメントも付けるように。
557 :
デフォルトの名無しさん:2014/06/24(火) 20:10:16.97 ID:4MR8qoMd
【質問テンプレ】
[1] 授業単元:工学情報実習II
[2] 問題文(含コード&リンク):
http://i.imgur.com/2IHDmSs.jpgのコースをライントレースカーで最短で走るプログラムを考えなさい。
センサーは5センサーとしセンサー部分の反応プログラムはSwitch文で作成すること
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (MPLAB ide 最新ver)
[3.3] 言語: (C++ ,PIC)
[4] 期限: ([2014年06月25日9:00まで] )
[5] その他の制限: (C++ <pic.h>で走行プログラムを書く)
最短で走る案とそれに伴うプログラムが思いつきません。
よろしくお願いします。
>>557 実物の基盤なしでどうやって開発する気だよ。
559 :
デフォルトの名無しさん:2014/06/24(火) 20:37:57.79 ID:4MR8qoMd
561 :
デフォルトの名無しさん:2014/06/24(火) 20:51:01.29 ID:4MR8qoMd
>>561 いや、他人がその仕様わからないのにどうやって開発するんだ?
564 :
デフォルトの名無しさん:2014/06/24(火) 21:04:51.94 ID:4MR8qoMd
うん。俺無理。
だいたい俺VCしか触ったことないもん。LOL。
外観じゃなくてさw
センサーの位置とか取得できる情報の種類とか値の範囲とかは
あとどうやって車体を制御できるのか
速度・旋回量みたいに制御できるようになってるのかモーターへの出力を直接制御するのかとか
その辺おそらくサンプルプログラムか何かあるんでしょ
>>564 各パーツごとの仕様書はあるでしょ?
市販のパーツを組み立てたのではなく
パーツレベルで手作りなの?
>>566 センサーは前面配置だけど取得できる情報って何?
一つ言えるのはデジタル出力ってことぐらいしか手元の資料では分からんな。
先生に、「2chで聞くのに必要な資料一式ください」とお願いしなさい
明日の朝までって、今すぐ先生に電話するしかないね
そもそもどんだけ課題放置してたんだよ
タートルグラフィックか。懐かしー。
575 :
デフォルトの名無しさん:2014/06/24(火) 21:33:26.36 ID:4MR8qoMd
>>574 タートルグラフィック?
そんなの習ってないんだが
デフォルトプログラムだとどんな動きするの?ふらふらしながらライントレースする?
ふらふらするならPID制御でも入れる
ふらふらしないならもうそれが最速じゃね
>>578 センサーの感度調整してスムーズに走る
でも、コースショートカットしてもいいから最短を考えろとのことでして
マップデータを突っ込まないと無理じゃね?
>>579 デフォルトプログラムにしろショートカットOKにしろ最初から全部仕様や前提や条件を書かなきゃ誰も回答できない
ショートカットってどこまで許されてるの?
どこからスタートなの?赤ラインの上?手前?
何をもってゴールとなるの?赤ラインをタイヤが通過したら?
条件なく最速なんて言ったらライントレースなんてせずその場で小さく旋回してゴールしたら終わり
582 :
デフォルトの名無しさん:2014/06/24(火) 22:00:51.88 ID:4MR8qoMd
まず、何をもってゴールとなるか
スタート地点から一旦離脱して元の位置に戻ってきた時点でゴールとする
スタート地点は自由
どこに置いても可
ショートカットは基本センサーが反応して最短距離を走行するのが理想だけどセンサー無視してもおk
仕様に至ってはなんて書けばいいか分からない。
制御工学の範囲だろ?
こういうのはトライアンドエラーでなんとかするもの
実物ないと無理
>>582 581で言ったとおりその場で小さく旋回して1周したら終わりでよくない?
ゴールで止まる必要もないのであれば↓でいいんじゃね
switch(sensors){
// センサ入力からラインの外れ具合により
// 曲がり具合と直進具合を判断する
default:
move_left(); // 左へ1ステップ
break;
}
585 :
デフォルトの名無しさん:2014/06/24(火) 22:07:37.01 ID:4MR8qoMd
>>583 トライアンドエラーの前にどこをショートカットできるかそれすら思い浮かばない
>>582 >スタート地点から一旦離脱して元の位置に戻ってきた時点でゴールとする
すげー簡単じゃん
1cmバックして、1cm前進する
自己認識からプログラムしないと無理ゲーのような気がする。つまりむりげー。
本体改造してカメラつけて画像認識するとかそういうレベルのような気がする俺素人。
589 :
デフォルトの名無しさん:2014/06/24(火) 22:12:21.78 ID:4MR8qoMd
>>588 画像認識までできない。
というか、あんな小さいひょうたん型コースで画像認識させる意味なくね?
ん?マシンはそのひょうたんを認識してませんよ。
認識してるのは君自身だ。
まぁ、プレゼンの時に、一発ネタでーす。とか言ってお茶濁すとかが最善手のような気がしないでもない。
593 :
デフォルトの名無しさん:2014/06/24(火) 22:19:18.49 ID:4MR8qoMd
>>591 極論はそれでもいいかもしれないですが流石に...
何をもってゴールとするのかが担当から何も言われてないので曖昧です
イニシャライザの作れないようなものをどうしろと・・・。
最低限センサー使ってますよアピールしながら短くするなら以下くらいか
ひょうたんのくびれ部分をスタート・ゴール地点として
スタート直後に90度旋回(ステッピングモータどれだけ回したら90度になるかは実測して試す)
ライン(ひょうたんのくびれの逆側)を検出するまで直進
検出したら180度旋回(旋回しすぎるとゴールしなくなるので170度くらいでもいいかも)
ラインを検出するまで直進
90度旋回しつつライントレースすればきれいにゴール
596 :
デフォルトの名無しさん:2014/06/24(火) 22:35:53.95 ID:4MR8qoMd
>>595 くびれからくびれまで往復すれば確かにゴールになるかと
言ってることは分かるけどプログラムが分からん
ショートカット可って事は、ラインが真っ直ぐになっている点(4箇所)を通る真円でも良いんでは?
まあそのためには最低1周してからショートカットを計算することになるが。
日本語不自由な課題ってアカハラだよな
まずきちんとフィードバック制御してライントレースできるものを目指せよ
600 :
デフォルトの名無しさん:2014/06/24(火) 22:55:00.27 ID:4MR8qoMd
>>598 手作りで仕様なんか分かるかよ
特に制御プログラ不得意なのに...
>>572 すでにライントレースするロジックになってる気がするが。
光センサは5つもあるの?
>>598 演習なら質問すりゃ良いだけだしそれ前提だろ
あと多分日本語が不自由なのは課題出題者じゃない
603 :
デフォルトの名無しさん:2014/06/24(火) 23:01:49.40 ID:4MR8qoMd
>>572 前は3センサーだったんだけどより検出率を高くしようとしたら5センサーになった
あとタイマが何時動くのか全然分からん。
int_subってシンボル名をフレームワーク側で定期的に呼ぶのだろうか。
>>603 (1) (2) (3) (4) (5)という光センサの配置だとして、
(2)から(4)の距離が黒線の幅よりも大きいなら、(1)と(5)が役立つケースは少ない。
CPUパワーが低くかったり、急カーブがあった場合に、(2)と(3)がON、あるは(3)と(4)がONのケースを見逃す可能性を見越してるってこと?
正直モータの加減でその辺はどうにかなるんじゃないかなぁ。
そもそもライントレースプログラミングは光センサが1つでどうにかするものが多い。
606 :
デフォルトの名無しさん:2014/06/24(火) 23:11:37.24 ID:4MR8qoMd
>>604 プログラムの端から端まで理解してるわけじゃないんで、答えれんわ...
すまん
607 :
デフォルトの名無しさん:2014/06/24(火) 23:17:30.65 ID:4MR8qoMd
>>605 5センサーにしたのはどっかのセンサーが見逃してもサブつまり奥のセンサーが対応して曲がるように5センサーにしてるわけでして。
例
(1)(2)(3)(4)(5)のうち、(2)(3)が反応するはずが反応しなかった場合(1)で対処するみたいな
608 :
デフォルトの名無しさん:2014/06/24(火) 23:27:46.40 ID:WxM8Xv0V
if(conf !='y') printf("y/nのいずれかを入力して下さい");
ある本の問題で、この文を「y,Y,n,N」以外の場合にするにはどうしたらよいでしょうか?
「y」だけなら動くのですが、複数の条件が上手く扱えず常に真になっちゃって…
>>608 if((conf != 'y') && (conf != 'Y') && (conf != 'n') && (conf != 'N')) printf("y/n or Y/Nのいずれかを入力してください。\n");
>>607 ショートカットをせずに、愚直にライントレースするなら、
(1) move_forwardとmove_right/leftの回数を調整する(move_forward多め)。
(2) ハード仕様上できるのかしらんが、wait_msの時間を短くする。
(3) ハーry)、モータの駆動量を4ステップより多いステップにする。
くらいしかないっぽい。
611 :
デフォルトの名無しさん:2014/06/24(火) 23:35:51.46 ID:WxM8Xv0V
>>609 ありがとうございます!
ずっと論理和に固執してました…
612 :
610:2014/06/24(火) 23:48:13.70 ID:5U6yDrEO
俺、大嘘ついてるな。
>>578が言うように、PID制御を実装して係数を調整するのがロジック改善として最適だね。
センサー5つだと実装例ないだろうけど。
>>612 そのPID制御を実装すると具体的にどうなるん?
調べて見たけど理解してるできん。
>>613 PID制御を入れると、カーブの入口付近はギザギザ走行になるが、そのうちカーブに沿ったモータ制御になっていく。
極端な話、円だとそのうちギザギザ走行じゃなくなる。
>>572のプログラムだとカーブでは常にギザギザ走行になる。
左右のモータの回転数を変えられることが必須。
615 :
デフォルトの名無しさん:2014/06/25(水) 00:06:34.53 ID:Jzh1k5/v
>>614 んー。
あまり入れる価値がなさそうな気がしてならないんだが
用は滑らかさを増すということかな...
じゃあ、今回のコースは比較的カーブが多いから入れた方がいいのかな。
>>578に対して
>>579の返答をしてる時点でもしやとは思っていたが案の定何の理解もしてなかったな
余力があれば。
ただし、プログラムの改変、サンプリング回数の調整、係数の調整が工数として掛かる(係数調整だけでも結構だるい)。
ハード開発込みの講義だとしたら、コスト単価も意識できると将来役に立つかもな。
pid制御
誤送信
623 :
デフォルトの名無しさん:2014/06/25(水) 19:25:19.80 ID:wig5YSH+
[1] 授業単元:グラフ理論
[2] 問題文(含コード&リンク):
貪欲法を用いてグラフの全ての点を通る最短閉路長を求めるプログラムを作りなさい。
グラフの点の数、点間の距離は最初に入力させること。
貪欲法の手順は
@全ての点間の距離を長さ順に並べる
A空の閉路から始め、点間の距離を短い順に調べ、それが以下の条件を満たすなら閉路に加える
・点の次数が3を超えない
・全ての点を回らない様な閉路を作らない
よろしくお願いします。
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2014年6月28日17:00まで
[5] その他の制限:
TSPを貪欲法で解いたら最短の保証が無いじゃないか
625 :
デフォルトの名無しさん:2014/06/25(水) 23:23:57.10 ID:uuSVt8Cj
>>624 他にもNearest neighbor法やNearest addition法でプログラムを組んでいる最中で、それらとの比較なので大丈夫です
>>625 じゃあそいつらを改良すれば貪欲法にできるよね
627 :
デフォルトの名無しさん:2014/06/26(木) 19:48:45.06 ID:hIqK/FJL
>>626 そうなんですけどいまいちやり方が思いつかなくて
まず点間の距離を配列に格納して、それを長さが短い順に判定するのかなと思ったんですけど、例えば同じ長さがあった時どっちを選ばせるのかとか
そもそも配列の中身を長さ順に並べ替えるべきなのかとか
教えていただけませんか
>>623 の
>>・点の次数が3を超えない
って次数3はありってことだよね?
それって閉路にならなくない?
なんか勘違いしてるかな
629 :
デフォルトの名無しさん:2014/06/26(木) 21:49:06.06 ID:svCBA0Nl
>>628 すいません、次数は3未満ですね
3は無しでした
631 :
デフォルトの名無しさん:2014/06/28(土) 12:18:19.76 ID:UdsgUvF6
【質問テンプレ】
[1] 授業単元:画像処理
[2] 問題文:ソースコード
http://codepad.org/5RLy9iUt [3.1] OS:Windows7
[3.2] Visual Stdio 2010
[3.3] 言語:C++
[4] 期限: ([2014年7月1日15時00まで])
[5] その他の制限:ヒストグラムを作りそれをExcelでグラフ化するのが目的です。
一応値は求められているとは思うのですが
それを出力できません。使用する画像はLAX.bmpやgirl.bmpといった有名どころの画像です
632 :
デフォルトの名無しさん:2014/06/28(土) 17:36:39.28 ID:9IkoF3d8
>>630 なるほど、構造体を使って配列に格納してクイックソートすれば良かったんですね
コメントも多くてすごくわかりやすいです
大変参考になりました
このコード見ながらですけどなんとか作れました
ありがとうございました
633 :
630:2014/06/29(日) 18:41:25.14 ID:s1CDyW9K
>>632 あー・・。qsortの比較関数は、(たまたま結果は変わらないけど)、よくなかったね
構造体の比較してるんだからこうでないと。
int comp(struct line *a, struct line *b) {
if(a->dist == b->dist) return 0;
if(a->dist > b->dist) return 1;
return -1;
}
>>633 return a->dist - b->dist;
でいいんじゃない?
>>634 あー、確かにそれでいいですね。なるほど
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク) : マップ上でのシンボルエンカウントシステムを作成
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: Visual Studio 2010
[3.3] 言語: C
[4] 期限: 2014/06/30 午前10:00
マップを書けてプレイヤーと敵と重なった時に「モンスターが現れた!」と表示されればOKです
期限が明日までなのは本当申し訳ございません、よろしくお願い致します
マップとは?マップが書けるとはマップエディタがいるということ?
ローグみたいな文字だけのUIでよいの?それともGUIが必要?
>>638 コンソールアプリケーション上で動作するだけでいいので文字だけでダイジョブです
それ宿題じゃないだろ
個人的に欲しいコードをここで他人に書かせようとしてるんだろ
誰がボランティアするかよばーか
ふぇぇ……ごめんね
ガチで宿題だったんだけどもう期限きちゃったから消えます
[1] 授業単元:プログラミング技術β
[2] 問題文(含コード&リンク) : 16進数で入力されたふたつの整数の和と差を計算して、16進数と10進数で出力するプログラムを作成しなさい。
[3] 環境
[3.1] OS: windows8.1
[3.2] コンパイラ名とバージョン: Visual Studio 2013
[3.3] 言語: C++
[4] 期限: 2014/07/01 午前8:00まで
10進数同士の計算方法は分かりますが16進数同士での計算方法及び計算結果の16進数を10進数に変換するところが分かりません。
>>643 %xっていうのが16進数?
あと、16進から10進に変換されてる部分教えてもらってもいいすか?
>>644 16進から10進に変換なんてしてない、CPUは10進で計算しない(しいていうなら出力printfの%d)
16進入力(scanf %x)→CPUで計算(2進とかいわれる)→16進出力(printf %x)、10進出力(printf %d)
649 :
デフォルトの名無しさん:2014/07/01(火) 19:23:17.82 ID:rsNQNidm
>>631 画像でヒストグラムを初めから求めてはダメなのかい?
>>650 nameフィールドが1つだと、アルファベット順ソートが面倒。
nameフィールドを2つ(name1,name2 など)にしても良いのかな。
[1] 授業単元:プログラミング技術β
[2] 問題文(含コード&リンク) : 次のようなデータを扱う4個の変数を宣言して、キーボードから整数値を入力して、入力結果を出力するようなプログラムを作りなさい。
ただし、入力はそれぞれ、「身長=」などと表示した後に続けて入力させるものとする。また、出力もそれぞれ「身長=」などに続けて表示し、改行するものとする。
身長のデータ sintyou
各クラスの人数 ninzuu
各教科の平均点 heikin
都市の人口 zinkou
[3] 環境
[3.1] OS: windows8.1
[3.2] コンパイラ名とバージョン: Visual Studio 2013
[3.3] 言語: C++
[4] 期限: 2014/07/03 午前7:00
授業時間一杯考えたのですがさっぱり分かりません。
よろしくお願いします。
>>651 まあそうだけど、2つの構造体の前後関係を名前で判定する関数を作っておけば、qsortに渡すだけだな。
qsort禁止なら自分でバブルソートなり組んで比較時にその関数呼ぶだけ。
>>652 printfとscanfの組を4回実行して
scanfを4回実行するだけ
>652
#include<stdio.h>
int main(void){
int sintyou,ninzuu,heikin,zinkou;
printf("入力\n");
printf("身長=");
scanf("%d",&sintyou);
printf("人数=");
scanf("%d",&ninzuu);
printf("平均=");
scanf("%d",&heikin);
printf("人口=");
scanf("%d",&zinkou);
printf("\n結果\n");
printf("身長=%d\n",sintyou);
printf("人数=%d\n",ninzuu);
printf("平均=%d\n",heikin);
printf("人口=%d\n",zinkou);
return 0;
}
>>652 ひどい変数名だ。出題者は中学生だな(名推理)
#include <stdio.h>
void sort(int h[],int i,int n,int *max,int *min){
int j,t;
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(h[i]<h[j]){
t=h[i];
h[i]=h[j];
h[j]=t;
}
}
}
*max=h[0];
*min=h[n-1];
}
main(){
int i,num=5,max_h,min_h;
int height[]={178,165,182,123,300};
sort(height,i,num,&max_h,&min_h);
printf("max=%d min=%d\n",max_h,min_h);
}
をcodepadでコンパイルしたら
max=300 min=123
Exited: ExitFailure 16と表示されました。
間違ってる部分が分からないので教えてください。
660 :
659:2014/07/03(木) 01:41:11.31 ID:G4K8x6+j
分かりにくかったので付け足させていただきます。
Exited: ExitFailure 16と表示される原因を教えてください
mainの戻り値を明示しないからコンパイラが補完して、
printfの戻り値がmainの戻り値に使われてるんだろ。激しく処理系依存。
663 :
659:2014/07/03(木) 02:30:14.68 ID:G4K8x6+j
>>661 なんと!?戻り値明示してないじゃないか私の馬鹿
ありがとうございます助かりました
sortのiが激しく謎
665 :
デフォルトの名無しさん:2014/07/04(金) 13:10:24.68 ID:MiP+bQJe
3. 名無し 2014年06月19日 03:07
普通の人なら童貞の書いた漫画なんか読みたく無いと思いますよ。
童貞の触った物には触れたく無いですよね。気持ち悪い。
,' ヽ ', ,/ ',
,'. ヽヽ // ヽ
,' ヽ、 ,._='ヘ.! ',
. i 、 ヽ ヽ ''" !! ',
i ヽ `ヽ、 ` 、 ハ /´ i
i ヽ、 二ー 、ヽ |! i _,,,,,,,,_ ノ
. i.ヽ! ヽ ヽ、 ,. ,.-=、、ヽヽ. / !'""ー- ,'
i.!ヽ.ヽ、ヽ、 ヽ、ー-/ !::O:.i ヽ -=/-/ 'T:::エヽ ,'
! ヽヽ ヽ ヽ、. `` ' ー ' '"/ /' i 、 /',
. ! , 〉 、 ヽ ` 、 _ _ /_, ィ´ ! ` ー ´ !
i i ノ ヽ ヽ、 /´ i !
. ', ヽ !、 ヽ ヽ、 ' .,. 、 !、 /
ヽ ヽ.' ', ヽ、、 ヽ、 ,' ', ,イ
ヽ i ', ヽ` 、 ` 、 '-‐‐、 ,.-〈 / i
', ノ 、ヽ ヽ 、`ー 、`ヽ  ̄ ', ! i
".! ! ヽヽ ヽ` ー 、`__ ' " ` -‐ 、 / .! i かく言う私も童貞でね・・・
i .! ヽヽ、 `ヽ、 `` ー-`二ニ二>', !
! i ヽ、 ``ー- 、 _ _ ... ' /
! ヽ、 ヽ ,.  ̄ 、 /
668 :
桃白白 ◆9Jro6YFwm650 :2014/07/07(月) 05:59:34.59 ID:XhjfpKh1
>>667 知ってるそれw 攻殻機動隊でしょ。
いい話だったよね。
>>668 神山健二の予言的なコンセプトは3作とも秀逸、昨今の国際情勢はなんか神山予言があたりそうな雰囲気じゃん
あと音楽は菅野よう子じゃないとね、最近のやつはどっちもだめだね
static がない変数なので、
呼び出される毎に不定な初期値となってる
= 再代入したところで、保持はしない
何がしたいのか、いまいち不明だが
1,2,3・・・って表示したいんだろか?
正しくない理由は671さんの言う通りです
staticとすべき(?ところがstaticではない
スタック上に確保した変数(total)が不定
ただ、staticにして初期値を与えれば良い
ってもんでもないかも
それだとスレッドセーフではないし、あまり良い
コードだとは思えない
このスレもついに診療所になってしまったか・・・
674 :
デフォルトの名無しさん:2014/07/08(火) 20:00:17.56 ID:hLIaJWwe
http://codepad.org/qicJuoxd 余り大げさな質問ではないのでテンプレ使いません。
スケーリングを仕様してコントラストの改善するプログラムが課題で
作ったのですが
何処かまだ簡略化出来る所が有る気がしてそわそわしてます・・・
どうにかできないでしょうか
677 :
デフォルトの名無しさん:2014/07/08(火) 20:57:35.27 ID:hLIaJWwe
>>676 過去の私とは違う!
課題は終わらせたんだ!
解答見せてくれる友達ができたのか。良かったな
679 :
デフォルトの名無しさん:2014/07/08(火) 21:43:50.54 ID:hLIaJWwe
#include <stdio.h>
typedef struct{
char name[20];
int height;
int weight;
}student;
student swap(student sato,student tanaka, student max){
if(sato.height>tanaka.height)max=sato;
if(tanaka.height>sato.height)max=tanaka;
return max;
}
main(){
student sato={"Sato",178,64};
student tanaka={"Tanaka",165,69};
student max;
swap(sato,tanaka,max);
printf("%s: height=%d weight=%d\n",max.name,max.height,max.weight);
return 0;
}
戻り値を用いてheightの大きいほうのデータを出力したいのですが表示されません。
初心者以下の自分にはさっぱりなので間違っている部分を教えてください。
>>681 ありがとうございます
戻り値使ってなかったですね^^;
[1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク):
@・キーワードを入力するようにユーザーに促し、キーワードを入力させる(キーワードは「character string」)
・正しく入力されたときは「A」と画面に表示させる
・入力が正しくないときは「B」と画面に表示させる
A@を完成させたうえで、入力が正しくないときは、「登録に失敗しました。もう一度正しいキーワードを入力してください。」と表示させ
正しいキーワードが入力されるまで繰り返し入力を促すように拡張する(whileループもしくはdo whileループを使う)
[3] 環境 .
[3.1] Windows 8.1
[3.2] Visual studio 2013
[3.3] C++
[4] 期限:2014年7月16日20:00
講義の内容は文字列処理関数です。
授業中考えてもさっぱりわかりませんでした。
@とAの2つです。よろしくお願いします
>>684 使ってるコードをまだ習ってません…
char、print、if、elseなどを使ってやると思うんですが…
684のコードの中でどれを習ってないのか具体的に書こうよ
>>686 C++ じゃなくて C言語なんだよね?
この手の宿題系での入力は scanf("%s", 変数) だろう
って決めうちすると、ちょーめんどくさいな
>>690 しかしなんで宿題出す奴ってscanf教えたがるの?
>>691 scanf教えたがることよりも、scanf教える癖にscanfの戻り値の使い方を適当に流す事のほうが気になる。
scanf( ) について詳しくなっても、にちゃんで
>>695 みたいなくそレス返すだけだし
[1] 授業単元: プログラミング基礎
[2] 問題文
@以下のプログラムを作成しなさい.
文字列を入力して、
その文字列が数字であるかどうか調べる
(符号も対応すること)
(数字は、intの範囲内で)
(0023は、数字として扱う)
実行例)
1234 入力
number 出力
1234abncdef 入力
string 出力
ab^d34x 入力
string 出力
-92837 入力
number 出力
+37 入力
number 出力
[3] 環境 .
[3.1] Windows 8.1
[3.2] Visual studio 2013
[3.3] C
[4] 期限:2014年7月14日0:00
丸投げですがよろしくおねがいします。
[1] 授業単元: プログラミング基礎
[2] 問題文
A以下のプログラムを作成しなさい.
5件の数字を入力し、上位3位までの
数字を順に表示する
(数字の大きい順)
実行例)
22 入力1
30 入力2
10 入力3
40 入力4
2 入力5
40 30 22 出力
123 入力1
25 入力2
294 入力3
-100 入力4
80 入力5
294 123 80 出力
-20 入力1
-25 入力2
-394 入力3
-50 入力4
-80 入力5
-20 -25 -50 出力
[3] 環境 .
[3.1] Windows 8.1
[3.2] Visual studio 2013
[3.3] C
[4] 期限:2014年7月14日0:00
atoi便利でワロタ
>>699 fgetsだからと言って最後に改行がある前提にはしないほうがよいよ
>>700 「00」がstringになるね
(0023は、数字として扱う)と言ってるから数字にしたほうがよさげではないか
実行例にないから何とも言えないけど
1234[EOF]の場合にまずいのか。
>>697はクソコードだ。
intの範囲でって記述があるからatoiとscanf系が出題者の意図なんだろうね。
>>700 >>697 手抜き。
< strcat(buf, "0");
---
> strcat(buf, "1");
なるほど思いつかなかった
[1] 授業単元: プログラミング基礎
[2] 問題文
3 と 5 または両方を調べるプログラムを作る。
@数を1からカウントしていく
Aカウントする上限を尋ねる
B3の倍数の時、「アホになる」と表示
C5の倍数の時、「バカになる」と表示
D3と5の倍数の時、「ボケカス」と表示
[3] 環境 .
[3.1] Windows 8.1
[3.2] Visual studio 2008
[3.3] C
順番通り実装するとAが実行されない
>>707 おまえのアタマのなかでやってろ
持ちこんでくるなボケカス
大学でFizzBuzz問題って言われたんだが・・・
>>711 それでググれば山ほど解答例が出てくるから好きなのコピペして出しとけ
ここで回答してもらってもコピペするだけだろ
FizzBuzzって何?
FizzBuzzとは大分違うけどね。
715 :
デフォルトの名無しさん:2014/07/17(木) 19:27:11.74 ID:GZBYDlnm
[1] 授業単元: プログラミング基礎
[2] 問題文:英語、理科の点数を整数として入力し、高い方の点数を表示しなさい。
(同じ点数の時はどちらの点数が表示されてもよい。)
[3] 環境
OS: Windows7
言語: C
[4] 期限:急ですが明日中までにお願いします
何卒ご教示お願いします。
716 :
デフォルトの名無しさん:2014/07/17(木) 19:31:56.41 ID:GZBYDlnm
[1] 授業単元: プログラミング基礎
[2] 問題文:整数を1つ入力し、その数の倍数を1倍から5倍まで表示させなさい。
(例:入力を2とすると「2 4 6 8 10」と表示)
[3] 環境
OS: Windows7
言語: C
[4] 期限:明日中までにお願いします
>>715 その課題出されるまでに教わったサンプル全部見せてみろ
#include <stdio.h>
main()
{
char buf[100];
int eigo,rika;
printf("英語の点数 :");
fgets(buf,100,stdin);
sscanf(buf,"%d",&eigo);
printf("理科の点数 :");
fgets(buf,100,stdin);
sscanf(buf,"%d",&rika);
if( eigo > rika )
printf("\n英語の点数は %d です。\n",eigo);
else
printf("\n理科の点数は %d です。\n",rika);
}
#include <stdio.h>
main()
{
char buf[100];
int eigo;
printf("整数を入力 :");
fgets(buf,100,stdin);
sscanf(buf,"%d",&eigo);
printf("\n%d %d %d %d %d\n",eigo,eigo*2,eigo*3,eigo*4,eigo*5);
}
fgetsの使い方わかりません・・・orz
stdinはわかるんですが・・・
721 :
デフォルトの名無しさん:2014/07/17(木) 20:55:58.08 ID:GZBYDlnm
>>718 >>719 さっそくのご回答ありがとうございます。
fgets関数などの関数を使わずに出来る方法はないのでしょうか
>>720 stdinの使い方にfgetsは含まれる
>>720-721 fgets以外にも使えない関数があるあろうから使える関数を提示したほうが
fgetsは文字列として入力だから
整数として入力って前提が破綻してる
c言語
[1] 授業単元: プログラミング基礎
[2] 問題文:10個の整数を入力し配列に保存した後、入力された数字の中に
5の倍数が含まれているかを調べ、含まれていた時には「5の倍数が含まれています」
含まれていない時に「5の倍数が含まれていません」と表示するプログラムを作りなさい。
よろしくお願いいたします。
>>726 array[i] % 5 == 0で5の倍数
後は自分でやれば
728 :
デフォルトの名無しさん:2014/07/18(金) 09:10:27.24 ID:+Avqvx3X
ヒントを参考に考えて作ったのですが、以下の通りでよろしいでしょうか
#include <stdio.h>
main()
{
int i;
double c[10];
for (i = 0; i < 10; i++)
{
printf("整数を10個入力してください.(%d つ目) : ", i+1);
scanf("%lf", &c[i]);
}
if(c[i] % 5 == 0){
printf("5の倍数が含まれています\n");
}
else{
printf("5の倍数が含まれていません\n");
}
return 0;
}
printf("います"); のあとで break;
else 消してprintf("ません"); をメイン内直書きでいい
と思ったらこの書き方だと入力途中に終わるな
forもう一個分けておk