2 :
デフォルトの名無しさん :2008/05/03(土) 19:36:31
乙
乙
前スレで出来る出来る言ってるヤツはソースあげてからにしてね。 回数数えて引けばいいって言ってるけど、nが1000なら引く前の数が2^1000で intの範囲にはとても入りきらない数だって理解してないだろ。
5 :
デフォルトの名無しさん :2008/05/03(土) 19:45:02
ヒント (a - b) % n = a%n - b%n
ソースまだ〜?
mod 10000000だからintでいいんだよ。 問題はs_mの重複除外で、ヤツの言う方法だとO(2^m)の計算量になる。 そこのところの解決方法を是非教えていただきたい。
9 :
デフォルトの名無しさん :2008/05/03(土) 20:05:36
たとえば、{abb、aab、ab、aaa} ならば、{ab、aaa}を含む文字の総数を求める。 というのも、abbも含む文字は、abを含む文字全体に含まれる為。 A=ab、B=aaaとおき、AとBが少なくとも一回含まれるn桁の文字全体は、 A、Bをn桁に配置できる場合の数は、(n-1)(n-4)くらいとおもう。あとは{a,b}を適当に埋める。 するとたとえばAとAが重複して現れる場合の数が余分数えてしまうので除外する。 これは、たとえばAが2回、Bが1回含まれる場合の数を求めて引く。全ての場合に対して計算する必要あり。
だからそのソースを書いてよ
11 :
デフォルトの名無しさん :2008/05/03(土) 20:14:47
> 関心無いので、やりたい人がやればいい やれば出来る程度はおもう。
こんだけ長文連投しといて関心ないってのはありえないw
ソース書かなくてもいいから n = 10 S = {aaaa, aaab, baaa, abba} のときの答えをその手法で出してみてくれる?
14 :
デフォルトの名無しさん :2008/05/03(土) 20:21:47
文字列S含む場合の数と、文字列SとTを両方含む場合の数が求まれば 解決する。聴いてみてくれれば教えるのでやってくれ。
>>1 > 気に入らない質問やその他や発言はスルーの方向で。
気に入らないんじゃなくて、よりよいソースを見たいんだよ。
17 :
デフォルトの名無しさん :2008/05/03(土) 20:25:22
>>13 aaaaとaaabを含む文字が最低5桁で実現できる事を考慮していなかった
18 :
デフォルトの名無しさん :2008/05/03(土) 20:30:09
>>13 17のようなケースがある為、これはなかなか数え上げるのが困難な気がするな。
17の場合は、aaaaとbaaab、aaaa(とaaaab)の場合を数える事で解決できるとは思うが
コードを書くのも手計算も面倒だ。
>13程度に即答できないようじゃ話にならんだろw 前スレ702でも709でも一瞬だぜ
>>18 smに何が入力されるかもわかんないのに手計算ってw
SM > にしおかすみこ > アッーーーー! > クソミ(ry
mとlが同じなら文字列何いれても同じ答えになるの?
25 :
デフォルトの名無しさん :2008/05/03(土) 20:58:50
solveがないものを貼られても意味ないよ
間違ってる solve を堂々と張るのが恥ずかしいから 誰かに結果検証してもらうために結果だけ張ってるんじゃねーか わかってくれよ
>>23 そんなはずがない。
同じ文字列はいくつ入れても1つとかわらないので。
nとmとlの値が同じでも入力する文字列が違えばansは違ってくるんだから 何を入れたかわからないんじゃあってるかどうかなんてわからないだろ
お前らソロソロウザイ
30 :
デフォルトの名無しさん :2008/05/03(土) 21:04:09
>>26 13のを手入力で入れて答えが288ならあってるんじゃね?
[1] 授業単元:プログラミング演習 [2] 問題:ある英語の文章が規則に従って変換されてファイルに保存されています。 その文章をファイルとして読み込み、正しい英文に復元し、ファイルに出力する プログラムを作成せよ。です。規則を解読したところ、単語の文字数の分だけ (ASCIIコード表でいう)引数?が下げられています。つまり本文でaは、 ファイルではb,ofはqh,TheはWkhで表示されています。また、zはaに戻ります。 willはamppです。数字やピリオド等はそのままです。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名:gcc [3.3] 言語:C [4] 期限:2008年5月10日まで [5] その他の制限:プログラムでポインタを用いて文字列を定義し、既存の文字列操作 関数(strxxx(),例えばstrlen()など)は使わずに、自分で作成すること。 よろしくおねがいします。 流れぶった切って、まだ期限があるから俺はやるぞ!
33 :
22 :2008/05/03(土) 21:11:49
34 :
デフォルトの名無しさん :2008/05/03(土) 21:12:46
文書がないことには無理
35 :
デフォルトの名無しさん :2008/05/03(土) 21:14:40
>>33 途中まで間違えが無かったら、大きい数字だけ間違える方が難しい。
GWが終わるまでコンパイルできる環境にないって言ってたな
で、なんで
>>32 ?
なんだ
>>32 は既出だったのか
危うく吊られるとこだったZE
>>32 の解
初心者丸出しのソースならできた
前スレに出したのは単語毎じゃなくて文単位で変換してしまってたorz
>>39 > あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。
> 気に入らない質問やその他や発言はスルーの方向で。
45 :
C++ :2008/05/03(土) 23:58:41
>>5 はヒントになってないよ。
少なくとも、任意のa,bにおいて成り立つ理論ではないからね。
49 :
デフォルトの名無しさん :2008/05/04(日) 01:09:52
今入っている配列の中身の数(定義したときの大きさではない)を取得するにはどうすれば良いですか? 例、 int ar[5]; ar[0]=15; ar[1]=20; このとき定義した大きさ5のうち2つは値を入れたので2となって欲しい。
>>49 別の変数で数えておけばいつでも取得できるよ。
51 :
デフォルトの名無しさん :2008/05/04(日) 01:22:57
配列って定義しただけだとar[3]とかには何が入ってるの? あと大きさを越えたar[7]とかでは何が入ってるの?
>>49 ar[0]から順番に入れる事前提で
ar[2]に「プログラム中で使わない数字」入れる
とか
>>50 とか
>>51 配列確保してから何も入れてない状態だと何が入ってるか分からない
0 かも知れないし -8000万 かも知れない
メモリの中の物がそのまま残ってる
確保してない部分に何が入ってるかは分からないけど、
他のアプリケーションが使ってたりするから、ar[7]とかは使っちゃいけない
>>49 C++ で STL の map を使えば数えられる
メモリがある程度自由に使えるのなら
>>50 の方法が一番賢い方法
他の関数でその値をいじるなら、
使用する関数にカウントしている変数をアドレス渡しにすれば
関数から呼び出し元の変数を書き換えられる。
まあグローバル変数でもいいんだけどね^^;
>>49 iostream より printf の方が楽なので cstdio 使ってるけどこんな感じ
#include<cstdio>
#include<map>
typedef std::map< int, int > mymap;
int main(void)
{
mymap::const_iterator n;
mymap ar;
int search_index=5;
ar[0]=15;
ar[1]=20;
printf("ar.size()=%d\n", ar.size());
printf("ar[%d]=%d\n", print_index, ar[print_index]);
n = ar.find(search_index);
if(n != ar.end()) printf("ar[%d]=%d\n", search_index, n->second);
else printf("ar[%d] not exist!\n", search_index);
return 0;
}
58 :
デフォルトの名無しさん :2008/05/04(日) 10:48:52
画像処理で SetPixel(hdc,x,y,c); だと普通に表示されるのが x1=cos(s)*x-sin(s)*y; y1=sin(s)*x+cos(s)*y; SetPixel(hdc,x1+350,y1,c); だと白ドットがたくさん入って表示されます。 なぜでしょうか?
そろそろ誰か課題投げてくれ 暇と飢えで死にそうだ
残ってる問題ってたいてい問題不備か何かだよな
>>61 ありがと、前スレの>830をやってみようかな
65 :
58 :2008/05/04(日) 12:00:08
度々すみません。。 投影される側から計算とは 具体的にどうすればよいのでしょう??
多分画像の回転をしようとしているんだとおもうが、 転送元の x,y が x1,y1 になるという計算をしてる x1=cos(s)*x-sin(s)*y; y1=sin(s)*x+cos(s)*y; でもこの場合には整数に直した時に異なる複数の(x,y)に対して同一の(x1,y1)になる可能性がある
>>65 転送元座標を(x,y)とし転送先座標を(x1,y1)とするとき (つまり
>>58 の条件と同じ時)
x=cos(-s)*x1-sin(-s)*y1;
y=sin(-s)*x1+cos(-s)*y1;
SetPixel(x1,y1,GetPixel(x,y));
となる
68 :
63 :2008/05/04(日) 12:23:34
よく見たら830って936で解決されてんじゃん。
まあ作ってみたら簡単だったから、解決されてて当たり前か。
ということで、
【未解答問題一覧(期限切れ・問題不備除く)】
>>651 2008/05/04 ペイントソフトの作成
>>719 2008/05/09 waveOutGetPositionを使用して、非同期で再生中のwavの再生位置を取得する
>>826 2008/05/10 配線経路を導く配線アルゴリズム
この中に俺が出来る問題はないと断言できるので、CLIの課題クレ
[1] 授業単元:数値計算II [2] 問題文(含コード&リンク): キーボードから実数a,b,c,と式d(x),f(x,y)を入力し、 a≦x≦b,c≦y≦d(x)からなる領域Dにおけるf(x,y)の2重積分を求めるプログラムを作成せよ。 計算結果は小数点以下第12位まで表示すること。 ただし、f(x,y)は必ず2重積分可能で、d(x),f(x,y)には文法的に正しい式が入力される ことが保証されているものとする。広義積分が必要な場合もあるので注意すること。 式に入力可能な文字は数値とx,y,+[加算],-[減算],*[乗算],/[除算],^[べき乗],([括弧],)[閉じ括弧]とする。 なお、変数はいくらでも使ってよく、関数はいくらでも作ってよい。 [3] 環境 [3.1] OS: 任意 [3.2] コンパイラ名とバージョン: gcc3以上 [3.3] 言語: C言語 [4] 期限: 平成20年5月12日 午後5:00まで [5] その他の制限: ・scanf関数とfloat型は使用禁止(sscanf関数は可) ・数値積分にはシンプソンの1/3公式を使う事 授業中の補足説明では、 ・式の入力は「x^2+2*x*y+y^2」や「(x^2-4*x+3)*(4*y-5)」みたいに入力する ・式の解析はスタックを用いて逆ポーランド記法に直すと簡単になる とのことです。 ポインタや構造体、動的変数など、C言語の基本は一応習い終わっています。 また、2重積分については昨年やりました。 もう頭が沸きました。どうかよろしくお願いします。
>>70 > 広義積分が必要な場合もあるので注意すること。
a,b,c,d(x)やf(x,y)が無限大に発散する場合でも正しく計算せよ、ってこと?
シンプソンの公式でそんなことできる?
それとも俺の理解が間違ってるかもしれないが。
>>71 >広義積分が必要な場合もあるので注意すること。
すみません、それは先生の間違いだそうです。
去年出した問題では広義積分が必要だったそうです。
今年は去年から問題を少し変えたので、広義積分は必要なくなったようですが、
その行が残ったままになってしまっていたそうです。
>>70 念のため確認。
許される関数の条件に「多項式」とかそういうのは無いんだよね?
たとえば d(x) = 1/x, f(x,y) = x^y みたいなのもアリなんだよね?
>>77 readExprで式が変換されていない。
a,b,cは実数なのに、atoiでは整数しか読めない。
どんな数値を入れても計算結果が0になってしまうんですが……
作ってもらって文句言うな。 デバッグくらい自分でやれよ。
>>80 軽率でした、すみません。
>>81 ありがとうございます。今デバッグしています。
シンプソンのところ、4倍の点を次のループでまた足しちゃダメ。 あと、積分区間がh=0.001程度に小さいときにも誤差を出さないようにした。 #define DIV 1024 double integrateInner(ExprElement *fexpr, double c, ExprElement *dexpr, double x) { double d = eval( dexpr, x, 0 ); // 第二引数 (y) は使わない double y, S = 0; double h = (d-c)/DIV; int i; for (i = 0; i < DIV; i ++) { y = c+h*i; S += eval( fexpr, x, y ) + 4*eval( fexpr, x, y+h/2 ) + eval( fexpr, x, y+h ); } return S * h / 6; } double integrateOuter(ExprElement *fexpr, double a, double b, double c, ExprElement *dexpr) { double x, S = 0; double h = (b-a)/DIV; int i; for (i = 0; i < DIV; i ++) { x = a+h*i; S += integrateInner(fexpr, c, dexpr, x) + 4*integrateInner(fexpr, c, dexpr, x+h/2) + integrateInner(fexpr, c, dexpr, x+h); } return S * h / 6; }
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):() アルファベット小文字からなる文字列 s が与えられる. s から何文字か削除して回文(左から読んでも右から読んでも同じ)にしたい. 最小何文字削除すれば回文となるか計算するプログラムを作れ. なお,s の文字数は 100000 以下としてよい. 例: s = ababba → 1 (右から 2 番目の b を消して ababa) s = abcdef → 5 (1 文字残して残りを削除する) [3] 環境 [3.1,2] OS,コンパイラ: 問わず [3.3] 言語: どちらでも可 [4] 期限: 2008/06/08 [5] その他の制限: 特に無し
>>84 #include <stdio.h>
#include <string.h>
int min(int x,int y) { return ((x < y) ? x : y); }
int kaibun_ntake(char *str,int f,int l) {
if(l - f <= 0) return 0;
else if(str[f] == str[l]) return kaibun_ntake(str,f + 1,l - 1);
else return 1 + min(kaibun_ntake(str,f + 1,l),kaibun_ntake(str,f,l - 1));
}
int main(int argc,char **argv) {
printf("%d\n",kaibun_ntake(argv[1],0,strlen(argv[1]) - 1)); return 0;
}
これでどうよ?まあ長いと相当かかるが。。
n = 100000 どころか n = 100 でさえまともな時間で終わらなそう・・・
87 :
826 :2008/05/05(月) 15:16:45
>>63 様
>>69 様
GoldenWeekで忙しいところ見て頂きどうも有難うございます。
早速、確認してみます。
また、分からないことがあったら聞くかもしれません。
宜しくお願い致しますm(__)m
88 :
デフォルトの名無しさん :2008/05/05(月) 15:52:28
>>88 循環リストを用いてスタックとキューを実装している
スタックは深さ優先検索、キューは幅優先検索で使われる
91 :
826 :2008/05/05(月) 17:03:39
無理ぽなら適当に整数型の変数に変更汁!
bool→BOOL?
bool→int
>>91 そのboolをintにすればおk
あとはmain内のstatus変数の宣言を関数の先頭でおこなえばいける。
96 :
826 :2008/05/05(月) 17:15:18
>>92 様
>>93 様
さっそくのレス有難うございます。
大文字にしてもだめでした。
型を変えてみます(´・ω・`)
97 :
826 :2008/05/05(月) 17:32:24
>>94 様
>>95 様
レス有難うございます。
bool型からint型に変えてみたところ
構文エラーが消えました!!
また、分からないことがあったら質問するかもしれません(´・д・`)
(´・д・`) (´・ω・`)
99 :
826 :2008/05/05(月) 19:18:36
また質問しても宜しいでしょうか(´・ω・`) ★36行目の!valid_position(src)のビックリマークは否定を表している 即ち値が0のことを示しているのでしょうか。 ★42行目のdist[i][j] = (grid[i][j] == '.' ? MAX_X*MAX_Y : 0); がどういう操作がなされているのかが分かりません。 ?は何の意味でしょうか?? 教えて下さいm(__)m
>>84 合ってるかどうか検証して欲しい、文字列長1000に対して1秒かからないはず
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SRC_LEN 1000
int search_match_max(const char *a, const char *b){
int count=0, maximum=0;
for(;*a && *b;a++,b++){
if(*a==*b) count++;
else count=0;
if(count>maximum) maximum=count;
}
return maximum;
}
int main(void){
char src[SRC_LEN+1], tmp[SRC_LEN+1];
int i, srclen, count, maximum=0;
for(i=0;i<SRC_LEN;i++) src[i]=(rand()%3)+'a'; // テスト用文字列生成
src[i]='\0';
srclen=strlen(src);
for(i=0;i<srclen;i++) tmp[i]=src[srclen-1-i]; // 反転文字列生成
tmp[srclen]='\0';
for(i=0;i<srclen;i++){
count=search_match_max(&src[i], &tmp[0]);
if(count>maximum) maximum=count;
count=search_match_max(&src[0], &tmp[i]);
if(count>maximum) maximum=count;
}
puts(src);
printf("%d\n", srclen-maximum); // (削る文字数) = (文字列長) - (最大一致長)
return 0;
}
>>99 > 36行目
そのとおり。valid_positionの条件が偽であるとき、continueする。
> 42行目
3項演算子 (条件式 ? 値1 : 値2) は、条件式が真なら値1、偽なら値2に評価される。
すなわち、
if(grid[i][j] == '.') dist[i][j] = MAX_X*MAX_Y;
else dist[i][j] = 0;
と同じ動作をする。
>>100 "abcbca"に対して結果が3になる。
正解は1(5文字目の'c'を消す)。
103 :
100 :2008/05/05(月) 19:35:32
すまん、誤読してたorz
104 :
826 :2008/05/05(月) 19:50:53
>>101 様
レス有難うございます。
そのような表記の仕方があるんですね。
分かりました。
あともう2つ質問なのですが・・・
★46行目のqueue[front++] = src;はfrontをインクリメントすることで
queueに1個1個srcの値を入れているのでしょうか??
★47行目のwhile (front != bottom)とありますが
frontとbottomは何を表しているのかがよく分かりません。
これは一体何を比較しているのでしょうか。
教えて下さいm(__)m
>>104 > 46行目
その行はループしていないので、1個1個という表現はおかしいが。
queue[front] = src; front++;
と同じ。
> 47行目
配列queueは、探索すべき位置がずらっと格納される。
bottomは未探索データの先頭をあらわし、
frontは配列の未使用部分の先頭をあらわす。
すなわち、queue[0]〜[bottom-1]は探索済み、
queue[bottom]〜queue[front-1]は未探索、
queue[front]以降は配列自体が未使用。
したがって、(front!=bottom)は、「未探索データが残っている」という条件になる。
107 :
826 :2008/05/05(月) 21:19:39
>>105 様
>>106 様
レス有難うございます。
配列queueは探索済み・未探索・配列未使用の順で
並んでいるのですね。
キューの仕組みがよく分からないので教えて頂いた
URLを見てみます。
今日は、もう家に帰宅するので、
また明日、昼頃に学校に来るので教えて下さいm(__)m
ご多忙中のところすみません。。
108 :
デフォルトの名無しさん :2008/05/05(月) 22:30:41
1授業:音声認識 2問題:自己相関と相互相関について説明と自己相関と相互相関を行うプログラムを作成 3環境OS:Linux、コンパイラ:gcc、言語:C 4期限:5月14日 制限は特にありません。 言葉の意味もまだよく理解できていないのですが、よろしくお願いします。
>>108 それだけでは問題として成立していない。
(何の自己相関・相互相関を計算するか、など)
まずは言葉の意味をきちんとあなたが理解して、
何があればプログラムが書けるかを認識してから、もう一度質問をどうぞ。
その際に、何か与えられたデータなどがあるなら、それもアップロードすること。
110 :
108 :2008/05/05(月) 23:24:03
申し訳ありませんでした。
問題は
振り幅が1で周波数100Hzの正弦波を自己相関処理し
グラフで表現するというものと
振り幅が1で周波数100Hzの正弦波と振り幅が1で周波数100Hzの余弦波を相互相関処理しグラフで表現する
というもので
どちらも標本間隔0.1[ms]、標本の個数は200個です
また
http://www4.plala.or.jp/tamo/dsp/07cross-corr.pdf ↑にほとんど同じ問題があったのでこれを参考にと思ったのですがあまり理解できませんでした。
111 :
88 :2008/05/05(月) 23:57:26
<<89氏 ありがとうございます。 また質問で恐縮なのですが、 nodeinfo_t infoary[NODENUM] = {0}; pushstack(&stack, start); flags[start-1] = 1; infoary[start-1].label = 1; infoary[start-1].parent = start; label = 2; ノードのラベルと親ノードを、ノード-1の位置に記憶するということ だと思うのですが、なんでノード-1の位置なのかが理解できませんでした。 教えていただけないでしょうか?よろしくお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク) ASCIIコード(10進数)を使って、50と入力したら本当は2が表示されるところをAが表示されるように、入力した数字+15の文字が表示したい場合はどうしたらいいでしょうか? 例 55と入力→(本当は7と表示されるが)Fと表示される 55+15=70なので 例 77と入力→(本当はMと表示されるが)\と表示される 77+15=92なので #include <stdio.h> int main(void) { } [3] 環境 [3.1] vista [3.2] gcc [3.3] C [4] 期限;今日中 習ったのはprintf int for scanf %d とかですか?初歩的なことしか習ってません。 この問題を簡単に解く基本的なことは習っているようです
[1] 授業単元:プログラミング演習
[2] 問題文: 親プロセスと子プロセスをつくり読み込みと書き込みを並行処理する。
親プロセスはfork()とexecl()を使い子プロセスを作成する。
その後親プロセスはキーボードから文章1行ずつを読み取り、一時ファイルに書き込む。
この読み込みと書き込みはユーザーがquitと入力するまで行われる。
子プロセスは一時ファイルから文章を1行ずつ読み取り、出力ファイルに書き込む。
親プロセスと子プロセスはシグナルを使いは並行処理を行う。
親プロセスは文章を1行一時ファイルに書き込むごとに子プロセスにSIGUSR1を送る。
また、親プロセスは入出力が終了した際にSIGUSR2を子プロセスに送る。
子プロセスは、出力ファイルを作成後、SIGUSR1を受け取るまで待機し、受け取り次第一時ファイルから出力ファイルに一行書き込む。
また、書き込みが行われている間はSIGUSR1とSIGUSR2をブロックする。
子プロセスはSIGUSR2を受け取ると終了する。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6439.txt [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 2008年5月6日まで
[5] その他の制限:sigprockmask()sigsuspend()sigaction()などを使い、
シグナルを受け取るまで待機やシグナルのブロックをしなければなりません。
どうしても子プロセスのSIGUSR1を受け取るまで待機し、SIGUSR1を受け取るごとに入出力するという所がわかりません。
よろしくお願いします。
>>114 我は放つ、光のクソース!
#include <stdio.h>
int main(void) {
char ch;
printf("Input > ");
scanf("%d",&ch);
printf("%c",ch+15);
return 0;
}
>>116 ありがとうございます
しかしchar ch Inputというのを始めてみたのですが、これを使わないで表すことはできますか?
いや、まぁ char を int 型にしても良いんだが・・・ Input って、ただ文字を表示しただけやで・・・
おっと…int型ってのでやってみてもらえませんか?
いや、自分でcharをintに書き換えればええやんけ・・・
なるほど、理解できました。ありがとうございました。
#include <stdio.h> int main(void) { int ch; printf("Input > "); printf("%c",scanf("%d",&ch)+15); return 0; } こんな事してみたり
scanfが返す値を引用してどうするんだと、小一時間(ry
ばれた?w
>>125 自分でデバッグもできないのにこんな課題与えられるのかよ
しかもこんな難しい回答提出するつもりでいるの?
>>125 >>85 >>90 と(模範回答かどうかは知らんが)回答は出ているが、
不満ならどこが不満なのか書いたほうがいいのでは?
128 :
88 :2008/05/06(火) 13:10:58
<<111の答え教えていただけないでしょうか? orz そしてまた質問になるのですが、探索されたかどうかのチェックはどの変数で やっているのでしょうか?よろしくお願いします。
1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6441.txt [3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:CPad for Borland
[3.3] 言語: C言語
[4] 期限:2008年5月7日まで
[5] 基本制限:getcharを使用、atoi,scanf,gets関数など使用不可
その他制限:下記・問題に記載あり
[Ex] 初心者程度の知識なので、その辺ご考慮くれるとありがたいです;
前スレにていろいろ質問させていただいたものですが、前スレが見れなくなってしまったのもあり、
質問させていただきます。
@前回させてもらったのですが、unsigned charに入れたものをシフトさせて表示しろ、
と言われたのでやってみたのですが、どうも左、右、右のものを反転となってしまい、
うまく直せません。どうすればいいでしょうか?
Aこれも前回提出したのですが、fgets→getcharに直せ、とのことで判る範囲で修正してみたら
どうも月の部分で2桁目以降も入力を無視して受け付けてしまうようになって
しまいました。(1111/11なら1111/1111111でもエラーを起こさず登録されている。)
Bこれについてはすごく読みづらいと思いますが、終端に\0を入れろとのことで、
DEL関数のときは全てに\0を入れているので、終端に\0を入れて、クリアしろ、
とのことでした。
画像確認しないでうpってしまった('A`)
>>130 C
> void*とかいらない
strptr_cmp関数をこのように変更。
int strptr_cmp( const char** x, const char** y )
{
return strcmp( *x, *y );
}
> const使いすぎ
意味不明。適切で必要な箇所に使用しているだけだが。
使いたくないなら単純にconstを消せばいい。うちの環境では警告が発生するがな。
>c++ならできるがcはできない
どこのことか不明だが、コメントを/* */形式にするってところしか見当たらない。
>>130 D
Cと基本的に同じ。
person_name_cmp関数を変更。
int person_name_cmp( const Person** x, const Person** y )
{
return strcmp( (*x)->name, (*y)->name );
}
const不要なら片っ端から消すように。
>桁数制限を越えないように
越えないところで適当に改行すればいい。
>>128 >>111 Cの配列のインデックスが0からで、ノードの番号が1からだから
>>探索されたかどうかのチェックはどの変数で(ry
自分が貼ったソースのコメントに書いてあるじゃ〜ん
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):char変数を用いてアルファベットのkeisuke yamanaka を順番にソートする。 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年5月8日まで] [5] その他の制限:if文,for文を用いて答える 教師が説明なしでいきなりやれといわれて全くわからない…
139 :
138 :2008/05/06(火) 15:51:16
アルファベット順にソートです。すいません…
140 :
88 :2008/05/06(火) 15:58:25
>>135 ありがとうございます
>>探索されたかどうかの(ry 自分で書いてますねw
また再度の質問なのですが、infoaryは何の変数なのでしょうか?
そして連結成分分解の説明としては、まず根の数を調べる。ラベル付けされた順に見る。
根でなければ次の木に移行。根でなければ木に付属。頂点をすべて探索したら終了
でいいでしょうか?間違っていたら教えていただけないでしょうか?
よろしくお願いします
あははは、レングスのスペルミスってんじゃんwww・・・・・・・orz まぁデバッグ文だからいいか(´・ω・`)
極端な話 他人が提出するやつだしどうでもいいか 余計な処理勝手に削除して これが一番手っ取り早い
144 :
826 :2008/05/06(火) 16:51:25
>>138 #include <stdio.h>
int main(void)
{
int i, n, c;
char data[] = "keisuke yamanaka";
for (n = 0; data[n]; n++) ;
for (c = n; (c /= 1.3) != 0;) for (i = 0; i + c < n; i++) if (data[i] > data[i + c]) data[i] ^= data[i + c] ^= data[i] ^= data[i + c];
printf("%s\n", data);
return 0;
}
>>143 どこが削除しても大丈夫な部分なのか分からないって可能性も
>>145 書き込んだ後にまた書き込みが…ありがとうございます
148 :
おやじPG :2008/05/06(火) 17:21:44
すいません、VC++初心者なのですが、図々しくも質問させてください。 SYSTEMTIME構造体の加減算を簡単に行う関数や方法を教えてください。 処理時間をミリ秒3桁まで取りたいのですが、現在 SYSTEMTIME st_s, st_e; ::GetLocalTime(&st_s); 何かの処理・・・ ::GetLocalTime(&st_e); として時間をとっていますが st_s と st_e の差がとれる関数OR方法を知りません。 MSDNなどでみるとFILETIME構造体に変換してなどと書かれていますが、 そのFILETIME構造体の加減算を行う関数を知りません。 どなたか回答おねがいします。 開発環境は MFC VS2008を使用しています。
>>144 dist[curr.x][curr.y]は、現在位置への到達距離をあらわし、
1を足したものは、その隣接位置nextへの到達距離をあらわす。
しかしdist[next.x][next.y]に、既にそれ以下の到達距離で到達した痕跡があるなら、
そこは探索する必要がない、ということ。
prevの件は、
最後にゴール地点からスタート地点へ向かって経路をgridへ書き込むとき、
戻っていく方向がわかるように記録している。
>>140 >>infoaryは何の変数
何の変数ってどういう意味?
>>連結成分の分解(ry
ちょっと何言ってるかわかんない (サンド風
プログラムは、
@未通過ノードのうち1つをルートにして、そのノードから到達可能なノードを探索し、通過済みにする(これが1つの連結成分)
A未通過のノードがまだあるなら@を繰り返す
という風に動いてる
>>148 GetTickCount関数使えばいいかと。
あと、スレ違いですぜ。
152 :
826 :2008/05/06(火) 17:48:52
>>149 様
早速のレス有難うございます。
dist[curr.x][curr.y]が、スタートから現在までの距離を
表しているのは分かりました(´・д・`)
currに1を足したものが、nextになるんですよね??
ということは、77行目のdist[next.x][next.y]もdist[curr.x][curr.y]+1も
どっちも同じ値になって、比べられない気がするのですが。。。
prevについては、なんとなく分かりました(´・ω・`)
>>145 削除可不可判断できなかったら宿題提出の時説明求められたら アッー!
説明を求める講師って一体なんなの? 生徒が本当に理解してるか判断するため? 馬鹿じゃねーの?きちんと宿題提出してるんだからそれでいいじゃねーかよ。
>>152 > currに1を足したものが、nextになるんですよね??
「なる」と言うより、
dist[next.x][next.y] = dist[curr.x][curr.y] + 1;
によって、そう「する」。
> ということは、77行目のdist[next.x][next.y]もdist[curr.x][curr.y]+1も
> どっちも同じ値になって、比べられない気がするのですが。。。
dist[next.x][next.y] = dist[curr.x][curr.y] + 1;
を実行する前の段階なので、同じ値とは限らない。
nextに未到達ならば、dist[next.x][next.y]には初期化で代入したMAX_X*MAX_Yが入っているし、
到達済みなら到達距離が入っている。
157 :
826 :2008/05/06(火) 18:29:03
>>156 様
レス有難うございます。
77行目のdist[next.x][next.y]が未探索であれば
MAX_X*MAX_Yの値が入っているんですね。
ちょっと気になったのですが、
★どうして未探索の場合は、『MAX_X*MAX_Y』と掛け算した大きな値を
入れているのでしょうか??
★dist[curr.x][curr.y]に隣接するdist[next.x][next.y]が
既に配線されたネットとして到達距離が入っている場合
どんな操作になっているのでしょうか。
★それと87行目のfront == bottomとありますが
frontとbottomが同じ値のときの状況が
イメージできないのですが・・・。
教えて下さい(´・д・`)
>>157 宿題に関連しているとは言え、あまり立て続けだと反感買いそうだぞ。
自分でよく考えてみれば、解かると思う。
> MAX_X*MAX_Y
未探索の位置nextについて、distが十分大きな値を持っていれば、
if (dist[next.x][next.y] > dist[curr.x][curr.y] + 1)
の条件が成立するから。
> 既に配線された...
(grid[i][j] == '.' ? MAX_X*MAX_Y : 0) でdistは0なので、探索されない。
> front == bottom
上のwhile (front != bottom) のループは、
ゴールに到達したときに、未探索位置をキューに残したままbreakする。
また、ゴールに到達できなかった場合は、
キューの未探索位置が尽きるので、front == bottom が成立して抜ける。
159 :
826 :2008/05/06(火) 18:57:10
>>158 様
レス有難うございます。
自分でよく考えたのですが分かりませんでした。
質問ばかりして申し訳ありませんでしたm(__)m
>>159 いや、頭ひねって、逆立ちして考えてもわからなかったら
また質問すればいい。
聞かれれば俺は教えるから。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):自分が使っているコンピュータで評伝できる最少の正の実数を求めるプログラムを作成せよ [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年5月7日午前9時まで どなたかお願いします
162 :
161 :2008/05/06(火) 19:32:48
評伝→表現です
>>154 見て今度から結果は正しかってもソースはおかしい解をうpする事にした
>>161 #include <stdio.h>
int main()
{
double a, t;
for(t=1; t; a=t, t/=2);
printf("%e\n", a);
return 0;
}
165 :
88 :2008/05/06(火) 20:01:54
>>150 ありがとうございます
>>infoaryは何の変数 何の変数ってどういう意味?
infoaryが翻訳してもでてこなかったので何なのかがわりませんでした。
教えていただけないでしょうか?お願いします
>>165 翻訳??
変数名になんでinfoaryってつけたかってことかい? それは気分だ
別にaaaでも良い
変数の型のこといってるなら、ソースで構造体宣言してるし、
どういう使い方するかは、前に説明したし、何が聞きたいのかが分からない
168 :
108 :2008/05/06(火) 20:32:04
>>112 さん
亀レスですが、ありがとうございます。
がんばって理解できるようにします.
169 :
88 :2008/05/06(火) 20:33:30
>>166 なるほど何でもいいんですね。ありがとうございます
勘だけどinfo(rmation)ar(ra)yじゃないか?
[1] 授業単元:プログラミング入門 [2] 問題文(含コード&リンク): 瓶詰めのオレンジジュースを売っている店がある。 今この店では、開店50周年キャンペーンとして、 オレンジジュースの空瓶を5本持って行くと、 新しいオレンジジュース1本と交換してくれるサービスをしている。 キーボードから飲みたいオレンジジュースの本数を入力すると、 最低この店から買わなければならないオレンジジュースの本数と、 最終的に残る空瓶の本数を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 5月6日 23:59まで [5] その他の制限: 読み込んでよいヘッダはstdio.hのみ メール課題が出ているのを忘れて遊んでいた俺はもうダメ人間です。 よろしくお願いします
173 :
おやじPG :2008/05/06(火) 21:15:24
>151さんありがとうございました。 すれ間違えてました。すみませんでした。
>>172 買うのは最初だけですが、サービスを貰いに行くのは何度でも。
らしいです。
>>171 #include<stdio.h>
int calc(int num, int *p_empty){
int count=0, empty=0;
while(num){
count+=num;
empty+=num;
num=empty/5;
empty%=5;
}
*p_empty=empty;
return count;
}
int main(void){
int i, num, count, empty;
scanf("%d", &num);
for(i=num*4/5;;i++){
count=calc(i, &empty);
if(count>=num) break;
}
if(count>num) count--,empty+=5;
printf("Require:%d Initial:%d Empty:%d\n", num, i, empty);
return 0;
}
>>171 int main( void )
{
int wantBuy = 0;
int needBuy = 0;
int serviceTotal = 0;
int serviceEach = 0;
scanf( "%d", &wantBuy );
serviceTotal = wantBuy / 5;
do{
serviceEach = serviceTotal / 5
serviceTotal += serviceEach;
}while( serviceEach != 0 );
needBuy = wantBuy ー serviceTotal;
return 0;
}
ケータイからなので動くか分からん(´・ω・`)
あ、表示してないや printf("%d",needBuy); ↑これ足しといて
連投ごめんね セミコロン忘れもあるね(´;ω;`)
>>175 本当にありがとうございました。175さんのお陰でメールが間に合いました。
何故か空瓶が一本余分に出ていましたので、また調べてみます。
あーー 空き瓶表示か!!!! 孟子にタイ
>>176 ありがとうございます。今後のプログラムの参考にさせていただきます。
飲みたい本数を飲み終わって、 空き瓶が5本以上あるとき、交換してもらうかどうか、 またその余分に貰ったジュースを飲むかどうか、それが問題だ。
>>183 結局、たとえば5本飲みたいので5本買ったとして、
最終的な空き瓶は5本、0本、1本のどれ?
>>174 からはどうしても読み取れない。
>>171 これ以上短くはできないぜ
#include<stdio.h>
int main( void )
{
int a;
scanf( "%d", &a );
printf("buy:%d ",(a/5*4+1)+((a%5)?a%5-1:0));
printf("empty:%d\n",(a%5)?a%5:5);
return 0;
}
>>186 printf("buy:%d ",a-(a-1)/5);
はどう?
21 って入力したら17が出るお
17で21本いけるね・・・orz
>>186 まだ短縮できる。
a;main(){scanf("%d",&a);printf("buy:%d empty:%d\n",a?a*4/5+1:0,a?(a-1)%5+1:0);}
0を入力したらbuy:0 empty:0になるように修正しておいた。
>>190 余りは
(a-1)%5+1
だけでどう?
>>191 VC2008ではそれでいけた。
ただ、C89では負数の剰余は処理系依存らしい。
1] 授業単元: プログラミング [2] 問題文(含コード&リンク):24時49分31秒ー16時51分40秒の引き算です [3] 環境 [3.1] OS: Linux 3.2]gcc [3.3] 言語: (C [4] 期限: 2008年5月8日 [5] その他の制限: 全く習ってない初歩の初歩の段階です よろしくおねがいします
>>193 #include <stdio.h>
int main() {
int time1 = 24*3600 + 49*60 + 31; /* 24時49分31秒 */
int time2 = 16*3600 + 51*60 + 40; /* 16時51分40秒 */
int td = time1 - time2;
printf("%d:%02d:%02d\n", td/3600, (td/60)%60, td%60);
return 0;
}
それだけじゃどうしたらいいのか困る
197 :
デフォルトの名無しさん :2008/05/07(水) 02:46:21
>>190 ShortCodingという本で知ったがこんなこともできる
main(a){scanf("%d",&a);printf("buy:%d empty:%d\n",a?a*4/5+1:0,a?~-a%5+1:0);}
コードが小さきゃイイって発想古杉 ヤメレ
>>201 ヽ \ , -┬┬、/. /
\ 7 ヽ ヽ_∨
ヽ l . 二 --`ゝ
/ゝ' _.. '-'´ ・ ・ ヽヽ
j−'´ | = _人 ~ l 〉
/ ̄ ̄l ノ´
/ ̄ ̄~| _.. ィ‐┐
ゝ──'>ー<二○'´i ̄
`ー┐ l
_」 つ
ゝ───…  ̄
ヽ(´・ω・)ノ うるせぇ、ひこにゃんぶつけんぞ
| /
UU
>>200 time.h使うなら、mktime()とかlocaltime()を使えよ。strftime()も。
>>203 そこまで言うならお前がソースを書けよw
自分は知ってます、みたいな発言をされても誰も納得しねーよ
あと、あれは struct tm の構造体、変数を使うためにやったようなもんだろ。
指定のライブラリを使わなければいけないというルールは存在しないよ。
そういうのを無責任な布教と呼ぶ
206 :
デフォルトの名無しさん :2008/05/07(水) 11:30:51
>>193 #include <stdio.h>
void ToHMS(int t1[3], int t2[3], int result[3])
{
int H = 0,M = 0;
result[2] = t1[2]- t2[2];
if(result[2] < 0){
result[2] = t1[2] + 60 - t2[2];
M = 1; }
if(M == 1) result[1] = t1[1] -1 - t2[1];
else result[1] = t1[1] - t2[1];
if(result[1] < 0){
if(M == 1) result[1] = t1[1] + 60 -1 - t2[1];
else result[1] = t1[1] + 60 - t2[1];
H = 1; }
if(H == 1) result[0] = t1[0] -1 - t2[0];
else result[0] = t1[0] - t2[0];
}
int main()
{
int t1[3] = {0},t2[3] = {0},result[3] = {0};
puts("一つ目の時間を,で区切って入力してください");
scanf("%d,%d,%d",&t1[0],&t1[1],&t1[2]);
puts("二つ目の時間を,で区切って入力してください");
scanf("%d,%d,%d",&t2[0],&t2[1],&t2[2]);
ToHMS(t1,t2,result);
puts("一つ目の時間と二つ目の時間の差分は");
printf("%d,%d,%d\n",result[0],result[1],result[2]);
return 0;
}
207 :
203 :2008/05/07(水) 11:43:39
/* すまん、確かに流石に冗長だ */ #include <stdio.h> #include <time.h> #include <math.h> static time_t inputTime() { char buf[10]; struct tm in = {0, 0, 0, 1, 0, 70}; printf("Input time (hh:mm:ss) > "); if (fgets(buf, sizeof(buf), stdin) == NULL) return 0; if (sscanf(buf, "%2d:%2d:%2d", & in.tm_hour, & in.tm_min, & in.tm_sec) < 3) return 0; return mktime(& in); } int main(int argc, char ** argv) { time_t timeA = inputTime(); time_t timeB = inputTime(); time_t diff = (time_t) fabs(difftime(timeA, timeB)); struct tm * result = gmtime(& diff); char buf[10]; strftime(buf, sizeof(buf), "%H:%M:%S", result); puts(buf); return 0; }
>>175 の訂正
if(count>num) count--,empty+=5;
↓
if(count>num) count--,empty+=5-1;
>>84 は何の課題?これ解けるやつが人類にいるのか?
大きい数を扱える環境で組み合わせの数出して見れ。
ruby -e 'puts 2**100000'
99900209301438450794403276433003359098042913905418169177152927386314583246425734
(375行中略)
25155304734389883109376
ありえんだろ。
210 :
デフォルトの名無しさん :2008/05/07(水) 12:47:09
【質問テンプレ】 [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 1000個までの整数あるいは小数を打ち込み、 その平均と標準偏差を表示することのできるプログラムを作成しなさい。 [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン: Microsoft Visual Studio .NET 2003 [3.3] 言語:C言語 [4] 期限:2008年5月9日5時まで [5] その他の制限: 特に制限はありません。 大学生です。プログラミングの授業で課題が出されましたが、解けませんでした。 ご解答よろしくお願いします。
211 :
デフォルトの名無しさん :2008/05/07(水) 13:06:10
>>210 #include <stdio.h>
#include <math.h>
#define SET 1000
int main()
{
int i;
double value[SET] = {0},sum = 0,average=0,hyoujunnhensa;
//数値を格納
for(i = 0; i < SET; i++)
scanf("%lf",&value[i]);
//平均値を出す
for(i = 0; i < SET; i++)
sum += value[i];
average = sum/SET;
printf("平均値 : %lf\n",average);
//ばらつきをみるために
//個々のデータから平均値を引く(偏差)
for(i = 0; i < SET; i++) value[i] -= average;
//次に偏差を2乗する
for(i = 0; i < SET; i++) value[i] = pow(value[i], 2.0);
sum = 0;
//データのばらつきを見るため合計し
//データ数で割って平方根を取る
for(i = 0; i < SET; i++)
sum +=value[i];
hyoujunnhensa = sqrt(sum/SET);
printf("標準偏差は%lf \n",hyoujunnhensa);
return 0;
}
>>209 そんな全ての方法を試すみたいなアルゴリズム使ったら解けるわけないよ。
n = 100000 だから、だいたい O(n log n) 〜 O(n^{1.5}) くらいの
アルゴリズムなら、それなりにまともな時間で解ける。
実際
>>84 の問題に対しては、そのようなアルゴリズムが存在する。
(
>>90 の解法でも O(n^2) だから数日待てば終わるはず)
213 :
212 :2008/05/07(水) 14:15:17
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): (1) 1 から 10000 までの数字を順番に表示しなさい(1数字ごとに改行)。 ただし、どこかの桁に 3 が現れるか、もしくは 3 の倍数のときは 数字の後に ! (エクスクラメーションマーク)をつけなさい。 (2) 1 から n までの数字の中で、どこかの桁に 3 が現れるか、 もしくは 3 の倍数であるような数字の個数を求めるプログラムを作りなさい。 ただし n は大きな数字(int型の限界程度)でも動くようにしなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: どちらでも可 [4] 期限: 2008年05月09日 [5] その他の制限: とくにありません
世界のナベアツかYO!
>>214 (1)
#include <stdio.h>
#include <string.h>
int main(int argc, char *args[]) {
char buf[12];
int i;
for (i = 1; i <= 10000; i++) {
sprintf(buf, "%d", i);
if ((i % 3 == 0) || (strstr(buf, "3") != NULL)) {
printf("%d!\n", i);
} else {
printf("%d\n", i);
}
}
}
>>214 (2)
#include <stdio.h>
#include <string.h>
int main(int argc, char *args[]) {
int N = 10000;
int count = 0;
char buf[12];
int i;
for (i = 1; i <= N; i++) {
sprintf(buf, "%d", i);
if ((i % 3 == 0) || (strstr(buf, "3") != NULL)) {
count++;
}
}
printf("%d\n", count);
}
>>219 それは違う問題。
最長回文問題は「部分文字列(substring)」を求める問題なので、
>>84 とは違う。84 で求めるのは「部分列(subsequence)」。
substring は連続する部分列で、subsequence は連続しなくてよい。
221 :
デフォルトの名無しさん :2008/05/07(水) 15:24:57
>>214 #include <stdio.h>
#include <string.h>
int main()
{
int i;
char n[4];
for(i = 1; i < 1000; i++){
sprintf(n,"%d",i);
if(i % 3 == 0 || strchr(n,'3'))
printf("%s%c\n",n,'!');
else
printf("%s\n",n);
}
return 0;
}
こういうのじゃだめなのか? #include <stdio.h> int main(void) { int i; for(i=0;i<=9999;i++) { printf("%d,%c\n",i+1,((i+1)%3 == 0) ? '!': ' '); } return 0; }
あああぁぁぁぁぁ、見落としてた。 OTL
226 :
デフォルトの名無しさん :2008/05/07(水) 15:43:09
>>214 (2)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
int BuffSize(int n)
{
int num = n;
int size=0;
while(num){
num /= 10;
size++;
};
return ++size;
}
int main()
{
int i,n;
char *nstr;
printf("%dまでの数値を入力\n",INT_MAX);
scanf("%d",&n);
nstr = malloc(sizeof(char)*(BuffSize(n)));
for(i = 1; i < n; i++){
sprintf(nstr,"%d",i);
if(i % 3 == 0 || strchr(nstr,'3')) printf("%s%c\n",nstr,'!');
else printf("%s\n",nstr);
}
free(nstr);
return 0;
}
(2) 難しくね? 1つずつチェックするんじゃ終わらないよな
228 :
デフォルトの名無しさん :2008/05/07(水) 16:01:12
>>228 ・西暦紀元1年1月1日からの日数計算は、グレゴリウス暦で行うの? その場合、厳密な意味での日数とは違ってくるけど。
・星座の基準は? これまた厳密には星座の境界は毎年変わるのだけど。
・グラフィック表示の手段は? Windowsだから適当な方法で表示するだけならできるだろうけれど、授業中に指示されていない?
> 1)西暦紀元1年1月1日から何日目かも表示する これは厳しい
231 :
デフォルトの名無しさん :2008/05/07(水) 16:19:31
>>229 ・西暦紀元1年1月1日からの日数計算は、グレゴリウス暦で行うの? その場合、厳密な意味での日数とは違ってくるけど。
たぶん,下に書かれている
1年365日
ただし、4で割り切れる年は一般にうるう年(366日)
また、100で割り切れ、かつ400で割り切れない年は365日
を利用して作るのだと考えているので,グレゴリウス暦は関係ないと思います.
まぎらわしくてすみません.
・星座の基準は? これまた厳密には星座の境界は毎年変わるのだけど。
・グラフィック表示の手段は? Windowsだから適当な方法で表示するだけならできるだろうけれど、授業中に指示されていない?
この2つは全く指示されていません.個人個人で考えてくるのでしょうか?
□月□日から△月△日生まれの人・・・○○座
と考えていくと思うので,厳密には考えなくていいと思います.
グラフィックも全く指示されていません,というか
まだこういったグラフィックを作るプログラムも習っていないので
>>229 さんがいうような適当な方法でいいと思います.
まぎらわしい文章で本当にすみません.
>>214 (2)
#include <stdio.h>
#include <limits.h>
int main() {
char buff[32];
int i, j, n = 0;
for (i = 0; i < INT_MAX; i++) {
if (i % 3 == 0) {
n++;
} else {
/*sprintf(buff,"%d", i);
if (strchr(buff, '3')) n++;*/
for (j = i; 0 < j; j /= 10) {
if (j % 10 == 3) {
n++;break;
}
}
}
}
printf("%d\n", n);
return 0;
}
/*
1590383305
real 4m7.016s
user 4m5.186s
sys 0m0.108s
四分w
*/
世界のナベアツゲーム人気奮闘中w
234 :
デフォルトの名無しさん :2008/05/07(水) 16:34:47
>>228 に追記します
・星座について
3/21 - 4/19 の間に生まれた人・・・おひつじ座
4/20 - 5/20 の間に生まれた人・・・おうし座
5/21 - 6/21 の間に生まれた人・・・ふたご座
6/22 - 7/22 の間に生まれた人・・・かに座
7/23 - 8/22 の間に生まれた人・・・しし座
8/23 - 9/22 の間に生まれた人・・・おとめ座
9/23 - 10/23 の間に生まれた人・・・てんびん座
10/24 - 11/21 の間に生まれた人・・・さそり座
11/22 - 12/21 の間に生まれた人・・・いて座
12/22 - 1/19 の間に生まれた人・・・やぎ座
1/20 - 2/18 の間に生まれた人・・・みずがめ座
2/19 - 3/20 の間に生まれた人・・・うお座
という区別でいいと思います.
>>233 いつかのFizzBazブームといっしょw
236 :
232 :2008/05/07(水) 16:40:06
>>214 ナベアツ日をかぞえんの忘れてた
(2)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
int BuffSize(int n)
{
int num = n;
int size=0;
while(num){
num /= 10;
size++;
};
return ++size;
}
int main()
{
int i,n,nabeatu=0;
char *nstr;
printf("%dまでの数値を入力\n",INT_MAX);
scanf("%d",&n);
nstr = malloc(sizeof(char)*(BuffSize(n)));
for(i = 1; i < n; i++){
sprintf(nstr,"%d",i);
if(i % 3 == 0 || strchr(nstr,'3')){ printf("%s%c\n",nstr,'!'); nabeatu++;}
else printf("%s\n",nstr);
}
free(nstr);
printf("ナベアツ日%d\n",nabeatu);
return 0;
}
237 :
デフォルトの名無しさん :2008/05/07(水) 18:34:30
これをC++に書き直してくれませんか?Cでの膨張処理のプログラムです。 { int repetition; /* 膨張処理の回数 */ int counter; /* 近傍中の図形画素の数 */ int p_x, p_y; /* 近傍の(x,y)座標 */ int i, x, y, m, n; /* ループ変数 */ x_size2 = x_size1; y_size2 = y_size1; for ( y = 0; y < y_size2; y ++ ) for ( x = 0; x < x_size2; x ++ ) image2[y][x] = image1[y][x]; printf("2値画像の8近傍膨張処理を行います.\n"); printf("膨張処理を行う回数 = "); scanf("%d", &repetition); for ( i = 0; i < repetition; i ++ ){ for ( y = 0; y < y_size1; y ++ ){ for ( x = 0; x < x_size1; x ++ ){ if ( image1[y][x] == 0 ){ counter = 0;
238 :
デフォルトの名無しさん :2008/05/07(水) 18:35:20
237の続きです。 counter = 0; for ( m = -1; m < 2; m ++ ){ for ( n = -1; n < 2; n ++ ){ p_x = x + n; p_y = y + m; if ( p_x > 0 && p_x < x_size1 && p_y > 0 && p_y < y_size1 && image1[p_y][p_x] == MAX_BRIGHTNESS ) counter ++; } } if ( counter > 0 ) image2[y][x] = MAX_BRIGHTNESS; } } } for ( y = 0; y < y_size2; y ++ ) for ( x = 0; x < x_size2; x ++ ) image1[y][x] = image2[y][x]; } }
>>237 大丈夫、そのままC++でコンパイルできる。
つーか、>1嫁。
240 :
デフォルトの名無しさん :2008/05/07(水) 19:26:28
241 :
デフォルトの名無しさん :2008/05/07(水) 19:41:15
>>84 は現実的な時間で終わるアルゴリズムは存在しないと思う
243 :
デフォルトの名無しさん :2008/05/07(水) 19:44:56
10万文字の最大長の回文を見つけるんだろ 一文字ずつ削って判定するしかないと思う。
>>240 とりあえずそのグラフを見ただけでは数式は導出できない。
どういう文脈で出題された課題か、とかそういうことが色々無いと
とても解ける課題ではない。
>>84 問題のとらえ方次第だけど、削除する文字列が連続する1か所のみだったりしないのかな?
長さxの文字列からy~zの部分を削除した文字列が対象(0 <= y <= z <= x)
問題文と例を見る限りでは、任意の文字を削除できるとも考えられちゃうけど、そうじゃないとすれば
>>209 よりかはパターンは少なくなるよね?それでもmax100000なら膨大だろうけど・・・
max100000は2進数表記でしたみたいなオチとかにならないかな。
248 :
240 :2008/05/07(水) 20:28:16
沢山のご指摘ありがとうございます。
理不尽な要求を出して大変申し訳ないですw
グラフについてですが、画像の濃度値を表すグラフなので、
最小値0から最高値は255になるようです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6462.zip 自分自身全然理解出来ていないので、
上手く説明出来なくて大変申し訳ないのですが、
簡単な例を挙げるとこうなるようです。
2番目の図2.5(b)は
z=zm・z'^2/zm^2
z'^2=zm・z
z=√zm・z
と導出出来るようです。
先ほどの問題はこの2つを合わせた式を導出し、
プログラムを作成せよという事になると思うのですが、
導出過程がわからず、混乱してしまったので質問させていただきました。
どうか宜しくお願いします。
>>240 数学板の質問系スレで
画像ファイルのようなグラフで
できるだけ簡単なものを探しています
がどんなものでしょうか?
と聞くと多分答えてくれる。
ここの質問を見ているとこんな基礎的な課題でもいいのかと思いましたが、 他に聞けるようなスレがなかったため、 申し訳ないですがここで質問させてください。 【質問テンプレ】 [1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク) ポイントを用いた線形リストデータ構造を利用して、 キーボードから順に入力した複数の整数値(int型)を、 空の「スタック」および「キュー」にそれぞれ保存し、 取り出した時、出力される整数値を順に表示するプログラム、 pointlist.cを作成せよ。 また動作確認の結果も報告せよ。 動作確認のために入力する整数値は、作成した日付を入力せよ。 (例、2008年5月11日に作成したならば、 スタックで「1→1→5→0→8→0→0→2」と、出力すること、また、 キューで「2→0→0→8→0→5→1→1」と、出力することを確認し、 動作確認の結果と、ソースファイルを提出せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:bcc32 [3.3] 言語: C言語 [4] 期限:5/12 [5] その他の制限: 特になし スタックとキューの理屈は理解しているのですが、 プログラムを書くとなるとどう書いてよいのかわかりません。
>>240 imggray.h 内の関数
void non_Linear_Transform(void)
をどうこういう話は無かった?
struct STACK { int sp; int reg[256]; STACK() { sp = 0; }; int push(int val) { reg[sp++] = val; return sp; } int pop() { return sp > 0 ? reg[--sp] : 0; } }; { STACK stack; stack.push(2); stack.push(0); stack.push(0); stack.push(8); stack.push(0); stack.push(5); stack.push(1); int spmax = stack.push(1)l; for(int i = 0; i < spmax; i++) printf("%d ", stack.pop(); }
あっと、C++ じゃなく C で書くのか?
>>248 「導出」ってのはできないね.
それっぽい関数を定義してみて,同じような関数形だね,
と言うくらいしかできない.
ちなみに,答えとなっている関数は,
前半が下に凸,後半が上に凸であることと,
(0,0), (zm/2, zm'/2), (zm ,zm) を通ることに注意して
前半を二次関数,後半を平方根で定めてやると出てくる.
>>254 > [3.3] 言語: C言語
とはっきり書いてあるじゃないか
257 :
240 :2008/05/07(水) 20:52:03
>>249 ありがとうございます。一応聞いてみます。
>>252 void non_Linear_Transform(void)は今回全く使用していないので、
スルーで大丈夫そうです。
最終の式は一応問題文.txtで出ているので、
プログラムだけでもおこせる方いらっしゃいませんでしょうか。
>>254 答えていただいて申し訳ないのですが、Cでやっています。
それとプログラムを起動したときに、
キーボードから数字を入力させるように作れとのことなので、
苦労しています。
すみません、お答いただきありがとうございます。
ちなみに struct QUE { int tp, lp; int reg[256]; QUE() { tp = lp = 0; }; int put(int val) { reg[lp++] = val; return tp; }; int get() { return tp < lp ? reg[tp++] : 0; }; }; // かなり手抜き。後は自分できちんと仕上げてくだされ { QUE que; que.put(2); que.put(0); que.put(0); que.put(8); que.get(); que.get(); que.get(); que.get(); // 2.0.0.8 }
>>258 struct STACK {
int tp; int reg[256];
};
STACK stack;
int push(int val) {
stack.reg[stack.tp++] = val;
return stack.tp;
}
int pop() {
if(stack.tp > 0)
return reg[--stack.tp];
return 0;
}
{
int c, i;
stack.tp = 0;
while((c = fgetc(stdin)) != EOF) {
if(! isdigit(c)) // 数値以外なら終わる?
break;
push( c );
}
for(i = 0; i < stack.tp; i++)
printf("%c ", pop());
}
// C はちょっと自信ない
>>257 void Ensyu2_3c(void)
{
int z,zd;
for(i=0;i<256;i++){
for(j=0;j<256;j++){
z=tmp_Img[i][j];
if (z <= 128) { // (z<=128)の場合の処理
zd = (int)(0.5 + z*z/128.);
} else { // (128<z<=255))の場合の処理
zd = (int)(0.5 + 128 * (1.+sqrt((2.*z-256)/256.)));
}
tmp_Img[i][j]=zd;
}
}
}
しかし答えになってる式,グラフにするとあんまりそれっぽく見えないな
264 :
240 :2008/05/07(水) 21:40:36
>>262 ありがとうございます。
やはりsqrtを使った上で型を指定しなければならないのですね。
非常に参考になりました。
265 :
デフォルトの名無しさん :2008/05/07(水) 21:41:07
【未回答一覧】
>>228 2008/05/09 任意の年月日の曜日・星座・月齢(グラフィック表示)
268 :
261 :2008/05/07(水) 21:58:41
>>263 無事実行できました。ありがとうございます
>>269 ・格納するというのはint型配列なのか?それともchar型配列なのか?
・2の除算については加減算、乗算を使って実現してもいいのか?
>>271 格納はint型で
加減算 乗算を使ってもらっても大丈夫です。
273 :
129 :2008/05/07(水) 23:08:50
>>133 ,134
わざわざ1つ1つの質問に答えていただきありがとうございますー。
>>137 そして、こちらもありがとうございましたー。
少し気になったのですがDの方で警告メッセージ
警告 W8075 57: 問題のあるポインタの変換(関数 input_birthday )
警告 W8065 99: プロトタイプ宣言のない関数 'input_birthday' の呼び出し(関数 main )
と、出るのですが消すにはどうすればいいでしょうか?
残り
>>129 @〜Bなのですが、かなり切実です;何卒よろしくお願いします。
274 :
232 :2008/05/08(木) 01:17:36
276 :
デフォルトの名無しさん :2008/05/08(木) 01:41:06
巡回セールスマンと同じ分類に入るとおもう
>>84
頭の洗練が必要
279 :
デフォルトの名無しさん :2008/05/08(木) 02:09:15
洗練とか、頭の良さで解けたり解けなかったりするものではないだろう。 多項式時間では解けないというやつとおもう。
280 :
129 :2008/05/08(木) 02:37:07
確認漏れだったのですが、Dの参照分の時に既に日付入力のときに 全てエラーとなってしまい、結果の表示ができませんでしたので、 修正できる方いればよろしくお願いします;
そりゃ、主題者側はわかっているからなw
>>279 多項式時間だけだったら
>>90 が達成している。
O(n log n) 程度の解法もある。
284 :
210 :2008/05/08(木) 08:07:26
285 :
デフォルトの名無しさん :2008/05/08(木) 14:22:11
[1] 授業単元: c言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6478.c [3] 環境
[3.1] OS: Linux6.2
[3.2] gcc 3.4
[3.3] 言語: C言語
[4] 期限: 5/12
[5] その他の制限:
>>277 >>281 さんありがとうございます。
1番の方の提出期限が迫っていますので、
できれば一番の方を優先してもらいたいです。
今現在自分は #include<stdio.h> や int main などから始
めており
#include<string.h> #include<ctype.h> などのものは習
っていないためわからないです。
基本的に for文 配列 if文 ポインタ などを重点的に
使用してもらえないでしょうか?
条件等多数ありますがぜひよろしくお願いします。
>>288 (1)
#include <stdio.h>
int main() {
int x = 77;
int y = 115;
int tmp;
int *p = &tmp;
printf("x %p %d\n", &x, x);
printf("x %p %d\n", &y, y);
*p = x;x = y;y = *p;
printf("x %p %d\n", &x, x);
printf("x %p %d\n", &y, y);
return 0;
}
>>288 (2)
#include <stdio.h>
void pinc(int *x, int d) {
printf("仮引数 x %p %p\n", &x, x);
*x += d;
}
int main(void){
int x, d;
printf("整数を入力 x = ");
scanf("%d", &x);
printf("整数を入力 d = ");
scanf("%d", &d);
printf(" アドレス 値\n");
printf("実引数 x %p %d\n", &x, x);
pinc(&x, d);
printf("値を %d だけ増やした値は %d です.\n", d, x);
return 0;
}
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):() 256×256の画像ファイルを読み込み、RGB値を2次配列に格納する。 その値から全く同じファイルを作成する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: わかりません [3.3] 言語: C [4] 期限:5月9日 ↓自分で作ってみたんですが、うまく値が格納できません。 試しに出力をしてみたところred[][]には数字が入っていたんですが greenとblueは0しか入ってませんでした。 #define M 256 #define N 256 FILE *fa,*fb; unsigned char red[N][M],green[N][M],blue[N][M]; fa=fopen("ファイル1","rb"); fb=fopen("ファイル2","wb"); fread((unsigned char*)red,1,M*N,fa); fread((unsigned char*)green,1,M*N,fa); fread((unsigned char*)blue,1,M*N,fa); fwrite((unsigned char*)red,1,M*N,fb); fwrite((unsigned char*)green,1,M*N,fb); fwrite((unsigned char*)blue,1,M*N,fb); fclose(fa); fclose(fb);
>>293 すごすぎて( ゚д゚) ポカーン
よくこんなのつくったね。
おバカには餌を与えないで下さい。
>>298 ありがとうございます。
前スレは確認できないのですが、
被っていたようなので申し訳ありませんでした。
>>294 画像ファイルの形式は?
それによって、RGBがどう入ってるか決るから提示しないと
それとも、独自形式?
それはそれで提示が必要
ともかく画像形式とやらの詳細を書かないと、
その上手く行かない自分のサンプルから推理ゲームになるよw
301 :
294 :2008/05/08(木) 21:36:07
>>300 書き忘れていました。形式はRGBフォーマットです。
>>301 いやだから…BMP形式なのかJPEG形式なのか
それとも、ファイルの先頭からRGBが隙間無くファイルの最後までしかない等の
独自形式なのか
ともかく、”画像形式”でググって、君の授業内のローカルルールを
他人に分るように説明してよ…
多分、あっと言う間に出来る問題なのに、そこがボトルネックw
>>291 バイトで遅れましたが
ありがとうございました!!
こんなに早くやっていただけるとは思いませんでした・・・
304 :
294 :2008/05/08(木) 22:26:36
すいません。JPEGでお願いします。
余力がある方はアニメーションGIFもお願いします。
このスレで質問しようと思ったらどれとは言わないけど全く同じ問題があったw やっぱり皆考えることは同じなのかw
[1] 授業単元: プログラミング演習 [2] 問題文 a) 3つの整数変数を引数として,その平均値をdoubleで返す関数average(int a, int b, int c)を作成し 利用例が明らかになるようにしてプログラムを作成しなさい. b) 配列とそのサイズを示す整数変数を引数として,配列要素の平均値を求める関数averageOfarray(int array[], int size)を作成し, 利用例が明らかになるようにしてプログラムを作成しなさい. [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年5月9日
309 :
277 :2008/05/09(金) 00:39:56
>>307 a)
#include <stdio.h>
double average(int a, int b, int c){return (double)(a+b+c)/3;}
int main(){
int a,b,c;
printf("a=");scanf("%d", &a);
printf("b=");scanf("%d", &b);
printf("c=");scanf("%d", &c);
printf("average=%f", average(a, b, c));
}
>>304 お前さ、ニセモノか
授業の流れを分ってないだろ…、回答で簡単に推測出来るw
JPEGって事は、JPEGLIBとか使うのか?
使わないなら、ハフマン圧縮が必要だぞ?
全て自前のJPEGファイル操作なら、明らかに294の自身の回答サンプルをオーバースペックw
一瞬マジでJPEGLIB使用した回答を、と思ったが…辞めたw
>>307 b)
#include <stdio.h>
double averageOfarray(int array[], int size){
double sum=0;
int i;
for(i=0; i<size; i++)
sum += array[i];
return sum/size;
}
int main(){
int size, i;
int array[100];
printf("size="); scanf("%d", &size);
for(i=0; i<size; i++){
printf("array[%d]=", i);
scanf("%d", &array[i]);
}
printf("average=%f\n", averageOfarray(array, size));
}
[1] 授業単元:情報処理 [2] 問題文:キーボードから入力された文字列で、使用されているアルファベットの語数をカウントし表示するプログラム 例)oronamin o---2 r---1 (以下省略 [3.1] OS: Windows XP [3.2] Ultra-C [3.3] 言語: C [4] 期限: [2008/05/09まで] 一応ここまで作ってみましたがよくわからなくなりました。 #include<stdio.h> #include <string.h> main(){ int num,i,j,letnum=0; char letter[50],tmp; scanf("%s", letter); for(i=0;letter[i] !='\0';i++){ for(j=i+1;letter[i] !='\0';j++){ if(letter[i]==letter[j]){ letnum++; } } } printf("%c---%d",letter[i],letnum); } レベル低くてすみませんがよろしくお願いします。
>>313 #include <stdio.h>
int main()
{
char str[50];
int num[256] = {0}, i;
scanf("%s", str);
for(i = 0; str[i] != '\0'; i ++)
num[str[i]] ++;
for(i = 'A'; i <='Z'; i ++)
if(num[i] != 0)
printf("%c---%d\n", i, num[i]);
for(i = 'a'; i <='z'; i ++)
if(num[i] != 0)
printf("%c---%d\n", i, num[i]);
}
316 :
313 :2008/05/09(金) 01:15:03
317 :
294 :2008/05/09(金) 01:24:32
>>311 すいません偽物ではありませんが、特に画像形式の指定がなかったのでJPEGで頼んでしまいました。
簡単にRGB値が取り出せる形式がありましたら、その形式でのプログラムを教えてください。
トゥルーカラービットマップ
319 :
313 :2008/05/09(金) 01:27:13
>>314 さんに教わったものですが
>num[str[i]] ++;
str[i]の部分はアルファベットが入るという認識でよろしいでしょうか?
>>294 のファイル1って196608バイトなの?
あとfreadの戻り値は各RGBそれぞれ65536になってる?
[1] 授業単元:応用C言語 [2] 問題文(含コード&リンク): 次の要求仕様(1)~(3)をすべて満たす単一のプログラムを作りなさい。 (1)標準入力から読み込んだ1行にアルファベット(大文字小文字を問わない)が含まれていなければそのまま標準出力に 出力する。 (2)標準出力から読み込んだ1行にアルファベット(大文字小文字を問わない)が一つでも含まれていれば、それをそのまま 標準出力に出力する。ただし、そのような行で含まれているアルファベット(大文字小文字を問わない)の数の多さの順で 上位25%(概数で良い)は、アルファベットを'?'で置き換えたものを出力する。 (3)標準入力が終端に達したら、1行改行し、次いで(2)でそのまま出力しなかった行をランダムな順番に先頭に通し番号(1から始まる 10進数+':')を付けて出力する。(行毎に改行すること) ※行の記憶にはmalloc関数を利用する。mallocで取得したメモリ領域はプログラム終了した時点ですべて解放されていなければ減点 ※ソースコードと、ソースコードをシェルから標準入力リダイレクトで与えたプログラムを実行したものをテキストファイル にリダイレクト出力したものを試験結果サンプルとして提出。 [3] 環境 [3.1] OS:Linux/Unix [3.2] コンパイラ名とバージョン:gcc を想定するもgeneric [3.3] 言語:C [4] 期限:5月16日正午まで [5] その他の制限:特になし 問題文そのものをデジカメで撮ったものをアップしようと思いましたが、学校名とかわかっちゃうんで、 そのまま書き込みました。何度も確かめましたが、長文なんで部分的に間違っているかも知れません。よろしくお願いします。
322 :
321 :2008/05/09(金) 02:10:55
早速間違いが見つかりました。 ×(2)標準出力から読み込んだ ======> ○ (2)標準入力から読み込んだ と読み替えて下さい。すみませんでした。
>>294 >>317 つまり、画像形式を調べて操作しなさいって宿題?
それなのに画像フォーマットの指定なし?
今までの回答からして、絶対に課題の内容を自分補間してる気がするが…
画像形式 BMPでRGB形式のみ(パレット、モノクロ不可)
RGB情報は加工なし(BGRの順で入ってるから、必要なら自分で反転する)
324 :
323 :2008/05/09(金) 02:43:09
#include <stdio.h> #include <stdlib.h> #define IMAGE_WIDTH (256) #define IMAGE_HEIGHT (256) typedef struct _BGR { unsigned char bgr[3]; } BGR;
325 :
323 :2008/05/09(金) 02:43:29
int main( int argc, char* argv[] ) { BGR pixel[ IMAGE_HEIGHT ][ IMAGE_WIDTH ]; unsigned int offset, size; unsigned char* header; FILE* fp; fp = fopen( "file1.bmp", "rb" ); // ヘッダーの10bytes目にピクセル情報までのオフセットがある fseek( fp, 10, SEEK_SET ); fread( &offset, sizeof(unsigned int), 1, fp ); // ヘッダーの34bytes目にピクセル情報サイズがある fseek( fp, 34, SEEK_SET ); fread( &size, sizeof(unsigned int), 1, fp ); // ヘッダーを作成 header = (unsigned char*)malloc( offset ); fseek( fp, 0, SEEK_SET ); fread( header, offset, 1, fp ); // BGR値取得 fseek( fp, offset, SEEK_SET ); fread( pixel, size, 1, fp ); fclose( fp ); // 同じファイルを作成 fp = fopen( "file2.bmp", "wb" ); fwrite( header, offset, 1, fp ); fwrite( pixel, size, 1, fp ); fclose( fp ); free( header ); return 1; }
複数回に渡って書き込むくらいなら素直にうpろだ使った方が
追加条件が抜けてました(次ページにまたがっていたのを見落としてました) ※標準入力からは与える行の文字数は最大で256文字で、行数は最大で10000行まで対応すること(原文まま)
>>308 long doubleで何とかならないか?
すみません。トリップの使い方が間違ってましたようです
332 :
294 :2008/05/09(金) 07:37:22
333 :
sage :2008/05/09(金) 11:10:50
[1] 授業単元: C言語 [2] 問題文(含コード&リンク):次の間違えを正しくしなさい char name1[] = “Jonathon”; char name2[5] = “Mark”; name2 = name1; puts(name2); [3] 環境 [4] 期限: 明日くらい [5] その他の制限: name2をtempに一度入れてからやるのかなーって思ったんですけどエラーがでてさっぱりです。 間違えは1個だけでないかもしれないのでよくわかりません。どなたかお願いします
>>333 最初の設問は?
間違えを直すにしても、何をしたいか(条件)位は書こうや
それによってどう直すか違ってくるし
単にエラー取りたいなら
char *name1 = "Jonathon";
char *name2 = "Mark";
name2 = name1;
puts(name2);
変数をポインタにしとけで済む
>>333 “ → "
” → "
配列への代入はできないので、name2 = name1; はダメ(配列とポインタは違う)
char name2[5] = "Mark"; を、 char *name2 = "Mark"; にして、name2 = name1; ならできる
336 :
333 :2008/05/09(金) 11:52:22
char (*name1)[] = “Program language C is also”; char (*name2)[8] = “moving.”; という方法もあるな てか将来のCコンパイラでは、上のように解釈されて エラーにならないようにして欲しいな
339 :
デフォルトの名無しさん :2008/05/09(金) 13:24:52
>>327 ありがとうございました!後は自分で頑張ってみます!
【質問テンプレ】
[1] 授業単元:グラフ理論
[2] 問題文:
http://www32.ocn.ne.jp/~graph_puzzle/1no1.htm ここのサイトにあるハーベル・ハキミの定理を利用して
与えられたグラフ情報(数列情報?)がグラフ的であるかどうかを
しらべるプログラムを作って欲しいです。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名:・・・、ボーランド?bcpad使ってます
[3.3] 言語:どちらでも可
[4] 期限:無期限ですけど、できるだけ早い方がうれしいです。12日月曜とか
[5] その他の制限:無制限です、自由に作ってください
プログラミングできる皆さんのことですから、
定理とかみたいな数理的内容に関しては
サイトみればすぐに分かると思いますけど、
定理関係とかで何かあれば質問に答えます。
申し訳ありませんが、宜しくお願いします。
>>340 argv[1]やargv[3]は文字列。
strlen()は文字列の長さを測る。
そしてaは文字列ではなくてint。だからstrlen(a)は間違い。
(strlen(a) > 1000)ではなくて、(a > 1000)だろう。
switch(argv[2])が間違い。
文字列(charへのポインタ)を渡すのは間違い。
case "mul":などと書くのもコンパイルできない。
strcmp()を使えと書いてあるので素直にそちらを使う。
if (strcmp(argv[2], "add") == 0) {
printf("%d + %d = %d\n", a, b, a + b);
} else if (strcmp(argv[2], "sub") == 0) {
printf("%d - %d = %d\n", a, b, a - b);
} else if (strcmp(argv[2], "mul") == 0) {
printf("%d * %d = %d\n", a, b, a * b);
} else if (strcmp(argv[2], "div") == 0) {
printf("%d / %d = %d\n", a, b, a / b);
}
で充分。
おっと16進が抜けてた。 if (strcmp(argv[2], "add") == 0) { printf("%d + %d = %d %x\n", a, b, a + b, a + b); } else if (strcmp(argv[2], "sub") == 0) { printf("%d - %d = %d %x\n", a, b, a - b, a - b); } else if (strcmp(argv[2], "mul") == 0) { printf("%d * %d = %d %x\n", a, b, a * b, a * b); } else if (strcmp(argv[2], "div") == 0) { printf("%d / %d = %d %x\n", a, b, a / b, a / b); }
347 :
340 :2008/05/09(金) 15:26:03
無事にできました。 ありがとうございます。ほんとうに助かりました
本当?
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):5欠けるマスにランダムに配布される1〜25の数字をまず行で ソートし、次に列でソートする。左上が小さい数で、右下が大きい数になるようにする。 [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] 言語: C [4] 期限: (2008年5月11日まで] [5] その他の制限:fopenを使用する
>>350 $ ./a.out aabaaba
2
aaaaa
となったが、ちょっと直せばこれでよさそうだな。
352 :
デフォルトの名無しさん :2008/05/09(金) 20:23:59
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 区切り文字で区切られたテキスト形式のファイルを与えると、XML形式のファイルをはき出すプログラムを作りなさい。 [3] 環境:Windows XP、C言語 [4] 期限:なるたけ早く [5] その他の制限: 最重要項目「決してGPL感染しないこと」「完全に著作権フリーであること」 1) 区切り文字は「,」を標準とする。 2) オプション指定等で区切り文字を空白文字、TAB文字、「;」等に変更できるようにすること。 3) 変換元ファイルの一行目は項目名として扱う。各要素のタグ名として使用すること。 4) 1行を1レコードと扱う。1レコードは<RECORD></RECORD>タグで囲むこと。 5) 変換元のファイル名をルートタグとして使う事。XC200211.CSVならば<XC200211.CSV></XC200211.CSV>で囲む。 6) 各要素の属性値を設定するだけで完成するXMLスキーマファイルを同時に出力すること。 番外) XML形式のファイルをCSV形式に直してはき出すプログラムも作ってよい。 難しすぎて手におえないのでよろしくお願いします><;
>>349 テキストファイルを読み込むってことだよね?
5欠けるって5x5ってことだよね?
つまり↓
3 5 12 24 7
19 18 20 9 8
1 21 2 11 15
23 6 13 17 4
22 25 10 14 16
まず行
3 5 7 12 24
8 9 18 19 20
1 2 11 15 21
・・・
で列
1 2 7 12 4
3 5 11・・・
とかになるよ?
>>350 zxzxcvcvbnbnで
9
zxz
となる…。
356 :
355 :2008/05/09(金) 20:41:16
ごめん取り消しすんまそw俺の意味不明><
>>354 1 2 3 4 5
6 7 …
とするにはどうしたらいいんでしょうか?
359 :
657 :2008/05/09(金) 21:20:41
>>350 恥ずかしながらソースを読んで理解するまで一時間かかったw
あなたの知性に敬意を表したい。この問題、解けないと思ってた。
>>358 ソートする際に行だの列だの分けず5x5とも考えず、25個の数字だと考えれば簡単
だけど「まず行、次に列」っていう問題文なんでしょ?
だとするなら俺にはちょっと思い浮かばない
362 :
デフォルトの名無しさん :2008/05/09(金) 22:03:18
出来ないよ。入力= abcdedcba これは解ける問題ではないだろ。 10万文字は絶対無理。 出力 0 abcdedcba
363 :
デフォルトの名無しさん :2008/05/09(金) 22:06:34
すまん間違えました 検証し直してきます
364 :
350 :2008/05/09(金) 22:20:53
文字列 : aybaddab
>>90 の実行結果
result=2
>>364 の実行結果
4
adda
$ ./a.out xbadczzcdab 1 badczzcdab $ ./a.out azxbadczzcdab 9 azza これもだな。
368 :
デフォルトの名無しさん :2008/05/09(金) 22:45:54
10万文字の、最大回文の抽出が出来るっていう人は、抽出法の概要書いてくれないですか? できる方法が全く思いつきませんが。
369 :
350 :2008/05/09(金) 22:58:52
370 :
デフォルトの名無しさん :2008/05/09(金) 23:08:12
aabcaaは一個のはずなのに2つになります…
371 :
350 :2008/05/09(金) 23:29:26
修正はしたんですが、やっぱ
>>90 氏の方がはやいすね
372 :
デフォルトの名無しさん :2008/05/09(金) 23:32:33
速度は、初めのやつでも10万文字直ぐに返却帰ってきますけど… 間違えが戻ります
>>168 何文字でも
回文になるには
文字数が偶数の時・・各文字は偶数個。
文字数が奇数の時・・奇数文字数は一種、それ以外は偶個。
なので奇数個の文字が複数有る場合、その数だけ取り除いた組み合わせがある。
奇数個の文字がある場合はそれを中心に置き
偶数個の文字を半分にし並びを発生してミラーするだけ。組み合わせは簡単にできるしそれほど難解ではないと思うけどなぁ。
374 :
デフォルトの名無しさん :2008/05/10(土) 00:16:10
出題は、回文生成方法では無いんですよ 10万文字の文字列が与えられたとき、そこから最小何文字取り除くと回文になるかです。
この問題はあんまりハマんないほうがいいと思うよ。
C行為とは何か?
>368 ペア数、残文字列は以下の様になる。 0 azxbadczzcdab 1 zxbadczzcd 2 xbadcz 2 czzc 3 zz --> 4 2 zz 1 xbadcz 1 adczzcda 2 dczzcd 3 czzc 4 zz --> 5 <---これが最大ペア数 3 zz --> 4 上記より、最大ペア数は5(5*2文字分) よって削除文字の最小数は、len("azxbadczzcdab") - 5*2 = 4
>>368 説明するのが面倒だからキーワードだけ.検索すれば大量に引っかかるはず.
与えられた文字列 s と,s を反転した文字列 r を考えると,
最長回文は s と r の最長共通部分列(longest common subsequence)で求まる.
あとは longest common subsequence を高速に解くアルゴリズムを使えばいい.
>>380 Hunt-Szymanski は O((r+n) log n) なので,
たとえば s = "aaaaaa....aab" みたいな場合に非常に遅い.
対応するにはヒューリスティクスを入れるか,
Hirschberg などとカップリングすることになる.
まあランダムインプットを仮定してよいならそれでも十分.
ただし 380 の実装では,求める必要のない LCS そのものを計算しており,
LCS の長さだけが欲しい場合には空間使用量を大幅に減らせる.
あと,入力が有限のアルファベットなので map を使う必要もない.
それくらいを直すと次のようになる.n = 100000 でもそれなりの時間で求まる.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6504.cpp
384 :
デフォルトの名無しさん :2008/05/10(土) 03:07:51
最長の一致部分列求めたって駄目だろ a*b*c*d*e***e*d*c*b*a として、*には反転したものが一致する部分列を持たないように入れる。 しかし、*を取り除くことで最低でも、abcdeを含む回文が作れる
385 :
デフォルトの名無しさん :2008/05/10(土) 03:17:16
反転したものと最長一致した部分列を含まないものが最長回文になることもあるだろ。
まぁなんだ?あれだ お前ら仕事しろと
話についていけなくて煽るぐらいしかできませんw
>>384 最長共通部分列を誤解してるんじゃね?
a*b*c*d*e***e*d*c*b*a を反転して
a*b*c*d*e***e*d*c*b*a としたら、
abcdeedcba は少なくとも共通部分列。
>>385 具体例を
>>358 ちなみにだけど、
>左上が小さい数で、右下が大きい数
としか解の制限がないなら行、列の順にソートするだけでも満たせる
1 2 3 4 5
6 7・・・
ってのはむり
1・・・・
・・・・25
にはなる
>>389 それはfopenを使用する場合どうかけばいいんでしょうか
メイン { 整数型二次元配列[5][5]宣言; ファイルポインタ宣言; 読み込みファイルオープン; ファイルから読み込みループ; 行の昇順ソート; 列の昇順ソート; 出力ループ; ファイルクローズ; リターンゼロ; }
392 :
デフォルトの名無しさん :2008/05/10(土) 17:36:17
美しく決めたじゃん 丸投げ
>>392 > 各個人のホームページ(目次ページ)から次のような名前でリンクを張ること
ホームページの場所と編集方法(アカウント)を教えてくんろ
395 :
392 :2008/05/10(土) 18:49:16
すいません丸投げすぎました。 信号のプログラムとその信号を読み込み相関処理を行うプログラムについて教えてください。
>>359 (空白)にこれぶっ込めばおk。
fgets(name, 255, stdin);
i = 0; do{}while(name[spaze_index = i++] != ' ');
397 :
359 :2008/05/10(土) 19:27:39
>>396 実行結果確認しました。
助かりましたありがとうございますm(__)m 。
>>374 だから奇数個が一つになるようにしたら回文になるっつうことだよ。そんなに面倒?
コードで示そうぜ。プログラマならな。
402 :
デフォルトの名無しさん :2008/05/10(土) 21:26:59
[1] 授業単元: 関数や配列とか [2] 問題文(含コード&リンク):() 入力した5つの整数の最大値を求める関数をつくれ [3] 環境 [3.1] OS: (Windows/Linux/等々) win [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc 3.4 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 特になし [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 配列を使用すること お願いします。
>>402 int max_n(const int *a, int n) {
int r = *a;
while(a++, --n)
r = (*a > r) ? *a : r;
return r;
}
>>402 // 引数は配列と配列数
int GetMaxInt(int array[], int num)
{
int max = 0, i = 0;
for(i = 0; i < num; i++){
if(i == 0)
max = array[i];
else{
if(array[i] > max)
max = array[i];
}
}
}
アドレスとかわからなかったら値渡し
405 :
404 :2008/05/10(土) 21:46:42
return max; 忘れてた
[1] 授業単元:分からない。行列の積。 [2] 問題文(含コード&リンク):三行三列の行列の積を求めるプログラムを作れ。 [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: VisualBasic2005 [3.3] 言語: C++ [4] 期限: 5/12 13:00まで [5] その他の制限: for型繰り返し?を用いる。 お願いします。 C言語があまり理解できてないので、授業単元と[5]の欄が曖昧になっています。すいません。
407 :
デフォルトの名無しさん :2008/05/10(土) 23:29:48
>>406 typedef struct _MAT3 {
float m[9];
}MAT3;
MAT3 Matrix3multiply( MAT3 mat0, MAT3 mat1 )
{
MAT3 result;
result.m[0] = mat0.m[0] * mat1.m[0] + mat0.m[1] * mat1.m[3] + mat0.m[2] * mat1.m[6];
result.m[1] = mat0.m[0] * mat1.m[1] + mat0.m[1] * mat1.m[4] + mat0.m[2] * mat1.m[7];
result.m[2] = mat0.m[0] * mat1.m[2] + mat0.m[1] * mat1.m[5] + mat0.m[2] * mat1.m[8];
result.m[3] = mat0.m[3] * mat1.m[0] + mat0.m[4] * mat1.m[3] + mat0.m[5] * mat1.m[6];
result.m[4] = mat0.m[3] * mat1.m[1] + mat0.m[4] * mat1.m[4] + mat0.m[5] * mat1.m[7];
result.m[5] = mat0.m[3] * mat1.m[2] + mat0.m[4] * mat1.m[5] + mat0.m[5] * mat1.m[8];
result.m[6] = mat0.m[6] * mat1.m[0] + mat0.m[7] * mat1.m[3] + mat0.m[8] * mat1.m[6];
result.m[7] = mat0.m[6] * mat1.m[1] + mat0.m[7] * mat1.m[4] + mat0.m[8] * mat1.m[7];
result.m[8] = mat0.m[6] * mat1.m[2] + mat0.m[7] * mat1.m[5] + mat0.m[8] * mat1.m[8];
return result;
}
>>406 #include<iostream>
using namespace std;
const int cNum
int main()
{
int NumArray[cNum][cNum]={{0,0,0},{0,0,0}};
int result=1;
for(int i=0;i<cNum;i++){
for(int k=0;k<cNum;k++){
cout << "数字入力" << i+1 << "," << k+1 << ":";
cin >> NumArray[i][k];
}
}
for(int i=0;i<cNum;i++){
for(int k=0;k<cNum;k++){
result*=NumArray[i][k];
}
}
cout << result << endl;
return(0);
}
411 :
410 :2008/05/11(日) 00:16:09
4行目セミコロン忘れ コンパイルしてないのがバレる
412 :
410 :2008/05/11(日) 00:17:21
あー const int cNum=3; ねorz
>>406 #include<stdio.h>
void product(double c[][3], const double a[][3], const double b[][3])
{
int i, j, k;
for(i = 0; i < 3; i ++) {
for(j = 0; j < 3; j ++) {
double t = 0;
for(k = 0; k < 3; k ++)
t += a[i][k] * b[k][j];
c[i][j] = t;
}
}
}
int main()
{
static const double a[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, };
static const double b[3][3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }, };
double c[3][3];
int i, j;
product(c, a, b);
for(i = 0; i < 3; i ++ ) {
for(j = 0; j < 3; j ++)
printf("%f ", c[i][j]);
printf("\n");
}
}
>>409 [課題1]
#include <stdio.h>
int main(){
int a,b;
puts("数字を入力して下さい。");
scanf("%d", &a);
puts("もうひとつ数字を入力して下さい。");
scanf("%d", &b);
printf("%dから%dまでの合計値は、%dです。\n", a, b, ((a+b)*(b-a+1))/2);
getchar();getchar();
}
>>414 getchar();getchar();は消してちょ
>>407 void search(const int a[], int n, int key)
{
int i;
for ( i=0; i<n; i++ ) {
if (a[i] == key) {
printf("%d番目に見つかりました。\n", i+1);
}
}
}
>>407 下の1行を、
printf("%dは%d番目にあります。\n", ky, idx + 1);
以下に変更。
do {
int next = search(x+idx+1, nx-idx-1, ky);
printf("%dは%d番目にあります。\n", ky, idx + 1);
idx = (next != -1) ? idx+1+next : -1;
} while(idx != -1);
>>409 [課題2]
#include <stdio.h>
int main(){
int a,i;
puts("数字を入力して下さい。");
scanf("%d", &a);
printf("入力した数字%dの約数は以下の通りです。\n",a);
for(i=a; i>0; i--)if(a%i == 0) printf("%d\n", i);
}
>>409 [課題3]
#include <stdio.h>
int main(){
char buf[1000], s, d;
int a,i;
puts("文字列を入力して下さい。");
fgets(buf, 1000, stdin);
puts("置換したい文字を入力して下さい。");
s = getchar();getchar();
puts("置換後の文字を入力して下さい。");
d = getchar();
puts("置換結果を示します。");
for(i=0; buf[i] != '\0'; i++)
if(buf[i] == s) putchar(d); else putchar(buf[i]);
}
>>399 丸投げされたらそりゃ面倒(正直興味ないからというのも手伝ってしまう)
>>400 >>401 うーん、文字種は alpha (128種くらいにしてみたけど)
struct CIRC_NOTI_LETTER
{
long alpha_count[ 128 ]; // 文字の出現をカウント
int circ_strings[128]; // 使用文字リスト列(alpha_count)
CIRC_NOTI_LETTER () {}; // _count など初期化
int setup(char* src_strings); // 文字読み込んで _count に
int set_tagle(int top_level); // リスト作成・回帰で手抜きする?
};
みたいな。。long 取ってるから 10万文字数とかじゃなくlong数×文字種みたいな感じで。文字の並びはこちらで作り替えて Ok ということで後はいかようにも加工できるけど・・・マジコード書いて欲しいの?。
すいません
>>352 を11日中にお願いします。><;
受け取りに来たら誰もやってくれてなくて泣きそうです><;
>>421 ここって、カンニングよろしく丸投げコーナーなのか?
それにあなた社会人になるまえにおちこぼれじゃん(問題解決能力ゼロじゃないの)
自分で取り組んでどうしてもつまずくところを Help なら0狩るけど。
っていうか中国では入試の代理屋が成り立つ位だから、質問一件解決に5千円〜1万位で請け負う商売成り立つかもしれないな。
>完全に著作権フリーであること これがちょっと難しくて
>>421 丸投げしておいて丸一日以上放置して「受け取りに来た」なんて、虫がよすぎる。
そうだな、俺が回答したらその時点で著作権が俺に発生してしまうからフリーにはならないな。
完全に著作権フリーであることって 実質、標準ライブラリのみってことになんの? ライセンス関係は全然知らないから、よく分からんが。
>>426 まず日本では無理。
著作者人格権を行使しないと契約を交わせば擬似的にフリーになるが、
その契約をどうやって
>>352 と交わすのかが問題になるな
>>421 せめてサンプルくらい提示してくれ。できれば実データがいいな。
狼煙で
>>421 仕事のにおいがプンプンするがアドバイスだけしとく
5)はXMLの規約違反のハズ
6)込みで11日中は無理
番外)はXSLTで解決しろ
あと「完全に著作権フリーであること」なんだから2chに丸投げした時点でダメ
お前自身でやりなさい
>>420 非常に書いて欲しいです。
その方法で本当に解けるか疑っているというのと、
単に良いコードを見たいという理由からです。
>>421 顔文字がむかつくのと最重要項目が意味不明
みんな、352, 421を叩きすぎ ヒントくらいあげて助けてあげれば良いじゃんw おれはXMLに付いては素人だから、全部を作ってあげるには時間がかかるが ファイル操作やバッファ作成、バッファをファイルにする等は教えてあげれる そんな問題を丸投げするのに、XML形式についても何も知りませんって訳じゃないだろ?<421 自分で空関数でも言いから設計して、その処理パーツ単位で分らない事や内容を聞けばいいんじゃね? 設計なんて初心者ならスマートじゃなくとも良いだろ それすら分らないレベルなら…大人しく諦めるしかね…
321もお願いします。
クレクレ厨がひどいな
どさくさにまぎれてw
437 :
409 :2008/05/11(日) 02:38:51
>>414 ,415,418,419
ありがとうございました
この流れで催促じみた事を言って恐縮ですが、4,5の方もお分かりの方がおられましたら、
是非よろしくお願いしますm(_ _)m
>>352 の問題のテクニカルな難所は、CSVの第一行を読み込んで、項目文字列配列に
分解するところだろな。何項目あるか事前にわからない点が腕の見せ所。
XMLファイル作成は、これが出来たら簡単だと思う。
一行毎にCSVを項目に分解してフォーマットにしたがって出力するだけ。
<?XML version="1.5">
<入力ファイル名>
<record>
........
</record>
<record>
<項目1> CSVのn行目の第一項目</項目1>
<項目2> CSVのn行目の第二項目</項目2>
...................................
</record>
<record>
................................
<;/record>
</入力ファイル名>
てな感じのファイル作ればいいんだと思う(よ).
スキーマXMLファイルも多分、簡単
読み込んだ項目を指定フォーマットで順次書き下すだけ。
番外は、XMLファイルを読み込んで上のフォーマットになっているかチェックする処理が
必須だから、格段に難しくなるよな気がする。
>>422 お叱りはごもっともですが、ここは実質的に丸投げスレだと思います><;
>>423-427 法的にはあんまり厳密でなくてもいいです。ただ、著作権表示なしに流用できて、
仮にちょっとだけお小遣い程度のお金もらう事になっても怒られない程度なら十分です。
>>428 それはちょっと難しいです。項目数が1桁〜30程度、サイズが数KBから数MB程度の
ファイルが処理できれば大体おkなんですが。
""で囲まれる文字列やASCII文字Shift-JIS以外の文字やなんかは考慮する必要は無いです。
>>430 >5)はXMLの規約違反のハズ
そうなんですか?でも、そうしないと多分受け取ってもらえません。><;
>番外)はXSLTで解決しろ
ごめんなさい、敷居が高いです。
>>432 ごめんなさい、こっちに変えます。( >ω<)
>>433 >そんな問題を丸投げするのに、XML形式についても何も知りませんって訳じゃないだろ?<421
自慢じゃないですがXMLさっぱりです。( >ω<)
<>で囲んだりしてhtmlに似てるなーくらいしかわかりません( >ω<)
>>438 少し簡単そうに見えてきました。
>>440 それじゃ
仮にココにソースがアップされても、それが正しいか自分で分らないじゃんw
…まあ、そんなんじゃアップはないと思いなよ
>>439 自分が請けた仕事だったら、最後まで自分の責任でやれ
それが誠意というものだ。
なお、CはUnix環境寄りの言語であるのに対しXMLはどち
らかというとWindows寄りだから、WSHなどの処理系でも
ライブラリライセンスに抵触しないで作れると思う。
Windows環境だったらCプログラムよりかWSHのほうが
遥かに使い勝手がいいと思う。
ここよりかWSH関連のスレで、質問したほうが早いかも。
443 :
デフォルトの名無しさん :2008/05/11(日) 03:12:21
>>352 日本だから「完全に著作権フリーであること」は無理。
>>441 多分、それらしく動いていれば大丈夫だと思います。( >ω<)
>>442 ( >ω<) あい;;
でも、仕事じゃなくて宿題です。
宿題ならGPLに感染してても、完全に著作権フリーじゃなくてもいいじゃん
>>409 課題4
#include<stdio.h>
#include<string.h>
void mygets(char *buf, int size)
{
char *p;
if(fgets(buf, size, stdin)) {
if((p = strchr(buf, '\n')))
*p = '\0';
} else
*buf = '\0';
}
int main()
{
char str[100], s[100], r[100], *p;
printf("文字列を入力して下さい。\n");
mygets(str, sizeof(str));
printf("置換したい文字列を入力して下さい。\n");
mygets(s, sizeof(s));
printf("置換後の文字列を入力して下さい。\n");
mygets(r, sizeof(r));
printf("置換結果を示します。\n");
if((p = strstr(str, s)))
printf("%.*s%s%s\n", p-str, str, r, p+strlen(s));
else
printf("%s\n", str);
return 0;
}
顔文字がむかつくからぜってーやらねー
>>439 あまりのことにスルーしそうになったが、
宿題を丸投げするスレであって仕事を丸投げする下請け業者じゃないぞ、ここは
ところで誰かが解答した後に「>>xxxだけどやっぱGPLね」と言われたら終わりの気がする
このスレID出ないし。
>>409 課題5
#include <stdio.h>
#include <stdlib.h>
int less_int(const int *x, const int *y)
{
return *x < *y;
}
int grater_int(const int *x, const int *y)
{
return *x > *y;
}
int main()
{
int data[8] = {1,6,10,15,20,15,5,9};
int type, i;
printf("並び替え方法を指定して下さい(1. 昇順2.降順)\n");
if(scanf("%d", &type) != 1 || type < 1 || type > 2)
return 1;
qsort(data, 8, sizeof(int), (type==1 ? grater_int : less_int));
printf("並び替えた数値を一覧で出力します。\n");
for(i = 0; i < 8; i ++)
printf("%d\n", data[i]);
return 0;
}
450 :
449 :2008/05/11(日) 03:44:30
×grater_int ○greater_int 動作に変わりないです。
>>431 その気になって問題見直した。誤解もありですが書いてみたっす。
リストそれなりに長い。ここは整形崩れるからなんだけど
struct AL_CIRC
{
int hf_len; // 見つかった文字数
int center_c; // 中心文字があればそれを...
char circ_res[50002]; // 10万文字の半分
long str_len;
char* circ_src;
// 回文元の文字列
AL_CIRC(char* s)
{
circ_src = s;
str_len = strlen(s);
};
int search(int in); // サーチしては表示
int res_print(); // それなりに結果を表示やつ
};
// つづく
// 回文検索 int AL_CIRC :: search(int in) { hf_len = 0; // 回文の文字数 center_c = 0; // 中心の文字があれば... if(in >= str_len - 1) // 検索が終端にキタ return -1; // 終わり int i; int out = in + 1; // 次の検索開始位置 int lastp = str_len - 1; // 回文となる終わり側の位置 // 続く
for(i = in; i < lastp - 1; i++) // 両側から一致する文字を... { int bkp = lastp; // 跳んだ時の為に... for(; i < lastp && circ_src[i] != circ_src[lastp]; lastp--) ; if(i < lastp) // 一致を見つけたら { circ_res[hf_len++] = circ_src[i]; // 文字を覚えて if(hf_len == 0) // 次の位置を覚える out = i + 1; } else lastp = bkp; // 跳んだら終わり側をモトイする } //つづく
if(hf_len) // 回文リストができたら表示 { if(i < lastp) // 中心の一文字がある center_c = circ_src[i]; res_print(); // それなりに表示 } return out; // 次の位置を返す } // 結果をそれなりに表示 int AL_CIRC :: res_print() { if(hf_len == 0) // 見つからなかった..終わり return 0; int i; for(i = 0; i < hf_len; i++) fputc(circ_res[i], stdout); if(center_c) fputc(center_c, stdout); for(i = hf_len - 1; i >= 0; i--) fputc(circ_res[i], stdout); fputc('¥n', stdout); return hf_len * 2 + (center_c ? 1 : 0); // 回文の文字数を返す }
456 :
409 :2008/05/11(日) 03:52:46
>>446 ,449
ありがとうございましたm(_ _)m
「つづく」くらいならうpろだ使え
だからそういう場合はうpロダを使ってくれと・・・
// ラスト // 引数の文字を回文できるものすべてリストする int main(int argc, char* argv[]) { for(int k = 1; k < argc; k++) { AL_CIRC drv(argv[k]); int i = 0; while((i = drv.search(i)) > 0) ; } }
すまん。。
461 :
449 :2008/05/11(日) 04:08:51
>>452 >test aaba
aabaa ←?
aba
名前がそのまま残ってた・・・
>>444 嘘言ってもダメ
お前の書き込みからXMLの知識も十分あるのがわかるし
仕様がしっかりしすぎてる
あきらかに業務レベルの要求仕様なんだよ
以降スルーな
宿題なら著作権がどーのいわないしね
>>463 お金云々は仮の話ですし、この程度のプログラム単体でお金もらえるわけが無いじゃないですか。
学生でよくわかりませんがきっとそうだと思います( >ω<)
トーマスの会社で雇ってもらえw
>>461 おお、ねむたで作ったからまともに動くかなんだけど...それ lastp-- いれてくれ。簡単なソースだからわかるっしょ。よろしく。
>>451 さん
どうもありがとうございました。
これほどの短いコードにほぼすべての仕様が詰め込まれて
いて感服しました。(講師は1000行位になる言ってました)
学校と同じ処理系ではありませんが、早速コンパイルしてやってみました。
ただ、ちょっと結果がちがった感じです。幾つかの処理例も渡されてたんで
すが、?が出力される(そのままプリントされない)行は、もう少し少なく、
そのまま出力されない行は、アルファベットを全く含まず全部?に置き換わって
ました。明日、学校でもう一度確かめてみます。
>>451 さんのコードを参考にして、自分でも少しやってみようと思いますが
行き詰まったらまたここで相談させて頂くかも知れません。
471 :
デフォルトの名無しさん :2008/05/11(日) 12:59:02
数列の最大値を計算するアルゴリズム 数列0,3,1,4,7,2,8 お願いします。
#include <stdio.h> int main(void){puts("8");return 0;}
>>467 手元のファイル使って動作確認しました。概ね大丈夫なようです。
ありがとうございました、これを元に後は自分でやります( >ω<)
477 :
476 :2008/05/11(日) 15:43:00
少々訂正。置換対象行最下位タイのカウント部分は for(i--; i >= 0; i--, lep_num++) if(line_info[i].alpha_count < n) break; に直して。比較対象が自身とも比較しちゃってた。 あと変数名 lep_num は rep_num (replace) の打ち間違い…。
480 :
476 :2008/05/11(日) 16:37:13
連投で失礼。もう一ケ所修正を。 「置換する行数」と「最下位タイのカウント」のとこ(ソート後から/*** 1,2 ***/の前まで)は if(alpha_line_total == 0) lep_num = 0; else{ ... } としてアルファベット行が0の時は実行しないようにしといて下さい。
481 :
側近中の側近 ◆0351148456 :2008/05/11(日) 17:05:24
>>402 (っ´▽`)っ
int getMaxInt(int *a, int count)
{
int *b;
int max;
b = (int *)malloc(sizeof(a[0]) * count);
memcpy(b, a, sizeof(a[0]) * count);
qsort(b, count, sizeof(b[0]), *cmpInt);
max = b[count - 1];
free(b);
return max;
}
int cmpInt(const void *elem1, const void *elem2){
return *(int *)elem1 - *(int *)elem2;
}
482 :
657 :2008/05/11(日) 18:07:29
>>482 制限というか、作りかたがそのまま書いてあるな。
>>483 あまり良い出題の仕方じゃないな。
ある部分だけがっちり固めて、中では自由にやれというのは。
意外に難しく初心者向けじゃなかったりする。(中上級者向け)
初学者向けの問題は、コードの一部の行を穴埋めさせて、
意味が通り、題意を満たすようにしろというような問題のほうが良い。
後ろに選択枝を提示しておくのは当然。
485 :
482 :2008/05/11(日) 18:31:22
すいません期限書き忘れてましたm(__)m 5月14日までにお願いします。
>>482 空白部分のみ
if(!fgets(name, sizeof(name), stdin))
return 1;
do sscanf(name, "%s%n", tmp, &space_index); while(0);
name[strcspn(name, "\n")] = '\0';
memmove(name, name + space_index + 1, sizeof(name) - space_index - 1);
strcat(name, " ");
strcat(name, tmp);
>>488 PCが出来るからと言って、貴方に3Dポリゴンを作って動かすことが出来ますか?
>>487 #include<stdio.h>
void lneq(int a, int b, int p, int c, int d, int q) {
int D=a*d-b*c, D1=p*d-q*b, D2=a*q-c*p;
if(D)
printf("%.2f %.2f\n", (double)D1/D, (double)D2/D);
else {
if(!D1 && !D2) {
if(a || b || c || d)
puts("1");
else if(!p && !q)
puts("2");
else
puts("0");
}
else
puts("0");
}
}
int main() {
FILE *fp = fopen("data1.txt", "r");
int n, a, b, p, c, d, q;
if(!fp) return 1;
fscanf(fp, "%d", &n);
while(n--) {
fscanf(fp, "%d%d%d%d%d%d", &a, &b, &p, &c, &d, &q);
lneq(a, b, p, c, d, q);
}
fclose(fp);
return 0;
}
491 :
482 :2008/05/11(日) 19:26:50
>>486 実行結果確認しました。
ありがとうございます助かりましたm(__)m 。
>>489 じゃあ上手く組めるような説明を考えてきます
>>342 // Havel-Hakimi
bool is_graphic(int d[], int n) {
while (n > 0) {
sort(d, d+n);
int k = d[--n];
if (k < 0 || k > n)
return false;
for (int j = 0; j <= k; ++j)
d[n - j]--;
}
return true;
}
>>494 #include<stdio.h>
void show(const int a[][10])
{
int i, j;
for(i = 1; i <= 9; i ++) {
for(j = 1; j <= 9; j ++)
printf("%2d ", a[i][j]);
putchar('\n');
}
putchar('\n');
}
int main()
{
int a[10][10], i, j, w;
for(i = 1; i <= 9; i ++)
for(j = 1; j <= 9; j ++)
a[i][j] = i*j;
show(a);
for(i = 1; i < 10-i; i ++)
for(j = 1; j <= 9; j ++) {
w = a[i][j];
a[i][j] = a[10-i][j];
a[10-i][j] = w;
}
show(a);
}
>>462 ありがとうございます。
サンプルデータにあってそうなほうを
参考にさせて頂きます。(両方とも参考になりそうですが)
1〜100まで数えるまでに、3の倍数と3がつく数字のときはアホに 5の倍数と5がつく数字はナルシストになるプログラムを作れ
世界のナベヤツ
506 :
デフォルトの名無しさん :2008/05/12(月) 10:23:05
2次元配列変数dataの中身を表示し、dataの値の分布を1次元配列histに入れ、実行例の様に、histの各値や、その値に応じて#を表示するプログラム作成せよ。 histの各値は0で初期化すること 実行例 data 3 6 0 4 3 2 5 2 9 8 1 3 1 3 4 1 3 1 6 8 6 4 3 3 hist 0 # 1 1 #### 4 2 ## 2 3 ####### 7 4 ### 3 5 # 1 6 ### 3 7 0 8 ## 2 9 # 1
507 :
506の続き :2008/05/12(月) 10:25:42
int i, j; int data[4][6]={ { 3, 6, 0, 4, 3, 2 }, { 5, 2, 9, 8, 1, 3 }, { 1, 3, 4, 1, 3, 1 }, { 6, 8, 6, 4, 3, 3 } }; int hist[10]; for( j = 0; ****** ; j++ ){ ****** = 0; } printf("data\n"); for( ****** ; ****** ; j++ ){ for( ****** ; ****** ; i++ ){ printf("%2d", data[j][i]); } printf("\n"); } for( j = 0; j < 4; j++ ){ for( i = 0; i < 6; i++ ){ ******++; } } printf("\nhist\n"); for( j = 0; j < 10; j++ ){ printf("%d ", j ); for( i = 0; ****** ; i++ ){ printf("#"); } printf(" %d\n", ****** );
「○○の続き」ってするくらいならうpろだ使えって
それ以前に
>>1 読んで書き直し
int i, j; int data[4][6]={ { 3, 6, 0, 4, 3, 2 }, { 5, 2, 9, 8, 1, 3 }, { 1, 3, 4, 1, 3, 1 }, { 6, 8, 6, 4, 3, 3 } }; int hist[10]; for( j = 0; j < 10; j++ ){ hist[j] = 0; } printf("data\n"); for( j = 0; j < 6; j++ ){ for( i = 0; i < 4; i++ ){ printf("%2d", data[j][i]); } printf("\n"); } for( j = 0; j < 4; j++ ){ for( i = 0; i < 6; i++ ){ hist[data[i][j]]++; } } printf("\nhist\n"); for( j = 0; j < 10; j++ ){ printf("%d ", j ); for( i = 0; i < hist[i]; i++ ){ printf("#"); } printf(" %d\n", hist[i] ); }
int i, j; int data[4][6]={ { 3, 6, 0, 4, 3, 2 }, { 5, 2, 9, 8, 1, 3 }, { 1, 3, 4, 1, 3, 1 }, { 6, 8, 6, 4, 3, 3 } }; int hist[10]; for( j = 0; j < 10; j++ ){ hist[j] = 0; } printf("data\n"); for( j = 0; j < 4; j++ ){ for( i = 0; i < 6; i++ ){ printf("%2d", data[j][i]); } printf("\n"); } for( j = 0; j < 4; j++ ){ for( i = 0; i < 6; i++ ){ hist[data[j][i]]++; } } printf("\nhist\n"); for( j = 0; j < 10; j++ ){ printf("%d ", j ); for( i = 0; i < hist[i]; i++ ){ printf("#"); } printf(" %d\n", hist[i] ); }
511 :
デフォルトの名無しさん :2008/05/12(月) 11:16:38
[1] 授業単元:プログラミング演習 [2] 問題文:凸多角形の辺から一番遠い点を見つけ、その距離を求めるプログラムを作れ。距離とは最も近い辺までの距離である。 入力データ 多角形の頂点数と、各頂点の座標が反時計回りの順で与えられる。 [3.1] OS:(WindowsXP) [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:5/13
>>511 よく判らんな。「一番遠い点」とはなんだろ。
凸多角形内の、全ての辺から一番離れた点を求めると言うことなのかな? それだとかなり厄介そうだ。
多角形の頂点から求めるのでは意味が不明だし。
勿論、凸多角形外で求めようとしたら無限の彼方に発散するし。
点の集合が与えられるのなら何とでもなるのだけれどなぁ。
513 :
デフォルトの名無しさん :2008/05/12(月) 11:37:55
一番近い辺までの距離を距離と定義します。その距離が多角形内で一番大きい点を探すという事です。 例えば正方形なら対角線の交点で、距離は一辺の長さの半分です
これ数学寄りの問題だろ 公式か方針教えてくれ
三角形なら内心ってことか?
なんだ、多角形内か。最初にそれを書いてくれ。 で、そいつはどうやって見つければいい?
それを考えるのも含めて問題なんでしょ。 一撃で出るような式は、おそらく存在しない。
なるほど多角形に内接する円の半径が答えか
519 :
512 :2008/05/12(月) 12:00:33
式とかはないです。 アルゴリズムが思い浮かばなくて… 三角形なら内心ですね
角の二等分線の交点から求めてけばできるだろうけど、面倒だな。
521 :
デフォルトの名無しさん :2008/05/12(月) 12:08:18
凸であることをうまくつかえないかな? 反時計回りで与えられるみたいだし
522 :
506 :2008/05/12(月) 12:22:28
ちょっと考えても、長方形だと解が一つにならないし、 設問が間違ってそうだな。
524 :
デフォルトの名無しさん :2008/05/12(月) 15:51:46
#include<stdio.h> double f(double x) { double y; y=(((3.1*x-1.8)*x+5.7)*x+1.0)*x-6.2; return (y); } main() { double x,y; int i; for(i=-20;i<=20;i++){ x=0.5*i; y=f(x); printf("x=%7.3f y=%12.3f\n",x,y); } } このプログラムのyの値の総和を計算するプログラムを作れ。 これをだれかお願いします。
あ、距離だけでいいなら別に問題無いか。
多角形を構成する辺の上にそれぞれ1個ずつ点を 取っり、その点を通り、辺と直交する直線が 多角形の内部で交わるという制約条件のもとで それらの点と共通交点までの距離が最大なものを 見つけよという完全に応用数学の問題ですね。 数学的定式化を相当詰めないとCでコーディ ングする段階には全然行かないと思いまつ 大規模連立方程式解いたりするのは、既存ライブラリの 助けも必要でしょうから、学校の宿題で出して良い ような問題じゃありません。
>>526 要するに逆行列を求めよってだけでしょ?
多角形内の一番広い内角の二等分線上に解答となる点は存在するって事だけは分かるが 情けないことに数式が解けなくなってる orz
529 :
523 :2008/05/12(月) 16:38:32
× 一番広い ○ 一番狭い
多角形の内部の点pには、各辺までの距離を(垂線を下ろして長さを計る)決められる。 それらの距離の中で最も大きいものをd(p)と書く時d(p)が最大になるようなものはどこ? という問題と解釈するしかなさそう。 厳密に解くのはメンドイから、適当に点を選んで実際に計算してみればいいと思う。 多角形の場合、相似変換で縮小しても問題の本質は変わらないから、紙に書いて実測する のが一番早そう。もしかしたら、そういった点は無数にあって、曲線みたいな分布する かも知れない(あくまでも推測) コンピュータ向けの問題じゃないのかもしれない
>>531 その問題解釈はおかしくない?
非対称な三角形(すんごく尖った
三角形)だと、ある頂点の近くに、
求めるような点があるのだろうけど、
最大値は内部には無い。
(限りなくその頂点と底辺の距離に近
いものが無数にある)
d(p)=各辺までの距離の和(平均)
だろな。やっぱり。な
>>513
533 :
デフォルトの名無しさん :2008/05/12(月) 16:56:43
それじゃダメじゃん
534 :
524 :2008/05/12(月) 17:00:48
だれか頭のいい人お願いします。
>>524 #include<stdio.h>
double f(double x)
{
double y;
y=(((3.1*x-1.8)*x+5.7)*x+1.0)*x-6.2;
return (y);
}
main()
{
double x,y,y_sum=0;
int i;
for(i=-20;i<=20;i++){
x=0.5*i;
y_sum+=y=f(x);
printf("x=%7.3f y=%12.3f\n",x,y);
}
printf("y_sum=%12.3f\n",y_sum);
}
なんか問題出す前に日本語勉強しろって言いたくなるな。
538 :
デフォルトの名無しさん :2008/05/12(月) 17:15:25
多角形内部での最大値を求めるんだよ?
539 :
526 :2008/05/12(月) 17:42:05
訂正: 辺と直交する→削除 それらの点と共通交点までの距離が最大になるようなものを → それらの点と共通交点までの距離の和が 広義極小になるような各辺の点の取り方の全体の 中で共通交点までの距離の和が最大になる ような組み合わせを
与えられた凸多角形の頂点で相互の距離が最大な2組を求めるプログラム おねがいします。 多角形の頂点数と、各頂点の座標が反時計回りの順で与えられるとします。
なんで問題が変わってるんだよw
そっちは比較的簡単だな。
ひたすら|x1-x2|+|y1-y2|を求めて最大のものを選べばいいから簡単だな
544 :
デフォルトの名無しさん :2008/05/12(月) 19:00:11
パソコンからこの板みれる?
|x1-x2|^2+|y1-y2|^2だろ
546 :
511 :2008/05/12(月) 19:06:23
佐賀大学
551 :
生ハム :2008/05/12(月) 21:27:32
前スレで課題をお願いした者です。 作ってくださった方々本当にありがとうございました。 文字列を変換する問題で、正確に実行できたプログラムもありましたが、 題意(ポインタで文字列を定義)を満たしてなかったみたいなので、 もう一度お願いしてもいいでしょうか。前スレが見れないので・・
>>551 問題は覚えてるんだろ?
>>1 のテンプレにそってもう一度もう一度書くべし
[1] 授業単元:プログラミング演習 [2] 問題文:5個の整数型の値をキーボードからvector型の変数に読み込んで保存し、その保存された各データの合計を表示する [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名:gcc [3.3] 言語:C++ [4] 期限:2008年5月14日まで [5] その他の制限:なし vectorの使い方がよくわからないのですみませんがよろしくお願いします。
554 :
511 :2008/05/12(月) 22:22:02
[1] 授業単元:プログラミング1 [2] 問題文: int data[m]というm個のデータがある。 このm個のデータから3つ選ぶすべての組合せを求め、 その3つの数字の積を求めるプログラムを作れ。 例えば、m=5で data[0]=1 data[1]=2 data[2]=3 data[3]=4 data[4]=5 というデータが与えられているとする。3つ選ぶ組合せは5C3=10通りである。 data[0] * data[1] * data[2] =6 data[0] * data[1] * data[3] =8 ・ ・ ・ [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名:gcc [3.3] 言語:C [4] 期限:2008年5月13日まで [5] その他の制限:なし
>>551 自分で書き換えることも出来ないならそんな単位捨てた方がいい
>>554 そのmは事前に与えられた定数なの?
それとも標準入力なりからもらうことができる不定数なの?
>>553 #include <iostream>
#include <vector>
int main(void)
{
std::vector<int> v;
for( int i = 0; i < 5; ++i )
{
int n;
std::cin >> n;
v.push_back( n );
}
int sum = 0;
for( std::vector<int>::iterator it = v.begin(); it != v.end(); ++it )
{
sum += *it;
}
std::cout << sum << std::endl;
return 0;
}
>>554 for(i=0; i<m-2; i++)
for(j=i+1; j<m-1; j++)
for(k=j+1; k<m; k++)
printf("data[%d]*data[%d]*data[%d]=%d\n", i, j, k, data[i]*data[j]*data[k]);
>>391 って
#include <stdio.h>
#define gyou 5
#define retsu 5
main(){
int sort[gyou][retsu];
int tate[retsu];
int yoko[gyou];
int i,j;
FILE* fp;
for(j=0;j<tate;j++)
tate[j]=0;
fp=open("sort.txt","r");
for(i=0;i<gyou;i++)
{
for(j=0;j<retsu;j++)
fscanf(fp,"%d",&seiseki[i][j]);
}
fclose(fp);
return 0;
}
あとこれにどんなプログラムがたりないですかね?
561 :
511 :2008/05/12(月) 23:04:19
>>556 自分で入力して、その数だけ配列に自分でデータいれます
562 :
生ハム :2008/05/12(月) 23:07:20
[1] 授業単元:プログラミング演習
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6531.txt この文章をファイルとして読み込み,正しい英文に復号しファイルに出力する
プログラムを作成せよ(ファイル出力でも標準出力でもどちらでも構わない).
ただし,プログラムでポインタを用いて文字列を定義し,既存の文字列操作関数
(strxxx(),例えば,文字列長を返す関数 strlen(文字列))は使わずに,自分で作成すること.
文字の変換規則:単語の文字数だけJISコード表で表現すると、下にさがっている。
aはzへ、ofはqhへ、TheはWkhへ、という要領。数字・ピリオド・コンマはそのまま。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名:gcc
[3.3] 言語:C
[4] 期限: できるだけ早いと助かります(-o-;)
何度もすみません(><)以前の分は保存してますので、修正を試みましたが
中々うまくいきませんでした。ポインタを用いて文字列を定義に注意をお願いします。
[1] 授業単元:プログラミング演習 [2] 問題文:32bitのintの中でもっとも大きな,フィボナッチ数を求める関数を 作成しその数列がフィボナッチ数列の何番目にあたるのかを 同時に出力するプログラムを作成しなさい. [3.1] OS:Windows [3.2] コンパイラ名:cygwin [3.3] 言語:C [4] 期限:2008年5月14日まで [5] その他の制限:再帰関数を習ったので、再帰関数を使用するははず。 (特に問題文に指定はないが・・・) よろしくおねがいします。
フィボナッチで再帰は時間の無駄
効率が悪いと分かっていても、再帰に関する内容なら 使うのが条件になっている課題もあるかと。 まぁ、使う場合と使わない場合の両方を作って結果を出してみりゃ 一目瞭然だが。
568 :
デフォルトの名無しさん :2008/05/12(月) 23:47:27
「数列」がフィボナッチ数列の何番目にあたるのかってのがよく分からない。
569 :
565 :2008/05/12(月) 23:53:00
一応
「フィボナッチ数列を求める関数を,再帰関数として実現し,
その動作が確認できるプログラムとして作成しなさい.」
てのが前の課題なんですが、これはできました。
しかし
>>565 の課題のもっとも大きなフィボナッチ数を求める関数、
それが何番目にあたるのか?の作り方がわかりません・・・
570 :
デフォルトの名無しさん :2008/05/13(火) 00:04:29
>>566 ×:フィボナッチで
○:末尾再帰最適化をしない実装の言語では
フィボナッチ数求めるプログラムぐらいはさらっと書けるけど 32bitのintで表すことのできる数の範囲が分らない ('A`)
>>565 再帰関数を使ったら時間がかかりすぎるので、使わない版。
#include<stdio.h>
int main() {
int n, fib = 1, a = 1, t;
for(n = 2; fib > 0; n ++) {
t = fib + a;
a = fib;
fib = t;
}
printf("%d番目の%d\n", n-1, a);
return 0;
}
unsigned int と limits の UINT_MAX をうまく使うとか?
unsigned long longなら94個求められる。 -- #include <stdio.h> #include <stdbool.h> static unsigned long long fib(unsigned n) { if (n == 0) return 0; static unsigned long long a[94] = {0, 1, }; bool inRange = n < sizeof(a) / sizeof(* a); if (inRange && a[n] != 0) return a[n]; // if (fib(n - 1) > INT64_MAX) return UINT64_MAX; unsigned long long val = fib(n - 1) + fib(n - 2); if (inRange) a[n] = val; return val; } int main() { for (int n = 0; n <= 93; ++n) { // max fib with ulonglong printf("%d:%llu\n", n, fib(n)); } return 0; }
32bit 2^32 のintってのが前提
>>573 なんかずれてない?
46番じゃなく、45番の値がでるが
>>577 565じゃないが47番になったよ
かなりわからないので皆様の力をお貸し下さい。 ちょっと問題が特殊なので要約してます。 [1] 授業単元:プログラミングU [2] 問題文(含コード&リンク):ある文章において、アルファベット順に、1文字の単語は1つだけ後ろにずらし、 2文字の単語は2つだけ後ろにずらす…といった法則性で文字を置換したアルファベットのみの文章ファイルがある。 この文章をファイルとして読み込み,正しい英文に復号しファイルに出力するプログラムを作成せよ (ファイル出力でも標準出力でもどちらでも構わない)。ただし,プログラムでポインタを用いて文字列を定義し, 既存の文字列操作関数(strxxx(),例えば,文字列長を返す関数 strlen(文字列))は使わずに,自分で作成すること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gccですが細かいバージョンまではわかりません。すみません。 [3.3] 言語:C [4] 期限:2008年5月19日午前9時まで。 [5] その他の制限:特に制限はありません。 何卒、よろしくお願いします。
大分大学
>>582 このスレの過去ログを読むと分かるよんw
>>583 なっ、なんで分かった!?おぉ痛っ なんつって
>>582 問題文で言われている法則性は、
単語「a」→「b」
単語「to」→「vq」
単語「the」→「Wkh」
という風に置換されているということです。わかりにくかったらすみません。
前スレにあったやつのほうがマシだと思うがな
何を以てマシと判断したか?お答え下さい
mystrlen
>>580 #include <stdio.h>
#include <math.h>
int main(void)
{
double a,b,c,p,s;
printf("三辺の長さを入力\n");
scanf("%lf",&a); scanf("%lf",&b); scanf("%lf",&c);
p = (a+b+c)/2;
printf("三辺の長さの和 %.2f\n",a+b+c);
printf("三角形の面積 %.2f\n",sqrt(p*(p-a)*(p-b)*(p-c)));
return 0;
}
こんなんじゃ、ダメ?
>>551 > 題意(ポインタで文字列を定義)
ここがはっきりしない。
char *str="string"; みたいな使い方?って、文字数、変換する文字列が
一定じゃないからそんな使い方じゃないとは思うが・・・
593 :
580 :2008/05/13(火) 02:49:42
594 :
デフォルトの名無しさん :2008/05/13(火) 08:47:47
595 :
524 :2008/05/13(火) 09:31:03
遅くなりましたが535さんありがとうございました。
[1] 授業単元:Graphics
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6536.txt このプログラムを参考にして、画像サイズ・中心位置・半径、色を入力して、円(周および内部)を指定色で描く
PPM画像作成プログラムをつくれ。
また以下の要件を満たすようにする事
画像サイズや円半径によって描画漏れのないようにする
中心位置が画像の範囲外にあるときは描画しない
ファイル名を指定可能にする
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:5月14日
[5] その他の制限:特に制限はありません。
おねがいします
>>596 関数形式は
円を角(中心座標x,中心座標y,半径,色);
(1)中心座標x,中心座標yが画像範囲に入ってるか
チェック。
(2)
すべての画像ピクセル(u,v)について(u,v)と(x,y)
のキョリが半径以下であれば色を(u,v)に対応する
ピクセルに付ける
これでいいと思う
598 :
デフォルトの名無しさん :2008/05/13(火) 14:48:29 BE:771675438-2BP(0)
とても初歩的な問題ですが教えてください>< 1.プログラムを書く 円の面積を計算するプログラムを作ってください。。 データとしては円の直径を入れることにします。 それをもとに円の面積を計算して表示します。 型宣言は倍精度実数型(double)にしてください。 入力促進メッセージを付けてください。 2.実行 データ(直径)として 20000を入れた場合 0.1を入れた場合 −1を入れた場合 の結果を報告してください。
599 :
デフォルトの名無しさん :2008/05/13(火) 14:50:30 BE:450144427-2BP(0)
もう1問だけあります>< 【1】二つの整数m、nを読みこみ、 和 m+n 差 m−n 積 m×n を求めて表示するプログラムを作ってください。 その際、入力促進メッセージを付けてください。 【2】二つの整数m、nを読みこみ、 整商 m÷n(注) 剰余 mをnで割った余り を求めて表示するプログラムを作ってください。 【3】上記1、2のプログラムで、n=0の場合、 どのような結果になるかを調べてください。
>>598 #include <iostream>
int main(void)
{
double r;
cout << "円の直径を入力: " ; cin >> r;
if(r <=0) { cout << "Error !" << endl; return 0; }
cout << "円の面積: "; cout << (r*r)/4 ; cout << "π" << endl;
return 0;
}
601 :
デフォルトの名無しさん :2008/05/13(火) 16:05:33
[1] C++ [2] キーボードから整数を1つ入力し, 100の位以下を切り捨てて, 画面に出力するプログラムを作成しなさい。 [3] 環境 [3.1] Windows [3.2] gcc [3.3] C++ [4] 期限: 2008年5月20日 [5] その他の制限: 無し。 最近C++習い始めたばかりでよくわかりません・・・。 お願いします!
#include <iostream> int main() { int n; std::cin >> n; n -= n % 1000; std::cout << n; }
603 :
デフォルトの名無しさん :2008/05/13(火) 17:41:04
障害物と広い空間がある経路探索のプログラム知りたい C言語で
>>601 #include<iostream>
using namespace std;
int main()
{
int number;
cout << "整数入力:" << ends;
cin >> number;
//エラー処理を入れるならここへ
//マイナスチェックが必要だとか
//お好きなようにどうぞ
cout << "100以下切り捨て:" << number / 1000 * 1000 << endl;
return( 0 );
}
607 :
511 :2008/05/13(火) 21:54:05
自分でもいろいろやってみましたが・・・ できませんね。諦めるかもしれませんoTL
>>607 紙とペンが必要そうだからあんまり実装する気はおきないけど、
多角形を内側に潰してけば解けるはず。
与えられた多角形 P のすべての辺を内側に一定量 d だけ
スライドすることを考える。このとき、ある程度スライドすると
どこかの辺が一点に潰れる、ということが起こる。
そのような量だけスライドさせて辺を潰す、という操作を繰り返すと
最終的には一点になるので、それが目的の点。
609 :
デフォルトの名無しさん :2008/05/13(火) 22:13:26
2辺の最も近い距離のうちで最大のものを見つけるって事?
610 :
デフォルトの名無しさん :2008/05/13(火) 22:17:30
>>600 数字を入れて実行するとエラーになってしまいました
重心から一番遠い点を基点にして そこから各点の距離を求めるってのは駄目?
612 :
611 :2008/05/13(火) 22:31:08
あ、問題文の解釈間違ってた…ゴメン
>>609 多角形の内部の点で最も近い辺までの距離の最大をもとめるんだろ?
>>614 そのようです。多角形の内接円の半径を求める問題みたいです。
616 :
デフォルトの名無しさん :2008/05/13(火) 22:46:42
>>614 凸体で、その条件なら、各辺の垂線と点が交わるのが最小だろう。
618 :
デフォルトの名無しさん :2008/05/13(火) 23:00:34
>>615 各頂点の2辺のなす角の半分の位置に中心があるのでは
620 :
デフォルトの名無しさん :2008/05/13(火) 23:08:14
>>619 おまえがアホだろ 角の2等分線以外に円の中心は来ない
円の中心が決まれば、そこから一つの辺に接するために半径が決定される。
2等分線上に無ければ、別の辺に接することが出来なくなる。
正多角形なら楽なのに
>>618 四角形の四隅をほんのちょっとだけ落とした八角形は大丈夫?
>>620 そうなるのは、三角形と正多角形だけだ。アホ
624 :
デフォルトの名無しさん :2008/05/13(火) 23:12:18
これって内接円を求める事が出来ない凸体もあるよなあ。 多角形に埋め込める最大の円と拡張して良いか?
625 :
デフォルトの名無しさん :2008/05/13(火) 23:13:56
>>623 そうとは限らない。
最低でも角の2等分線上に無ければ、内接円が描けない為。
必要条件として必須。
>>625 勝手に問題に制限もうけちゃまずいだろ。
>>624 凸体内部の点で一番辺から遠い点をさがして、その距離を求める問題だよ?
>>628 その結果として、多角形に入る最大の円の半径となるけど。
今こそ数学板の力を扇ぐ時か
>>608 みたいに
数値解析的に解く方法しか考え付かないな。
632 :
デフォルトの名無しさん :2008/05/13(火) 23:23:40
隣り合う2辺に接する場合は、位置と半径は直ぐに求まるので、そうでないとする、
633 :
632 :2008/05/13(火) 23:25:21
例えば、横長の長方形などが、隣り合う2辺に接しない場合。
いっそのこと解無しにして逃げちゃうとか
実は、「図形は正多角形とする」というのが抜けてたりして。
図形描画のソフトを作っていて、「デバイスコンテキストの取得」 って言うのを勉強しているのですが、 hdc=CreateGraphics()->GetHdc(); これの意味ってどういうことなんでしょうか? これ一文では答えようがないのでしょうか・・・・ よろしくお願いします。
それじゃ単に「中心点」を計算しろだな・・・
638 :
デフォルトの名無しさん :2008/05/13(火) 23:33:17
方針としては、隣り合う2辺に接するものとして中心と半径を求め、それが凸体の内部におさまるか チェックして最大値を求める。次に向かい合う2辺でその最大値を超える場合のものを抽出して 最大値まで徐々に半径を小さくしていき、円が描けるかチェックすればよい。
凸多角形の内角の二等分線の交点によって新たに凸多角形を作る操作をFとし、n回操作をF(n)とする 任意の凸多角形に対してある自然数nが存在してF(n)後にできる点が全ての辺から 最も遠い距離にある点となるか否か
>>564 きれいにスルーされてて悲しいんだが・・・
解き方はこれでいいんでないの?
641 :
デフォルトの名無しさん :2008/05/13(火) 23:36:05
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):3目並べ(○×ゲーム) 2人のプレイヤーで操作する3目ならべを作る。 3行3列の配列内の座標を入力して○、×をどこに置くか指定する 既に打たれた場所なら再度入力する。 ○と×を置くたびに3個並んだかを調べる。 縦、横、斜めのいずれかに先に3個並んだほうが勝ちとして結果を出力する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:わかりません [3.3] 言語:C [4] 期限: 2008年5月16日17:00 [5] その他の制限:特にありません よろしくお願いします。
>>636 エスパーして答えると、
グラフィックスオブジェクトを作り、そのオブジェクトに結び付けられた、
デバイスコンテキストのハンドルを取得して、変数hdcに入れる。
644 :
デフォルトの名無しさん :2008/05/13(火) 23:41:54
>>639 内接円に影響して来ないような辺もあるから、全ての2等分線を考えても駄目だろう。
>>640 そりゃまあ十分細かくメッシュを切れば正しいが、
元の図形の大きさも、出力精度も何も言われてないよね。
出力精度が書かれてないのは問題不備なので、
これで満足しててもいいけど。
>>640 欲をいえば、点ごとに中か外か判断するんじゃなくて、
ソリッド・スキャン・コンバージョン使って多角形の形で走査して欲しいなw
>>641 9マス全部○か×で埋まったらどうすんの?
それとも○も×も3つずつしか置けないの?
その場合4つ目を置いたらどうなるの?
3目並べのルールしらないの?
>>511 多角形の各辺を内側に平行移動して相似の小多角形を作る。
そのとき、時計回りになる辺は除去する。
これを2本か3本になるまで繰り返していけば、いいんじゃね?
自信ないけど...
五目〜という料理が好きです
651 :
デフォルトの名無しさん :2008/05/14(水) 00:36:02
オマンコなめたいときはどうすりゃいいのか
>>647 641です。
○と×交互においていきます。
3つ並んだ時点で終わり、
並んでない場合9マス埋まるまで
○と×を交互に置き続けます。
説明不足ですいません。
あ、判ったかも。 辺を内部へ平行に動かして、消失するまでの距離は頂点の内角から計算可能。 一番短い距離の辺を除いて、その距離で次の図形を作る。 で、再帰的に小さくしていって、一本の線か点になった時が、 辺から一番遠い位置。
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク):Hit and Blowゲームで遊べるプログラムを作ること。ルールは以下の通り。 Hit and Blowは、相手が考えた4桁の数字をヒントを元に推測するゲームである。まず、相手は0-9の数字からなる4桁の数字を考える。但し、 ・0で始まってもよい。 ・同じ数字を2度以上使ってはいけない。 という条件。これに対して、こちらはなるべく少ない回数の質問で相手の考えた数字を当てることが目的。 一回の質問は、好きな4桁の数字を言い、それに対して、 ・考えた数字と位置も値も一致している桁の数(Hit) ・位置は違うがその数字は含まれているような桁の数(Blow) を答えてもらうことにより行われる。例えば、4257を考えている時に0274を言われたら、 ・0は4257に含まれていない ・2は値も桁も一致している(Hit) ・7は4257に含まれているが、位置が違う(Blow) ・4は4257に含まれているが、位置が違う(Blow) なので、1Hit2Blowと言う。 最終的に4Hit0Blowと言わせたらゲームは終了。 実際にはコンピュータが乱数で数字を考え、人間が質問してその数字を当てるようなプログラムを作成して欲しいのです。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gccバージョン不明 [3.3] 言語:C [4] 期限: ([2008年5月23日まで] または [無期限] [5] その他の制限:まだC言語の勉強始めたばっかりです
最も遠い点が「唯一ある」としている前提を疑うべき
>>656 >525
距離のみを求めるんなら良いんじゃね?
与えられた点が(0,0)(3,0)(3,2)(0,2)のとき答えはy=1(1<=x<=2)上になるよな
正解作成がひどいw
重複チェックなんてしてないで、0 - 9 までの数列をランダムに並び替えて 先頭の4つをとるとか他に手段は選べるでしょうに
すいません、場違いかもしれませんが、 グラフィックスオブジェクト とは何でしょうか^^;
グラフィックスのオブジェクトです
665 :
664 :2008/05/14(水) 03:21:03
感心しないな
>>548 確認願います。
> y+ax^2x-b=0
> y^2+cx^2-d=0
第1式 第2項 を正確に教えてください。
a * x^(2*x)
でしょうか。
初心者なんですが、お願いします [1] 授業単元:プログラミング [2] 問題文 演算子(+,−,*)と3,5,7の3個の数字とを組合わせた式をつくり、その式と計算結果のパターンを 出力するプログラムを作成しなさい。 出力例 3+5+7=15 5*7-3=32 7+5*3=22 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:bcc32 [3.3] 言語: C言語 [4] 期限:5/16 [5] その他の制限: 特になし
口だけの
>>660-661 の代わりにコードにした。
/* 正解を作成 */
void make_answer(char ans[])
{
char a[10];
int i, j;
for(i = 0; i < 10; i ++)
a[i] = '0' + i;
for(i = 0; i < DIGIT_NUM; i ++) {
j = i + rand() % (10 - i);
ans[i] = a[j];
a[j] = a[i];
}
}
まあ、どうせ入力の重複チェックしてるんだから、
そいつを流用してる元のコードで十分と思うが。
>>669 > 口だけの
いちいちうぜぇ。連番を並び替えるソースなんてとっくの昔に
このスレの過去ログでも出てんだよ。最近新入りの餓鬼がでけぇ面して
クソースを書きやがるから笑えるw
おじいちゃん、布団はあっちですよ
672 :
655 :2008/05/14(水) 07:40:21
>>669 一文字ずつチェックするならまだしも、4つ入れてからチェックする元のコードで十分とか
ありえねーよw
変種問題、つまり数字の重複を許した場合とかのHit And Blowの拡張とか に対応していないという側面からみると珠玉のコードとは言えないな Hit,Blowの解釈が変わったらどうするんだ?
676 :
664 :2008/05/14(水) 10:42:39
>>665 if(edge[i].length>0.0) edge[i]=edge[j++];
↓
if(edge[i].length>0.0) edge[j++]=edge[i];
まともにテストしたとは思えないような修正だな
678 :
664 :2008/05/14(水) 12:14:49
679 :
641 :2008/05/14(水) 14:44:02
[1] 授業単元:ネットワークプログラミング [2] 問題文(含コード&リンク):『It works』と返すWeb Sserverを作成せよ 1.『It works』をクライアントに返す 2.システムが不調でも大丈夫 3.無茶な通信データがきても大丈夫 4.『行儀よく』と停止する [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 5月16日 [5] その他の制限: 特になし お願いします。
[1] 授業単元: 情報処理演習 [2] 問題文(含コード&リンク):n人分(実行は4名程度でよい)の 学生番号、氏名、国語、数学、英語の成績をキーボートから入力して、 @科目ごとの平均点、最高得点者の学生番号、氏名 A全教科合計の平均点、最高得点者の学生番号、氏名 を出力するプログラムを作成せよ。 [3] 環境 [3.1] OS Windows [3.2] コンパイラ名とバージョン:わかりません。 [3.3] 言語:C言語 [4] 期限:5月15日午後5時まで [5] その他の制限:構造体を使用して作成してください。 よろしくお願いします。
682 :
デフォルトの名無しさん :2008/05/14(水) 15:44:36
こんな所でしか優越感に浸れない奴ってなんなの? シヌの? 口だけなら誰でも言えるから消えろ 後他人のソースにちゃちゃ入れる奴も消えろ
口だけ乙
685 :
デフォルトの名無しさん :2008/05/14(水) 16:31:58
全くのC言語初心者なんですが プログラムファイルはどこに書いていけば良いのですか?
>>685 どこでも良いよ、専用のフォルダ作って入れとけ。
>>683 お前のとこにはコードレビューする文化はないのか?
自分の利害と無関係なのになんでわざわざコードレビューしないといけないんだw
したいヤツがするのは勝手だろw
690 :
提案 :2008/05/14(水) 17:59:16
回答者へ アップまたはレスするコードのクォリティも同時に書いてね 【クォリティ】 推測|指針|コンパイル済|テスト済|検証済|清書済 推測:こうやったら出来るんじゃないかという無責任な方針の推測 指針:こうやって出来なかったら責任取れるよというレベルの説明 コンパイル済:コンパイル可能なコードを保有 テスト済:動作も確認した。 検証済:本質的に異なる別のやり方での結果と事前に分かっている回答と一致を確認 清書済:模範解答の自信あり(普通こういう回答をしないとは思うが) ※清書済でないコードの書式やフロー構成にケチを付けるのは慎みましょう
どうでもいい
692 :
690 :2008/05/14(水) 18:05:29
訂正 >検証済:本質的に異なる別のやり方での結果と事前に分かっている回答と一致を確認 本質的に異なる別のやり方での結果や事前に分かっている回答と一致を確認
>>690 無意味な提案だな。
解答側がそこまでする義理もない上、ケチつけるヤツはどうあってもつけるし。
ケチつけられたくなかったら人目につくところにコード晒すなよ。
>>683 出来について(汚いなど)はまあどうでもいいが、
誤動作するのを放っておくのは誰のためにもならないかと。
自分がケチつけられるのはどうでもいいが スレ内にケチつけるレスがあったら無駄だし消えてくれってのは皆が思ってる
宿題丸投げなのに、協力者の責任だけは追及するのな 出来ないのは怠けてた自分の責任だろうに
コード出さずにダメ出しじゃ、構って君と区別がつかない。 看過できないならコード貼れって事でOK。
>>1 > あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。
> 気に入らない質問やその他や発言はスルーの方向で。
>>698 センスもあるよ
自分のプログラムセンスの皆無さには本当に困ってる
でも責任追及はしないな
てか、このスレって悪化させるとまさにIT業界みたいだよな
IT無知な依頼主と必死に頑張って評価されない下請けの関係・・・
ネタコード投げる俺としては、茶々入れがないと寂しいんだが。
にしても、乱数発生でそれ以前に重複があるかを調べるやり方は 効率が悪いのは分かりきっていること。数が少ないと分かり辛いけど 増やせばその効率の悪さに気づく。だから口先とか煽る前に 理解する頭を持っていれば、あんなソースをこのスレに残る 形式で書き込まずに済んだだろうに。言われてそれが実装できないなら 回答者として出すぎた真似はせぬ方が良いよ。無知だと恥さらしするだけだろ。
>>703 実用範囲で問題が無いんだから気にするなよ
>>690 クオリティに「ネタ」も入れて
ネタ:提出物や不特定多数に使わせる予定のコードには入れるべきじゃないコード
>>703 Cだからといって、清書レベルのコードでも無い限り、目に付くコードはすべて
効率面で最適化しなければならないって発想はもうしなくていいよ。
すべきときはして、しないときはしないのが吉。
他の視点からの最適化要素もどんどん取り入れてるのが今日のCプログラミ
ング世界です。
707 :
デフォルトの名無しさん :2008/05/14(水) 21:25:05
string型のkが全角空白" "と等しいことを表すには?
>>669 以来、必死に口だけとほざく、自分も口だけになっていることに気づかない
粘着になったとさ。
エスパーが現れた!
>>707 wstring使う。stringならwstringに変換して比較する。
麻呂のクソースはうpロダにうpするでおじゃるよ
712 :
デフォルトの名無しさん :2008/05/14(水) 21:53:10
コンパイルするとき ドライブCのボリュームラベルがありません ボリュームシリアル番号 〜〜〜 です と出てきますがどうすればいいのでしょうか?
[1] 授業単元: よくわかりません [2] 問題文(含コード&リンク):(正整数nを入力させ、0度から90度までn度まで刻みでsin,cosの数表を書くプログラムで、30度おきに横線を出力するものを作れ。 ただし、30がnで割り切れない場合は、適当なメッセージだけを出力して終わるようにせよ。 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: Borland C++ 5.5.1 [3.3] 言語: C #include <stdio.h> #include <math.h> int main(void) { int i, n; /* i = 角度 n = 角度 */ double s; /* 角度をラジアンに直したものを入れる */ printf("n = ?"); scanf("%d" , n); i = 0; while(i <= 90){ s = i * M_PI / 180; printf("sin%d° %f cos%d° %f\n" , i, sin(s), i, cos(s)); if(i == 30 || i == 60){ printf("---------------------------------\n"); } else{ printf("30°で割り切れない。\n"); } i = i + n; } return 0; } ループせず、0°のときの数表しか出てきません。 アドバイスをいただけないでしょうか?
環境 Linux C言語 etherealでパケット解析しプロトコルヘッダの情報を表示するプログラムどうしたらよいですか?
>>713 nに入力値が入っていない。
scanfにはnのアドレスを渡すこと。
[1] 授業単元:プログラミング演習 [2] 問題文: 4つの文字列"ABCDEFG","HIJKLMN","OPQRST","UVWXYZ" を別々に宣言しこれらをstrcat関数を用いてスペース区切りで連結し、 その文字列の長さをstrlen関数で求めるプログラムを作成しなさい。 実行結果には文字列と文字列長を出力すること [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:5/19 よろしくお願いします。
720 :
667 :2008/05/14(水) 22:54:36
麻呂のクソースにもっと 突っ込んで突っ込んで by姫(ry
strcatって指定があったら素直にそれ使えよ
>>713 それだとiが30で割り切れないときにメッセージを出力してる
30がnで割り切れないときメッセージを出力して終了が問題の指示
#include <stdio.h>
#include <math.h>
int main(void)
{
int i, n; /* i = 角度 n = 角度 */
double s; /* 角度をラジアンに直したものを入れる */
printf("n = ?");
scanf("%d" , &n);
if(n < 1 || 30 % n) {
printf("nの値は30の約数であるべき\n");
return 0;
}
for(i=0; i<=90; i+=n) {
s = i * M_PI / 180;
printf("sin%2d° %f cos%2d° %f\n" , i, sin(s), i, cos(s));
if(i == 30 || i == 60) printf("---------------------------------\n");
}
return 0;
}
>>725 仕様を満たしていないことの方が欠陥じゃないのか?
ってかstrcatを嫌うの理由は脆弱性だろ?ライブラリに欠陥があるのか?
スレチだが突っ込まずにはいられなかった・・・orz
それで別々に宣言したといえるのか?
なんだかよく分からないけど、差し入れ置いていきますね。 _ /〜ヽ プリンデチ (。・-・) ゚し-J゚
http://ja.wikipedia.org/wiki/Strcat > バッファオーバーラン
> strcatは、先程示した実装例を見ても分かる通り、
> s1の容量に就いては一切関知しない。よって、s1の指す配列の範囲を越えて、
> s2が書き込まれてしまう恐れがある。これによって、メモリ破壊を引き起こしたり、
> プログラムがクラッシュしてしまうことがある。
718の場合追加する文字列は固定なんだから十分な容量を持たせておけばstrcatでも問題ないだろ
なんか、また口先だけの香具師らが・・・おまいらまとめて 口先マーケットって命名しちゃうぞ?ラララライって
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 2以上の1つの整数を読込み、フィボナッチ数列の各項で、入力された値未満のものを 1項目から順に出力するプログラムを作成しなさい。(整数が入力されない場合は想定する必要はない) 各整数の後に1文字スペースを開けて出力し,最後の数とスペースを出力したら改行すること。 読み込む数は,"Choose an integer: "の文字列のあとに入力するようにすること。2より小さい整数が入力された場合、再度入力を促すようにする。 プログラム実行例 Choose an integer: 1 Choose an integer: 20 1 1 2 3 5 8 13 [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:Borland C++ 5.5.1 for Win32 [3.3] 言語:C [4] 期限:2008年05月15日18:00まで [5] その他の制限:do while文を用いて作成せよ。
>>734 おまい・・・それ本気で言っているのか?だとしたらプログラマーとして相応しくない。
今すぐに適性の無いプログラムなんてやめた方が良いよ。
あれはポインタが示す文字列が分かっているにしろ、自分が知っている範囲内で
思い込みで話をしても無駄さ。ハックなんてのはあのポインタが示す場所を
適当に変える操作をすることだって出来るぞ?要するに、そういう欠陥を持った
仕組みそのものが問題であって、問題の無い範囲内でというのは
自分の思い込みだと考えを改めた方が良いよ。
>>736 #include <stdio.h>
int main(void)
{
int a = 1, b = 0, n;
do {
printf("Choose an integer:");
scanf("%d", &n);
}while(n<2);
do {
printf("%d ", a);
a = a + b;
b = a - b;
}while(a < n);
return 0;
}
ハックw
catch me catch you しとけば良いだろ
>>730 char *str1="ABCDEFG";
.....
のような気もするが、修正版は以下。
#include <stdio.h>
#include <string.h>
#define SEP " "
#define MAX 32
int main(void)
{
char *str[4]={ "ABCDEFG","HIJKLMN","OPQRST","UVWXYZ" };
char STR[MAX]="";
size_t i,str_sz=sizeof(str)/sizeof(str[0]);
strcat( STR , str[0]);
printf("%s %s\n", STR , str[0]);
for(i=1; i<str_sz; i ++) {
strcat( STR , SEP );
strcat( STR , str[i] );
}
printf("%s\n",STR);
printf("%d",strlen(STR));
return 0;
}
っつーことで、取り込む文字数に制限をかけることが重要なのさ。 それを否定するなら、いくら大きなデータになろうが問題を起こさないか 一定以上の文字数だったら処理をしない仕組みを作るのさ。
>>738 > 各整数の後に1文字スペースを開けて出力し,最後の数とスペースを出力したら改行すること。
@@ -14,6 +14,7 @@ int main(void)
a = a + b;
b = a - b;
}while(a < n);
+ printf("\n"); // 追加
return 0;
}
>>737 ハックなんて言い出したら、
strncatに渡す文字数を改変するとか何でもありw
>>737 何そのどうでもいい警戒
しかも対象はただの宿題だし・・・・・
>>737 ハッカーとか静電気とかそういう目に見えない敵と戦うのは仕事だけにしろよ
メモリのベリファイとか勘弁してくれよ
747 :
デフォルトの名無しさん :2008/05/15(木) 02:08:06
e^xの第n項まで求めるプログラムを書け。独立変数x、項数nはキーボードより、またwhile文を用いよ
>>747 意味が分からない
e^xのどこにnが関わる要素がある?
>>1 をよく読んで書き直し
#include <stdio.h> int main(void) { int i=1, n, x; double d = 0, a = 1; scanf("%d%d", &n, &x); while(i < n) { d += a; a *= (double)x / i; i++; } printf("%f", d); return 0; }
しばらく来ないうちに荒んだな
未解決一覧.
>>308 2008/05/10 数値解析
>>349 2008/05/11 ソート
>>511 2008/05/13 凸多角形の辺から一番遠い点を見つけ、その距離を求める
>>596 2008/05/14 PPM画像にdrawing
>>681 2008/05/15 構造体
>>548 ,723 2008/05/16 数値解析
>>668 2008/05/16 数式処理
>>680 2008/05/16 WebServer の作成
>>84 2008/06/08 回文の生成
>>90 ,350,380 で終わったっぽいけどまだ先なので
>>342 指定なし グラフ理論
>>714
>>548 は一旦非斉次型に直して行列に持ち込むのだろうか
それにしても連立二元二次方程式でニュートン法って…難しいな
753 :
デフォルトの名無しさん :2008/05/15(木) 03:23:10
下記の場合volatileがあるためValueを外部から書き換えるまでループを続けると思うのですが、 volatile ULONG Value; // レジスタ(外部から書き換えられる) void main(void) { Value = 0; while(Value == 0){ ←これ ; } } これを下記のようにポインタを経由すると最適化対象になってしまうのでしょうか? (このポインタもvolatileをつける必要がある?) volatile ULONG Value; // レジスタ(外部から書き換えられる) void main(void) { Value = 0; ULONG* pV = &Value; while(*pV == 0){ ←これ ; } }
>>754 すいません><
宿題じゃないんで激しくスレ違いでした。
向こうで尋ねてみます。
ありがとうございました。
757 :
723 :2008/05/15(木) 03:53:10
ツリーなど、煩雑になってしまったのでまとめます。
学校のサイト見たら講義資料もアップされてたんで追記しときます。
[1] 授業単元:C言語による数値入門
[2] 問題文:[1] 授業単元:C言語による数値入門
[2] 問題文:
ttp://ranobe.com/up/src/up272685.zip [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual Studio 2005
[3.3] 言語: C
[4] 期限:5/16 0:00
[5] その他の制限:連立方程式(凾を求めるときのやつ)はガウス消去法を用いて解くこと。
よろしくお願いします。
759 :
88 :2008/05/15(木) 05:20:37
>>88 大分前の宿題のやつですが、1,使用した関数と2,探索に使用した変数、配列と
3,データ入力のための変数、配列を書き出したいのですが、教えていただけないでしょうか?
初歩的な質問になってしまい申しわけありません。
大分(おおいた)って読んでしまったぜ
>>750 やるならもう少しちゃんと回答が出てるかどうか調べようぜ
おいおいおいおい、また口だけの野郎が来たぜw
>>762 そういうならどこに抜けがあるかも書けよ
>>665 cos_theta[i]=vector_inner_product(&edge[i-1].vector, &edge[i].vector);
↓
cos_theta[i]=-vector_inner_product(&edge[i-1].vector, &edge[i].vector);
・宿題投下
・回答者
・未解決リスト作成
これ以外はレスするなよ、
>>737 とかそれ以降の口だけの奴邪魔
何か文句あるならソース書け
. . ,-ー──‐‐-、. ,! || | !‐|--------┤ |::::i /´ ̄ ̄`ヽi 気楽になれよ |::::i |(´・ω・`)||. |::::i | || 楽になるぜイロイロと |::::i |.カワイソース|| |::::i L__________」| |::::i : : : : : : : : :| `'''゙‐ー-----ー゙
768 :
デフォルトの名無しさん :2008/05/15(木) 15:04:42
キーボードから0が入力されるまで繰り返し整数値を読み込んで,それらの値の合計を計算するプログラムを,do ... while 文を使って作成せよ。
>>768 #include<stdio.h>
int main(void)
{
int n, sum=0;
do {
printf("整数値入力(0で終了):");
scanf("%d", &n);
sum += n;
} while(n != 0);
printf("sum=%d\n", sum);
return 0;
}
>>719 回答して頂きありがとうございました.ちゃんとVC 6.0 / Windows Vistaで実行確認できました.
ただ,実行した際に日本語を入力する方法がわかりませんでした,でもたぶん平気だと思います.
あともし良かったらでいいんですが・・・このプログラムを簡略化できたりしませんか?
図々しくてすみません,ちょっと僕には複雑すぎるような気がするんです・・・
よかったらお願いします.
>>768 #include<stdio.h>
#include<stdlib.h>
#define N 16
int main(void)
{
int input,sum=0;
char input_c[N];
printf("整数値を入力してください(0を入力で計算終了)\n");
do{
printf(">>");
fgets(input_c,N,stdin);
input=(short)strtol(input_c,NULL,10);
sum+=input;
}while(input!=0);
printf("合計:%d\n",sum);
return 0;
}
なんかこういうのってエラーをどこまで書くべきか分からない。
何桁までの数字が有効とか、整数以外はとか。
do while文の勉強の所だしそこまで考えなくてもいいかも
// 入力(+メモリ確保)関数を簡略化してみた #define LINE_LENGTH (100) int main(int argc, char *argv[]) { unsigned char *p, *p1, *q; int len_input; unsigned char inputLine[LINE_LENGTH]; unsigned char kaibunStr[LINE_LENGTH * 2]; printf("任意の文字列を入力してください: "); scanf("%99[^\n]", inputLine); len_input = strlen(inputLine); if (len_input == 0) return 0; strcpy(kaibunStr, inputLine); p = inputLine + len_input - 1; q = kaibunStr + len_input; p -= kanji1byte(*(p - 1)) ? 2 : 1; while (p >= inputLine) { p1 = p - 1; if (p1 >= inputLine && kanji1byte(*p1)) { *q++ = *p1; *q++ = *p; p--; p--; } else { *q++ = *p--; } } *q = '\0'; printf("入力した文字列を回文で表\示すると「%s」になります。\n", kaibunStr); return 0; }
>>774 わざわざありがとうございました.
しかし以下のエラーがでてしまい原因がわかりません・・・
warning C4013: 関数 'kanji1byte' は定義されていません。int 型の値を返す外部関数と見なします。
どうしたらいいんでしょうか?無知で本当にすみません・・・
776 :
デフォルトの名無しさん :2008/05/15(木) 16:58:10
C言語で1+2+3+4+・・・と数字を加算していき、加算結果が300を越えたら処理を終えるプログラム を作りなさいという宿題が出たのですが、教えてください。
>>775 そいつは行数制限に引っ掛かりそうだったから省略した。元の>719から引っ張ってきて。
>>776 for(i=1;sum<=300;i++)
処理
>>777 >>778 アドバイスありがとうございました,ぬけていた部分を補完したら
ちゃんと実行できました!
>>776 #include <stdio.h>
int main(){
return 0;
}
コンパイラの代わりに最適化しておいた
>>782 これ最小 ヘッダいらない
main()
{
return 0;
}
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):GCD(
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6555.txt ) を求める効率の良くない方法をプログラム化し、実行時間をユークリッドの互除法のプログラムと比較しなさい。
特に、大きな2数(2数4573624943と1690511063あるいは、999999999と999999998)の場合を比較すること)効率の良くないプログラム、ユークリッドの互除法のプログラムともに実行時間計測を組み込むこと。
[3] 環境
[3.1] OS: XP [3.2] 不明 [3.3] 言語: C++
[4] 期限: 5月17日 [5] その他の制限: 特になしかと
よろしくお願いします
>>682 VBScriptで作りました。これを色々弄って
仕様を定めてからCに翻訳する方法も
***この問題に関しては***
悪くなさそうです。さすがにMadam,I <=>I'm Adamはを見つけるのは辛いですが
function reverse( ByVal s)
dim t
t=""
do while(len(s)<>0)
t=t+mid(s,len(s),1):s=mid(s,1,len(s)-1)
loop
reverse=t
end function
dim s
s=inputbox("文字を入れて","C/C++宿題片付けます","テツダウヨナンドモ")
if(s<>"")then WScript.Echo(mid(s,1,len(s)-1)+reverse(s)) end if
>>784 int gcd2(int x, int y){
int i, tmp;
if(x > y){
tmp=x;
x=y;
y=tmp;
}
for(i = x; i > 1; i --){
if((x % i == 0) && (y % i == 0)){
return i;
}
}
}
ロジック:(2数x,yのうち小さい方-1)~2までカウントダウンして、x,y両方を割り切れた最初の数が最大公約数。
所用時間:手元のPCで30秒位。
787 :
デフォルトの名無しさん :2008/05/15(木) 18:48:36
[1] 授業単元:プログラミング [2] 問題文C言語で1+2+3+4+・・・と数字を加算していき、加算結果が300を越えたら処理を終えるプログラム を作りなさい [3] 環境 [3.1] OS: XP [3.2] 不明 [3.3] 言語: C [4] 期限: 5月16日 [5] その他の制限: 特になし
789 :
デフォルトの名無しさん :2008/05/15(木) 18:50:45
>>788 すいません、while文でしろとの事でした。
申し訳ありません
>>787 int i, sum=0;
for(i=1;i<=300;i++){
sum+=i;
}
>>789 int i,=1sum=0
while(1){
sum+=i;
if(sum>=300) break;
i++;
}
コンマがヘンなところについたけど、なおしといて
>>789 int i=1, sum=0;
while(sum<=300){
sum+=i;
i++;
}
795 :
デフォルトの名無しさん :2008/05/15(木) 19:17:12
>>308 期限は過ぎてるが
void method1(double a, double b, double c, double *x1, double *x2) {
*x1 = (-b+sqrt(b*b-4*a*c))/(2*a);
*x2 = (-b-sqrt(b*b-4*a*c))/(2*a);
}
void method2(double a, double b, double c, double *x1, double *x2) {
*x2 = (-b-sqrt(b*b-4*a*c))/(2*a);
*x1 = c/(a*(*x2));
}
main() {
double a = 1, b = 18000000, c = 1, x1, x2;
method1(a, b, c, &x1, &x2);
printf("method 1: x1 = %.12le, x2 = %.12le\n", x1, x2);
method2(a, b, c, &x1, &x2);
printf("method 2: x1 = %.12le, x2 = %.12le\n", x1, x2);
return 0;
}
/* 真の解は
x1 = -5.5555555555555727023319615913266947789124×10^-8
x2 = -1.799999999999994444444444444427297668038408673×10^7
なので,method2 のほうが精度がよい.
*/
>>795 #include <stdio.h>
int main(void)
{
int A[5];
int i, v, n, w,imax;
int j, t;
printf("5桁の正の整数値を入力してください ");
scanf("%d",&v); n = 5;
for (w=1;w<=n;w++) {
A[n - w] = v % 10;
v = v / 10;
} for (i=0;i<n;i++) {
v = A[i];
imax = i;
for (j=i+1;j<n;j++) {
if (A[j] > v) {
v = A[j];
imax = j;
}
}
t = A[i];
A[i] = A[imax];
A[imax] = t;
} printf("大きい順では: ");
for(i=0;i<n;i++) {
printf("%d", A[i]);
} printf("\n");
return 0;
}
行節約するために何箇所か改行消した
>>668 問題不備.「組合わせた式」の定義がわからない.具体的には
(1) 同じ演算子は使ってよいのか
(2) 同じ数字は使ってよいのか
(3) もし (2) が yes ならば式の長さはどこまでか
800 :
795 :2008/05/15(木) 19:38:43
>>797 実行確認できました!
ありがとうございますm(__)m。
>>801 例はあくまで例でしょ。
(1) は例から yes っぽいけど、(2), (3) は分からないよ。
もし使ってもいいなら例にだすでしょ
>>803 明記がない以上は確認するのが筋だと俺は思うけど、
これ以上は水掛け論だろうから、やめるね。
そうだな、お互いの想像でしかないしな
806 :
デフォルトの名無しさん :2008/05/15(木) 19:54:38
timeGetTime関数を使って擬似的に60fpsでループするプログラムでゲームループさせようとしているのですが、 1フレームごとに毎回移動させる場合(たとえばパチスロのリールのようなもの) カウンタ加算値が+=1であれば1秒では60しか移動しませんよね? それだと遅すぎるのでfor文を使って for(i=0; i<=10; i++){ //移動カウンタ } として挟んでみたんですが、これってあくまで移動量は1ずつを高速ループさせて 同時に描画させることになるのでしょうか? 単に移動量を+10にしたときとでは forで挟んだ方が滑らかに綺麗に表示されてる気がするんですけど違いってあるんでしょうか?
>>806 ここは質問スレじゃない。適切なスレに池。
【未解答問題一覧(期限切れ・問題不備除く)】
>>668 2008/05/16 数式処理
>>680 2008/05/16 WebServer の作成
[1] 授業単元: プログラム講義-基礎 [2] 問題文二つの自然数の最大公約数を求める関数を再帰関数として定義し,その利用例が明らかになるようにプログラムを作成しなさい. [3] 環境 [3.1] OS: Windows/Linux [3.2] コンパイラ gcc [3.3] 言語: C [4] 期限: 5/17 24:00 [5] 数値は適当にに決めて、動作例としてプログラムを書いてok
>>810 #include<stdio.h>
int gcd(int a, int b)
{
printf("a=%d b=%d\n", a, b);
if(a%b==0) return b;
return gcd(b, a%b);
}
int main(void)
{
int a=123, b=456;
// scanf("%d %d", &a, &b);
printf(" %d\n", gcd(a, b));
return 0;
}
亀だが
>>707 string space=" ";
if(k==space){
system("format C:");
}
[1] 授業単元:
Cプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6559.txt [3] 環境
[3.1] OS: (Windows/Linux/等々)
Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
5月17日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
構造体を習っているところです。よろしくお願いします。
今日の回答者の皆様、清書レベルでおKですか?
口だけ、仕切りや自治厨が現れますた!
>>814 すいません、特にエラーは出ないのですが、課題1が実行例どおりに作動しないのですが・・
勝手にレベルとか持ち出してきた815のことですね、わかります
>>818 コンパイルエラーが出るはずだが。
int sx[] = {0,+1,-1,-1,+1},
の最後をセミコロンにすれば実行例どおりに動作したよ。
>>813 課題1
#include <stdio.h>
struct point{
int x; /* x 座標 */
int y; /* y 座標 */
};
int main(void){
struct point table[5][100], p1;
int i, j, index, num[5]={0};
for(i=0;i<100;i++){
if(scanf("%d %d", &p1.x, &p1.y)!=2) break;
index=0;
if(p1.x>0 && p1.y>0) index=1;
if(p1.x<0 && p1.y>0) index=2;
if(p1.x<0 && p1.y<0) index=3;
if(p1.x>0 && p1.y<0) index=4;
table[index][num[index]++]=p1;
}
for(i=1;i<=4;i++){
printf("第%d象限の個数 %d\n", i, num[i]);
for(j=0;j<num[i];j++){
printf("(%2d, %2d)\n", table[i][j].x, table[i][j].y);
}
}
return 0;
}
>>820 すいません、作動しました!ありがとうございました。
ところで、課題2の
POINT pt1 = {2, 4};
d = distance(pt1);
これはどういう意味があるんでしょう?
>>822 意味ないよ。課題2の問題文中にかかれてたからとりあえず入れただけ。
if(p1.x>0){ if(p1.y>0) index=1; else if(p1.y<0) index=4; } if(p1.x<0){ if(p1.y>0) index=2; else if(p1.y<0) index=3; } これでいいだろw
827 :
653 :2008/05/15(木) 23:33:10
麻呂のクソースにも飽きたでじゃる。しばらく、Java、JavaScriptに 転進するでおじゃ〜る、さらばじゃっ
829 :
デフォルトの名無しさん :2008/05/15(木) 23:49:09
キチガイの集まり創価学会 キチガイ・マルチが政治活動 池田大作キチガイ集団公明党 キチガイの集まり公明党 池田キチガイ公明党 キチガイの集まりが政治活動公明党
>>758 ありがとうございました。
無事に期限に提出できました。
831 :
827 :2008/05/16(金) 00:04:36
[1] 授業単元:オペレーティングシステム論 [2] 問題文 ?簡単なシェルを作れ ?fork、exec系、wait系のシステムコール(ライブラリ関数)を利用して作る ?最低限、以下の機能を実現する 1.プロンプトを出力する 2.ユーザに端末からコマンドを入力させる 3.新しくプロセスを生成し、そのプロセスが入力されたコマンドのプログラムを実行する 4.そのコマンドの実行(子プロセス)が終了するまでシェル(親プロセス)は、プロンプトを出さずに待つ 5.1に戻る [3] 環境 OS:Windows/Linux コンパイラ:gcc 言語: C [4] 期限: 2008年5/17 16時 実行結果もお願いします
834 :
827 :2008/05/16(金) 01:39:43
今、気付いたけど、 水平な頂点があるとゼロ除算で落ちるな・・・ 180度に近づくと制度落ちるし、 ちょっと計算方法がまずいようだ。
ここはコンパイル済みと言った程度のコードをグラフィカルに表し清書済みとするスレです。
836 :
デフォルトの名無しさん :2008/05/16(金) 02:12:46
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク): 次のプログラムの致命的な問題を一つあげなさい /*標準入力から行の先頭10000文字以内を読み込んで 読み込んだものを標準出力に出力する*/ int main(int argc,char **argv){ #define N 10000 char ss[N+1],*s=(char*)&ss; int len; while(!feof(stdin)){ if(fgets(s,N,stdin)){ if(!ferror(stdin)){ printf(s); if((len=strlen(s))==10000) if(s[len-1]=='¥n') printf("¥n"); continue; } } break; } return 0; #undef N } [3] 環境 [3.1] OS: 2008年直近のANSI-CもしくはISO-C準拠のC処理系があるOS環境 [3.2] コンパイラ名とバージョン: ANSI-C,ISO-Cに準拠したC処理系 [3.3] 言語: C [4] 期限: 1時間以内 [5] その他の制限:問題見て10秒以内に問題が発見できれば、正しいCプログラマです。
839 :
838 :2008/05/16(金) 03:53:04
#include <stdio.h> が抜けているというのは、回答にはなりませんので念の為
840 :
838 :2008/05/16(金) 03:56:06
lenがいらないというクレームはガス抜き用に用意しました。
人に問題出せるレベルじゃねーぞw
842 :
% :2008/05/16(金) 04:24:44
先頭10000文字という指定なのに9999文字までしか表示できない
>>680 当方で確認した環境は Vine Linux 4.2(kernel 2.6.16), 処理系は gcc3 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img > システムが不調でも‥‥
特になにも考えていません。
> .無茶な通信データがきても‥‥
対応できませんでした。たくさんのデータが来ると狂うでしょう。
> 行儀よく停止する。
シグナルで余さず wait したつもりです。
わたしの環境では、 read() でも recv() でもデータがそろうまでブロックするため、
クライアントのリクエスト文字列が終わったことを検出する方法がわからないのですが、
どうすればいいんでしょうか。
>>774 感謝です。
>>838 #define N 10000 ってしたらNに統一すべき。
Nと10000を混在させるのはよろしくない。
fgets(s,N,stdin)だと配列のサイズをN+1にした意味がない。
if(s[len-1]=='\n')じゃなくてif(s[len-1]!='\n')じゃないの?
センスを試す良問だな
>>838 単純なことだ。10000文字以上入力してみそ。普通にそれ以上読み込んでいるから。
それ以外の部分に問題があるって話しも出るが、10000文字以内に限定するなら
EOF検出とか要らんことせんで、指定した文字数まで読み込むコードで終わらせい。
>>847 だが、プロンプトの仕様上1行10000文字までという制限がある
環境も存在するかもしれんが、そういうのは考慮せず、プログラムとして
Nを10にでもして入力して、if((len=strlen(s))==10000) の10000の部分を
Nにしても分かるが、指定の文字だけ読み込んで1行ずつ出力するわけでもなし。
printf("%s",s);にしないといけないんだろ
>>849 正解
他にも問題はあるが、軽微
コンパイルして、コンソールから
printf("1時間考えても答え出せない奴が回答者やろうというのは%d年早いですか?\n",100);
と入力してみそ。
プログラムが落ちなければ運がいいと思う。
仕様を満たせば良い バグが出なければ尚良い 可読性が有れば言うこと無し
>>838 > char ss[N+1],*s=(char*)&ss;
妙なことしとりまんなぁ。普通にss使いやぁ
>>851 842の名前欄に答書いてあるからわざとスルーしてたんだけどね
っていうか、自分のミスを軽微ですますなw
855 :
デフォルトの名無しさん :2008/05/16(金) 14:41:41
キチガイの集まり創価学会 キチガイ・マルチが政治活動 池田大作キチガイ集団公明党 キチガイの集まり公明党 池田キチガイ公明党 キチガイの集まりが政治活動公明党
856 :
% :2008/05/16(金) 15:55:15
>>851 やってみた
俺のマシン(Windows)では
printf("1時間考えても答え出せない奴が回答者やろうというのは-23年早いですか?¥n",100);
と出た。
隣の奴のマシン(OS-X)では
printf("1時間考えても答え出せない奴が回答者やろうというのは384998年早いですか?¥n",100);
とでた
共有鯖のLinuxでやらせたら
printf("1時間考えても答え出せない奴が回答者やろうというのは100年早いですか?¥n",100);
どのマシンでも
printf("1時間考えても答え出せない奴が回答者やろうというのは%s年早いですか?¥n","-10");
と入れたら落ちた。
857 :
デフォルトの名無しさん :2008/05/16(金) 16:32:21
2次元配列変数sampleの中身を表示し、sampleの4つの値の平均値をresultの1つの値とするプログラム を作成せよ。 実行例 sample 13 36 18 54 83 12 25 62 19 78 21 5 41 93 87 21 87 11 61 81 68 46 35 98 result 34 42 30 69 56 58 これをfor文を使ってお願いします。(windows c言語)
「1」…ゲームアルゴリズム 「2」…ブロック崩しゲームで、ボールが下についたらゲームオーバーになるようにプログラミングせよ 「3」…windows vista、C ↓のように打ったのですが、ゲームオーバーと認識してくれません if(bally==0) { gamemode = 2; color = GetColor(255,255,255); DrawFormatString(220,220,color,"Game Over..."); movex=0; movey=0; if( CheckHitKey(KEY_INPUT_RETURN)) { gamemode = 0; movex=0; movey=0; } }
>>859 bally==0 を bally<=0 でおk
>>860 試してみましたが、できませんでした
別のところに問題があるのでしょうか
>>857 後は自分で
#include<stdio.h>
int main(void)
{ int sample[4][6]={{13, 36, 18, 54, 83, 12},
{25, 62, 19, 78, 21, 5},
{41, 93, 87, 21, 87, 11},
{61, 81, 68, 46, 35, 98} };
int result[2][3]={0}, i, j;
puts("sample");
for(i=0;i<4;i++) {
for(j=0;j<6;j++) {
printf("%d ", sample[i][j]);
}
puts("");
}
result[0][0]=(sample[0][0]+sample[1][0]+sample[2][0]+sample[3][0]) / 4;
result[0][1]=(sample[0][1]+sample[1][1]+sample[2][1]+sample[3][1]) / 4;
result[0][2]=(sample[0][2]+sample[1][2]+sample[2][2]+sample[3][2]) / 4;
result[1][0]=(sample[0][3]+sample[1][3]+sample[2][3]+sample[3][3]) / 4;
result[1][1]=(sample[0][4]+sample[1][4]+sample[2][4]+sample[3][4]) / 4;
result[1][2]=(sample[0][5]+sample[1][5]+sample[2][5]+sample[3][5]) / 4;
puts("\nresult");
for(i=0;i<2;i++) {
for(j=0;j<3;j++) {
printf("%d ", result[i][j]);
}
puts("");
}
return 0;
}
[1] 授業単元:プログラミング演習 [2] 問題文 キーボードから入力された任意の文字列を分析し その文字列に含まれている数字文字"0","1",..."9"の合計個数を表示するプログラムを作成せよ。 注)NULL文字は '\0' で表すことができる @文字列の読み込みは、1次元文字配列 string[MAX](MAX=256) を定義して行うこと。 A文字配列に含まれる数字の係数処理は、関数 dgt_num_total()を定義・呼び出しをして行うこと。 また関数 dgt_num_total()は、@入力された文字列が格納された文字配列の先頭アドレスを 引数(アドレス参照)とし、A関数の戻り値としてその中に含まれる数字の個数を返す関数とすること [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4]期限:2008年5月16日午後7時程度 よろしくお願いします 時間がないのは実家に帰る仕様です
>>863 #include <stdio.h>
#include <ctype.h>
#define MAX 256
int dgt_num_total(const char *s){
int dgt_num=0;
for(;*s;s++) if(isdigit(*s)) dgt_num++;
return dgt_num;
}
int main(void){
char string[MAX];
fgets(string, sizeof(string), stdin);
printf("\n%d\n", dgt_num_total(string));
return 0;
}
>>864 っは、しまった…、穴埋め問題でした…
とりあえずこちらを見て参考にさせていただきますー
もう一つあるんですが、連続投稿はよろしいのでしょうか
いいんじゃない 連続投稿かどうか、ID無いから判断出来ないし
{ int c; int dgt_num = 0; while((c = fgetd(stdin) != EOF) if(isdigit(c)) dgt_num++; printf("%d¥n", dgt_num; }
869 :
デフォルトの名無しさん :2008/05/16(金) 17:52:04
[1] 授業単元:C言語による数値計算演習 [2] 問題文:4×4の対称行列の固有値と固有ベクトルを求める ヤコビ法のプログラムを作成せよ。但し,行列の要素を 保持する配列変数として2次元の配列変数を使用すること。 計算結果を画面に出力すること。(行列[n][n]の各成分は printfによるキーボード入力させる。) [3] 環境 [3.1] OS:Windows Vista [3.2] Windows Visual Studio [3.3] 言語:C++ [4] 期限:08年5月22日23:30まで すみません、よろしくお願いします
870 :
デフォルトの名無しさん :2008/05/16(金) 17:55:06
>>869 すみません問題文の5行目間違えました
printfじゃなくてscanfです。
すみませんでした
>>861 y座標は1番上が0で下に行くほど増えるのでは
switchの方 void dgt_num_deatil(char *str, int *bnp) { int i = 0; /* 配列参照用添え字 */ while (str[i] != '\0') { switch(str[i]) { case '0': bnp[0]++; break; case '1': bnp[1]++; break; case '2': bnp[2]++; break; case '3': bnp[3]++; break; case '4': bnp[4]++; break; case '5': bnp[5]++; break; case '6': bnp[6]++; break; case '7': bnp[7]++; break; case '8': bnp[8]++; break; case '9': bnp[9]++; break; } i++; } }
>>872 ありがとうございます!参考にさせて頂きます〜
875 :
843 :2008/05/16(金) 18:41:25
[1] 授業単元:プログラミング言語論 [2] 問題文(含コード&リンク): アルファベット、数字、空白からなる文字列を渡したとき、小文字を大文字にする関数 void to_low(char s[]);を作成しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2008年05月18日13:10まで [5] その他の制限:文字列まで習っている
>>876 #include<stdio.h>
#include<ctype.h>
#define SIZE 256
void to_low(char s[])
{
int i=0;
while(s[i++]!='\0')
{
if(islower(s[i]))
s[i]=toupper(s[i]);
}
}
int main(void)
{
char str[SIZE];
printf(">>");
fgets(str,SIZE,stdin);
to_low(str);
printf("%s\n",str);
return 0;
}
fgets w
>>876 ,877
このままだと、先頭の1文字が変換されないので、修正。
diff -r 84cfa8044290 -r e5b7a28be89f 876.c
--- a/876.c Fri May 16 20:06:16 2008 +0900
+++ b/876.c Fri May 16 20:08:09 2008 +0900
@@ -6,10 +6,11 @@ void to_low(char s[])
void to_low(char s[])
{
int i=0;
- while(s[i++]!='\0')
+ while(s[i]!='\0')
{
if(islower(s[i]))
s[i]=toupper(s[i]);
+ i++;
}
}
>>880 すいません、関数上の文字列や-whileとかの文法がよく分からないのですが、
どういう意味でしょうか?
>>881 変更点が判るようにと思って、バージョン管理ツールの出力を
載っけたが、ツール使ってる人ばっかりじゃなかったな、すまん。
ただ、バージョン管理ツールはグループ・個人を問わず非常に便利
なので管理用に使う事をお勧めする。
以下、表記の説明。
・修正の場合
> int i=0;
> - while(s[i++]!='\0') // <---この行を削除という表記
> + while(s[i]!='\0') // <---この行を追加という表記
> {
・追加の場合
> s[i]=toupper(s[i]);
> + i++; // <---この行を追加という表記
> }
小文字を大文字に直す関数を作成するのにtoupper()を使うのはどうなんだ? という気がしないでもない。 アルファベットからなる文字しか渡されないと約束されているなら s[i] = s[i] - 0x20; でも十分なような気がしないでもない。
-0x20はどこから出てきたんだ と聞かれるような気がしないでもない
'a' - 'A' です と答える 出題者の意図としてはislowerやtoupperとか使ったらだめだろうから
l;l ,_-‐ 、 __,,.. - 、 彡彡彳、.// この感じ・・・麻呂のクソースか・・・ _______∧,、_‖ `之ヽ、, i l´ _,ィ辷ァ-、、 彡彡'r ノ/_ ______  ̄ ̄ ̄ ̄ ̄ ̄ ̄'`'` ̄ 1  ̄フ/l l::. ヽこ~ ̄ 彡彳~´/  ̄ ̄ ̄ ̄ ̄ ̄
889 :
680 :2008/05/16(金) 22:21:54
>>875 ありがとうございました
じっくりソースみて自分で理解してみます。
>>885 -'A'のほうがわかりやすいだろ
-0x20じゃパット見イミフ
すいません
>>813 なのですが、あまり他力ではいけないと思って皆さんの教えてくださったプログラムを参考に自分でやってみたのですが、
コンパイルはできたのですが、実際に実行してみると何も反応しません。。どこが間違っているのでしょうか?
#include <stdio.h>
struct point{
int x;
int y;
};
int main(void){
struct point table[5][100];
int i, j, x, y, s, num[5];
while (scanf("%d %d", &x, &y) != EOF) {
for(i=0;i<100;i++){
if(x>0 && y>0) s=1;
if(x<0 && y>0) s=2;
if(x<0 && y<0) s=3;
if(x>0 && y<0) s=4;
else s=0;
table[s][num[s]++].x = x;
table[s][num[s]++].y = y;
}
for(i=1;i<=4;i++){
printf("第%d象限の個数 %d\n", i, num[i]);
for(j=0;j<num[i];j++){
printf("(%d, %d)\n", table[i][j].x, table[i][j].y);
}
}
return 0;
}
>>892 すいません一番最後に
}
をつけると一応コンパイルは通ります。。でも実行しても何も反応しないのです。
>>893 scanf関数が最初に呼ばれるからだろ?
入力待ち状態だよ
>>894 すいません今やってみると、何も反応しないことはなかったのですが、
./a.exe < point-data.txt
と入力してみると
第1象限の個数 0
第2象限の個数 0
第3象限の個数 0
第4象限の個数 0
という風にでて、全くプログラムとして機能しませんでした。。
どこがおかしいでしょうか?
問題見てないからあれだけど、 ./a.exe < point-data.txt このコマンドは何だ?
1つだけ読み込みに成功したらxとyのどっちかの値が不定になるんじゃね?
>>896 point-data.txtというファイルの中に
5 1
0 91
-6 2
-92 0
-7 -3
0 -93
94 0
1 -4
9 -4
-8 -3
8 -4
というものが入ってまして、つまり、上記の数字を入力したときの結果ということです。。
俺がやると無限ループになるからお手上げで
whileの条件判断の部分にscanf入れること自体あんまりよろしくなくね?
>>897 どうしたらいいんでしょう?
>>900 なんか学校で習ったときに
while (scanf("%d %d", &x, &y) != EOF) {
こういったような文章が出てきたので、無理矢理組み込んでみました・・
>>901 それってファイル操作じゃない?
while(fgets(ss, 256, fr) != NULL)
>>902 すいません、その文章はよくわからないです・・
ファイルやキーボードから複数のデータを入力する方法
struct point p1;
while(scanf("%d %d", &p1.x, &p1.y) != EOF){
構造体p1 の処理
}
?? 入力リダイレクト機能
% ./a.out < data.txt
?? ファイルdata.txt の先頭から1 行ずつデータを入力し,scanf 関数の実引数に格納される.
?? ファイルの最後に到達すると,scanf 関数はEOF (End of File)を返すので,while 文の
繰り返しが終了する.
?? キーボードからのデータ入力
?? データの入力を終了する時にCtrl-D を入力すると, scanf 関数はEOF を返すので,
while 文の繰り返しが終了する
こんな感じで習いました
>>892 scanf の返り値はなんなのかについて学習すべし。
プログラマを目指すなら・問題の切り分けがいかにスマートにできるかです。そのセンスを磨くことです。
man scanf で直ぐ気づく超初級クラスのミス(ミスそのものを犯してしまうのは致し方ないとして)
すまん、アンカーちごた。
>>891 {
int i, x, y, s;
struct point table[5][100];
int num[5];
for(x = 0; x < 5; x++) // きちんと0で初期化して
{
num[x] = 0;
for(y = 0; y < 100; y++)
table[x][y].x = table[x][y].y = 0;
}
for(i = 0; i < 100; i++)
{
scanf("%d %d¥n", &x, &y);
if(x && y)
{
if(x > 0) s = y > 0 ? 1 : 4;
else s = y > 0 ? 2 : 3;
}
else s = 0;
table[s][num[s]].x = x; // これって意味有るの?
table[s][num[s]].y = y; // 上に同じく
num[s]++; // 元のソースだと常に +2 されてるけど・・
}
for(i = 0; i < 4; i+)
printf("第%d象の個数 %d¥n", i, num[i]);
...
}
手抜きしてた if(scanf("%d %d¥n", &x, &y) == EOF) break; あと、 if(num[0]) printf("一方が0のもの %d¥n", num[0]); for(i = 1; i < 5; i++) printf("第%d象の数 %d¥n", i, num[i]); 訂正だす。
908 :
◆bT6c9WIwLg :2008/05/17(土) 01:11:26
[1] 授業単元:プログラム言語 [2] 問題文: n段の段数を持つピラミッドより構成される、 n段の段数を持つピラミッドを表示するプログラムを作成せよ。 <実行例> 段数を入力してください: 4 ===============* ==============*** =============***** ============******* ===========*=======* ==========***=====*** =========*****===***** ========*******=******* =======*=======*=======* ======***=====***=====*** =====*****===*****===***** ====*******=*******=******* ===*=======*=======*=======* ==***=====***=====***=====*** =*****===*****===*****===***** *******=*******=*******=******* [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: 5月22日 [5] その他の制限:forとprintfを使ってやること 問題文の”=”は本来はスペース” ”です。位置を合わせるために使いました。 誰かお願いしますm(_ _)m
>>908 #include<stdio.h>
int main()
{
int n, i, j, k, l;
printf("段数を入力してください:");
scanf("%d", &n);
for(i = 0; i < n; i ++) {
for(j = 0; j < n; j ++) {
for(k = 0; k < n*n-i*n-j-1; k ++)
printf(" ");
for(k = 0; k < i; k ++) {
for(l = 0; l < j*2+1; l ++)
printf("*");
for(; l < n*2; l ++)
printf(" ");
}
for(k = 0; k < j*2+1; k ++)
printf("*");
printf("\n");
}
}
return 0;
}
お前が時の勇者リンクか!
今、とてつもなくオッサーンな香具師を見た気がしてならない
今年の誕生日で22になるおっさんが通りますよっと。
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): 横120文字のコンソールがあります。 これを利用して次の関数のグラフを同時に書かせなさい x^2+(y-3)^2=2 x^2+y^2=1 x^2+(y+4)^2=3 (x-5)^2+y^2=9^2 (x+5)^2+y^2=9^2 但し|x|<=4,|y|<=8でこれを満たす点を*で表示し それ以外の点を空白文字で埋める。 横120文字分を一杯に使って表示させたものをプリントアウトして提出。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2008年05月17日23:59まで [5] その他の制限:なるべく大きく表示すること お願いしまつ)m_m(
>>916 君が楽に解けると言うなら、君にとっては難しくないであろう。
もし君が解けないくせにそういうなら、なんで自分でやらないのか?っと
質問者に対する愚問とみなそう。さぁ、四の五の言わず、君が解いてみ給え?
麻呂は疲れたので、寝るでおじゃ〜る
918 :
デフォルトの名無しさん :2008/05/17(土) 05:54:25
難しくないだろ。
だからそう言うならそちが解いてみて給う?
920 :
デフォルトの名無しさん :2008/05/17(土) 06:03:07
120ドットで幅8、縦16のサイズにすると、サイズ1/15ずつの正方形の中にグラフの一部があれば出力すればよい。 任意の関数を与えた時にグラフを描かせるのは誤差を考慮しなければならないが、一方の変数で解求めてしまえば楽ではある。
921 :
デフォルトの名無しさん :2008/05/17(土) 06:06:22
解くじゃなく書くじゃないか? どこが難しいのか見当もつかないが、本当は難しかったりするのか?
922 :
デフォルトの名無しさん :2008/05/17(土) 06:08:30
120*240のどこら辺に*を描くのかがちょっと難しいかもしれない。
923 :
デフォルトの名無しさん :2008/05/17(土) 06:08:38
>>920 正方形の中にグラフの一部ってどういう意味?
924 :
デフォルトの名無しさん :2008/05/17(土) 06:11:33
f(x,y)という関数が与えられたとして、正方形の中心座標を入力したとき f(x,y)<εと判定すると ちょっとずれる場合があるかもしれないって事。
925 :
デフォルトの名無しさん :2008/05/17(土) 06:11:47
正の整数って前提があるのか??
あげてるバカは同一人物?
927 :
デフォルトの名無しさん :2008/05/17(土) 06:13:28
>>923 グラフは、曲線で描ける。それから原稿用紙みたいにマス目を入れて
線が描かれている所を*で埋めれば出来上がるって事。
928 :
デフォルトの名無しさん :2008/05/17(土) 06:16:35
>>927 *で出来た箱状のものが横に8個縦に16個ならぶってこと?はあり得ないよな。
意味がよくわからん。
929 :
デフォルトの名無しさん :2008/05/17(土) 06:20:38
正方形のマスを描いてから、そこに曲線を描く。 そして曲線が描いてあるマスを塗りつぶすって事。
930 :
デフォルトの名無しさん :2008/05/17(土) 06:23:39
>>929 塗りつぶすっていうのはどこから導かれるの?
曲線が複数ある状態だとダメってこと?
マスって何個あるの?
931 :
929 :2008/05/17(土) 06:24:51
プログラムの話ではなく、正方形の中に、グラフの一部が存在するということの説明をしてるんです。
932 :
デフォルトの名無しさん :2008/05/17(土) 06:33:28
>>914 の場合は円だから、cosθ、sinθを使うが、一方を解いてしまえばいいけど
3次とか4次関数とかが与えられたとすると、誤差の評価が難しくなるとは思う。
933 :
デフォルトの名無しさん :2008/05/17(土) 06:33:49
正方形がよくわからん。 |x|<=4で120文字ってことは、ひとメモリが0.075になるよね? xを0.075ずつ増やすループ内でyを求めてっていうような計算じゃ駄目なの? 実際にはこの逆にするだろうけど、考え方として。
934 :
デフォルトの名無しさん :2008/05/17(土) 06:39:37
>>933 それでいいけど。解の公式が使えない場合とか、もう一方の解が求めにくい場合に
実際に値を入れてみて評価するっていう手もあるって事。
2次元のグラフは全てf(x,y)という関数で書ける。
たとえば、f(x,y)=x^2+y^2-1は、課題の2番目のグラフ。
(x,y)に値を入れてみて0に近ければそこら辺をグラフが通る。
数学が絡むと難しいみたいだな 良問の予感
麻呂の肛問も見てたもう
937 :
デフォルトの名無しさん :2008/05/17(土) 06:50:34
>>934 てことは、マス関係なく-60<x<61,-120<y<121の範囲の点総てを当てはめて
計算して0に近いときは*を打って0から遠いときは空白を打てばいいんだよね?
どのくらい近い時に点を打つかはどう決めるの?
938 :
デフォルトの名無しさん :2008/05/17(土) 06:53:44
ループの最深部で3万回弱しか回らないから十分早いはずだけど、 コマンドプロンプトでは遅いだろな。 なんであんな遅いんだろな。
939 :
デフォルトの名無しさん :2008/05/17(土) 06:56:11
>>937 一般の2変数のグラフが与えられたときには、その誤差の評価が難しいと思っている。
940 :
デフォルトの名無しさん :2008/05/17(土) 06:57:21
>>939 ヒントだけでいいから教えてよ。
けちけちすんなよ、友達だろ?
941 :
デフォルトの名無しさん :2008/05/17(土) 06:59:58
描くマスの幅よりも、測定する幅を十分に細かくとり、どの位小さい時か? も小さめにしておけば 間違いは少なくなるとはおもう。
難しく考えなくても四角に分割して円の中心から最も近い角と最も遠い角の円の中心からの距離を調べて 半径がその距離の間に入るかチェックすればいいだけじゃね?
943 :
デフォルトの名無しさん :2008/05/17(土) 07:14:08
944 :
デフォルトの名無しさん :2008/05/17(土) 07:14:23
要は等式が等式じゃなくなってるってことが誤差だと考えれば、誤差を1まで 許容した時にあるxに対してyがどれだけの幅でずれるかを求めればいいだけなんだろ? なんでお前らって簡単なことを難しく言いたがるんだろな。 あと、15のマスっていうのがいまだにさっぱりわからん。 なんで納豆にソースかけるんだよって聞いたらマヨネーズはうまいって答えが 返ってきたような感じだ。
945 :
デフォルトの名無しさん :2008/05/17(土) 07:17:45
>>943 何か難しくて解読不可能だから、易しく説明希望。
>>895 f(x>0 && y>0) s=1;
if(x<0 && y>0) s=2;
if(x<0 && y<0) s=3;
if(x>0 && y<0) s=4;
else s=0;
は
if(x>0 && y<0) s=4;
else s=0;
と同じ
sは0か4にしかならない
[1] 授業単元:ゲーム製作でバビンチョ! [2] 問題文(含コード&リンク): 4x4の盤でコンピュータ相手に3目並べ ただし、2x2(1手で同時に2つ2個並びができる手)は禁じ手。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:vc++ [3.3] 言語:C/C++どちらでも [4] 期限:日が暮れるまで [5] その他の制限: 表示と入力は標準関数で出来る範囲でおk。
コンソールウィンドウの一行の最大文字数ってかえられんの? やったことないし、マウスで引っ張ってもかわらないし
題意が陰関数のプロットなんだが...円であることをあぷりおりに使ってるけど 珠玉のコードだ!
勝手に題意を妄想するなw
952 :
914 :2008/05/17(土) 08:34:14
>>949 早速のご回答ありがとうございました。
まだコンパイル実行はさせてませんが、
あってそうな雰囲気ですね。
参考にさせて頂きます。
任意の陰関数が与えられたときに正常に動作した方が一般的だし 高得点になるとおもうよ。あともし、先生が3乗を2乗と書き間違えている所が あったとしたら通じなくなると作り直さなければならない。
>>953 ああそうだね。その通りだね
天が崩れ落ちてこないか心配だよね
955 :
デフォルトの名無しさん :2008/05/17(土) 08:50:44
結局、簡単な問題をさも難しいかのように書いてたやつがいたってだけか。
上手くデフォルメ出来た949が良い発想だったということ
いやこれは簡単 全て円だからな
だから、計算は楽なんだよ 計算は
金になる宿題をプレゼントするぜ!
6月にマネージャパン、月刊アスキー、週刊アスキーの3誌が賞金総額2000万円の「シストレFXグランプリ」を開催。
5月22日より登録受付開始、6月2日よりグランプリ開始の予定。
○高島社長特別賞(シストレソフト買取価格) 1000万円
○シストレソフト部門賞 1位300万円 2位100万円 3位50万円
○トレード部門賞 1位300万円 2位100万円 3位50万円
http://system-trading.jp/news/index.php?ID=39
>>959 種持ってない人にはいいな
手に入るかどうかも分からない賞金の為に費やす労力を考えると
期間が一年もあるから全自動にしておかないと飽きるけど
961 :
デフォルトの名無しさん :2008/05/17(土) 13:45:40
>>961 #include<stdio.h>
int main()
{
int n, A[5], i, b, maxA, maxindex;
/* 手順(2) 入力と各桁への分解 */
scanf("%d", &n);
i = 5;
b = 10000;
while(i--) {
A[i] = (n / b) % 10;
b /= 10;
}
/* 手順(3) 最大桁の探索 */
/* 同じ数の桁は、より上位を最大桁とする */
i = maxindex = 4;
maxA = A[maxindex];
while(i--) {
if(A[i] > maxA) {
maxindex = i;
maxA = A[i];
}
}
/* 手順(4) 表示 */
printf("%d桁目が%dで最大でした。\n", maxindex+1, maxA);
return 0;
}
i=0; while(i<5) { A[i++] = n % 10; n /= 10; } の方がいいと思うけど
>>959 FX版カブロボかと思ったら違うのね
ところでいろんなスレに貼ってるみたいだけど宣伝?
965 :
デフォルトの名無しさん :2008/05/17(土) 14:41:25
[1] 授業単元:オペレーティングシステム論 [2] 問題文 ?簡単なシェルを作れ ?fork、exec系、wait系のシステムコール(ライブラリ関数)を利用して作る ?最低限、以下の機能を実現する 1.プロンプトを出力する 2.ユーザに端末からコマンドを入力させる 3.新しくプロセスを生成し、そのプロセスが入力されたコマンドのプログラムを実行する 4.そのコマンドの実行(子プロセス)が終了するまでシェル(親プロセス)は、プロンプトを出さずに待つ 5.1に戻る [3] 環境 OS:Windows/Linux コンパイラ:gcc 言語: C [4] 期限: 2008年5/17 16時 実行結果もお願いします
>>961 int x[5],max,ind;
char ca[6];
printf("入力?\n");
scanf("%s",ca);
int c = 4;
while(c>=0)
{
x[c] = ca[4-c]-'0';
c--;
}
c = 1;
max = x[0];
while(c<5)
{
if(max < x[c])
{
max = x[c];
ind = c+1;
}
c++;
}
printf("max:%d\nind:%d\n",max,ind);
また口だけの奴沸きまくりだな 質問者、回答者以外邪魔
>>964 いろんなスレに貼り付けているやつは違うやつ。
969 :
デフォルトの名無しさん :2008/05/17(土) 14:56:05
4,5,6進数の九九の表を作ってください。
970 :
デフォルトの名無しさん :2008/05/17(土) 14:58:44
情報処理の課題です。 C言語を使います。 if文の実習課題です。 【問題】 3つの数字a,b,cを入力し、大きい順に入れ替えて出力するプログラムを作りなさい。 よろしくお願いします。
Linux以外の質問は禁止にしたほうがよさそうだな。 口だけのやつが多すぎる。
>>963 問題文に、5桁目から順番にと書いてある。
>>969 #include<stdio.h>
void print_value(int value, int base)
{
putchar(' ');
putchar((value / base) ? ('0' + value / base) : ' ');
putchar('0' + value % base);
}
void show_matrix(int base)
{
int x, y;
printf("%d進数の九九\n ", base);
for(x = 1; x < base; x ++)
printf(" %2d", x);
printf("\n");
for(y = 1; y < base; y ++) {
printf("%d", y );
for(x = 1; x < base; x ++)
print_value(x*y, base);
printf("\n");
}
printf("\n");
}
int main()
{
show_matrix(4);
show_matrix(5);
show_matrix(6);
}
>>970 >>1 読んで書き直し
制限事項に「if文で大きさの判定をすること」って書くようにね
975 :
デフォルトの名無しさん :2008/05/17(土) 15:28:33
>>970 #include<stdio.h>
void swap(int *x, int *y)
{
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
int main()
{
int a, b, c;
fputs("a = ", stdout);
scanf("%d", &a);
fputs("b = ", stdout);
scanf("%d", &b);
fputs("c = ", stdout);
scanf("%d", &c);
printf("before: a = %d, b = %d, c = %d\n", a, b, c);
if (a < b) swap(&a, &b);
if (b < c) swap(&b, &c);
if (a < b) swap(&a, &b);
printf("after : a = %d, b = %d, c = %d", a, b, c);
return 0;
}
>>664 亀レスなんですが、アルゴリズムの解説をしてもらえませんか?
978 :
◆Tl0XBL9DS2 :2008/05/17(土) 15:34:43
1 情報処理 2 3つの数字a,b,cを入力し、大きい順に入れ替えて出力するプログラムを作りなさい。 3 Windows C言語 4 2008年5月18日00:00まで 5 if文で大きさの判定をする よろしくお願いします。
>>975 ind = Jacobi(n, ct, eps, A, A1, A2, X1, X2); //←こうすべし
981 :
961 :2008/05/17(土) 15:40:58
>>978 #include<stdio.h>
int main( void ){
int a,b,c,d;
printf("a:"); scanf("%d",&a);
printf("b:"); scanf("%d",&b);
printf("c:"); scanf("%d",&c);
if( a < b ){
d = a; a = b; b = d;
}
if( b < c ){
d = c; c = b; b = d;
}
if( a < b ){
d = a; a = b; b = d;
}
printf(" a = %d, b = %d, c = %d\n", a, b, c );
return 0;
}
983 :
デフォルトの名無しさん :2008/05/17(土) 16:22:10
>>980 動作確認、正常に動いてくれました。
本当にありがとうございます。m(__)m
985 :
◆Tl0XBL9DS2 :2008/05/17(土) 16:50:45
986 :
◆8x8z91r9YM :2008/05/17(土) 18:11:50
[1] 授業単元:C言語 [2] 問題文 ・半角文字を入力したときに文字を判別するプログラムを作成せよ ・「e」と入力されたとき、プログラムを終了するか問いかけられるようにせよ([y/n]) [3] 環境 [3.1] OS:Windows XP [3.2] Visual Studio [3.3] 言語:C [4] 期限:08年5月18日まで [5] ・while文かdo while文を使って下さい ・判別する文字はアスキーコードの21(!)〜7D(~)までです
988 :
◆8x8z91r9YM :2008/05/17(土) 18:35:47
>>987 '1'が入力されたら数字、'\'が入力されたら記号といった具合に
scanfで入力した文字をprintfで出力・判別する感じです
言葉足らずですいません
>>988 「といった具合」では問題不備だよ。
・数字
・アルファベット
・記号
この三種類でよい?
アルファベットの大文字小文字は区別する?
990 :
◆8x8z91r9YM :2008/05/17(土) 18:43:20
>>989 大文字と小文字を区別して下さい
度々申し訳ないです
[1] 授業単元:データ構造とアルゴリズム [2] 問題文(含コード&リンク): トポロジカルソートを行うプログラムを作成せよ。 ただし、ソーティングを行うグラフは下記の通り。 #define N 8 int edge[N][N] = { /* 0 1 2 3 4 5 6 7 */ {0,1,0,0,1,0,0,0}, /* 0 */ {0,0,0,0,0,0,1,0}, /* 1 */ {0,0,0,1,0,0,1,0}, /* 2 */ {0,0,0,0,0,0,0,1}, /* 3 */ {0,0,0,0,0,1,0,0}, /* 4 */ {0,0,0,0,0,0,1,0}, /* 5 */ {0,0,0,0,0,0,0,1}, /* 6 */ {0,0,0,0,0,0,0,0} /* 7 */ }; [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名: gcc [3.3] 言語: C [4] 期限: 2008/05/20(Tue) [5] その他の制限: 特にないです よろしくお願いします。
>>986 char c[2];
while(1)
{
printf("入力してください\n");
scanf("%s",c);
if(c[0]=='e')
{
printf("終了?[y/n]\n");
scanf("%s",c);
if(c[0]=='y')
{
printf("終了\n");
return 0;
}
if(c[0]=='n') continue;
}
if(c[0]>=0x21 && c[0]<=0x7D)
{
printf("入力された文字:%c\n",c[0]);
}else{
printf("入力された文字は範囲外\n");
}
}
>>992 トポロジカルオーダーの逆順で表示する
#define N 8
int edge[N][N] = {
/* 0 1 2 3 4 5 6 7 */
{0,1,0,0,1,0,0,0}, /* 0 */
{0,0,0,0,0,0,1,0}, /* 1 */
{0,0,0,1,0,0,1,0}, /* 2 */
{0,0,0,0,0,0,0,1}, /* 3 */
{0,0,0,0,0,1,0,0}, /* 4 */
{0,0,0,0,0,0,1,0}, /* 5 */
{0,0,0,0,0,0,0,1}, /* 6 */
{0,0,0,0,0,0,0,0} /* 7 */
};
int mark[N];
void visit(int v) {
int i;
for (i = 0; i < N; ++i)
if (edge[v][i] && !mark[i]) visit(i);
printf("%d ", v);
mark[v] = 1;
}
main() {
int i;
for (i = 0; i < N; ++i)
if (!mark[i]) visit(i);
}
995 :
◆8x8z91r9YM :2008/05/17(土) 19:55:33
>>993 後出しで申し訳ないのですが、
>>990 に書いてあるとおり数字・記号・アルファベット(大小)の区別もしたいのです…
>>995 if(c[0]>=0x21 && c[0]<=0x7D)
{
printf("入力された文字:%c\n",c[0]);
}else{
printf("入力された文字は範囲外\n");
}
を
if((c[0]>=0x21 && c[0]<=0x2f) || (c[0]>=0x3a && c[0]<=0x40) || (c[0]>=0x5b && c[0]<=0x60) || (c[0]>=0x7b && c[0]<=0x7d))
{
printf("入力された文字は記号の %c\n",c[0]);
continue;
}
if(c[0]>=0x30 && c[0]<=0x39)
{
printf("入力された文字は数字の %c\n",c[0]);
continue;
}
if(c[0]>=0x41 && c[0]<=0x5a)
{
printf("入力された文字は大文字英字の %c\n",c[0]);
continue;
}
if(c[0]>=0x61 && c[0]<=0x7a)
{
printf("入力された文字は小文字英字の %c\n",c[0]);
continue;
}
printf("入力された文字は範囲外\n");
に置き換え
997 :
デフォルトの名無しさん :2008/05/17(土) 20:31:37
2次元配列変数sampleの中身を表示し、sampleの4つの値の平均値をresultの1つの値とする プログラムを作成せよ。 実行例 sample 13 36 18 54 83 12 25 62 19 78 21 5 41 93 87 21 87 11 61 81 68 46 35 98 result 34 42 30 69 56 58 この問題みなさんはできるかな?
>>994 お早い回答ありがとうございます。
とても参考になりましたm(__)m
1000 :
◆8x8z91r9YM :2008/05/17(土) 20:47:41
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。