1 :
デフォルトの名無しさん :
2006/12/24(日) 23:17:00
2げとずさー
3げと
4 :
デフォルトの名無しさん :2006/12/25(月) 21:47:27
6 :
5 :2006/12/25(月) 21:49:04
スマソ 乱数が必要なので、標準関数も必要です。 よろしくお願いします
>>4 その無知講師とやらが誰だか知らんけど、コンパイルできるはずだよ。
Cではプロトタイプ宣言必須じゃないからね。C++では必須だけど。
8 :
デフォルトの名無しさん :2006/12/25(月) 22:33:53
>>7 >はずだよ
はっきりしないね、出来るなら出来るってなぜ実演して確信をもって答えないんですか?
>>4 そこに書かれているのは srand のプロトタイプが
stdlib.h に書かれている、ということだけ。
定義されていない関数であっても ISO 9899:1989 3.3.2.2、
implicit function declaration で定義されていない関数の
呼び出しは適当に解釈されることが保証されている。
# ISO 9899:1999 ではこの機能は撤廃されたので
#
>>7 も必ずしも正しいとはいえない。
昔はできたってだけの話だろ
>>10 現実問題としてC89を受け付けないCコンパイラは存在しないし
C99を受け付けないコンパイラも多い
未だに一番よく使われてるCはC89だよ
そりゃ、C89でプロトタイプ宣言取り込まないのは決して「良いスタイル」 ではないからな。 んでも、コンパイルできるできないって話とは次元が違うよ。
UNIXでgcc使ってたときはstdlib.hを入れたけどなぁ。
普通は入れる。それが良いスタイル。 入れなくともコンパイルはできるけど。 そんだけの話。
18 :
922 :2006/12/26(火) 03:53:17
>>前スレ972さん そのとおりだと思います。 問題事体が文章でなくて聞き取りみたいな感じなので難しい。 time[i] のときの値を data[i] とする。なんですが、このデータは昇順されてるとは言ってないので 初めにソートだけしています。その後がよくわかりません。 いろんなケースあると思うんですが、すべてに対応し切れてないのが現状です。
>>18 ・前スレ923の境界条件
・前スレ922の例の範囲時間110~130で区切り10の場合で結果が3つとなる矛盾
を解決しないと話が進まないよ
> 問題事体が文章でなくて聞き取りみたいな感じなので難しい。 というのは問題の難しさではなく、あんたが問題を理解してないだけ。 そんな問題を又聞きでしか理解できない俺たちに解けるわけがない。 出題者に問題を正確に聞き、仕様をきっちり立ててからもう一度書き込みな。
21 :
デフォルトの名無しさん :2006/12/26(火) 10:17:22
[1] 授業単元:c言語 [2] 問題文(含コード&リンク): yasuo 170.5 70.5 hideaki 176.5 65.8 nobu 166.5 58.2 yuichi 168.0 65.4 この上記の5人の平均の身長と体重、平均の標準体重と肥満率 を求めてください。標準体重は標準体重 = (身長 - 100) * 0.9 で求める。肥満率は(体重 - 標準体重) * 100.0 / 標準体重 で求める。なお、求めた平均身長、平均体重、平均標準体重、 平均肥満率を最後に printf で出力してください nori 152.7 68.6 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C/) [4] 期限: 今日中 [5] その他の制限:
22 :
デフォルトの名無しさん :2006/12/26(火) 10:54:43
1] 授業単元:c言語 [2] 問題文(含コード&リンク): yasuo 170.5 70.5 hideaki 176.5 65.8 nobu 166.5 58.2 yuichi 168.0 65.4 nori 152.7 68.6 この上記の5人の平均の身長と体重、平均の標準体重と肥満率 を求めてください。標準体重は標準体重 = (身長 - 100) * 0.9 で求める。肥満率は(体重 - 標準体重) * 100.0 / 標準体重 で求める。なお、求めた平均身長、平均体重、平均標準体重、 平均肥満率を最後に printf で出力してください [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: 今日中 [5] その他の制限:
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
ttp://www.geocities.jp/c_prog2011/file_4.txt [3] 環境
[3.1] OS: Windows XP Home Edition
[3.2] コンパイラ名とバージョン: Visual Studio 2005
[3.3] 言語: Cのみ
[4] 期限: 2006年12月31日23:59
[5] その他の制限:
よろしくおねがいします。
void main( void ) { struct status { char name[ 20 ]; double height; double weight; double standard; double obese; }; struct status average = { "", 0.0, 0.0, 0.0, 0.0 }, data[ 5 ] = { { "yasuo", 170.5, 70.5 }, { "hideaki", 176.5, 65.8 }, { "nobu", 166.5, 58.2 }, { "yuichi", 168.0, 65.4 }, { "nori", 152.7, 68.6 } }; int i; for ( i = 0; i < 5; i++ ) { average.height += data[ i ].height; average.weight += data[ i ].weight; average.standard += data[ i ].standard = ( data[ i ].height - 100.0 ) * 0.9; average.obese += data[ i ].obese = ( data[ i ].weight - data[ i ].standard ) * 100.0 / data[ i ].standard; } average.height /= 5.0; average.weight /= 5.0; average.standard /= 5.0; average.obese /= 5.0; printf( "average height = %f\n", average.height ); printf( "average weight = %f\n", average.weight ); printf( "average standard = %f\n", average.standard ); printf( "average obese = %f\n", average.obese ); }
>>23 つまんねぇ事聞くけど、なんで片方txtなん?
[1] 授業単元: C言語 [2] 問題文: (1)文字列のリストをファイルから文字列の2次元配列に読み込み、 キーボードから読み込んだ文字列を逐次探索するプログラムを作成する。 (2)2次元の配列とポインタの配列を使って文字列のソートを行う プログラムを作成する。ただしデータはファイルから入力し結果は ファイルに出力するものとする。またアルゴリズムは単純選択法を 使うこと。2次元配列に読み込んだ文字列は移動せず、ポインタを 付け替えることによりソートを行うこと。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年1月5日15:00まで [5] その他の制限: ポインタの章での問題です
27 :
23 :2006/12/26(火) 13:45:50
>>26 超適当に書いた。
#include<stdio.h>
#include<string.h>
int main(void){
char word[80][80],*table[80],*tmp;
int i,j,size;
for(i=0;i<80 && scanf("%79s",word[i])==1;++i)table[i]=word[i];
for(size=i,i=0;i<size;++i)
for(j=i+1;j<size;++j)
if(strcmp(table[i],table[j]) > 0)tmp = table[i],table[i]=table[j],table[j]=tmp;
for(i=0;i<size;++i)printf("%s ",table[i]);
return 0;
}
29 :
デフォルトの名無しさん :2006/12/26(火) 14:42:37
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):下記 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VS2005 C++ [3.3] 言語: C++ [4] 期限: 明日まで サブ関数で周りの画素を配列d[8]に入れたいんですが、どうやればいいでしょうか?returnを使うのではなくポインタを使って直にデータを入れたいんです。 配列ddは画像のピクセルデータがすべて入っている配列です。 void Get8(int i, int j, int dd[], int *d[]) //ポインタで8近傍を返す { *(d)=*dd[i+1][j]; *(d+1)=dd[i+1][j-1]; *(d+2)=dd[i][j-1]; *(d+3)=dd[i-1][j-1]; *(d+4)=dd[i-1][j]; *(d+5)=dd[i-1][j+1]; *(d+6)=dd[i][j+1]; *(d+7)=dd[i+1][j+1]; } void main() { int d[8]; Get8(i,j,dd,d) } イメージとしてはこんな感じなんですが書き方がわかりません>< お願いします。
>>29 こう?
void getNear8(int x, int y, int image[][], int dst[][]){
int dx, dy;
for(dx=-1;dx<=1;dx++)
for(dy=-1;dy<=1;dy++)
dst[dx+1][dy+1]=image[x+dx][y+dy]; //[x][y]なのか[y][x]なのかわかんねーけどいいや
}
最近のコンパイラならコレくらいのforループは展開してくれる・・・はず
展開するってどういう事?
32 :
デフォルトの名無しさん :2006/12/26(火) 15:12:08
#include <iostream.h> #define SIZE 3 void Get8(int i, int j, int dd[][SIZE], int d[]) //ポインタで8近傍を返す { *(d)=dd[i+1][j]; *(d+1)=dd[i+1][j-1]; *(d+2)=dd[i][j-1]; *(d+3)=dd[i-1][j-1]; *(d+4)=dd[i-1][j]; *(d+5)=dd[i-1][j+1]; *(d+6)=dd[i][j+1]; *(d+7)=dd[i+1][j+1]; } void main() { int d[8]; int dd[SIZE][SIZE]={{1,2,3},{4,5,6},{7,8,9}}; Get8(1,1,dd,d); for(int i=0;i<8;i++){ cout<<d[i]<<endl; } }
33 :
デフォルトの名無しさん :2006/12/26(火) 15:43:22
>>30 >>32 ありがとうございました!説明がへたくそですいませんでした。
先生方のを参考にしてやったところうまくできました><
34 :
デフォルトの名無しさん :2006/12/26(火) 18:36:17
[1] 授業単元:プログラミング [2] 【問題文】 文字列を2つ入力し、それを結合して表示するプログラムを作成せよ。 入力文字列(2つ)および結合文字列を格納する変数(配列)はmain()関数内で 各々別個に用意する。 結合文字列を作成する関数str_cat()を自作すること。 →strcat()など文字列操作のライブラリ関数を使わないこと。 2つの文字列は20バイト以内を前提とするが、拡張できるようにすること。 str_cat()の仕様は以下の通り。 ----- str_cat() ---------------------------------------------------- void str_cat(char *文字列1へのポインタ, char *文字列2へのポインタ char *格納先へのポインタ); 引数 :文字列1へのポインタ:結合対象文字列1(先頭)の先頭アドレス 文字列2へのポインタ:結合対象文字列2(後方)の先頭アドレス 格納先へのポインタ :結合文字列格納先の先頭アドレス 返却値:なし ------------------------------------------------------------------- ※「void str_cat(const char*, const char*, char*);」でもよい 【実行例】 Enter String(1) : abcdef Enter String(2) : XYZ Result : abcdefXYZ [3] 環境 [3.1] OS: Windowsxp [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限:2006年12月27日 [5] その他の制限:文字列操作のライブラリ関数は使ってはいけないそうです。
見たことある問題だと思ったが見つからない
void str_cat(const char*a, const char*b, char*c){while(*a)*c=*a,c++,a++;while(*b)*c=*b,c++,b++;}
>>34 #include <stdio.h>
void str_cat(char *str1, char *str2, char* dest)
{
int i=0,j=0;
while(str1[i]){
dest[j] = str1[i];
i++;j++;
}
i=0;
while(str2[i]){
dest[j] = str2[i];
i++;j++;
}
dest[j] = '\0';
}
int main(int c,char **v){
char *str1="やらないか",*str2="アッー!",dest[16]="";
str_cat(str1,str2,dest);
printf(dest);
return 0;
}
>>28 ありがとうございます。
[1] 授業単元: C言語
[2] 問題文: 2問あります
(1)文字列のリストをファイルから文字列の2次元配列に読み込み、
キーボードから読み込んだ文字列を逐次探索するプログラムを作成する。
(2)2次元の配列とポインタの配列を使って文字列のソートを行う
プログラムを作成する。ただしデータはファイルから入力し結果は
ファイルに出力するものとする。またアルゴリズムは単純選択法を
使うこと。2次元配列に読み込んだ文字列は移動せず、ポインタを
付け替えることによりソートを行うこと。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007年1月5日15:00まで
[5] その他の制限: ポインタの章での問題です
内容: [1] 授業単元:Cプログラミング演習 [2] 問題文:学籍番号(5桁の英数文字列)、英、数、国の得点(各100点満点)を 次々に読み込んで、各人の総得点を計算の上、①読み込んだ順に 各人のデータを、②各人の平均と標準偏差を次の形に出力する cプログラムを作成せよ。 但し、プログラム作成においては ・学生の人数は100人以下で不定とする。(100人以下なら何人でも、 プログラムを修正せずにうまく対処しなければならない) ・学生一人のデータは構造体としてまとめて、それにStudentという データ型名をつけること。 ・Student型を要素とする配列を用意してプログラムを組むこと。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cのみ [4] 期限: 2007年1月10日12:00まで その他:得点データはファイルから読み込みます。./a.out<ファイル名 といった風に 前もありましたが複数の回答を比較したいのです よろしくお願いします
>>39 以下のような形で出力してください
Id-No Eng Math Jap Total
----- --- ---- --- -----
G0342 44 65 51 160
G0343 83 100 84 267
G0344 58 30 57 145
.
.
.
G3621 85 80 90 255
G3622 74 100 65 239
------------------------------
Ave 72.5 75.8 68.1 216.4
Dev 15.3 19.6 12.4 33.3
ずれてますが解釈を良心的にお願いします
標準偏差については前スレでも物議をかました(そこまでいってない?)ようですので 解答者の判断に任せます
前に作った人を侮辱したいのか
43 :
デフォルトの名無しさん :2006/12/26(火) 22:17:58
[1] 授業単元:情報技術Ⅱ [2] 問題文(含コード&リンク): 10個の整数をキーボードから入力し,入力されたデータの平均値を求めなさい. さらに,平均値から最も離れているデータと最も近いデータが,それぞれ何番目に入力したか とデータの値を求めて(複数の場合はすべて)表示するプログラムを作成し,提出しなさい. なお,10個のデータをすべて入力し終わってから,平均値などを求めること. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2006年12月28日まで [5] その他の制限:配列まで習いました。 自分でがんばってみましたが、どうしてもできませんでした。 誰かこんな自分を助けてください。
物議ってかますものなのか
46 :
43 :2006/12/26(火) 22:28:30
#include<stdio.h> int main(void) { int i,sum,ave,min,max,samax,samin; int a[10]; for(i=0;i<10;i++){ printf("%d番:",i+1); scanf("%d",a[i]); sum+=a[i]; } ave=sum/10; min=max=a[i]; for(i=0;i<10;i++){ if(a[i]>max) max=a[i]; if(a[i]<max) min=a[i]; } if(max-ave>ave-min) max=samax; こんな感じでやってみたのですが、 途中でわけがわからなくなって断念しました。
scanf & min=max=a[0]; aveは浮動少数じゃなくていいのかな 問題文からするとsumは入力ループよりも下で maxやminの判定の時に位置も決定 もうすこし頑張ってみては?
>>42 侮辱なんてとんでもない
まだコンパイルすらしていません 学校開いてないので
49 :
デフォルトの名無しさん :2006/12/27(水) 01:18:33
>>43 こんな感じで。侮ってかかったら3時間かかってしもーた。まだバグがあるかも。
俺も混乱してるから、デバッグはご自分で!
#include <stdio.h>
#define N 10
#define Abs(x) (x>0) ? x:-x
#define Max(a,b) (a>b) ? a:b
#define Min(a,b) (a<b) ? a:b
int Length(int ave,int x){int A,B,Ans;A= Max(ave,x);B= Min(ave,x);Ans = A-B;return Abs(Ans);}
int main(){
int val[N],Len[N],LenMax=0,LenMin=0,Ave,all=0,i;
for(i=0;i<N;i++){printf("Input data[%d/%d]:",i,N);scanf("%d",&val[i]);}
for(i=0;i<N;i++) all += val[i];
Ave = all/N;
for(i=0;i<N;i++) Len[i] = Length(Ave,val[i]);
LenMax=LenMin=Len[0];
for(i=0;i<N;i++){LenMax = Max(Len[i],LenMax);LenMin = Min(Len[i],LenMin);}
printf("Ave=%d",Ave);
printf("\nMin=%d\n",LenMin);
for(i=0;i<N;i++) if(Len[i] == LenMin){printf("[%d:%d:%d]",i,Len[i],val[i]);}
printf("\nMax=%d\n",LenMax);
for(i=0;i<N;i++) if(Len[i] == LenMax){printf("[%d:%d:%d]",i,Len[i],val[i]);}
return 0;
}
50 :
デフォルトの名無しさん :2006/12/27(水) 01:47:42
>>43 #include <stdio.h>
#include <math.h>
int main()
{
int num[10]={0};
char buff[256] = {'\0'};
int average;
int max =0,min=0;
int temp=0;
int i=9,j=0,k=0;
while(i >= 0){
fgets(buff,sizeof(buff),stdin);
sscanf(buff,"%d",&num[i]);
i--;
}
i=9;while(i >= 0){temp +=num[i];i--;}
i= 9;average = temp/10;temp = max = min = abs(average - num[i]);
while(i>=0){temp = abs(average - num[i]);if(temp >= max){max = temp;
j=i;}if(temp <= min){min = temp;k = i;}i--;}for(i=0; i< 10; i++)
printf("num[%d] = %d ",i,num[i]);putchar('\n');
printf("Max num[%d]= %d Min num[%d]= %d Average = %d \n",j,num[j],k,num[k], average);
return 0;
}
51 :
デフォルトの名無しさん :2006/12/27(水) 10:34:54
オッス!オラ悟空!オラにも簡単に答えられる宿題を出してくれ!
52 :
デフォルトの名無しさん :2006/12/27(水) 10:50:01
53 :
デフォルトの名無しさん :2006/12/27(水) 10:50:17
>>51 [1] 授業単元:年忘れプログラミング
[2] 問題文(含コード&リンク):
C言語のソースファイルを読み込み、ifとelseを使わないソースファイルに変換するプログラムを作成せよ。
(但し変換されたソースは元のプログラムと同等の処理を行えるものとする)
[3] 環境
[3.1] OS: なんでもOK
[3.2] コンパイラ名とバージョン: なんでもOK
[3.3] 言語: C/C++
[4] 期限: 12月31日23時59分
[5] その他の制限: 特になし
55 :
デフォルトの名無しさん :2006/12/27(水) 11:32:16
if (CONDITION){ EXPRESSION_A } else { EXPRESSION_B } ↑これを、↓こうする感じ? for (BOOL b = TRUE; b && CONDITION; b = FALSE) { EXPRESSION_A } for (BOOL b = TRUE; b && !CONDITION; b = FALSE) { EXPRESSION_B } よく考えたら三項演算子のほうが早いか……orz
CONDITION が複数回評価されると等価にならなくなる可能性がでてくるので、 下のような、コンパイラがやってるっぽいことをすればいいと思う (CONDITION)?goto LABEL_IF_TRUE001:goto LABEL_IF_FALSE001; LABEL_IF_TRUE001: ... goto LABEL_IF_END001 LABEL_IF_FALSE001: ... LABEL_IF_END001:
>>57 gotoは文であって式ではないから三項演算子の被演算子にならない。
三項演算子を使うには関数にしないといけない?
↓みたいな時に困らないか?
for(i=0;i<sizeof(buff)/sizeof(buff[0]);++i)
if(!buff[i] || buff[i]=='\n') break;
>>57 のやり方がいいのかも
{
switch((!buff[i] || buff[i]=='\n') != 0){
case 0: goto LABEL_IF_FALSE001;
}
break;
goto LABEL_IF_END001;
LABEL_IF_FALSE001:
LABEL_IF_END001:;
}
61 :
5 :2006/12/27(水) 22:06:04
>>16 様、
>>17 様
ありがとうございます。参考にさせていただきます!!
実は、冬季課題Cというのが冬季課題Bの下にありまして、
それは「冬季課題Aを複合台形公式を用いた自動積分法のプログラムを作成せよ」に
なっております。
もしよろしければ、引き続きお願いできないでしょうか?
テンプレは以下の通りになります。
[1] 数値解析応用
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3286.zip ※
>>5 のAの問題をCに書き換えました。実際のスキャナ画像ではありませんが、内容は全く同じです。
[3] 環境
[3.1] OS:Linux RedHat9.0
[3.2] コンパイラ名とバージョン: gcc(バージョン不明...)
[3.3] 言語: C言語
[4] 期限:2006年12月31日23:00まで(2006年12月31日23:59までにメール提出となっています)
[5] その他の制限:特にありません。
よろしくお願いします。
[1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク): こちらの画像をご覧ください。。。
http://up.kabubu.net/cgi/img2/19186.jpg [3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VC2005
[3.3] 言語: C/C++
[4] 期限: 2006.12.28
[5] その他の制限: for文を使用してください。
よろしくおねがいします。。。。
65 :
43 :2006/12/28(木) 00:15:51
>>64 #include <stdio.h>
#include <math.h>
#define N 50
int main() {
int i;
double x[N], ave=0.0, ss=0.0, var, std, err;
FILE *fp = fopen("kadai4.dat", "r");
if (fp == NULL) return 1;
for (i=0; i<N; i++) {
fscanf(fp, "%lf", &x[i]);
printf("%6.3f", x[i]); if ((i+1)%10 == 0) printf("\n");
}
fclose(fp);
for (i=0; i<N; i++) ave += x[i]; ave /= N;
for (i=0; i<N; i++) ss += pow(x[i]-ave,2);
var = ss/N; std = sqrt(var); err = 3.0 * std;
printf("平均値 : Xm = %f\n", ave);
printf("分散値 : Var = %f\n", var);
printf("標準偏差 : std = %f\n", std);
printf("誤差範囲 : Err = ±%f\n", err);
return 0;
}
67 :
23 :2006/12/28(木) 19:04:25
すいません、問題文間違えていました。
68 :
64 :2006/12/28(木) 23:40:29
>>66 ありがとうございます!
おかげさまで助かりました。。。
>>68 * 実際の板厚が知りたいのなら標準偏差ではなく標準誤差では?
* 母集団は無限なんだから不偏分散を使うべきでは?
と先生に聞いといて下さい。
先日も同じ質問をしたのですが もう一度お答え頂けるとありがたいです。 [1] 授業単元: C言語 [2] 問題文: 2問あります (1)文字列のリストをファイルから文字列の2次元配列に読み込み、 キーボードから読み込んだ文字列を逐次探索するプログラムを作成する。 (2)2次元の配列とポインタの配列を使って文字列のソートを行う プログラムを作成する。ただしデータはファイルから入力し結果は ファイルに出力するものとする。またアルゴリズムは単純選択法を 使うこと。2次元配列に読み込んだ文字列は移動せず、ポインタを 付け替えることによりソートを行うこと。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年1月5日15:00まで [5] その他の制限: ポインタの章での問題です
なぜ?
73 :
デフォルトの名無しさん :2006/12/30(土) 08:46:31
[1]授業単元: [2]問題文: 数列 a = [a_1, ..., a_n] が与えられる。 これをバブルソートするときの要素の交換回数を効率よく求めよ。 [3]環境 [3.1]OS、コンパイラ問わず。 [3.2]言語:どちらでも可。 [4]期限:一月三日。 [5]その他の制限:特になし。
うまく機能しなかったんじゃない?
[1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク): こちらの画像をご覧ください・・・・・
ttp://up.kabubu.net/cgi/img2/19360.jpg [3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VS2005
[3.3] 言語: C/C++
[4] 期限: 06.12.31
[5] その他の制限:for文でお願いします
お世話になってます。よろしくお願いします。
77 :
デフォルトの名無しさん :2006/12/31(日) 00:31:34
たまには自分でやろうな
なんだと?誰に向かって言ってるんだお前
80 :
77 :2006/12/31(日) 00:55:12
82 :
デフォルトの名無しさん :2006/12/31(日) 07:39:01
オッス!オラ悟空!今年も、もう今日で終わり、なんだかわくわくしてきたぞ! オラでも年明けまでに余裕で解ける宿題を出してくれ!
つ四則演算
っ計算機・・・GUIで
[1] 授業単元: 基礎プログラミング [2] 問題文(含コード&リンク): 1. 入力の行数を数えるプログラムを作れ。 2. 入力中に現れる「NG」という単語を全て「OK」に置き換えて出力するプログラムを作れ。 3. 関数pop とpush を定義し、スタックを実装せよ。 4. スタックを用いて、逆ポーランド記法で四則演算を行うことのできるプログラムを作れ。 5. クイックソートを実装せよ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:borland [3.3] 言語: C/C++ [4] 期限: [5] その他の制限: よろしくお願いします。
87 :
デフォルトの名無しさん :2006/12/31(日) 21:39:40
[1] 情報論 [2] 1) N×Nマス目のフロアを前後左右に移動することができるロボットがある。 スタート地点は常に左上(x,y)=(0,0)であり、全マス目を一度だけ通り、通った順序を表示するプログラムを作りなさい。 フロアには障害物を置けるようにする。 条件を満たすものがない場合、できませんでした。と表示したい。 [3] 環境 [3.1] Linux [3.2] gcc 4.0 [3.3] 言語:C [4] 期限: [5] その他の制限: 特になし。
88 :
@part1 :2007/01/01(月) 00:47:41
3日くらいやっていましたが、出来なくて困っています。 どうしていいのかわかりません。 申し訳ありませんが、お助けください! [1] コンピュータプログラミング [2] 問題文 ------------------------------------------------------------------------ サッカーのリーグ戦の順位表を記述した(添付されたファイル)CSVファイルをD&Dで入力することで、 ①誤りがある場合、質問形式で修正でき、・・・・・※ ②1試合分の結果を反映でき、 ③結果を新しいファイル(形式はCSV & html)として出力できる、 コンソールアプリケーションを作成しなさい。 (チーム数は、入力したCSVによって決定されるものとする)
89 :
デフォルトの名無しさん :2007/01/01(月) 00:48:21
順位は、 ・勝ち点によって決定する。 ・勝ち点が同じ場合は、得失点差によって決定する。 ・得失点差が同じ場合は、得点のよって決定する。 ・得点も同じ場合は、同じ順位とする。 勝ち点は、次のようになる。 ・“勝ち”→ 勝ち点が 3増える。 ・“引分”→ 勝ち点が 1増える。 ・“負け”→ 勝ち点は増えない。 ※ 順位の付け方、勝ち点の計算等、矛盾がある場合は、 順位,勝ちの数,引分の数,負けの数,得点,失点,得失点,勝点 のいずれに問題があるかを質問形式で修正できるようにする。 試合は、○回戦総当りときまってはいない。 ------------------------------------------------------------------------
90 :
@part3 :2007/01/01(月) 00:49:31
>>85 4.のみ。ここで解凍
http://www.geocities.jp/c_cpp_cs/code/code.html dZLBTsMwDIbPRdo7mHJYOqAwJi7d2A2uPEOWZGu0LqkSl62gvTtu2sJGmVS1jv35t+v4RhtRVFLBQgi
sS7UcXd38uLT16BTfnTn9fz7kYksebRB2XBuWwNfoKkJXh2/kUWZZgBbSVqtCLcHPTwJOm00rC96zeJ
o+w1M6g1uYpY8wiZNfVtgKYbEgLKUEqtPYTUAZWQRM5NyBCGZbC2Q47HNNNmMCXprsjUKWJHD9Aq/vb
227UaTXwIKa9lJvNDKR9KGIcsoKV/QP5J33PlguO306EeBzJrvoEVThVZ/e9XK4g7rD66aRFG3JkjkZ
ZTDa0OFyyO81ihyoh15ZcKoyvh1n7bFv40Djqyl9RWPdzk/R+yF6fwGdDNHJBfRhiD4MUKnWvCqwJzF
3dg+xNh+80BJsqRxH667jDj+2gwzv/s5CKLjCbaVefyoWLnKawB9BdSid8l5b00me7VDMjd8rl8Vhib
pxN5RTWDkDj82hqSR4O3JrPEKzXxNQziUnu91LknuwkaRAzzc=
>>85 1.
#include <iostream>
#include <string>
int main() {
std::string str;
int n = 0;
while (std::getline(std::cin, str)) ++n;
std::cout << n << " lines" << std::endl;
return 0;
}
>>85 3. ここで解凍
http://www.geocities.jp/c_cpp_cs/code/code.html jVRNb+IwED0Hif8w2wNyIFSlR772ttLew2lVRSEYEW0aR44DYiv623c8dhInQOmhJZ5582bmzdiKvxd
ZrDgs1bngefzOIZwF0B5e18PBUaQ7SEReKlklioWzMRSBMSBgBMc4q7gPH8OBl/MTsMJHEmasi+HgMh
yo6zSbmnjHkVec2QZZDUkxXX9u2P3QX0KeYrn7rbiMlZB9op4b9qksVdCPgiwulcl3OqQZB0Y4+LFyP
F7NORqTV9fkeZMJHfT35WF75Sku2GYEcQD4f2t4N6BDWOwvIIYVbBewxR9tu9t0iIQJVlZCqeLkb5Qi
QnMV1TZLkzmStnZWpv94pED/IO+Lr6uewzFiiFFpEiXY4TIcr5lBIAR+4t8cRGHVwUGSU+xZ6MOYqHz
fDzQTwJESEKAxVSXfRYxyfWAL3qdTT0/NYxRgMRMbY0RtMu94xhVHjG8F9lodW8oRCHXg0gd1kOJUJ5
jPCab5yf1sWRoH1d046dQFUEUNoK1P1xGOsWp9sPKaeNdAeDQUMj3i+HpTMTfG6YGYOz1ZEVa3sZfFd
1bjxlbcWQhNbKdYT83Aney10G6EUYe+a410vIbYu+T6YAk3AszAvPZZsd4IJuACg25w9Md1vpnh4Y10
rWS72KHVTdxStlkiqsWIRxfTmInHENNyaJepw7gkV5XMYawOaVnviBU6EVWucCtNsg8H3S+0WfCiKg+
2uHAE9QOU7nti4mW1Z7O9VkeneNeNN/cVBZ1Znex0qJG6xCV050JOKqaR3MXXkrcw+yp+pdQFeFby74
9cPZ6r1kgU7AuZXuzjAE9cSiHnoOdkrwh+YInq/Py0uJ5Nd8dgCrO37qQe5TUCdXJTNps8ifNcKE1j0
zviTKdXHTfP5h25fFeXmy/PMlybCHpD/gM=
>>85 2.
#include <iostream>
#include <string>
std::string replace_all(const std::string& source, const std::string& pattern, const std::string& placement) {
std::string result;
std::string::size_type pos_before = 0, pos = 0, len = pattern.size();
while((pos = source.find(pattern, pos)) != std::string::npos) {
result.append(source, pos_before, pos - pos_before);
result.append(placement);
pos += len ;
pos_before = pos ;
}
result.append(source, pos_before, source.size() - pos_before) ;
return result;
}
int main() {
std::string str;
while (std::getline(std::cin, str)) std::cout << replace_all(str, std::string("NG"), std::string("OK")) << std::endl;
return 0;
}
95 :
デフォルトの名無しさん :2007/01/01(月) 11:21:25
>>73 バブルソートの交換回数は a[i] > a[j] (i < j) なる要素対の数だから
それをマージソートしながら数えてやる.計算量 O(n log n).
#include <iostream>
#include <vector>
using namespace std;
int bubble_count(const vector<int> &a) {
int count = 0;
int n = a.size() / 2;
if (n > 1) {
vector<int> b(a.begin(), a.begin() + n/2);
vector<int> c(a.begin() + n/2, a.end);
count += bubble_count(b);
count += bubble_count(c);
for (int i = 0, j = 0, k = 0; i < n; ++i) {
if (k == c.size()) a[i] = b[j++];
else if (j == b.size()) a[i] = c[k++];
else if (b[j] <= c[k]) a[i] = b[j++];
else { a[i] = c[k++]; count += n/2 - j; }
}
}
return count;
}
96 :
デフォルトの名無しさん :2007/01/01(月) 11:40:15
交換回数と比較回数を勘違いしないように(・∀・)
すまん、なんかプログラムが大きく間違ってた. 方針は間違ってないはずなのでしばし待たれ.
98 :
95 :2007/01/01(月) 12:32:45
>>95 そんなに大きくは間違ってなかった.
const, int n = a.size()/2, a.end をそれぞれ適当に修正すれば
正しく動くはず.やっぱりコンパイルくらい通さないと駄目だな.
>>96 で,俺何か勘違いしてる?
このアルゴリズムの正当性は容易に証明できるし,
for (int i = 0; i < n; ++i)
for (int j = 0; j+1 < n; ++j)
if (a[j] > a[j+1]) { swap(a[j], a[j+1]); ++count; }
の結果と比較しても厳密に一致するけど.
99 :
デフォルトの名無しさん :2007/01/01(月) 13:46:13
100 :
デフォルトの名無しさん :2007/01/01(月) 13:48:42
>>98 > 俺何か勘違いしてる?
ヒント:main関数がない
>>99 申し訳ない、よくわからないので、もっとはっきりと言って貰えないかな?
>>100 入力がどう与えられるか書かれていないので省略したのだけど、駄目?
>バブルソートの交換回数は a[i] > a[j] (i < j) なる要素対の数だから >交換回数は、元のデータ列によって異なる 並び順によって異なる交換回数を要素の数から判断はできない
>>73 バブルソートの交換回数を調べる
#include<stdio.h>
#include<stdlib.h>
#define ARRAY_SIZE 10
typedef struct tag_qsort_data{
int *ptr;
}qsort_data;
int qsort_data_compare(const void *ptr1, const void *ptr2){
const qsort_data *a, *b;
a=ptr1;b=ptr2;
return *(b->ptr)-*(a->ptr);
}
int main(void){
qsort_data *qsort_array;
int a[ARRAY_SIZE];
int i, n=ARRAY_SIZE, swap_total_2=0;
for(i=0;i<n;i++) a[i]=rand()%100;
qsort_array=malloc(sizeof(qsort_data)*n);
for(i=0;i<n;i++) qsort_array[i].ptr=&a[i];
qsort(qsort_array, n, sizeof(qsort_array[0]), qsort_data_compare);
for(i=0;i<n;i++)
swap_total_2+=abs(qsort_array[i].ptr-&a[i]);
free(qsort_array);
printf("bubble sort swap num: %d\n", swap_total_2/2);
return 0;
}
105 :
デフォルトの名無しさん :2007/01/01(月) 15:24:11
101 名前:デフォルトの名無しさん 投稿日:2007/01/01(月) 14:35:24
>>99 申し訳ない、よくわからないので、もっとはっきりと言って貰えないかな?
95 名前:デフォルトの名無しさん 投稿日:2007/01/01(月) 11:21:25
>>73 バブルソートの交換回数は a[i] > a[j] (i < j) なる要素対の数だから
それをマージソートしながら数えてやる.計算量 O(n log n).
106 :
103 :2007/01/01(月) 15:32:55
>>103 元データを {1, 2, 3} とするとバブルソートしたとき
{2, 1, 3}
{2, 3, 1}
{3, 2, 1}
2 3 1
2 1 3
1 2 3
途中で送信してもうた orz
元データを {1, 2, 3} とするとバブルソートしたとき
{1, 2, 3}
{2, 1, 3}
{2, 3, 1}
{3, 2, 1}
となるが
>>103 のアルゴリズムだと
上記の 2 が移動した回数がカウントされない
109 :
95 :2007/01/01(月) 15:54:22
>>105 102 の「並び順によって異なる交換回数を要素の数から
判断はできない」というのは明らかに正しい主張だけれど,
それは 95 の「交換回数は a[i] > a[j] (i < j) なる要素対の数」
という主張に矛盾しない.
後者は条件を満たす要素のペアの数なので,並び順を実際に
見ていることになる.決して要素の数だけで判断しているわけではない.
110 :
デフォルトの名無しさん :2007/01/01(月) 18:31:51
手元にある複数の楽曲ファイルを組み合わせて、手持ちの記録媒体(CD等)の空きが最も少なくなるようなコピーのしかたを決定する。 という問題ですがどうやったらいいか分からないので教えてください
[1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク): こちらの画像をご覧ください・・・・
ttp://up.kabubu.net/cgi/img2/19509.jpg [3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VS2005
[3.3] 言語: C++
[4] 期限: 07.01.03
[5] その他の制限:for文でお願いします
お世話になってます。
前回も同じ質問をしましたが、C/C++と記入ミスをしていたので、Cで答えていただきました。
しかし、科目がC++ですので、C++でお願いします。。。
よろしくお願いします。
113 :
デフォルトの名無しさん :2007/01/02(火) 00:29:01
>>113 Nの範囲はどれくらいまで?
全探索して解くアルゴリズムは思いついたけど
これだとNの値がある程度より増えると急激に難しくなる。
効率のいいやつは考え中。
>>112 正月で暇だからやってみる
小一時間待ってろ
116 :
112 :2007/01/02(火) 00:42:51
>>115 ありがとうございます。
でももう眠いので寝てもいいでしょうか。。。
[1] 授業単元:情報技術 [2] 問題文(含コード&リンク): 2次元配列を用いて九九(9×9)の一覧表を計算して表示するプログラムを作りなさい. ただし,各値は配列の初期化を使用せずに,計算で求めること. また,一覧表の各値は整数3桁とする. 表示例: >> a.out 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:1月4日 正月早々申し訳ございませんが、よろしくお願いします。
>>118 #include <stdio.h>
int main(void) {
int i, j;
for (i = 1; i <= 9; i++){
for (j = 1; j <= 9; j++) printf("%3d", i * j);
printf("\n");
}
}
>>118 #include <stdio.h>
int main(void)
{
int i, j;
int a[9][9];
for (i = 0; i < 9; ++i) {
for (j = 0; j < 9; ++j) {
a[i][j] = (i + 1) * (j + 1);
}
}
for (i = 0; i < 9; ++i) {
for (j = 0; j < 9; ++j) {
printf("%3d", a[i][j]);
}
puts("");
}
return 0;
}
121 :
118 :2007/01/02(火) 02:26:20
迅速なご回答ありがとうございます。
122 :
77 :2007/01/02(火) 02:29:11
>>122 見てみたけど、中途半端なC++具合だな。互換性があるからいいんだと
言われればそれまでだが。
124 :
デフォルトの名無しさん :2007/01/02(火) 02:53:06
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): main関数内でchar str[] = "channel";を宣言する。 ユーザ定義関数で文字列を大文字→小文字、小文字→大文字に変換する機能を持たせる。 変換後の表示はmain内で行う。以下のようにプロトタイプ宣言をする。 void upper( char *p_data); [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc3.4 [3.3] 言語: C [4] 期限: なし [5] その他の制限:C1年生の初心者なので入門書レベルのコードでお願いします。 よろしくお願いします
125 :
77 :2007/01/02(火) 02:59:31
>>123 sprintfの部分と関数分割してないところ?
sprintf俺C++でよく使うんだが。。。
126 :
77 :2007/01/02(火) 03:00:54
あと定数にconst つけてねーや 忘れてたごめん
>>124 #include <ctype.h>
#include <stdio.h>
void upper(char *p_data);
void lower(char *p_data);
int main(void) {
char str[] = "channel";
upper(str);
printf("%s\n", str);
lower(str);
printf("%s\n", str);
return 0;
}
void upper(char *p_data) {
while (*p_data != '\0') {
*p_data = toupper(*p_data);
p_data++;
}
}
void lower(char *p_data) {
while (*p_data != '\0') {
*p_data = tolower(*p_data);
p_data++;
}
}
128 :
124 :2007/01/02(火) 03:07:54
>>127 さんありがとうございます!
<訂正>
void lower(char *p_data);
書き忘れてました。すいません。
>>126 ・変数を全て関数の先頭で宣言している。
・sprintfを使用している。(しかも<cstdio>のインクルードがない)
・fileはスコープを抜ければ自動的にcloseするのだから不要。
・str[200]なる決め打ちマジックナンバーが存在している。
以上について、個人的にはあまり好ましくないと感じる。あくまで、個人的に。
130 :
124 :2007/01/02(火) 03:19:41
最後にもう一問だけお願いします。 [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 最長10文字の文字列2件入力しchar型配列に格納。 2つを比較し同じなら「equal!」異なってたら「Not equal!」を表示(main関数内で) ただし一件ごとの入力処理は下記のプロトタイプ宣言を持つユーザ定義関数で行う void get_string(char *p_str, int size); /*1番目の引数は文字列を格納する配列の先頭アドレス、2番目の引数配列サイズ) [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc3.4 [3.3] 言語: C [4] 期限: なし [5] その他の制限:C1年生の初心者なので入門書レベルのコードでお願いします。 よろしくお願いします
>>129 >・変数を全て関数の先頭で宣言している。
Effective C++に変数は必要なときに使えって書いてあったの思い出した、すません。
>・sprintfを使用している。(しかも<cstdio>のインクルードがない)
sprintfはてっきりC++標準かと思ってた
>・fileはスコープを抜ければ自動的にcloseするのだから不要。
初耳。勉強になった
>・str[200]なる決め打ちマジックナンバーが存在している。
これは普通にすいません。
>>129 ではないが。
>>131 sprintf()はc++標準関数でもあるが、使うのならcstdioをincludeしないのはまずい
ってこったろ。
実際にはiostreamあたりから間接的にincludeされるからコンパイル
できるんだろうが、それが保障されてるわけじゃないしな。
あと、せっかくcmathインクルードしてるんだし、π は M_PI
π/4 は M_PI_4 でいいんじゃないのか?
>(double)time
このキャストも不要だな。
>>114 効率のよいアルゴリズムはおそらく存在しない.
これは制限格子上のハミルトン閉路問題なので,
NP 完全問題になる.
134 :
デフォルトの名無しさん :2007/01/02(火) 08:18:21
いつも思うんだが、なんでみんな回答が違うの? 効率とか速度を考えれば似たような物に行きつくと思うのだが・・・ 各人の癖、というやつか?
135 :
デフォルトの名無しさん :2007/01/02(火) 08:29:02
そもそも効率とか速度を考慮するような問題がほとんど(ry
効率の悪いやり方をするんじゃねーぞゴルァ って出題者の隠れたお言葉に気づき賜えw
だれが書いてもほとんど同じのお馴染みの問題ばかり 効率悪く書く方が難しい
だから課題を出された生徒に対してであって、ここの回答者に対してじゃないってw ありきたりの答えなんだから、妙なやり方をするんじゃねーぞと
139 :
70 :2007/01/02(火) 09:58:07
140 :
87 :2007/01/02(火) 10:48:08
>>114 Nはそれほど大きくはないかと思います。せいぜい20くらいがよければいいです。
141 :
87 :2007/01/02(火) 11:09:43
>>114 すいません。間違えました。
20程度ができれば大丈夫です。
>>142 さすがにgets()はどうかと。
↓ぐらいにしとけや。
void get_string(char *p_str, int size)
{
int c, i;
for (i = 0; i < size-1 && (c = getchar()) != EOF && c != '\n'; ++i)
p_str[i] = c;
p_str[i] = '\0';
}
144 :
デフォルトの名無しさん :2007/01/02(火) 11:42:09
>>143 フィギュアスケートの織田信成だって最後はゲッツ!でしめてだ、良いじゃねーかw
ちうか何が しとけや だ?てめぇ?ぶちのめすぞ?偉そうにしている割には
てめぇのソースくそ杉w 冬厨がでしゃばってじゃねーぞたこw
145 :
デフォルトの名無しさん :2007/01/02(火) 11:43:36
>>143 っつーかお前、それを入れ替えたソースをコンパイルしてみろ。
正常に実行されないからw
146 :
デフォルトの名無しさん :2007/01/02(火) 11:45:08
>>143 10文字より多く入力した場合を考える必要はないが
もし11文字以上入力した場合、それだとおかしくなるよ
お前の汎用性のなさはどうでも良い。
どうしてそういうソースを書いたか理解できないなら
いちいちくそレスしないで自分で書いたソースを提出しろ、餓鬼
147 :
デフォルトの名無しさん :2007/01/02(火) 11:47:45
>>143 ぷぷっ、なんだそれ?w
かっこつけたつもりが自爆してやんのw
148 :
デフォルトの名無しさん :2007/01/02(火) 11:48:24
>>143 > c != '\n'
なんだこれ?お前バカじゃね?小学生からやり直せやw
>>144 一体何をファビョってんのかね君は。
>>142 のget_string()は
>>143 よりも長い上に、バッファオーバーランを
防ぎようが無い、互換性のためだけに残されている非推奨関数gets()を使っている。
main()ではstrcmp()を使っていながら、バイトコピーにmemcpy()を
使っていない点も不可解だ。というか、入力範囲外まで無駄にコピーしてるな。
>>130 の環境はlinux&gccだが、gccならget()を使っているコードには
文句を言ってくるよ。
151 :
デフォルトの名無しさん :2007/01/02(火) 11:55:17
>>149 >バッファオーバーランを 防ぎようが無い
余裕で防いでいるが?お前のソースの方が防げていないことが
11文字以上入力した場合に不正に処理されることでバレバレw
良いから知ったかは黙ってろ、初心者めが。ここでレスすることで
上級者気取りか?ばーーーかwwww
他人のソースをどうこう言うくせに、お前はmainから書いたソース出してねーじゃんw
ぐだぐだ言う前にてめぇが1から書いたソースを出せばそれで良いんだよ。
それが分からないならこんなスレにくるな、日ごろここに来ていない冬厨w
152 :
デフォルトの名無しさん :2007/01/02(火) 11:55:52
swapしたいんですけど分かりません。reinterpret_castを使うみたいですけど。。。 #include <stdio.h> void swap(int *x,int *y); void main(void) { int i; int x[3]={1,2,3}; int y[3]={4,5,6}; printf("関数実行前\n"); for(i=0; i<3; i++){ printf("x[%d] = %d y[%d] = %d\n", i,x[i],i,y[i]);} printf("関数実行後\n"); for(i=0; i<3; i++){ swap(&x, &y); printf("x[%d] = %d y[%d] = %d\n", i,x[i],i,y[i]); } } void swap(int *x,int *y) { int tmp; tmp = *x; *x = *y; *y = tmp; }
153 :
デフォルトの名無しさん :2007/01/02(火) 11:56:42
143 名前:デフォルトの名無しさん 投稿日:2007/01/02(火) 11:38:30
>>142 さすがにgets()はどうかと。
↓ぐらいにしとけや。
void get_string(char *p_str, int size)
{
int c, i;
for (i = 0; i < size-1 && (c = getchar()) != EOF && c != '\n'; ++i)
p_str[i] = c;
p_str[i] = '\0';
↓ぐらいにしとけや。
↓ぐらいにしとけや。
(c = getchar()) != EOF && c != '\n'; ++i
(c = getchar()) != EOF && c != '\n'; ++i
>入力範囲外まで無駄にコピー
意味不明。ちゃんと10文字で処理されてますが?w
とにかくうぜぇからバカじゃないって証明したいなら
お前がmainから書き出せ、以上。これ以上お前との言い合いは無意味。
お前がソースを書けば良いだけ。他人の粗探ししているくらいならやれ。
粗探しのつもりが自分の無知を晒すとはなw どこの三流以下の大学生だ?w
あっ、専門学校程度か、わりぃわりぃ、お前じゃ話にならねーかw
154 :
デフォルトの名無しさん :2007/01/02(火) 11:58:06
156 :
デフォルトの名無しさん :2007/01/02(火) 11:58:53
>>155 お前のソースを書け、プログラマの常識だからw
>>152 swap() に与える引数
たぶんx,yの要素全部入れ替えたいんだろからアドレスちゃんと渡さないと
>>152 > swap(&x, &y);
swap(&x[i], &y[i]);
159 :
152 :2007/01/02(火) 12:01:04
ありがとうございます。
>>155 ちゃんとそれを理解して言っているのか?
起こる場合の説明について
# ユーザが200文字以上のメールアドレスを入力する。
# プログラムがバッファの大きさをチェックせずに入力データを書き込む。
# バッファとして確保した領域をはみだしてデータが書き込まれてしまう。
比較するのに使う文字列を格納するs1、s2にはそれが起こらない措置をとっているが?
何のための char buf[256]を用意して文字列を10文字以内でコピーしているか理解しろよw
んじゃな、三流プログラマw
>>155 >仮にはみ出した部分にプログラムの動作上意味を持つデータがあれば、
>これを上書きして破壊することにより、プログラムはユーザの意図しない挙動を示すであろう。
>>143 で11文字以上入力するとおかしくなるんすけどぉ~?
>>160 えーとね。
試しに、256文字以上入力してみなよ。そうすりゃ分かるから。
君は256byteしかバッファを用意していないが、gets()はそんなことは
無関係にバファオーバーランを引き起こすのよ。
だから、危険な関数なの。
>>161 何が「おかしく」なるのか言ってみそ?
少なくともバッファオーバーランは起きず、次回のget_string()で
続きの文字が読み取られるだけだろう?
「11文字以上入力された行については、残りの文字は全て破棄する」などという
仕様はどこにもないが、もしそうであれば、そのように書くのも簡単だ。
が、gets()だけはまずい。
>>143 が想像を絶する無能でFAなのになんでこじれるのよ
アホはアホでスルーしとけ
つうかここまでファビョった奴は流石にはじめて見たわ
何を指摘されてるのか、何が問題なのかもさっぱり理解もしてないし……
小学生か?
>>142
166 :
デフォルトの名無しさん :2007/01/02(火) 12:14:24
>>165 いや、何が問題かの指摘を分かっているかどうかはともかく
>>143 が偉そうにレスした割には、ソース全部を書いていない他人の批判で
なおかつそのソースが不完全どころか自分がバッファオーバーランをする
ソースを書いているのが笑えるw
お前が幼稚園以下の知能の低いサルだなw
悔しかったら自分で書いたソースを出せよ?プログラマの常識だろ?w
>>166 えーと、君、バッファオーバーランの意味分かってるのか?
>>143 のソースではバッファオーバーランは発生しないのだが。
168 :
デフォルトの名無しさん :2007/01/02(火) 12:15:55
>>162 >試しに、256文字以上入力してみなよ
bufに問題が起こるのはわかっているが、それを指摘する前に
お前がちゃんとソースを書けよ?うざいんだよ、このスレの趣旨分かってねーだろ?
ここは他人のソースを批判しにくるスレじゃない。ごちゃごちゃ言うまえに
てめぇ正しいソースを書いてから一蹴しろ?
お前のやっていることは、他人の落ち度を 自分基準 で言う割には
自分の基準もぐだぐだで、指摘したつもりがそれも間違っていて
恥さらしをしただけだな。とにかくごちゃごちゃ言ってないでお前の書いたソースを出せ、でなきゃ黙ってろ。
169 :
デフォルトの名無しさん :2007/01/02(火) 12:17:15
>>167 いや、余裕でしているよ。11文字以上入力してみろよ?
256文字も打つ気しないなぁ。人間って間違えるからさ
10文字入力したつもりでも1文字くらい多く入力しちゃうこともあるんだよねw
まさか100文字以上も入力する奴いるかよ?w
あのCUIで?w笑える、一生文字入力してろ、知ったかの墓穴堀バカw
>142が見れないんだけど、消したの?
>>169 大量の入力を与えるのはリダイレクトすれば簡単だけどな
あ、ほんとだ。見えなくなってるね。
煽りまくってるのに、証拠は隠滅したのか
>>142 君はw
173 :
デフォルトの名無しさん :2007/01/02(火) 12:19:38
>>143 は間違ったソースしかかけないくせに、他人のソースの穴を指摘するだけの
バカです。自分が全部ソースを書けば良いだけじゃん。自分仕様のものを出せよ。
それはこれこれどういう問題があるから って話になってんだ?
現代において完璧なものがないから、何事も問題があることくらい分かってんだよ。
問題がなきゃ交通事故も犯罪も起こらない罠w
そこを人間の意志で問題を減らしていくことが必要なんじゃん。
お前みたいな問題を自分で起こす奴は社会に出てこないで檻の中に戻れよ、な?
174 :
デフォルトの名無しさん :2007/01/02(火) 12:20:33
>>172 なんか必死ですね~~~wwwww
お前のソースはここに残って、自分の間違い(バッファーオーバーラン)を
自分で指摘したのに自分が起こしていた証拠を残してしまうねw
とにかく必死だな、低学歴w
175 :
デフォルトの名無しさん :2007/01/02(火) 12:22:24
ってかソースをもう一度アップしてもらえません?(自信あるなら) それにオーバーランするなら、それをプリントスクリーンしてアップすればいいことじゃないの?
さぁ~~~~みなさん!11文字以上を入力して試してみよう。↓これくらいにしとけや? void get_string(char *p_str, int size) { int c, i; for (i = 0; i < size-1 && (c = getchar()) != EOF && c != '\n'; ++i) p_str[i] = c; p_str[i] = '\0'; } > c != '\n'; なんすかこれ?(プ
今北産業 もとのソースが消失してるから訳和漢ね
その前になぜfgetsを使わなかったの?
>>175 gets()がLinuxではタブーだと分かった以上出す必要ないだろ。
入力処理のライブラリを
>>142 に書き換えて提出しなさいw
11文字以上入力した場合、不具合が起こるから。256文字以内なら
オーバーランしないソースは洋ナシってことで、以後放置よろ。
入力処理のライブラリを
>>143 に書き換えて、だった、すまそw
んじゃ、後はバッファオーバーランを指摘したのに自分で起こした
>>143 がここを仕切るってことで、がんばれよ、墓穴堀さんw
>>143 はデバッグで追えばすぐに気づくことなのに・・・
偉そうに言ってる割にはマジでカスだなww
つーか>143がおかしくなるのは>142の中に入れたときなんじゃねーの?w 普通に使えばオーバーフローしないだろw
183 :
デフォルトの名無しさん :2007/01/02(火) 12:32:41
今見たばかりでよく分からないけど、 どっちのソースも現状、mainから書いたのがすべて見れないのが 混乱させている気がする。レスだけ多くなる一方だいし。
184 :
143 :2007/01/02(火) 12:38:15
#include <stdio.h> void get_string(char *p_str, int size) { int c, i; again: for (i = 0; i < size-1 && (c = getchar()) != EOF && c != '\n'; ++i) p_str[i] = c; p_str[i] = '\0'; if (c != EOF && c != '\n') { if (getchar() != '\n') { fprintf(stderr, "line too long. please input again\n"); while ((c = getchar()) != EOF && c != '\n') ; goto again; } } } int main() { char buff[2][11]; get_string(buff[0], sizeof buff[0]); get_string(buff[1], sizeof buff[1]); printf("%s\n", strcmp(buff[0], buff[1]) ? "Not equal": "equal"); return 0; }
185 :
143 :2007/01/02(火) 12:39:10
ぐだぐだうるさいから、11文字を超えた場合は再入力を促す 超親切仕様にしてやったぞ。
142=143で荒らしたいためにわざと阿呆なコード書いてるんじゃないか。
187 :
デフォルトの名無しさん :2007/01/02(火) 12:48:38
>>185 きめぇソース書くなよ、最後まで粘着、しつこいお前が一番うぜぇ
このスレの趣旨が分かってないなら二度とくるな
ここはお前の絶対評価の場じゃないし、そのソースもきめぇ
うるさいのはむしろお前だから。ソースも書いてないくせに偉そうにして、馬鹿だろ。
>>124 >C1年生の初心者なので入門書レベルのコードでお願いします
分かったか?お前は肝心なものも忘れているんだよw
>>187 >>185 はいまとなっては見れない
>>142 のコードと違って、
・バッファオーバーランは発生しない
・10文字を超過する入力には再入力を促す
・標準関数はstdio.hの非常に基本的なものしか使っていない
(
>>142 はstring.hのものも使っていたな)
のだが。
>>185 のどこが「入門書レベルのコード」を超過しているのかね?
189 :
デフォルトの名無しさん :2007/01/02(火) 12:53:11
>>181 >>182 > >142の中に入れたときなんじゃねーの?w
だから最初っからmainも書いて出すべきだったろ?分かってないのはお前
190 :
デフォルトの名無しさん :2007/01/02(火) 12:55:09
>>188 自分を自分で援護、擁護ですか?それが何か?
問題は
>>184 が間違っているってことじゃない。
最初っから書いていない奴が何批判を始めてんだと?
そこから間違っているから荒れたんだろ、お前もうぜぇ
ていうかバッファオーバーランの意味も知らずにファビョってただけでしょ アンタが…… gets()の危険性も知らないなんて恥ずかしいよ。
>>188 > 標準関数はstdio.hの非常に基本的なものしか使っていない
すいません、モロに strcmp を使っていて string.hがないという
コンパイルエラーが起きたんすけど・・・
>>191 し つ こ い お前も起こしたバッファーオーバーランを持ち出して
まだ自爆、墓穴堀を晒したいのかハゲw
>>194 いやだから、起こさないでしょ。
>>143 のコードでどうやって起こすの?
size引数に実際より小さな値を渡さない限りは起きないでしょ。
>>184 > printf("%s\n", strcmp(buff[0], buff[1]) ? "Not equal": "equal");
Call to function 'strcmp' with no prototype in function main
>>184 がエラーになるコンパイラって、C99モードでコンパイルしてる?
C89なら、警告は出るかもしらんが、コンパイルは出来るはずだけど。
まぁ、俺が悪かったよ。
198 :
デフォルトの名無しさん :2007/01/02(火) 13:03:46
これからは指摘でふぁびょる前に自分が書いたソースを出してから意見しましょうね。
もっとも、他人のソースの批判をする場所じゃないから、ここ。
ぐだぐだいちゃもんつける前に、自分がソースを書いて自分がとった手段を明確に
示せば良いだけ。出さない奴は卑怯者。そう、
>>143 みたいに結局mainを出さずに
その後、議論になった10文字より多かった場合のトラブルを他人に指摘されて
直しただけではだめってこと。
なにこのくだらない言い争い ネタでもつまんね
200 :
デフォルトの名無しさん :2007/01/02(火) 13:14:47
ってかレスが増えてわからなくなった。 他にいままだ残っている宿題ってなんかあった?
バッファオーバーランを知らないバカと標準入力のバッファがわかってないバカの喧嘩。
202 :
87 :2007/01/02(火) 13:34:12
[1] 授業単元: [2] 問題文(含コード&リンク): 数列 a = [a_1, ..., a_n] が与えられる。ここから次の条件を 満たすような要素たちを効率よく選ぶプログラムを作れ。 条件 1. 隣り合う要素は選ばない。 条件 2.選んだ要素の総和が最大になる。 例: a = [1,3,3,2] のときは2つ目の3と4つ目の2を選ぶ(合計5)。 [3] 環境 [3.1,3.2] OS、コンパイラ: 問わず [3.3] 言語: どちらでも可 [4] 期限: 1月4日 [5] その他の制限: 特になし
204 :
130 :2007/01/02(火) 13:42:47
たくさんのレスいただいてありがとうございます。 142はもう消えているみたいだしどれを参考にすればよいのでしょうか? 書き忘れましたがコーディング規約でgetsとscanfは使わずに fgetsとgetcharで作るように書かれてます。
>204 void get_string(char *p_str, int size){ fgets(p_str,size,stdin); while(*p_str) p_str++; p_str--; if(*p_str=='\n') *p_str = '\0'; else fflush(stdin);}
>>206 stdinに対するfflush()の挙動は処理系依存だというのに
なんでこうも使いたがる奴が多いのか
208 :
デフォルトの名無しさん :2007/01/02(火) 14:29:45
>>207 だからうざいって、お前はひっこんでろ。
他人の批判をする前に自分のソースを出せつっただろ?
どちらにせよstdinをフラッシュする 規定された方法が無いんだから仕方ないんじゃ。 rewind(stdin)もfseek(stdin,0,SEEK_SET)も出来る処理系はあるけど 動作が保障されてるやり方じゃない。
>>209 stdioのバッファを空にしたいというよりは、単に行末まで
読み飛ばしたいだけなんだから、いくらでも方法はあるはずだが。
scanf("%*[^\n]%*c");
でもいいし、
scanf()を使わないなら、
>>205 のやりかたでもいい。
ありきたりな定石を載せたサイトでも作ればぁ~? 文字の入力受付はこうとか、ありきたりなソートに比較回数、交換回数を数えるものとか そういったところまでありきたりなものが書かれたやつとか
>>212 ここは丸投げスレだし、必要無いんじゃないかな?
丸投げでない人へは、俺に聞けスレへの誘導だけで良いと思う。
214 :
デフォルトの名無しさん :2007/01/02(火) 15:16:26
そうだね。とりあえず課題できればいいって人と職人のスレだからね。
88却下。俺にはできん...
>>87 難しいな。それなりに枝は刈ったつもりだけど、10x10 程度でも
下みたいに選択肢は多いのにクリア不能の盤面がきつい。
(ずれるので等幅フォントで見てください)
@......#.#
.......#..
....#####.
..........
..........
..........
..........
..........
..........
..........
>>212 wikiがあるからぜひそこに書き記してくれ
うむ。更に言うとNP-completeだな。
ハミルトン路問題って一般的にNP完全だっけか?
一般的にという意味がよくわからないが、ハミルトン閉路問題は NP 完全。
これはグラフが相当制限されているが、それでも
>>133 にあるように NP 完全。
証明は平面グラフのハミルトン閉路に帰着して行う。ただし、それほど簡単ではない。
20x20なんて解けんだろ。 そんな宿題でるか普通?
正直、この手の証明とか全く見たことなくて素人考えなのだけど ハミルトン路の問題と、ハミルトン閉路の問題で違いが出たりはしないの?
225 :
デフォルトの名無しさん :2007/01/02(火) 21:26:49
[1] 授業単元:c [2] 問題文(含コード&リンク): 0~255の整数を入力し、数値に変換してunsigned char型変数に格納。 この数値に対し1ビット左にシフトした結果と1ビット右にシフトした結果 全ビット反転した結果をそれぞれ2進、10進、16進で表示。 <出力例>255と入力した場合 整数を入力 (0-255): 255 処理前 255 ff 11111111 右シフト 254 fe 11111110 左シフト 127 7f 01111111 全ビット反転 0 00 00000000 (エラー処理) 範囲外の整数、'0'~'9'以外の入力 エラーメッセージ表示 改行のみ エラーメッセージ表示 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: なし [5] その他の制限: よろしくお願いします
226 :
デフォルトの名無しさん :2007/01/02(火) 21:34:36
一辺の長さを適当な刻み幅で増加させて 各ステップで立方体の体積を計算し、 その体積が初めて100を超えたときに 一辺の長さと体積を表示するプログラムを作成しなさい。 このプログラムでは一辺の長さの初期値と刻み幅を キー入力で与えるようにすること。 結果表示の例) 刻み幅=0.01 辺の長さ=4.65 体積=100.545 この問題わかる方いますかぁ?? 学校で始めたばかりなんですが、 全然わかりません。。。 よろしくお願いします。
>>224 ハミルトン路問題とハミルトン閉路問題の変換は容易.
以下 G = (V, E) を固定する.
ハミルトン路問題をハミルトン閉路問題に帰着する:
新しい頂点 s を G に追加し,二頂点 u, v ∈ V を取って
辺 (u,s) と (s,v) を張る.G ∪ {s} にハミルトン閉路があれば
G に u-v 間を繋ぐハミルトン路がある.これを任意の u, v
について行えば, G にハミルトン路があるかどうか判定できる.
ハミルトン閉路をハミルトン路に帰着する:
新しい頂点 s, t を G に追加し,隣接する二頂点 u, v ∈ V を取って
辺 (s,u) と (v,t) を張る.G ∪ {s,t} にハミルトン路があれば
それは s を始点にし,t を終点にするものに限る.この路を用いると
u から出て v に行き,u に戻るようなハミルトン閉路が構成できる.
これを任意の u, v について行えば,ハミルトン閉路があるかどうか判定できる.
どっちの構成も図を描けばやりたいことは分かるとおもう.
>229 数字の後に数字以外を入力しても正しく入力されたことになっちゃうよ。
>>230 そういう仕様でなんら問題ないよ。むしろそういう入力をする方がどうかと。
atoiも数字以外の英数文字があってもそれを無視して先頭の数字を
数値として認識するし、そういうもんだと割り切れば良いだけ。
233 :
デフォルトの名無しさん :2007/01/02(火) 23:02:38
>>228 あー、ちょっと点を加えると相互の問題に変換できるのか
図に描いてみて把握した。タメになった㌧クス
235 :
112 :2007/01/02(火) 23:35:19
遅ればせながら、ありがとうございました。 また何かありましたら、よろしくお願いします。。。
236 :
デフォルトの名無しさん :2007/01/03(水) 00:28:05
[1] 授業単元: [2] 問題文(含コード&リンク): 一辺の長さを適当な刻み幅で増加させて 各ステップで立方体の体積を計算し、 その体積が初めて100を超えたときに 一辺の長さと体積を表示するプログラムを作成しなさい。 このプログラムでは一辺の長さの初期値と刻み幅を キー入力で与えるようにすること。 結果表示の例) 刻み幅=0.01 辺の長さ=4.65 体積=100.545 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (Visuai Studio 2003) [3.3] 言語: (C) [4] 期限: ([2007年1月9日まで] お願いします。
>>236 #include<stdio.h>
#define THRESHOLD 100.0
int main(void)
{
double length, step, volume;
printf("辺の長さを入力して下さい :");
scanf("%lf", &length);
printf("刻み幅を入力して下さい :");
scanf("%lf", &step);
if(length<=0.0 || step<=0.0)
{
printf("Error: 正の数を入力して下さい\n");
return 1;
}
while(1)
{
volume=length*length*length;
if(volume>THRESHOLD)
break;
length+=step;
}
printf("刻み幅=%f\n辺の長さ=%f 体積=%f\n", step, length, volume);
return 0;
}
それじゃ誤差が酷くなりそうな気がするが
239 :
87 :2007/01/03(水) 01:08:22
>>216 とりあえず、探索の方法だけでもヒントがいただければ…
10×10程度ができれば大丈夫みたいです…すいません。
241 :
デフォルトの名無しさん :2007/01/03(水) 02:00:41
>>240 本当にありがとうございます。助かりました。
>>239 例えば今回の場合、各マスは上下左右4方向に繋がっていて、入ってきた
方向へは動けないので、各マスごとに最大3方向から1方向を決定することになる。
仮に全マス数100(N=10)、通過できるマスが半数の50個の場合を考えると、
答えがないかどうかをチェックするために大雑把に3の50乗個の道を調べないと
いけない。これでは、もし1秒間に平均1億個の道をチェックできたとしても、
解決までに約2億年もかかる計算になる。
だから論理上正しいだけのプログラムを作ったところで、よほどNを小さくするとか
よほど易しい特別なパターンでない限り、答えを出したり
>条件を満たすものがない場合、できませんでした。と表示
したりはできない。
>>203 lengthはdata[], select[]の長さで,返り値は最大の合計値.また,その合計値に
data[i]が使われればselect[i] = 1,使われなければselect[i] = 0がセットされる.
処理はΘ(n).
int solve(int data[], int length, int select[]) {
int i, p1, p2, p3, w; p1 = p2 = p3 = 0;
for (i=0; i<length; i++) {
if (p2 <= p3)
{ w = data[i] + p3; select[i] = i-3; }
else
{ w = data[i] + p2; select[i] = i-2; }
p3 = p2; p2 = p1; p1 = w; }
i = length-1;
if (p1 < p2) select[i--] = 0;
while (i >= 0) {
w = select[i];
select[i--] = 1;
while (i > w) select[i--] = 0; }
return p1 < p2? p2 : p1; }
>>203 243では数値の範囲を自然数に限定してしまったので,実数まで拡張したものを載せときます.
引数,返り値,効率に関しては上と同じ.main関数はおまけ.
double solve(double data[], int length, int select[]) {
int i, ix, w; double p1, px, v;
p1 = px = 0.0; ix = -1;
for (i=0; i<length; i++) {
v = p1; p1 = px + data[i]; select[i] = ix;
if (v > px) { px = v; ix = i-1; } }
i = length-1;
if (px > p1) while (i > ix) select[i--] = 0;
while (i >= 0) {
w = select[i]; select[i--] = 1;
while (i > w) select[i--] = 0; }
return px > p1? px : p1; }
#include <stdio.h>
#include <stdlib.h>
#define LENGTH 15
int main() {
srand(time(NULL));
int i, select[LENGTH];
double data[LENGTH];
printf("data :");
for (i=0; i<LENGTH; i++) {
data[i] = (double)rand()/RAND_MAX-0.3; printf("%5.2lf ", data[i]); }
printf("\nchoice:");
double max = solve(data, LENGTH, select);
for (i=0; i<LENGTH; i++) { printf("%5d ", select[i]); }
printf("\nmax: %3.2lf\n", max); }
246 :
デフォルトの名無しさん :2007/01/03(水) 10:17:54
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク):時間をdouble型に??時??分??秒.??ミリ秒として格納しているとして 二つのdoubleの差をミリ秒で求めるには? [3] 環境ウィンドウズ 言語C++ 例90004.45と85958.40だと答えは6000.5 9:00;04.45 8:59:58.40 なんですが1秒は1000ミリ秒でしたっけ? 100ミリ秒の気もするのですが、よろしくお願いします。
ミリは1/1000
248 :
デフォルトの名無しさん :2007/01/03(水) 11:01:18
>>154
>
>>88-90 >のURL行ける?
見れませんでした?見れると思います。
>>215
>88却下。俺にはできん...
質問の仕方が悪かったですか?
(154さんと同じ方ですか?)
>246 90004.45と85958.40だと6050ミリ秒じゃないの?
250 :
デフォルトの名無しさん :2007/01/03(水) 12:27:08
C++の宿題です。お願いします。 【問】 キーと値のペアを扱う、二分木クラスを自作せよ。std::map を参考にせよ。 下記のメンバ関数を実装せよ。 // 追加 - return: true: OK, false: NG(重複) bool mymap::insert(int key, int val); // 検索 - return: 見つかった key の val, 見つからない場合は、今のところは -1 で良い。 int mymap::find(int key); // 削除 - return: true: OK, false NG(not found) bool mymap::remove(int key); // 表示 - 昇順 void mymap::print();
[1] 授業単元:Cによるプログラミング実習 [2] 問題文(含コード&リンク): 生年月日を入力させ、その人が何日生きたかを表示させるプログラムを書け。 (閏年も考慮すること) [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: bcc32 [3.3] 言語: C [4] 期限: 2007/01/08 [5] その他の制限: なし
>>251 #include<stdio.h>
#include<time.h>
int main(void){
time_t birthday, current;
struct tm birthday_str={0,0,0};
int year, mon, mday;
printf("\n生年月日を入力して下さい\n");
printf("例. 2007 1 1 : ");
scanf("%d %d %d", &year, &mon, &mday);
year-=1900;
mon-=1;
birthday_str.tm_year=year;
birthday_str.tm_mon=mon;
birthday_str.tm_mday=mday;
birthday=mktime(&birthday_str);
time(¤t);
printf("生まれてから %d 日経ちました\n", (int)(difftime(current, birthday)/(60*60*24)));
return 0;
}
冬休みの宿題なので、問題がかなり多いです… 申し訳ありませんが、自分で考えてみてもさっぱりだったので、お願いします。 [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): (1)外積による三角形の面積の計算方法を利用し、三角形の面積を求める関数 double trianglearea(double x1,double y1,double x2,double y2,double x3,double y3) を作成しなさい。三角形は(x1,y1),(x2,y2),(x3,y3)の3つの頂点から成るとする。 (2) (1)の関数を利用して四角形の面積を求めるプログラムを作りたい。 4つの行からなる入力(x1,y1),(x2,y2),(x3,y3),(x4,y4)が、四角形の4つの頂点を示し、 それらの点は、右回りに頂点を選んでいるものと仮定してよい。 (それ以外のときには適切に計算できなくてもよい。) 1つの四角形は、2つの三角形からなると考えてプログラムを作成すること。 (3)四角形の内部の点(x0,y0)を与えた場合、四角形は、(x0,y0)と隣接する四角形の 2つの点からなる三角形4つから構成される。この考え方に基づきプログラムを作成しなさい。 ただし、(1)で作成したtriangleareaを利用すること。 入力は、ファイルから(x1,y1),(x2,y2),(x3,y3),(x4,y4)の順で読むこと。 キーボードから(x0,y0)を入れること(四角形内部の点を入力すること)。
254 :
253 :2007/01/04(木) 01:19:00
続きです。 (4)外積から三角形の面積を求めるためには、負の値になったときに正の値にする必要がある。 そのようなことをせずに、単にそのまま外積の値を計算する関数 double gaiseki(double x1,double y1,double x2,double y2,double x3,double y3)を作成すること。 (5) (3)では、4つの三角形それぞれにtriangleareaを計算し、その合計を四角形の面積とした。 今度は、4つの三角形それぞれにgaisekiを計算し、その合計を求めなさい。 入力はファイルから(x1,y1),(x2,y2),(x3,y3),(x4,y4)の順で読むこと。 キーボードから(x0,y0)を入れること。 (6)(x0,y0)を四角形の内側にした場合と、外側にした場合で、計算結果が変わるかどうか、 いくつかのデータを入力し、確認しなさい。(入力したデータを示しなさい) また、なぜそのようなことになるのか、考察しなさい。 (7)上記の結果を利用して、多角形の面積を求めるプログラムを作成せよ。 多角形の点は、右回りで与えられると仮定してよい。 多角形の中には、へこんでいるものも存在していると考える。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC++ 6.0 [3.3] 言語:C++ [4] 期限: (2007年1月7日22:00まで [5] その他の制限:とくになし。
>>250 ここで解凍
http://www.geocities.jp/c_cpp_cs/code/code.html tVXbbuIwEH0OEv8w21VXNgoI2m5vKf2SlaqUONuouaDEpKCq/74zYyd2AvRtpRZsz/UcHw8/s3KT7xI
FT41Osmrx9jydTCebPG4aKA5FvIXP6WRbZ22s1eN0EjS63m00lFWiXvRhq8gcBFmp4V0dQmjjPAI6cQ
6zXKU6hFmd/X3T0cAmOC4E+mpD8GMGu1pSWPBINcS75DKixW9KLXJccHJh/D6/8POLKvkpqoqK42FbZ
QkgolK/4L+qS8zVO864rLSoUmDL/JnqwI81LOWpSGOXjI3NqbgQl0kIl4mEC4Nk/sz8mCW2b7xdBQbw
XQl24CiEt9295tmG7oPvSEh4BEIoMJrgo+G1qnIktlG1Fv31MNFY3ODz6JnRGtbwy/IUBB9vWa5AGIP
pi4O4Z0wG67W1SsYmoVZ6V5eQxnmjooHr08izKyb6Y0dgoDD8hIfDTwSY3KJru1QfTi+iU2IIS/yTkl
pdnujPHqCileUVP4miNCuTjrRjrmzNMVPfEdUroO+iF8KYKc+1A9dL7JggTxuOGltivnKoWA21KqpWn
Qd2LAIftdrTK+bXXMR7XOpia15UkFY1iCjygdtcp4k/r6HXWsXv/1s8Q/nYBLZXggleV45aTm0AWg7O
dmEVITqy5PB9D8NHPjaF7aOzmsOZi/TjnDQoqoMDg858u+nlJEjWD14slSYjH7pXtjdeicqVVmAEcOY
duTErrC5GY41ENpyZf8qLbsB9sbJIqUWclYKSmSzmN6kgt2Jhx9tNCA8ygn5/HcK1v8cpsFr6Bw8h3P
j737z3U16FcOd73I1TrMYHtyFc+ft7boJzWhYiO11apLJY8IwxHqTFlrQxX9nh7/+ApNWuTJAazIdTj
QO8DNREn2I9TEGv5zLB56C9JDagWNhpYEDYzb2/ufY3t8dY7LUvcY039g8=
>255 #include <stdio.h> int main(void) { int i, j, a[5][4] = {0}, ave[4] = {0}; for(i=0; i<5; i++) { printf("%d番目の人の成績を入力します\n", i+1); for(j=0; j<3; j++) { printf("%d番目の科目の点数をいれてください:", j+1); scanf("%d", &a[i][j]); a[i][3] += a[i][j]; } } for(i=0; i<5; i++) { for(j=0; j<4; j++) { printf("%d ", a[i][j]); ave[j] += a[i][j]; } putchar('\n'); } puts("----------------"); for(i=0; i<4; i++) printf("%d ", ave[i]/5); return 0; }
258 :
255 :2007/01/04(木) 02:54:40
259 :
250 :2007/01/04(木) 10:05:11
>>256 ありがとうございました。
参考にさせていただきます。
今後は質問のテンプレに従うようにします。すみません。
260 :
デフォルトの名無しさん :2007/01/04(木) 11:56:19
[1] 授業単元: 情報1 [2] 問題文(含コード&リンク):適当に入力した数に 設定した適合な数{12,98,5,34,119,77,26,3}の中で近い値を出す [3] 環境 [3.1] OS:WindowsXP [3.2] Cygwin [3.3] 言語:C [4] 期限: 今週 [5] その他の制限:a[]を使うのと #include <stdio.h>だけでお願いします。
>>260 #include <stdio.h>
#define SIZE 8
int main(void)
{
const int a[] ={12,98,5,34,119,77,26,3};
int i, data, min , tmp , num;
printf("値を入れてください:");
scanf("%d",&data);
for( i = 0 , min = a[0] , num = 0; i < SIZE ; ++i ) {
tmp = data - a[i];
tmp = (tmp >= 0) ? tmp : -tmp;
if( min > tmp ) {
min = tmp;
num = i;
}
}
printf("一番近い値は %d です。",a[num]);
return 0;
}
a[]って使い方これでいいのか?
a[SIZE]ってやったほうがいい気がするんだがまあいいか
262 :
261 :2007/01/04(木) 12:24:41
あ、tmp = (tmp >= 0) ? tmp : -tmp; のところが分かりにくかったら if( tmp < 0 ) tmp = -tmp; って変えてね むしろこっちのほうがいいな
263 :
261 :2007/01/04(木) 12:28:44
>>260 ごめん新年早々ぼけてるわ
>>261 >>262 は忘れて 間違えた
#include <stdio.h>
#define SIZE 8
int main(void)
{
const int a[] ={12,98,5,34,119,77,26,3};
int i, data, min , tmp , num;
printf("値を入れてください:");
scanf("%d",&data);
for( i = 0 , min = data - a[0] , num = 0; i < SIZE ; ++i ) {
tmp = data - a[i];
if( tmp < 0 ) tmp = -tmp;
printf("%d\n",tmp);
if( min > tmp ) {
min = tmp;
num = i;
}
}
printf("一番近い値は %d です。",a[num]);
return 0;
}
264 :
261 :2007/01/04(木) 12:30:35
if( tmp < 0 ) tmp = -tmp; printf("%d\n",tmp); ここのprintfも消して
>>261 値を入れてください:1234567
一番近い値は 12 です。
あ、直したのね。
もうごちゃごちゃしてて間違っているんでうロダ使ってください ><;
>263 >min = data - a[0]
269 :
261 :2007/01/04(木) 12:37:25
>269 263のforの初期設定部。 >for( i = 0 , min = data - a[0] , num = 0; i < SIZE ; ++i ) { min = data - a[0] じゃダメ。
【テーマ】 料金の割引 【プログラム名】 wari.c 【処理内容】 A商品はまとめて買うと、お得なな割引サービスがある 。 購入数量を与えて支払料金を計算する。 なお、A商品の1個当たりの単価は適当に決めてよい。 割引率は次のとおりである。 10~99個まで 20%割引 100~499個まで 25%割引 500個以上 30%割引 【実行例】 商品単価:1200 購入数量:120 購入金額:108,000円 …お願いいたします。
>271 #include <stdio.h> int main(void){ int price, num, amount; printf("商品単価:"); scanf("%d", &price); printf("購入数量:"); scanf("%d", &num); if(num>=500) amount = price * num * 0.7; else if(num>=100) amount = price * num * 0.75; else if(num>=10) amount = price * num * 0.8; else amount = price * num; printf("購入金額:%d円", amount); return 0;}
>272 else if(num>=10) amount = price * num * 0.8; を空白行に追加して
274 :
261 :2007/01/04(木) 13:25:17
ブラウザの調子悪くて行が表示されなかっただけみたいだ。 >273はなかったことにしてくれ。
>>272 できましたー。ありがとうございます!!
279 :
デフォルトの名無しさん :2007/01/04(木) 23:05:11
>110 できた人いる?
/\___/ヽ /\___ /\___/ヽ _/ヽ /\___/ヽ /'''''' '''''':::::::\/'''''' '''/'''''' '''''':::::::\ /'''''' '''''':::::::\ . |(●), 、(●)、.:|(●), |(●), 、(●)、.:|、( |(●), 、(●)、.:| | ,,ノ(、_, )ヽ、,, .::::| ,,ノ(、_, )| ,,ノ(、_, )ヽ、,, .::::|_, )| ,,ノ(、_, )ヽ、,, .::::| . | `-=ニ=- ' .:::::::| `-=ニ= | `-=ニ=- ' .:::::::|ニ=| `-=ニ=- ' .:::::::| \ `ニニ´ .:::::/\ `ニニ \ `ニニ´ .:::::/ニ´ \ `ニニ´ .:::::/ /`ー‐--‐‐―´\ /`ー‐- /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\ できますた できますた できますた できますた できますた
281 :
デフォルトの名無しさん :2007/01/05(金) 00:10:08
>>261 遅くなったけどありがとうございました。
>>279 なんでこうハミルトン路といいナップサックといいNP困難な問題がいくつも…
宿題にだされてさくっと解けるようじゃ世の数学者が食っていけなくなるよ
>>279 総当りで調べる方法しか思い浮かばない^^;
手持ちの楽曲ファイルの数によっては生きている間に解が出ないw
284 :
デフォルトの名無しさん :2007/01/05(金) 01:10:27
[1] 授業単元:情報工学実験 [2] 問題文(含コード&リンク): 整数係数の2次方程式 ax^2+bx+c=0 を因数分解するプログラムを作りなさい。 ただし因数がすべて整数値になるものだけとします。整数値にならないものには「不可能」のメッセージを出力することとします。 このプログラムで、因数分解できるa,b,cの組み合わせを10組ほど探すこと。 例:a b c 因数分解 1 2 1 ( 1x + 1)( 1x + 1) 1 1 1 不可能 2 7 3 ( 2x + 1)( 1x + 3) 3 13 -10 ( 3x +-2)( 1x + 5) [3] 環境 [3.1] OS:Windows [3.2] bcc32 [3.3] 言語:C [4] 期限:可能なら今週末まで [5] その他の制限:特にありません お願いします。
285 :
デフォルトの名無しさん :2007/01/05(金) 01:11:41
簡単な質問なんでテンプレ抜きでやらせてもらいます。 配列 h[200][200] に配列 h2[200][200] を代入する方法を教えてください>< h=h2; とか h[][]=h2[][] とか h[][200]=h2[][200] とかじゃできませんでした>< てかfor文使うしかないってことなんでしょうか( ;・∀・)??
>>285 for( int i= 0 ; i < 200; ++i ){
for( int j = 0; j < 200; ++j ){
h[i][j] = h2[i][j];
}
}
いま
>>278 の課題やってるが実に面倒だ
memcpy(h2, h, sizeof(h));
よろしくお願いします。 1】情報プログラミング演習 2】OpenGL及びGLUTを利用し、以下の条件を満たす3Dグラフィックを 描画するプログラムを作成しなさい a:球体と輪で構成された土星形のオブジェ b:マウスの左ボタンで押し続けている間回転 c:視点位置と視線方向は任意 d:球体と輪は適当な色で塗りつぶす e:Zキーでプログラム終了 ex:可能ならば陰面消去処理を施すこと 3】 OS:Windows 言語:C コンパイラ:VC6.0 4】1月7日正午 5】ポインタ・構造体などといったC言語の基礎項目一通りと、 OpenGLの3次元図形の描き方やアニメーションまで学んでいます 制限事項は特になく、GLUIは使用しても良いとの事です
wikipedia見ながら考えてる素人だけど
>>87 ってホントにNP困難なのかなー
任意のグラフじゃなく格子状のグラフなのに難しそうだからって
NP困難って決め付けるのは早計だと思う
NP完全って言ってる人は信用できないし
(経路を求める問題だからNPに属してないでしょ?)
経路を一つ探すよりも経路がないことを求めるほうが難しい
>>284 #include <stdio.h>
void solve(int a, int b, int c) {
int i, j;
for (i = a > 0 ? 1 : a; i <= (a > 0 ? a : -1); ++i) {
if (a % i != 0) continue;
for (j = c > 0 ? 1 : c; j <= (c > 0 ? c : -1); ++j) {
if (c % j != 0) continue;
if (i * j + a / i * c / j == b) {
printf("(%dx+%d)(%dx+%d)\n", i, c / j, a / i, j);
return;
}
}
}
printf("不可能\n");
}
int main(void) {
int a, b, c;
for (; ; ) {
printf("a b c\n");
scanf("%d%d%d", &a, &b, &c);
solve(a, b, c);
}
}
295 :
294 :2007/01/05(金) 02:42:51
悪い。これじゃx(x+2)とかに対応できない。
296 :
294 :2007/01/05(金) 02:56:36
>>284 やり直し
#include <stdio.h>
void solve(int a, int b, int c) {
int i, j;
if (a == 0) {
printf("a==0は2次方程式ではありません\n");
return;
}
if (c == 0) {
printf("(%dx+%d)(%dx+%d)\n", 1, 0, a, b);
return;
}
for (i = a > 0 ? 1 : a; i <= (a > 0 ? a : -1); ++i) {
if (a % i != 0) continue;
for (j = c > 0 ? 1 : c; j <= (c > 0 ? c : -1); ++j)
if (c % j == 0 && i * j + a / i * c / j == b) {
printf("(%dx+%d)(%dx+%d)\n", i, c / j, a / i, j);
return;
}
}
printf("不可能\n");
}
int main(void) {
int a, b, c;
for (; ; ) {
printf("a b c\n");
scanf("%d%d%d", &a, &b, &c);
solve(a, b, c);
}
}
297 :
デフォルトの名無しさん :2007/01/05(金) 03:12:56
>>283 楽曲の数や容量はプログラムでランダムに決めるようにしたらいいんだと思います
299 :
デフォルトの名無しさん :2007/01/05(金) 03:24:13
>>298 プログラムの書き方はどんなカンジになりますか???
puroguramu
長文失礼.
>>292 最初に「経路を求める問題だから NP に属してないでしょ?」
という指摘について.多分これは日本 Wikipedia の
> なお NP はクラス P 同様、判定問題のクラスであり
> yes/no で答えることの出来ない問題は NP には属さない。
という記述を参考にしたものだと思うが,微妙なところ.
判定問題以外の問題の計算量を考えるとき,特に証拠として
もとの問題の解が求まるような場合は,その判定問題版を考えて
NP などと主張するのが普通.今回も基本的にはそのノリで
NP と主張している.
しかし,わざわざ判定問題に落とすのが面倒だという話があって,
問題のクラスを一般化した FP や FNP という計算量のクラスがある.
適切な判定問題に落として P/NP という場合は 大体 FP/FNP に
なっており,整合性がある.そこで,これらを適当に混同し,
判定問題以外について NP と主張するのはそれほど特殊なことではない.
>>292 次にこの問題について.この問題の存在判定版は制限格子上の
ハミルトン閉路というその筋では比較的有名な NP 完全問題.
これが NP 完全になることの証明は
>>222 の方針でできる.
理解するだけなら,ハミルトン閉路問題が本質的には木幅について
指数の問題だということを使うのが現代的だと思う.
経路を求める問題は,明らかに経路の存在判定よりも難しいので
効率よく解けるわけはない.計算量のクラスとしては,FNP 完全に
属することが簡単に示せる.
決して「難しそうだから」NP 困難と決め付けているのではないよ.
>>110 記憶媒体内の記憶量の取りうる数値が有限個数の離散値であれば,その離散値の個数mとファイルの個数n
に関して計算量(mn) +空間(m)で解ける.
例えばファイルのサイズが1KB単位で記憶容量が64MBなら,記憶量のとりうる値は0, 1, 2,..., 64*1024
の(64*1024+1)通りだからなんとかなる(1B単位なら非現実的だが).量子化の単位を適当に取れば,
それなりの近似は可能だろう.
#include <stdio.h>
#define MEMSIZE 64*1024 /* 記憶媒体の容量 (KB単位) */
int plot[MEMSIZE+1], trace[MEMSIZE+1];
int sizes[] = {1300, 2500, 3700, 4900, 12000, 23000, 34000, 45000}; /* ファイルのサイズ(KB単位)*/
int num = 8; /* sizes[]の要素数 */
int main() {
int i, j, sum=0; plot[0] = 1;
printf("items:\n");
for (i=0; i<num; i++) printf("%d: %dKB\n", i, sizes[i]);
for (i=num-1; i>=0; i--) for (j=MEMSIZE; j>=0; j--)
if (plot[j] && j+sizes[i] <= MEMSIZE && !plot[j+sizes[i]]) {
plot[j+sizes[i]] = 1; trace[j+sizes[i]] = i; }
for (i=MEMSIZE; !plot[i]; i--);
printf("\nchoice:\n");
while (i>0) {
int t = trace[i];
printf("%d: %dKB\n", t, sizes[t]); sum+=sizes[t]; i-=sizes[t];}
printf("\nsize: %dKB/%dKB\n", sum, MEMSIZE); }
306 :
278 :2007/01/05(金) 09:14:09
307 :
デフォルトの名無しさん :2007/01/05(金) 10:26:05
>>296 ありがとうございます!
続いてどなたかこれをお願いいたします。
[1] 授業単元:情報工学実験
[2] 問題文(含コード&リンク):
Cのソースプログラムの中から、コメントの部分を取り除くプログラムを作りなさい。
このプログラム自身にコメント行を入れておき、それをデータファイルとして読み込み、うまくコメント行が取り除けるかチェックすること。
[3] 環境
[3.1] OS:Windows
[3.2] bcc32
[3.3] 言語:C
[4] 期限:可能なら今週末まで
[5] その他の制限:特にありません
>>307 1ZVdSxtBFIbvA/kPp/TCrAYj9C5RQUJKL2qUxsuCbDejWZrsymajFyWQ2a1WtBT6JVUvRImtsUULQms
txR8z3Xz8i56ZzcasxiRaKHQuZiczZ56Z98zhzV1VU7KFNIHRvJlW9eHMeDAQDEQGobb2rbq8zqw3tf
IZo5swGAkGiFbIQVzP5YhmpkzZJPAsGABsyalkAsZgJAyi4fZGacs5PWX0yOVAl8bJ/Jt6OJF6EG5NI
4RZJ8zeZTb2q055g9FPzPrB7AqzbWZ9Z/Y+Xq/+cZ3RMqOvGd3x8yZSM4lHPl7cB1xZ5sASZdYex1rn
zD4Ug+PLWI8Yn41PTU4mkjPhNqLYaZWZ/RnVXjrgWq3x6WmP5ZGGhm7E4qRizH0sZCIg0h2BohqbZef
VT3xNZq2zkiW2Ocv7zoszZ22b0WPgNaBFsNcLJjjbZ87RFqOHHCQy5axWau8O6iVM3DFPll0SJ33hKc
MDXC5FNBXoOYPoC0QL3ZMEpII3+P3rHAle5FtGD5r3QDWLupoGg+T0RTKruEWWD0nBQLPGVM0EJeaOr
xZiXvRjohKbQW6/lFGzBEIhBRfnialkZCMkSXBnDBJT9yWvgHnLL6m4DCHFN6vIeQIDkYHoxVR7sDjX
t6G1iV8lCq2bifKOwRODyE9jHcLFerQV3lYhXTaJGo/61XeMLvp/Xg5xVQ7eXiVvCwU3vYrUW6age1L
7ENqKuRArtP+F2sfabeX65/uW3vakHRD+N7xBLvtFYRFLfYLdsroe3OPFeqQ/TebkQtb8t8n/T3PVXM
ZPsc3rgbs6t96TxsZe9f1Xz8zBOdqp776sblrcoUt0wdDnDTkHo+ieKGZYgXFAa3eH4v8BXXsF3bn6f
IfRD8LlPTvmfpuTVa3Ngq+Yc8ybNwuGBiMxccs/
ここで解凍↓
ttp://www.geocities.jp/c_cpp_cs/code/code.html
>>307 やろうと考えたけど文字列中で/*が出たときの処理が面倒だからやめた。
310 :
308 :2007/01/05(金) 11:27:19
>>309 あ、スマン
俺それ対応してないわwwww
311 :
308 :2007/01/05(金) 11:30:00
printf("hello,\ /* this is in string */ world\n"); みたいなのにも対応すんのか、マジめんどくせー。 つうわけで俺もパス。ごめんね。
正直、それは対応しなくてもよくね? というかマトモにコメントに対応しようとしたらC言語のlexerつくるのと大差ないし。 この手の真面目にやればやるほど難しくなる課題ってのは嫌だなぁ。
>C言語のlexerつくるのと大差ないし。 それはないわ。言語のクラスが違うでしょ。
314 :
308 :2007/01/05(金) 11:57:06
ちょっと弄ってみたが、
文字列中の\"とかの対応とか'"'みたいなケースとかがウゼー
>>308 をちと拡張しただけだと汚くなるだけっぽいので、やっぱやめだ
>>313 確かにlexerよりは簡単なんだけど
int/*hoge*/i='/*';
/*hoge*//*hoge*/
char*p="\\""\"/**/";
とかに対応しようとして俺が書くと、
演算子の種類の認識以外は殆ど果てしなくlexerに近くなる。
文字リテラル中に /* .. */ とか // が現れることは文法上ないでしょ。 lexerとか次元が違いすぎるかと。 #include<stdio.h> #define ungetchar ungetc(c, stdin) int main(void) { int c; while((c = getchar()) != -1) { if(c == '/') { if((c = getchar()) == '/') { while((c = getchar()) != '\n' && c != -1) if(c == '\r') { if((c = getchar()) != '\n') ungetchar; break; } } else if(c == '*') for(;;) { if((c = getchar()) == '*') { if((c = getchar()) == '/') break; ungetchar; } } else { putchar('/'); ungetchar; break; } } else if(c == '"') { putchar(c); for(;; putchar(c)) if((c = getchar()) == '\\') { putchar(c); c = getchar(); } else if(c == '"') { putchar(c); break; } } else putchar(c); } return 0; }
面白そうだから俺もやってみた
ttp://www.geocities.jp/c_cpp_cs/code/code.html xVVNb5tAED3bkv/DmKjBJij4I+4hhEpV0kqV3F7aqpVKDgss9tp8GZY0VeX/3ll2sU1M0hwa9bQw82b
evGGZOWGJH5UBhauCByw9X77pdXvdk4CGLKHw8e13mMxeCxNLOMSEJQO4S1kAQ7AMuE7jmKL9C73nYF
i97u9et/P+w/wdGKGN/pBFFLIUQ2le+Tv+kuQiMiCcoCX4UVHcqsMEop5sxApGhN6RqKSIZSasTMhM8
EzYgAMjE2JxKKhlLNMFNSzu6JahC2NtqU9Fb/xyNNfVNFezDMPSBFJkCGEAIeYL04yiSO360nW/pfna
dW+Yf87vuWaClmsofAhCZidMcwxhVQl4XInC8eHsrAaonAvKiwEQU/hNpBiC48Cnr/M5Pnk5JWt7D46
h78AUHTtlNY8nFa/kkUnWrGbNDlhlJmxkBreCSndHunACNpuJVq8QjJ7KYasSYCtji5+M+8t9/C6pTw
qKEa4Ol2BZ4BF/XUSkWEqv5PQqGk/WtgUaYYh8H+8Iap1Y2Li9KguLilWOo5gL1ZuprVwHHaxrTFSNO
eVlnoCfBrSZZ9jSikS3/y5l0yyrhVtX3J9ZssC7vylT/mjaZuclYCNEjirURvVNku+94523tUMv1FVN
CQvS0vsHwiYtwib/RZilhB3d5kaC2eO3o11t498+zCh7EB9/3KdEghI5eeryGUoJKTg5oq2HysUzrnn
l6m/g9PRZRU1FaFtZuERIGXF1ceTLQ3ZvP+he9GNvD2Zjv20EyIFnH8CqpLPmMJZpshwXTohL4lWBW0
FmgmGFqAChH6UFFfukMgrbLsStNtPD1ekmmsSqoSXoMOwP
こんな感じ?
318 :
316 :2007/01/05(金) 12:49:14
1:プログラミング実習2 2:以下に示す問題のどちらかを選択し、プログラムを作成しなさい A:OpenGLライブラリを使用し、2本の円柱が交互に上下運動(ピストン運動)する 簡単な三次元オブジェクトをアニメーションさせるプログラムを作成しなさい B:OpenGLライブラリを使用し、大きな球体の周囲を一つの小さな球体が回る 簡単な三次元オブジェクトをアニメーションさせるプログラムを作成しなさい 3:Windows C言語 VC6.0 4:8日の朝9時 5:C言語の基本はポインタや構造体まで 後はglutの使い方まで学んでいます よろしくお願いします!
>>391 ああ、そうだったw サンクス。
if文にこれを追加。
else if(c == '\'') {
putchar(c);
if((c = getchar()) == '\\') { putchar(c); c = getchar(c); }
putchar(c);
putchar(getchar(c));
}
>>316 これだと int/**/i=0をinti=0と解釈してエラーにならね?
>>321 文字リテラルは最大4文字まで入るYO
\xXX なんてのがあったな、そういえば。忘れてた。
>>321 getchar(c) は getchar() の typo じゃね?
>>322 コメントは単に空白一文字に置換えちゃっていいのかな。
>>323 いやいや規格上
'ABCD'
これが許される。
だから最長で考えると
'\xXX\xXX\xXX\xXX'
とかありえる。
L'あ'とかじゃなくて'あ'とか書けるよな。 初めて見ると何事かと思うw
>>324 無条件に空白に置き換えると問題はなくなるけど、
問題のない箇所のコメントも空白1文字に変わってやな感じ。
前後が<識別子>{<コメント>}<識別子>となっている部分だけ、
コメントを空白1字にすれば見た目の問題はなくなるけどマジめんどい。
俺としては
>>312 ということで対応しなくていいじゃんという方針で。
というかどこまでをコメントとするかでも悩む。 // hoge\ huga というコードに対してコンパイラによって挙動がまちまちなんだけど(hugaがコメントになったりならなかったり)。 規格で決まってたっけ?
>>328 まぁ、普通に考えたら質問者のコンパイラ環境と同等にするのがベストだろうね。
331 :
308 :2007/01/05(金) 13:45:30
>>329 細かいところを突っ込むと切りがないんだろうけど
俺のアホなコードよりはるかに簡潔に文字列対応までされてて
スゲーと思った。
まぁ、文字列の途中とかでEOFが訪れると(runaway stringってやつ)
無限ループに陥るだろうけど。Cソースとして正しくないものは
処理しない、でいい気はするし、エラー処理入れると汚くなるだけって
気はするな。
一応為念。
333 :
308 :2007/01/05(金) 14:37:11
ほとんど
>>329 さんのコードそのままだが、runaway stringの対応とEOFの処理だけ
改善しといた(つもり)。そのかわり、オリジナルの簡潔性は失われているw
それと、
>>327 のお気には召さないだろうが、Cスタイルのコメントは
無条件でスペースで置換するようにしたよ。それ以上はさすがにちょっとね。
nVNRb4IwEH4n4T+cLrGgZmzPzL0s2+uSPZMYVos0g2JKG2PU/75WYAilYnYvwHFfv+++uz5QhjO5IfB
Sig0tHtNX13EdygTkMWWe7zpH1wEVOoWXsMahLtCZfUozAp6HYQVbInAac8/3YbKC988PH2rcBZuArl
oBClDnh44OPOz+uwnUEczhbbGAUhyUFFzkOVEy54FZeFMszGZKhnpHEUO+CdYRmmnJ9EmeckV7x/riz
0Cyklz1MLf3cEcHScGhKz+sRKsGQuj1NUDT+jmpteCCCcokGWitKe771Yzim5P4x4K7dD3izcUfM7WT
FRMCZHFzoLE/UGCAdIxNqf00BjZFcDpB9R4hc3pqcpo5KAWnbGtMrRG21ibiPvH916eJVlgUDa/SNat
B2C9oSYeG0/dC3wwbZZJkskw95W8hhY022SmTRKKrCOdLmH5JFu/jA1TuRWxqQ3IiJGfwfIfMNf6/L7
adtm/e6LHnsV07Dm9M57AaVT9qM55Ugcr8Ag==
解凍は
ttp://www.geocities.jp/c_cpp_cs/code/code.html で。
コメントは一個のスペースになるので正しい。
>>328 連結が先。
335 :
307 :2007/01/05(金) 18:56:22
皆さんありがとうございます!
>>333 を頂くことにします。
申し訳ありませんが
>>333 のプログラムがどのように動作するのか説明を頂けないでしょうか?
なんかOpenGLの課題がちらほらあるのな 母校も俺の2個下の学年ぐらいからやってるぽかったけど面白いかな
出題者マダー?
週末あたりに冬休みの宿題が終わらなくて来るやつがいそうだな
そろそろ卒論のシーズンですお
>>303 なるほど、よくわかった。
いくつか質問等を
計算量としては
NP完全≦NP困難
FNP完全≦FNP困難
NP完全≦FNP完全
NP困難≦FNP困難
ってゆう認識であってる?
あと、一般的な問題でなら経路存在判定はNPだけど
経路を求めるのはFNPにすら属さない(FPSPACEってのがあるかは知らないけれど)って
問題もありえるわけでしょ?
この可能性を言及せずに、NP困難かNP完全かを示さなきゃならないほど
「完全」ってのは重要なの?
# あと、上の計算量から言って
# NP困難じゃね? → NP完全だよ → 実はFNP完全でした
# って話の流れはソフトバンクに通じる詐欺くささを感じる件
>340 まとめありがと。しかし俺は手垢にまみれてない宿題を解きたいんだ。 というわけで出題者まだー?
>>291 も手つけられてないが今は自分の課題でいっぱいいっぱいだぜ・・・
253-284は良く見たら回答されてるから、
今の所この2題だな
>不等式 正しい. >経路を求めるのはFNPにすら属さない問題もありえるわけでしょ? それはない.FNP に属すのは,FNP の定義とハミルトン閉路問題の 存在判定だけのものが NP に属する証明から明らか. (こういう風に一般化できるので FNP と NP の混同が正当化できる) なので,完全が重要というよりも,明らかに完全と分かるものを わざわざ本来よりも難しいかもしれないと言うのが嫌なだけ. >詐欺くささ 俺の文章が悪いのだけど,303 は「それほど厳密でない計算量の議論では, 判定問題じゃない問題に対しても NP といってしまうことがある.そして それを正当化する手が少なくとも二つある」という主張なので,詐欺くさいと 言われるとちょっと心外.303 で微妙といっているのはこのあたりのこと. まあ今改めて 292 を読むと「NP 困難は証明されている」の一言で 十分だった気はするな.信用できないと言われたので,その弁解で必死だった.
>>348 >それはない.FNP に属すのは,FNP の定義とハミルトン閉路問題の
>存在判定だけのものが NP に属する証明から明らか.
FNPの定義もググっても見つけられなかったし、素人には全然明らかじゃないやー
詐欺くさいって感じたのは220前後の話の流れであって、303に対してではないので悪しからず
>>351 FNP と Complexity で Google 検索してトップに出る英語版の
Wikipedia にはちゃんと FNP の定義が書いてあるんだけどな.
インフォーマルには NP のチューリングマシンを用いた定義で,出力として
Yes/No 以外も許したもののことだと思っておけばよい.
ハミルトン閉路(判定問題)が NP に属することの証明は次のように行う:
適当に始点を選び「今いる頂点から移動できるまだ訪れていない頂点に
非決定的に移動する」という操作を繰り返す.n ステップ後に始点に
帰ってこれればハミルトン閉路が存在する.以上の手続きで,非決定的
チューリングマシンで O(n) で解けるため,この問題は NP に属する.
この証明で,移動するところで頂点の履歴を覚えておき,始点に帰ってきた
ときに覚えたものを表示すればいいだけなので FNP は自明.
>>352 こんな問題を考えてみた
n次元上に存在する格子状立方体、1辺上に存在する点は10(全点数は10^n)
障害物は存在しない
ハミルトン路を求める
この時、存在判定は常にyesなのでO(1)つまりPかつNP
一方、経路を求めるために352の非決定的チューリングマシンを使うとO(10^n)つまりFNPに属さない
どうだろう?
あー 一辺10だと本当にyesになるか怪しいかも 一辺2にしておいてー
>>353 頂点を指数関数で増やしてどうすんの。
計算量の基準が変わってるじゃない。
[1] 授業単元: 情報工学応用 [2] 問題文: マージソートを作成し、交換、比較回数、処理時間を表示できるようにする。 この時、入力する配列を昇順、ランダム、降順の3つのうちから指定でき、 入力するデータ数も任意で指定できるようにし、結果を昇順に整列せよ。 (整列した結果は出力しなくてもよいが、データ数が100000個を超えても正常に動くようにせよ。) [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:cygwin [3.3] 言語:C言語 [4] 期限:今週まで [5] その他の制限:
cygwinはコンパイラではないいいいいいいいいいいいいいいいいいいい
>>353-354 「どうだろう?」って,いろいろおかしい.
まず
>>355 の言うとおり,入力を何にするかがおかしい.
それをハミルトン閉路問題だと考えた場合,入力のサイズは
頂点数 m = 2^n なので,何の問題も無く O(m),すなわち
多項式時間で解けている.
もし入力が n であることに固執するのであれば,それは
そもそもハミルトン閉路問題ではない.従ってそれに対する
チューリングマシンとして 352 を用いるのは間違っている.
実際その問題に対するチューリングマシンで,解を O(1) で
表示するものが次のようにして構成できる:
入力 n を受け取り,次のように表示する.
「n 桁のグレイコードの通りに進め」
>>359 だから
>>343 の時点からすでにハミルトン閉路問題の話はしていないって
で、チューリングマシンって
・
>>87 のように「通った順序を表示する」ってかいてあってもチューリングマシン的にはそれでOKなのか
・今回のパターンはたまたまグレイコードという既知の処理手順が符合したけど
一般的な場合でも処理手順を示せばOKなのか
ハミルトン閉路問題に対して
「深さ優先で全点を1度ずつ通り始点に戻るまで前進・後退を繰り返せ」
と表示するのと何が違うのか
そろそろ板違いっぽくなってきたな
362 :
デフォルトの名無しさん :2007/01/06(土) 02:45:30
>>110 経路さえ見失わずにしっかりかんがえられたら結構スマートなのが出来ると思うが
>>360 二つの質問は,どちらもまともな教科書には書いてある
上はコード化できるので問題ない.詳しくはハミルトン閉路問題が
NP である厳密な証明を見よ.
下はそれが解として十分かどうかによる.「グレイコード」は経路を
一意に定めるが「深さ優先で……」は訪問順に任意性があるので
経路を一意に定めない.
ハミルトン閉路(or もとの問題)の話をしていないのならスレ違い
なので,終わるか移動するかしよう.
そろそろ宿題に答えてあげなよ
マージソートの交換回数って何?
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク) 適当な整数値を読み込んで、下記の8個も整数の中から最も近い値を出力する a[ ]={12,98,5,34,119,77,26,3} [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: (C) [4] 期限: [2007年1月8日23:59まで] 配列の宿題なのですが、どうしても上手くできません。 よろしくお願いします。
368 :
367 :2007/01/06(土) 18:13:48
↓途中までやったヤツですが、どこが悪いか指摘してもらえると幸いです。 #include <stdio.h> main(){ int b,x,i,answer,min; int a[8]={12,98,5,34,119,77,26,3}; printf("数:"); scanf("%d",&x); for(i=0; i<8; i++){ b=x-a[i]; abs(b); if(b<min){ min=b; answer=a[i]; } } printf("答え⇒%d\n",answer); return (0); }
min が初期化も更新もされとらんね
371 :
370 :2007/01/06(土) 18:27:03
>>368 あやや
minの初期値として最大値を
>abs(b);
この結果を使っていない
b=abs(b); ←こうする
372 :
デフォルトの名無しさん :2007/01/06(土) 18:38:07
#include <stdio.h> #define MAX 10000 /* 入力する数よりはるかに大きい数と設定 */ int a[ ]={12,98,5,34,119,77,26,3}; main(){ int p,i,j,min,dif; min = MAX; printf("a[ ] = {"); for(i=0;i<8;i++){ printf("%d,",a[i]); } printf("}\n"); printf("整数読み込み\n"); scanf("%d",&p); for(i=0;i<8;i++){ dif = abs(p-a[i]); if(min >= dif){ min = dif; j = i; } } printf("aにおいて一番近い要素は %d\n",a[j]); } 作っちまったよ。 てか質問で、C++でコンピューター4台くらい使って並列にプログラミングを動かしたいんだけど、何の関数使えばいいとかさっぱりなんだわ。 とりあえず、子コンピューターは配列を引数に取って、整数を親コンピューターに返すって事をしたいんやが、誰かわかる人いますか? お願いします。
スレタイも読めないバカ?
374 :
デフォルトの名無しさん :2007/01/06(土) 18:56:48
>>373 はいバカでした。すいません。
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
コンピューターを複数台使い並列に処理するプログラムの概要を述べよ。
(子プロセスは引数を配列とし、返り値を整数とする。)
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: bcc32
[3.3] 言語: /C++/
[4] 期限: 1月10日くらいまで
>>374 >コンピューターを複数台
通信方法は?
377 :
374 :2007/01/06(土) 19:14:55
>>375 同じ部屋で行うみたいなので、家庭用など小規模ネットワーク(LAN)です。
IPアドレスが192.168.XXで始まって、下3桁でコンピューターを見分けます。
プログラミングを動かしたいのか
379 :
368 :2007/01/06(土) 21:13:39
>>374 普通にTCPなりなんなりで通信すりゃいいんじゃないの?
>>374 本当に宿題?困ったことを聞く為に宿題風に装いました的な雰囲気を感じる。
いまどきの流行はDCOMじゃね?
383 :
依頼者 :2007/01/06(土) 22:42:59
問題1 [1]Cプログラミング [2]複数の整数を昇順(小さい順)にソートするプログラムの作成 [3.1]OS:Windouws XP [3.2]分かりません [3.3]言語:C [4]期限:1月8日まで 問題2 [1]Cプログラミング [2]円周率を求めるプログラムを作成 [3.1]OS:Windouws XP [3.2]分かりません [3.3]言語:C [4]期限:1月8日まで 初心者でも解けるような簡単なプログラムでお願いします。
104万桁でいいんじゃね?
2) #include<stdio.h> #include<math.h> int main(void){printf("%f\n",atan(1.0)*4.0);return 0;} 完璧!
387 :
374 :2007/01/06(土) 22:59:18
すまぬ381の言うとおりだ。困ってるから聞いた。 スレの主旨に沿う内容じゃなかったみたいだな。本当にすまぬ。
388 :
依頼者 :2007/01/06(土) 23:23:49
円周率は2桁でお願いします
printf("3.14\n");
>>388 #include <stdio.h>
#include <math.h>
int main(void)
{
printf("%3.2f", 4.0 * arctan(1.0));
return 0;
}
求めてねぇーし
テーラー展開で求めろとかのアレじゃね?
393 :
依頼者 :2007/01/06(土) 23:48:48
すいません。先ほどの円周率の問題に対して付け加えをします。 1.rand()関数を用いて0~1のx座標を作成する。 2.原点との距離を求め、座標が半径1の円内かどうか調べ、円内である場合、 円外である場合をそれぞれカウントする。 3.以上を多数繰り返し、半径1の円内である確率がπ/4であることからπを 求める 入力に関して キーボードから、計算に用いる座標数(rand()関数の実行回数ではない)を入力す る。上限をint型の最大値(実際には最大値を入れると膨大な時間がかかるの でテストはmaxでも一分で終了する程度でよい) 出力に関して 結果(求めた円周率)のみを浮動小数点(double 型を%lf)で出力(+改行) です。よろしくお願いします。
クソ!作ったのが無駄になった!!!
これはひどいwww モンテカルロなら先に言わんと
396 :
383 :2007/01/07(日) 00:11:51
#include <stdio.h> #include <stdlib.h> int main(void) { int counter = 0; int points; int i; double pi; scanf("%d", &points); for(i=0; i<points; i++) { double x = (double)rand() / RAND_MAX; double y = (double)rand() / RAND_MAX; if( x * x + y * y <= 1.0 ) counter++; } pi = (double)counter / points; printf("pi = %lf\n", pi); return 0; } テストしてないから知らんがたぶんこんな感じ。
397 :
396 :2007/01/07(日) 00:13:41
すまん、酔った勢いで名前欄に出題レス番入れちまった...
正しくは名前が名無しさんで本文に
>>383 だ。
398 :
396 :2007/01/07(日) 00:19:20
あぁ、しかもよく見ると pi を * 4.0 してないじゃないかorz
[1] 授業単元: 再帰 [2] 問題文(含コード&リンク): 以下の関数の計算時間をO記法で求めよ。 int comb(int n,int r) { if(n==r || r==0) return 1; else comb(n-1,r) + comb(n-1,r-1); } [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc バージョン分かりません。 [3.3] 言語: C [4] 期限: 一月十日まで [5] その他の制限: 基本的な文法は完全に理解しています。
400 :
399 :2007/01/07(日) 01:12:16
nとrに依存するところまでは分かります。 あと、n^2とかでは収まらず、2^nとかそういう値になりそうなのですが・・・。
401 :
依頼者 :2007/01/07(日) 01:29:14
エラーがでましたぁ。double x = (double)rand() / RAND_MAX;の部分が シンボルが未定義ですってでます。
402 :
依頼者 :2007/01/07(日) 01:31:12
エラーがでました。double x = (double)rand() / RAND_MAX;の部分がエラーで シンボルが未定義です. 'RAND_MAXとでます。解決策をお願いします。
まさかCですって落ちはないよな
出題にCってかいてあるじゃない
よくみたらRAND_MAXが未定義って出てますね。
>>402 #include <stdlib.h>
↑この行を消したら同じエラーになったので、この行を抜かしていないか、
あるいは一文字でも書き間違えてないかもう一度よく確かめてください。
408 :
407 :2007/01/07(日) 02:49:27
×2006年 ○2007年 です。スミマセン・・・
>>399 とりあえず、comb(n,r)=n!/(r!*(n-r!)) ってのは高校までに習ったよな?
それで返す定数が 1 だから最終的には comb(n,r) 回分の関数が 1 を返すんだ。
後はトーナメント式に値が求まるわけだから関数全体では 2n!/(r!(n-r!)) 回関数が呼ばれるんだ。
ということは O(n!/(r!(n-r!))) = O(n^n / (r^r * (n-r)^(n-r))) だ。
410 :
253 :2007/01/07(日) 04:00:55
>>277 遅くなりましたが、どうもありがとうございました!
こんなに長い問題も丁寧に解いていただき非常に助かりました!
次からはココに頼らず自力で解けるように頑張りますm(__)m
いやどんどん頼ってくれよ。お姉さん暇なんだ。 どうせ〆切前にしか仕事しないし。
お姉さんオメコさせてくださいwww
411 は私ではないので念のため。
んなこと言われても知らんもんは知らん
だれだよw
416 :
399 :2007/01/07(日) 13:18:34
最近は「おっ!?」って思わせる宿題ないよねー。 昔もなかったけど。
418 :
依頼者 :2007/01/07(日) 14:21:55
またまたお願いします。次は複数の整数を昇順にソートするプログラムです。 入力に関して キーボードからまず、入力する整数の個数を入力(最大で100とする)し、次 に指定した数の整数をスペース1つ開けて1行で入力するものとする。この時、 入力を促す文字をいっさい表示しないこと。 出力に関して ソートした整数をスペース1つのみをあけて1行で出力する(+改行)。指定した数 値・改行以外の出力は入力時も含め、提出版では一切行なわないこと。 これでお願いします。
>418 #include <stdio.h> #define MAX 100 int main(void){ int i, j, temp, n, a[MAX]; scanf("%d", &n); if(n>MAX) return 1; for(i=0; i<n; i++) scanf("%d", &a[i]); for(i=0; i<n-1; i++) { for(j=n-1;j>i; j--) { if(a[j-1]>a[j]) { temp = a[j-1]; a[j-1] = a[j]; a[j] = temp;}}} for(i=0; i<n; i++) printf("%d ", a[i]); putchar('\n'); return 0;}
421 :
デフォルトの名無しさん :2007/01/07(日) 15:23:45
[1] 授業単元:データ構造とアルゴリズム [2] 問題文: ファイルを読み込み、英字のみか、先頭が英字で二文字目 以降が英字または数字である文字列を抽出し、文字列の長 さが長い順に並べ、その文字列の頻度と共に表示するプロ グラムを作成したい。但し、文字列の長さが同じものに関 しての順序は任意で良い。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:mingw32 [3.3] 言語: /C++/ [4] 期限: 1月10日まで
422 :
デフォルトの名無しさん :2007/01/07(日) 15:26:31
[1] 授業単元: フラクタル図形 [2] 問題文(含コード&リンク): n次のヒルベルト曲線を描く関数を再帰を使わずに定義せよ。 ただし、90度右折をR 90度左折をL 向いている方向に線を描くをF として表せ(必ずしも、このような記号を使う必要はない) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月9日まで [5] その他の制限: 特にありません。 つまりは、再帰つぶしってことなんですが どうすればいいでしょうか。 どなたかお願いします
423 :
デフォルトの名無しさん :2007/01/07(日) 15:29:02
>>421 その文面だけだと、よくわからないので
例などがあるとわかりよいかと思います。
424 :
デフォルトの名無しさん :2007/01/07(日) 15:35:26
[1] 授業単元: 解析 [2] 問題文(含コード&リンク): C言語のソースコードを与える。 このソースコードに含まれるすべての宣言 (当然、関数、構造体、共用体も含まれる) を抽出し、意味を表示するようなプログラムを作れ。 意味とは、その変数名を抽出した上で どのようなものかの説明を表示する。 例 入力 int main(void){ int dim[10]; return 0; } 出力 mainは関数で、引数はなし。戻り値はint型。 関数mainのローカル変数dimはint型の配列で大きさは10。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1/15まで [5] その他の制限: なし。
425 :
デフォルトの名無しさん :2007/01/07(日) 15:37:46
>>421 入力
#include <stdio.h>
#include <ctype.h>
int main(void){
int c0;
char c1;
c1='\0';
b='\0';
while((c0=getchar())!=EOF){
if((!isalnum(c1))&&isalnum(c0)){
printf("\n");
}
if(isalnum(c0)){
printf("%c",c0);
}
c1=c0;
}
return 0;
}
426 :
デフォルトの名無しさん :2007/01/07(日) 15:39:03
出力 getchar:1 include:2 isalnum:3 printf:2 return:1 stdio:1 while:1 ctype:1 char:1 main:1 void:1 EOF:1 int:2 if:2 c1:4 c0:6 h:2 n:1 c:1
427 :
デフォルトの名無しさん :2007/01/07(日) 15:51:38
[1] 授業単元:コンピューター実習 [2] 問題文(含コード&リンク): timedate_sample.c を基に カレンダーを出力するプログラムの作成。 cal に似たものを作成する。 現在時間の表示、指定年月日のカレンダー表示ができると、なお良い。 例) ./a.out December 2006 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 1月10日 [5] その他の制限:特になし
>>421 ttp://www.geocities.jp/c_cpp_cs/code/code.htmlで解凍 jVPbbqswEHyPlH/YtBKy1RzUvoYkv1IZ44BVsBE2SFXVf+/6Ugco6ikv2LM7s971+FEq3o6VgLPUxg6
Cddf97jGBCElVL6BJcKuHBcTaWg/SNksu5/a9Fwjtd6NBFVCsE6ZnXICxVeFwlB+5Ba5HZcWw333sd4
BfqOrzi4BIhVnKxl3MJxQ+HAoXeC7gcxnjWhkblTIwLtXpYa4p/ko6+rpqi6sSt9S6Bd2LgeFYLpeoE
RUzYI49CDsOKopcgOW+tU2Fw/8VDguFTxyKV+Bd/4N6hBVS0jTlKEmCVt4KVdsGZ3qFcolQrICFJi0r
HIgRg/05qOCKc6xzzWC6F1rFTidpQ68gcZI3qSoy5aWopSIUlXKBAD2mSzH+AN4FNyDSDTDm0AD7Gnk
/mua1ZPyNJOIRXhJXtEbc05+e5L9rMBR25m65Y6782oKm2GwBprkvvZXd7oYtEY49canyWlhCi7DUuv
LreQhv9X4e35lhbd8wwpehjdMkeNY04Q0bKKerlN+PBFkGrqwaOyy7PuBS6Y8FHb0fbbiIdTC6x/llH
orvIP6MxpRNQ3T9N8u39buvkkKB20PyTOHuftYasi2cz4B+8I8Llw+nh4i4t44rJLbF4tE8B+N8AQ==
>>422 #include <stdio.h>
#include <string.h>
#define N 1000000
char *dic[] = { "LbFRaFaRFbL", "RaFLbFbLFaR", "F", "L", "R" };
char ch[] = { 'a', 'b', 'F', 'L', 'R' };
char *s, *t, *u, buf[2][N];
int main() {
int i, j, k;
int n = 5;
s = buf[0]; t = buf[1];
strcpy(s, "a");
for (k = 0; k < n; ++k) {
strcpy(t, "");
for (i = 0; s[i] != '\0'; ++i)
for (j = 0; j < 5; ++j)
if (s[i] == ch[j]) strcat(t, dic[j]);
u = s; s = t; t = u;
}
for (i = 0; s[i] != '\0'; ++i)
if (s[i] != 'a' && s[i] != 'b')
putchar(s[i]);
}
>427 timedate_sample.cってどこよ
>>428 vector<counter>::find で insert するのは O(n^2) かかって非効率。
hVLLboQwDLwj8Q/uVloFQVHPC8uPVFUVQgCrkKAkILXV/nsdYB9waC+JPc7MOImfUYlurCTkqK0zkvd
FGDzfQIJQNRtoksJps4F412iDrt1yhXBfg9xAPR8oD4PRkioo3ks7cCHBuirzuCdUsoaBo1m9E0DlCh
B6VE4aOlVq3YHoB2BCK+uuFTjyBHZIGcFPGAAY6UajgKc1GutSi9+SRVBAuQFI+xIG5AY9R8VW7tIF2
Mwn1P+2rQrFXPCsJaq1oc7gDAJV2khHukuodTXHj6XVg/g1MLS8G1rOxB3e2c9AOoy2/Si5+GRMtNxE
IroV/zaH4xG8iRp7Mtm3ctX4x8IThtHNxQeYHuLNvsfxClz8Ni/LuOTrnxQwMTqalrLxT5x4XioVNbd
IWW0cm+7laSkm/sOj+/vuRE8npI0TBEh3uvEzSp/OV5EM4hjXaxLTQZ4DvhTzCPj4cDqskJU0SJVPiN
hlDyP06ofkFw==
432 :
デフォルトの名無しさん :2007/01/07(日) 16:49:08
[1] 授業単元:情報工学実験
[2] 問題文(含コード&リンク):
http://www.vipper.net/vip156634.jpg (図があるため画像ファイルで問題文を示します)
[3] 環境
[3.1] OS:Windows
[3.2] bcc32
[3.3] 言語:C
[4] 期限:明後日まで
[5] その他の制限:どこがどう動作しているのかコメントで説明を付けてもらえると嬉しいです
434 :
デフォルトの名無しさん :2007/01/07(日) 16:58:42
>>433 ①津山 ②岡山 ③鳥取 ④倉敷 ⑤新見
⑥米子 ⑦福山 ⑧松江 ⑨三原 ⑩三次
⑪呉 ⑫広島 ⑬江津 ⑭小郡 ⑮益田 ⑯下関
です。
>>434 いや、辺(始点・終点・距離)のリストのほう。
436 :
デフォルトの名無しさん :2007/01/07(日) 17:04:18
入力データ: 出発地(1~16):1 目的地(1~16):11 出力例: 1:津山 から 11:呉へ 距離 220 km 道順:1:津山 => 2:岡山 => 4:倉敷 => 7:福山 => 9:三原 => 11:呉
>>433 仕方ないからオレ様流のを作ってくるよ
スタックマシンにするだろ?
>>436 ネタですか?
1 津山 | 0 | 59 | 71 | ...
2 岡山 | 59 | 0 | 30 | ...
...
という表をグラフから読み取って全部打ち込んでくれと言っている。
面倒なら始点と終点と距離の三つ組みのリスト
1 2 59
1 3 71
1 5 72
...
という形式でもいいが。
439 :
437 :2007/01/07(日) 17:10:44
やめた。
>438 ネタですか? その表を作るプログラムを書けって話だろ。
>>440 違う。求められているプログラムはこの表の閉包を計算するプログラム。
ちょっと書き方が悪かった。上の表形式にしたのは俺が悪かった。 ただ、手で打ち込むのが面倒だから辺のリストが欲しいのは本当のところ。
>>440 図で言うと、例えばノード15は13,14,16と隣接してるから、
13~15が69
14~15が94
16~15が163
ってな、隣接ノード間の距離を示す情報は欲しいってこったべ?
問題は、任意の二点間の最短距離を求めろってこったから、
隣接ノードには限らないわけだべ?
444 :
432 :2007/01/07(日) 17:23:41
>>438 16×15=240通りを人間の頭で考えないといけないということですか?
その部分をプログラムで計算させるんじゃないかと思うのですが・・・
ノード間の距離情報は欲しいってのはわかるけど、>438は >という表をグラフから読み取って全部打ち込んでくれと言っている 全部って言っちゃってるからなぁ。
>>444 んだから、全都市同士の組み合わせをあらわす二次元行列全部を
あらかじめ埋めろってことではないべ。
地図に示されている、隣接してる都市同士の距離だけを埋めておいて、
後は例えば-1でもつっこんでおく。
そこをプログラムに計算させるってこったべ?
あー俺が悪かったよ。自分で打つよ。
449 :
432 :2007/01/07(日) 17:32:04
つまり「図に書き込まれている数字を打ち出せ」ということだったのですか?
450 :
依頼者 :2007/01/07(日) 17:39:26
420さん。ありがとうございました。ほんと助かりました。
丸投げスレでもないのにこの勢いは一体・・・!!
453 :
デフォルトの名無しさん :2007/01/07(日) 18:02:23
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): スペースで区切った2つの実数を1つの行として、3行分のデータを読み込みます。 1つの行にある2つの実数は、2次元座標上の点P(x,y)の座標を示すと考えます。例えば 1.0 1.0 3.0 -1.0 2.0 -2.0 この3つの点が三角形の頂点だと考えて、ヘロンの公式を用いて面積を求めよ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: BorlandもしくはVisualC++ [3.3] 言語: C++ [4] 期限: 2007年1月8日19:00まで [5] その他の制限: ユーザ定義関数を使ってもらえるとありがたいです。 それではお願いします。
454 :
物乞い :2007/01/07(日) 18:56:43
やりたいこと メールを読み込んで 添付ファイルを保存したい。 欲しいもの Cソース ギブミーチョコレート!!!
マルチ乙
456 :
デフォルトの名無しさん :2007/01/07(日) 19:12:52
457 :
453 :2007/01/07(日) 20:31:10
458 :
432 :2007/01/07(日) 20:32:42
>>452 どうもありがとうございます!
次にこの①②をお願いします。
[1] 授業単元:情報工学実験
[2] 問題文(含コード&リンク):
①ある団体でロードレースを行なったところ次の結果になりました。下表を計算して表示するプログラムを作りなさい。
──────┬──────┬──────┬─────┬───
ゼッケンNo │スタートタイム.│ゴールタイム │ラップタイム│順位
──────┼──────┼──────┼─────┼───
1 │9h30m01s │11h12m55s │ │
2 │9h30m29s │11h13m43s │ │
3 │9h31m03s │11h13m49s │ │
4 │9h31m30s │11h14m05s │ │
5 │9h32m05s │11h14m23s │ │
6 │9h32m33s │11h14m48s │ │
7 │9h33m01s │11h15m20s │ │
8 │9h33m31s │11h15m54s │ │
9 │9h34m00s │11h16m11s │ │
②上の課題のデータを、構造体で定義して処理するプログラムを作りなさい。
[3] 環境
[3.1] OS:Windows
[3.2] bcc32
[3.3] 言語:C
[4] 期限:明後日まで
[5] その他の制限:どこがどう動作しているのかコメントで説明を付けてもらえると嬉しいです
459 :
デフォルトの名無しさん :2007/01/07(日) 20:39:29
ありがとうございます! 上手く行きました○.○
自己解決しました!!
462 :
デフォルトの名無しさん :2007/01/07(日) 21:18:42
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
http://vipper.jpn.org/www/upload/src/VIPphoto0113.zip ↑のzipに格納してある2つのカラー画像image02.ppm、image06.ppmについて
image02.ppmの左上角を(X,Y)=(0,0)として、(100,150)の座標にimage06.ppmの
左上角が位置するように2つの画像を合成したppmファイルを出力する。
ただしimage06.ppmの白い背景はimage02.ppmにおきかえ、
文字だけを取り出してimage02.ppmが背景となるように貼り付けることとする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc バージョン分かりません
[3.3] 言語: C
[4] 期限: 1月9日7:00まで
画像処理の課題です。よろしくお願いします。
>453 class triangle{ struct pos_ { double x,y; } *tbl; public: triangle(){ tbl = new struct pos_ [3]; tbl[0].x = 1.0; tbl[0].y = 1.0; tbl[1].x = 3.0; tbl[1].y = -1.0; tbl[2].x = 2.0; tbl[2].y = -2.0; } ~triangle() { delete [] tbl; } double calcArea(){ double s, a, b, c; a = calcDist(tbl[0], tbl[1]); b = calcDist(tbl[1], tbl[2]); c = calcDist(tbl[2], tbl[0]); s = (a + b + c) / 2.0; return sqrt(s * (s - a) * (s - b) * (s - c)); } private: double calcDist(struct pos_ a, struct pos_ b){ double dx, dy; dx = a.x - b.x; dy = a.y - b.y; return sqrt(dx * dx + dy * dy); } }; ...C++はよくわからんのだ(;´Д`)
464 :
デフォルトの名無しさん :2007/01/07(日) 21:51:40
[1] 授業単元:情報基礎 [2] 問題文(含コード&リンク):構造体を用いたトランプのゲームを作る(何でもいい) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2007年1月8日正午まで [5] その他の制限:ビット演算まで習いました どうかよろしくお願いします
>>402 image06がグラデーション入りの微妙に白じゃないデータなので合成のしかたは乗算にした。
多分だいたい題意は満たす。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char*getline(char buf[],int size,FILE*fp){char*p;while( (p=fgets(buf,size,fp)) != NULL && *p=='#'){}return p;}
typedef struct{int width;int height;unsigned char*vram;}Image;
Image load(char*filename){
Image p;FILE*fp = fopen(filename,"rb");char buf[512];getline(buf,sizeof(buf),fp);
getline(buf,sizeof(buf),fp);sscanf(buf,"%d%d",&p.width,&p.height);
getline(buf,sizeof(buf),fp);fread(p.vram = malloc(p.width*p.height*3),p.width*3,p.height,fp);
fclose(fp);return p;}
void save(char*filename,Image img){
FILE*fp=fopen(filename,"wb");fprintf(fp,"P6\n%d %d\n%d\n",img.width,img.height,255);
fwrite(img.vram,img.width*3,img.height,fp);fclose(fp);}
int main(){
Image i02 = load("image02.ppm"),i06 = load("image06.ppm");
int y,x;
for(y=0;y<i06.height;++y)for(x=0;x<i06.width*3;++x)i02.vram[(y+150)*i02.width*3 + x+100*3] =
i02.vram[(y+150)*i02.width*3 + x+100*3] * i06.vram[y*i06.width*3 + x] / 255;
save("out.ppm",i02);return 0;}
466 :
465 :2007/01/07(日) 21:55:08
>>464 ゲームのアイデアくらいはあなたが出そう
468 :
453 :2007/01/07(日) 22:05:55
>>463 ありがとうございます
ですがCだとまずいので、それを自分でC++に直そうと考えています。
それでだいたいの計算方法はわかったのですが、
「a = calcDist(tbl[0], tbl[1]); 」
の意味がわからないので、それを教えてください。
>463はC++だが...
>>468 >>463 は普通にC++ですよ!
Cっぽいところとかstatic関数にしたほうがいんじゃねとか微妙に突っ込みどころがあるけど。
まぁ課題として出して問題ないと思うよ。
471 :
デフォルトの名無しさん :2007/01/07(日) 22:10:24
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 数当てゲーム 実行すると、コンピュータが1つ数字を用意しま す。数字は0から100までです。 キーボードから数字を入力して、当ててください。 ただしチャンスは10回までです。 入力して外れた場合は、画面にヒントが出ます。 (大きい・小さい・惜しいなど) 10回挑戦しても外れた場合は、ゲームオーバー。 正解が画面に出力されて終了します。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio 2003 [3.3] 言語: C [4] 期限: 1月8日 12:00 よろしくお願いします。
472 :
デフォルトの名無しさん :2007/01/07(日) 22:16:00
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 二分探索木のノードの挿入と木の表示を行う関数を作成し、 以下の処理を行いなさい。 12を追加 14を追加 20を追加 18を追加 木の表示 5を追加 3を追加 7を追加 13を追加 木の表示 1を追加 4を追加 6を追加 木の表示 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio 2003 [3.3] 言語: C [4] 期限: 1月8日 12:00 よろしくお願いします。
473 :
453 :2007/01/07(日) 22:16:04
>>469 ,470
えっ、そうなんですか?そのままコンパイルしたら、「宣言が違う」と言われたので、てっきりC言語で書かれたのだと。
早とちりすいませんでした。
あらためて463さん、ありがとうございます。
> 惜しい ってどんなヒントだよw
>453 よ >463 は >スペースで区切った2つの実数を1つの行として、3行分のデータを読み込みます。 をまるっきり無視しとるぞい
>>471 惜しいのついでに大きさも出してるけど嫌なら適当に直して。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int ans,n,i;
srand(time(0));
ans = rand()%100;
for(i=0;i<10;++i){
scanf("%d",&n);
if( n == ans){
puts("正解!!");
return 0;
}
if(abs(n-ans)<10)printf("惜しい");
puts(n>ans?"大きい":"小さい");
}
puts("はい残念");
return 0;
}
>>453 ttp://www.geocities.jp/c_cpp_cs/code/code.htmlで解凍 bVHtaoMwFP0v+A4HCsOstuvan7q+SJERY7oFNNokFqX03Xf93JQFEm7uPffknNyN0iKvM4lYldYZyYu
z723mpCi4+6ZMbZX+guaFtBUXEtZlke/5HrXUwqEqlXZ4+B5oZWWd5hJNiDYaMn05YHigwQda2ocIT9
979hwjPlPWcS3kZyBKbUfOF/AQi3vKVu9kHSffN9gh3TfRstb2tbavTWqMdLXRsDfjAmp+7Ri2HZSil
hHoOWvi9CFLOdVKzm11N2t5nBT8WqP2G1tqTBcA4jMrgFgATIhqBbAECDh5SGkLhjcc/7FqyR8dO3A2
RekcCTYa7+ZYcKWD2ccw2/vllIyk19Ig6HJqGKRCjFOE7VaxAdAtoTTOZ2pTCY1miqYRqCsCQvzFl7V
DHA8/fr8ckpA63vvzmLCuInWWL20dBsk/
478 :
453 :2007/01/07(日) 22:25:04
>>475 あっ、ホントだ……ご指摘ありがとうございます。
「エラー E2141 12_02he.c 3: 宣言の構文エラー」
というのが出る原因も、誰か教えていただけるとありがたいのですが。
479 :
デフォルトの名無しさん :2007/01/07(日) 22:26:22
> 12_02he.c がエラーのげいいん(なぜか変換できない)ぢゃねの?
481 :
464 :2007/01/07(日) 22:30:49
>>467 失礼しました
ブラックジャックでお願いします
class Point2D { protected: double m_x, m_y; public Point2D(double x = 0.0, double y = 0.0) : m_x(x) , m_y(y) {} friend istream& operator>>(istream& ist, Point2D& p) { ist >> p.m_x >> p.m_y ; } }; 続きメンドイ
483 :
453 :2007/01/07(日) 22:36:53
>>477 致命的エラー F1003 C:\borland\bcc55\Include\stdcomp.h 5: error 指令: Must use C++ for STDCOMP.H
と出てしまいます。
>>480 ご指摘どうり、数字がいけないのかと思い、「heron」という名前にしてやってみました。
エラー E2141 heron.c 1: 宣言の構文エラー
……orz
> heron.c ^^^^^^^^↑これ
> 12_02he.c ^^^^^^^^^^↑これ
ルール カジノで行われるブラックジャックでは、プレイヤーはプレイヤー同士ではなくディーラー(親、胴元、ハウス) との間で1対1の勝負を行う。プレイヤーが何人かいる場合には、ディーラーは複数のプレイヤーと同時に勝負を することになる。各プレイヤーの目標は、21を超えないように手持ちのカードのポイントの合計を21に近づけ、 その数字がディーラーより21に近づくことである。手の中のカードのポイントは、カード2~10ではその数字通りの値であり、 また、絵札であるK(キング)、Q(クイーン)、J(ジャック)は10と数える。A(エース)のみは、1あるいは11の どちらかとして数えることができ、どちらの数をとるかは状況に応じプレイヤーが選択することができる。
488 :
453 :2007/01/07(日) 22:45:50
>>485 ,484
今まで「.c」でしかプログラムを書いたことがないのですが、
「.cpp」と「.h」と「.c」って、まったくの別物なのですか?
C++で.cは無いな
> [3.3] 言語: C++ >今まで「.c」でしかプログラムを書いたことがないのですが、
>488 コンパイラの動作が違うだろ コンパイラへのソースファイルの与え方によるが
493 :
デフォルトの名無しさん :2007/01/07(日) 22:53:27
printfでアドレスを表示するときに使う変換指定子で%xと%pで使い分ける事ってあるのでしょうか?
494 :
453 :2007/01/07(日) 22:56:35
>>489 ~492
あ~、なるほど、普段VisualC++を使ってるから、完全にc++を使ってるもんだと……
「.cpp」にして動作しました。
ホント、迷惑かけてすみませんでした。
>>493 printfでアドレスを表示するときに%xは使いません
むしろ整数型を16進数表示させたいときがxでアドレスの時だけp まあ宗教論でしかないが
sizeof(unsigned int)≠sizeof(void*)の時とか。
498 :
デフォルトの名無しさん :2007/01/07(日) 23:01:26
某初心者本では%xで出力していたので、なんでかなと思ったのですが。 違いは %p &i=0xbffff964 &j=0xbffff960 &g=0x80a3504 &h=0x80a3508 %x &i=bfffdc64 &j=bfffdc60 &g=80a3504 &h=80a3508 %xだと16進数を示す0xが表示されないんですね。 今気づいたけど、グローバル変数はアドレス変わらないのに、 ローカル変数はアドレス変わるんですね…
>>493 宿題で無いならすれ違い。次からは正しいスレで聞くこと。
%p は引数がその環境でのアドレスとして解釈できる場合、それを
その環境におけるアドレスの形式で表示する。
たとえばアドレスが文字で指定されるような変態環境も仕様準拠だが、
この場合 %p は %s のような振る舞いをするはず。
×文字 ○文字列
501 :
デフォルトの名無しさん :2007/01/07(日) 23:08:05
なるほど、Cで標準的な処理系ではたまたまアドレスは16進数で表されているから %pが16進数になるのであって、%pそのものが16進数の意味を含んでいる分けでは無いという感じですか。 ありがとうございましたm(__)m
('(゚∀゚∩_ おいらをどこかのスレに送って! /ヽ 〈/\ お別れの時にはお土産を持たせてね! /| ̄ ̄ ̄|.\/ | .モツ煮..|/  ̄ ̄ ̄ 現在の所持品:たばこ・ライター・コーヒー・PlayStation3(60GB)・枕・PlayStation3(60GB) 聖教新聞 ・PlayStation3(60GB)・外付けRIGEL340MHDD・PlayStation3(60GB)・寄生虫キムチ 虫食い付きウールセーター・PlayStation3(60GB)・PlayStation3(60GB)・クターの生首・PlayStation3(60GB) LANケーブル・PlayStation3(60GB)・リラックマ・マリモ・六法全書・単三電池 ファブリーズ・PlayStation3(60GB)・水・PlayStation3(60GB)・クタウイルス 寄生虫入りキムチ ・ワセリン湿布・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB) あんぱん ・エレメント・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB) びすけっと ・タカヤ3巻・ネルハード ・バスタードソード・PlayStation3(60GB)・ふくにゅうの巻物・PlayStation3(60GB) ラストチャンス ・まじかる★ステッキ ・PlayStation3(60GB) ・PlayStation3(60GB)・PlayStation3(60GB) PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB) PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB) PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB) PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB) PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB) PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB) PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB) PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB)・PlayStation3(60GB) 【BOOKOFFで入手した新・ゴーマニズム宣言1~15巻】
503 :
◆g/ZMVdytmo :2007/01/07(日) 23:58:30
504 :
◆g/ZMVdytmo :2007/01/08(月) 00:02:43
どうぞよろしくお願いします<(_ _)>
>502 おまえPlayStation3(60GB)持ちすぎだろ。 俺に一個よこせ。
スレ違いっぽいんですけど どなたかプログラムの作成依頼受けてもらえませんか? ソートなのでそんなに難しくないのですが、 期限以内に自力で作ることができそうにありません・・・ どなたか力を貸してください。お願いします
C/C++の宿題なら受ける。さもなくば(・∀・)カエレ!!
>>507 C言語です。
スレは監視されていて使えないのですが
お願いしていいですか?
堂々とやったらええやん
ここを使ってもいいのは、バレたとき開き直れる根性のある人だけです。
堂々とは無理ですorz 2日以内に完成必須で 報酬は3万で引き受けてくれる人お願いします スレ違いだし、これを見て不快になる人もいるかと思いますがお願いします:; メッセアドshell_so@hotmail.co.jp
プログラマたるもの納期を踏み倒す技術くらい身につけんといかんよ。 では、次の課題どうぞー
絶対仕事だな、これは…
仕事じゃなくて卒業研究です 卒業かかってるので必死なのです・・・
ソートのプログラムで
>>511 にとって3万以上の価値を持つ物が何なのか興味があります
∧__∧ ( ・ω・) いやどす ハ∨/^ヽ ノ::[三ノ :.'、 i)、_;|*く; ノ |!: ::.".T~ ハ、___| """~""""""~"""~"""~"
単位
518 :
デフォルトの名無しさん :2007/01/08(月) 01:04:41
やっぱり無理ですね・・・ スレ違い失礼しました C言語まじめに勉強してなかったので卒論のプログラムができなくて 期限が3日しかなかったので・・・ お金は気持ちということです
金と聞いて黙っておく俺様ではないわぐはははは
金取って人に卒研書かせるとか
どう考えても黒だろ…
>>503 fopen習ってないのにファイルから読み込めとか
どんな鬼課題だよ。
卒業研究ってことは、論文発表でもされたソートアルゴリズムの評価みたいなもんかな? ソートアルゴリズムは決まっていて実装するだけだろうけど、ややこしそうだ
ま、一年くらい勉強代だと考えれば安いもんだろ
>>522 あ、見落としてた。
でも何でリダイレクトなんだろうか…
余計にソースがゴチャると思うんだが。
getsもgetcも使えなくてscanf縛りってのも疑問だ。
>>503 作ってみようと思ったけど縛りがキツすぎてわけわかんね(;´Д`)
一次元配列で集計するってのは構造体の配列じゃ駄目なのか?(そもそも構造体習ってるか?)
「どの位置に文字xと同じ既出文字種があるか」って文体から、集計する配列には
ひとつの要素に「既出文字」と「その文字の出現頻度」の二つの情報が必要だと解釈してるんだが。
普通構造体無しでこういう集計するならintの配列を文字の種類分確保して(この場合ならASCII分だから0x80)
文字そのものをインデックスとして扱えるようにするんだが、これだと要件のひとつである
「並べ替え」が実行できない(そもそも並べ替えの必要が無くなる)+search関数の必要性も無くなる。
fopenじゃなくてリダイレクトで読めっていう縛りも相まってわけわかんなくなってきた。
> 余計にソースがゴチャる うそをつくなよw 標準入力が"ファイルから"になるからすっきりするだろがヴォk
入力がキーボードだろうがファイルだろうがパイプだろうが、コードがそう変わったりせんだろ
>529 少なくとも「ファイルをオープンして云々」、はあるとナイトでコードが変わるよ
3万も払えば喜んでやる人も多いだろうに、学生なら特に。 友達いないのか?
532 :
デフォルトの名無しさん :2007/01/08(月) 02:16:37
[1] 授業単元:プログラミングc言語 [2] 問題文(含コード&リンク):手元にある複数の楽曲ファイルを組み合わせて、手持ちの記録媒体 (CD等)の空きが最も少なくなるようなコピーのしかたを決定する。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cのみ [4] 期限: 1月9日まで [5] その他の制限:なるべくスマートなアルゴリズムを書けとの事です 考え方が複雑すぎてうまく出来ないのでお願いします。
>>503 要件色々満たしてないけど一応置いとく。一応の縛りには対応した。
可読性無さ杉?三項演算子使うな?(´・ω・`)もう知らんがな
#include <stdio.h>
int frq_list[0x80];
int search(char x)
{
return frq_list[x] ? x : -1;
}
int main( int ac, char **v)
{
FILE *fp = NULL;
int c = 0, p = 0;
printf("\t* * * 文字種調査 * * *\n[英文]\n");
while(scanf("%c",&c) != EOF){
if(search(c) != -1) frq_list[search(c)]++; else frq_list[c]++;
printf("%c",c);
}
c=0; printf("\n%8s%8s%8s%8s%8s%8s\n","文字","度数","文字","度数","文字","度数");
while(1){
if(c >= 0x80) break;
if(!frq_list[c] || c == 0x0A || c == 0x0D){
c++; continue;
}
printf("%8c%8d",(char)c,frq_list[c]);
if(!((++p)%3)) printf("\n");
c++;
}
return 0;
}
>>503 searchの条件の意図がわからん。。。
それさえなければ10行くらいで書けそうなのにな
536 :
別回答 :2007/01/08(月) 03:30:17
#include <stdio.h> int appear[256]={0}; /* 既出文字種を格納する配列 */ int numOfletter=0; int search(char x){ /* 仕様 :int search(char x) 昨日 :文字xと同じ文字が既出文字種を格納する配列のどこにあるか検索する。 戻り値:同じ文字が存在する場合は、その場所の要素番号。 存在しない場合は、-1を返す。 */ int pos; for(pos=numOfletter-1; pos>=0; --pos) if(appear[pos]==(int)x) break; return pos; } int main(void){ int ch,count[256]={0}; printf(" * * * 文字種調査 * * *\n[英文]\n"); while(scanf("%c",&ch)==1){ printf("%c",ch); if(!(ch=='\n'||ch=='\r')){ if(search((char)ch)==-1) appear[numOfletter++]=ch; ++count[ch]; } } printf("\n 文字 度数 文字 度数 文字 度数 \n"); { int i,col=0; for(i=0; i<256; ++i){ if(count[i]>0){ ++col; printf(" %4c %4d ",i,count[i]); } if(col==3){ col=0; printf("\n"); } } printf("\n"); } return 0; } ...おらぁもsearch()の意味わかんねぇだ
538 :
デフォルトの名無しさん :2007/01/08(月) 06:00:04
【ネガティブ派遣根性チェック】 3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。 □偽装派遣先の社員の意見にはたとえ間違っていても反対しない □偽装派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい □自社に仕事を持ち帰れるように言われるとムカつく □自社で仕事なんてできるわけがない □派遣/受託の差異を指摘する人間はムカつく □偽装派遣先には仕事だけでなく自分のプライベートについても指示して欲しい □自分の月額金額を知らない □偽装派遣先社員より自分の生涯収入が低いのは当然だ □偽装派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ □今のプロジェクトが終わっても同じ偽装派遣先に常駐したい
>>538 ・質問は【質問テンプレ】を利用してください。
>>532 楽曲ファイルのサイズおよび記憶媒体のサイズは整数としてよい?
それとも実数も考慮しないといけない?
>>532 とりあえず楽曲ファイルサイズ・媒体サイズどちらとも自然数に仮定した:
#include <stdio.h>
#define C 20 /* capacity */
#define n 4 /* number of files */
int a[n] = { 4, 5, 6, 8 }; /* sizes of files */
int main() {
int i, c;
int table[C+1];
int prev[C+1];
for (c = 0; c <= C; ++c)
table[c] = 0;
table[0] = 1;
for (i = 0; i < n; ++i) {
for (c = C - a[i]; c >= 0; --c) {
if (table[c] && !table[c + a[i]]) {
table[c + a[i]] = 1;
prev[c + a[i]] = c;
}
}
}
for (c = C; !table[c]; --c);
for (; c > 0; c = prev[c])
printf("%d ", c - prev[c]);
}
543 :
462 :2007/01/08(月) 11:23:44
>>465 亀レスですみませんがありがとうございます。
実はもう1問あったのを忘れていたのですが
どなたか答えて頂けないでしょうか。
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
http://vipper.jpn.org/www/upload/src/VIPphoto0133.zip ↑のzipに格納してある2つのグレー画像image05.pgm、filter.pgmについて
image05.pgmを田の字型の4つの領域でみたとき
対角線上にある左上と右下、右上と左下を入れ替える。
12 → 43
34 → 21
その後filter.pgmの黒円を前問のようにimage05.pgmに合成し、
再度対角線上に入れ替えて、最終的には元の画像の四隅に
四分の一の円が重なったものを出力する。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc バージョン分かりません
[3.3] 言語: C
[4] 期限: 1月9日7:00まで
>458 データ定義編 #define toULong(h,m,s) ((h*60+m)*60+s) struct race_ { int id; unsigned long start, goal, rap; int rank; }list[]={ /* ゼッケンNo, スタートタイム, ゴールタイム, ラップタイム, 順位 */ {1, toULong(9,30, 1), toULong(11,12,55), 0, 0}, {2, toULong(9,30,29), toULong(11,13,43), 0, 0}, {3, toULong(9,31, 3), toULong(11,13,49), 0, 0}, {4, toULong(9,31,30), toULong(11,14,05), 0, 0}, {5, toULong(9,32, 5), toULong(11,14,23), 0, 0}, {6, toULong(9,32,33), toULong(11,14,48), 0, 0}, {7, toULong(9,33, 1), toULong(11,15,20), 0, 0}, {8, toULong(9,33,31), toULong(11,15,54), 0, 0}, {9, toULong(9,34, 0), toULong(11,16,11), 0, 0}, }; int num=sizeof(list)/sizeof(list[0]);
>458 本体編 void toString_exec(char *dst, unsigned long t){ sprintf(dst, "%dh%02dm%02ds", (t/3600)%60, (t/60)%60, t%60); } #define makeString() { static char dst[14]; toString_exec(dst, t); return dst; } char *toString_s(unsigned long t){ makeString(); } char *toString_g(unsigned long t){ makeString(); } char *toString_r(unsigned long t){ makeString(); } int main(void){ int i, rank; unsigned long min; /* ラップタイム計算 */ for(i=0; i<num; ++i) list[i].rap = list[i].goal - list[i].start; /* 順位付け */ rank=1; do{ min=9999999; for(i=0; i<num; ++i) if(list[i].rank==0 && min>list[i].rap) min=list[i].rap; if(min!=9999999){ int cnt=0; for(i=0; i<num; ++i) if(min==list[i].rap){ ++cnt; list[i].rank=rank; } rank+=cnt; } }while(min!=9999999); printf("───────┬───────┬───────┬───────┬───\n"); printf(" ゼッケンNo │スタートタイム│ゴールタイム │ラップタイム │順位 \n"); printf("───────┼───────┼───────┼───────┼───\n"); for(i=0; i<num; ++i) printf("%12d │%-14s│%-14s│%-14s│%5d\n", list[i].id, toString_s(list[i].start), toString_g(list[i].goal), toString_r(list[i].rap), list[i].rank); return 0; }
#define makeString(t) { static char dst[14]; toString_exec(dst, t); return dst; } char *toString_s(unsigned long t){ makeString(t); } : の方が良かったかな...
547 :
458 :2007/01/08(月) 14:11:30
①と②をそれぞれ別々のプログラムにして頂けないでしょうか?
>547 list[].~ をメンバそれぞれの配列 id[], start[], goal[], rap[], rank[] に置き換えると ①になるであろうw 後、 int num=sizeof(list)/sizeof(list[0]); ↓ int num=sizeof(id)/sizeof(id[0]); にするのを忘れずに(ちなみに id[] ぢゃなくても rank[] でも何でもOK)
549 :
458 :2007/01/08(月) 14:43:52
エラー E2268 課題29.cpp 20: 未定義の関数 'sprintf' を呼び出した(関数 toString_exec(char *,unsigned long) ) エラー E2268 課題29.cpp 36: 未定義の関数 'printf' を呼び出した(関数 main() ) となりました。
550 :
458 :2007/01/08(月) 14:45:24
もとい、何でもありません
>549 #include <stdio.h>
>458 > [3.3] 言語:C ぢゃねの? > 課題29.cpp って名前みたいだけどちゃんとCとしてコンパイルしてる?
553 :
依頼者 :2007/01/08(月) 15:49:04
[1]Cプログラミング [2]円周率を求めるプログラムを作成 [3.1]OS:Windouws XP [3.2]分かりません [3.3]言語:C [4]期限:1月8日まで 1.rand()関数を用いて0~1のx座標を作成する。 2.原点との距離を求め、座標が半径1の円内かどうか調べ、円内である場合、 円外である場合をそれぞれカウントする。 3.以上を多数繰り返し、半径1の円内である確率がπ/4であることからπを 求める 入力に関して キーボードから、計算に用いる座標数(rand()関数の実行回数ではない)を入力す る。上限をint型の最大値(実際には最大値を入れると膨大な時間がかかるの でテストはmaxでも一分で終了する程度でよい) 出力に関して 結果(求めた円周率)のみを浮動小数点(double 型を%lf)で出力(+改行) です。よろしくお願いします。 もう一度円周率を求める問題をお願いします。初心者が作ったようなプログラムで お願いします。
>>553 #include <stdio.h>
#include <stdlib.h>
int main(){
int i,j;
double k,x,y,pi;
scanf("%d",&j);
k=0.0;
for(i=0;i<=j;i++){
x=rand()/(RAND_MAX+1.0);
y=rand()/(RAND_MAX+1.0);
if((x*x+y*y)<1.0)k+=1.0;}
pi=k/j*4.0;
printf("%lf\n",pi);
return 0;}
556 :
デフォルトの名無しさん :2007/01/08(月) 16:22:40
クイックソートなんですが、変数2つでもできますか? void quick_sort(int n,int a[])に合わせないと不都合があるのですが
お前はあっちのスレで何も学べなかったのかよ
void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); 使うとするなら void quick_sort(int n, int a[]) { qsort(a, n, sizeof(a[0]), compar); } ってことだろ?
向こうで解決したんなら、解決したって書いとくれよ。
562 :
依頼者 :2007/01/08(月) 18:32:52
554様 シンボルが未定義です. 'RAND_MAXとでます。解決策をお願いします。
>>562 >>554 のソースをちゃんとそのまんまコピペしてコンパイルした?
#include <stdlib.h>が抜けてるんじゃないか?
564 :
依頼者 :2007/01/08(月) 19:58:06
ちゃんとコピーしました。#include <stdlib.h>も入っています
>>562 コンパイラはなに?
わからなくても、コンパイル時のコマンドはわかるだろ?
コンパイル環境晒して見れ。
コンパイッテクル
>564 stdlib.h を探して、中に RAND_MAX が定義されているか確認しる!
#define RAND_MAX 0x7FFFU って書いてあるっす(Borland C++より)
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 二元連立二次方程式の解を求めるプログラムを作成せよ。 1)異なる二つの実数解、二重解、虚数解が求められること 2)二次の係数が0の場合は「エラーがある」と表示し、実行を停止すること。 [3] 環境 [3.1] OS: WindowsXP [3.2] bcc [3.3] C言語 [4] 期限: 明日まで [5] その他の制限: 特になし よろしくお願いします。
あと2時間弱で回答を出せと
あと25時間強で回答を出せと
ごちゃごちゃ言ってねーで回答をだせよ
ごちゃごちゃ言ってねーで回答を出せと
二元二次方程式系ということはこれを解くのか? a x^2 + b xy + c y^2 + d x + e y + f = g x^2 + h xy + i y^2 + j x + k y + l = 0 どうやるんだったか
577 :
555 :2007/01/08(月) 23:13:03
>>570 実装はできる。
解法を教えろ。
屏風の虎をつかまえる話みたいだがw
は?
プログラマに数学をやらせるなんて以ての外だわな
方程式の解を関数の一次独立性から求められるの?関係ないような…
583 :
570 :2007/01/08(月) 23:41:16
すみません。 問題は、連立二次方程式の間違いでした。 ああ、ID表示してほしい・・・
ID表示が欲しいとか文句言う前に、トリップつけろよ
本当に[連立]か?
ニュートン法って虚数解って求められたっけ
>>577 1番
「文字数」は印字可能な文字(SPより後)の個数という意味にとった。
#include <stdio.h>
#include <stdbool.h>
void main() {
int c, chars = 0, words = 0, sentences = 0;
bool sp = false;
while((c = getchar()) != EOF) {
switch(c) {
case '.':
case '?':
case '!':
sentences++;
case ',':
chars++;
case ' ':
if(!sp) words++, sp = true;
break;
default:
if(c > 0x20) chars++;
sp = false;
}
}
printf("%d %d %d\n", chars, words, sentences);
}
x = (-b±√D)/2a 連立だと楕円すら表現できるような
591 :
デフォルトの名無しさん :2007/01/09(火) 00:10:39
こいつ知ってるwww
>>585 指摘された通り、二次方程式でした・・・
すいません。
>>570 ◆NgkKV9slIw
一元なら簡単だが二元なら解法よろ
>>594 反面教師という言葉もある
折角コテつけてくれてるんだから、嫌ならあぼーん汁
あぼーんするのもマンドクセ('A`)
597 :
555 :2007/01/09(火) 00:57:28
>>587 お答えいただきありがとうございます
プログラムを実行させてみた所インクルードファイルがオープンできませんとでます
どう直せばいいでしょうか
コンパイラが指定されてないな。 標準で付属のファイルも開発環境によっては存在しない事があるから。
>>592 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
char buf[1024];
double a, b, c;
double d;
puts("a * x^2 + b * x + c = 0");
printf("a : ");
a = atof(fgets(buf, sizeof(buf), stdin));
if (a == 0.0) {
puts ("エラーがあります");
return 0;
}
printf("b : ");
b = atof(fgets(buf, sizeof(buf), stdin));
printf("c : ");
c = atof(fgets(buf, sizeof(buf), stdin));
d = (b*b - 4*a*c);
if (d > 0) {
printf("x = %lf, %lf\n", (-b+sqrt(d))/(2*a), (-b-sqrt(d))/(2*a));
} else {
double re, im;
re = -b/(2*a);
im = fabs(sqrt(-d)/(2*a));
printf("x = %lf+%lfi, %f-%fi\n", re, im, re, im);
}
return 0;
}
それにしても浮動小数点の比較はなんとかならんもんかね? 標準でboost::close_at_toleranceみたいなのが欲しい
D≒abs(b)の場合は、激しく精度落ちが発生するため 解の公式の変形が必要だが課題程度ならこれで十分だろ。 (むしろ自分でやれ)
603 :
555 :2007/01/09(火) 01:10:52
>>598 すいません書き忘れてました
コンパイラはstudy Cというやつです
>>570 ◆NgkKV9slIw
一元二次方程式の解を求めるプログラムが欲しいの?
>>599 成功報酬って話は、もう終わったんじゃないの?
>>600 double型の時は%lf
まあどのみち同じ結果になるのであとは宗教論でしかないが。
>>604 ソートの論文だろ。たしかに終わってたね。
つーか、仕事の案内ならたまに来るよ。
某サイトの管理人さんが、登録者にメールで投げてくる開発依頼を投げてくるんだけど
単発で80万とか。
この前はIEツールバーの開発の案件が。
まあ、今んとこ内職やるほど暇もないが内容によっちゃ容易い仕事だったかも。
>>607 80マソ!?それはおいしいが「たまに」しかないんじゃ効率悪いな・・・
どうせなら専門でやれば?自作板で油売ってないでw
>>608 printf での %lf は C99 で正式に許容されるようになった
それまでは規格として正式ではないものの、
実装として %lf でも動作するコンパイラが多かっただけ
※かつては、鼻から悪魔が出てきても文句を言えなかった
611 :
デフォルトの名無しさん :2007/01/09(火) 01:31:51
>>607 ソートの論文今は自力でやってますが
終わりそうにないので、お願いしてもいいですか?
メッセ送っておきます
>>610 わざわざlf使って移植性を低くすることはないってことですね
>>612 >printfでの暗黙の型変換(float→double)
これは標準仕様
内容によっちゃ断るよ。 論文って何百時間もかけてやるもんだろ。3万くらい残業数日やれば稼げるしさ。
>>603 #include <stdbool.h>
↓
typedef enum{false,true}bool;
2ちゃんよりもASCII24やkakaku.comからの来客が増えてるよ
それでもかまいません
621 :
デフォルトの名無しさん :2007/01/09(火) 01:53:55
カレンダーの宿題の邪魔やりたいみたいだなおまいら
623 :
デフォルトの名無しさん :2007/01/09(火) 01:54:31
stdboolってC99だっけ?
カレンダぁー?まんどっちぃ。どうせなら団子がやってあげれば? ここでの株が上がるよ?w
俺もそんな日下部陽一みたいな低レベルにでもやらせとけばいいような課題まんどくさい しかもよい子の寝る時間とっくに過ぎてるし。
627 :
デフォルトの名無しさん :2007/01/09(火) 02:06:42
だからこそ適任ジャマイカw
>>626 カレンダーの宿題の邪魔やりたいみたいだなおまい
629 :
デフォルトの名無しさん :2007/01/09(火) 02:13:23
[1] 授業単元:Cプログラミング入門 [2] 問題文(含コード&リンク): 円周率を求めるプログラムの作成 1.rand()関数を用いて、0~1のx座標、y座標を生成する 2.原点との距離を求め、座標が半径1の円内かどうか調べ、円内である場合、円外である場合をそれぞれカウントする。 3.以上を多数繰り返し、半径1の円内である確率はπ/4であることからπを求める。 【入力に関して】 キーボードから、計算に用いる座標数(rand()関数の実行回数ではない)を入力する。 上限はint型の最大値(実際には最大値を入れると膨大な時間が掛かるのでテストはmaxでも1分で終了する程度でよい) 【出力に関して】 結果(求めた円周率)のみを%lfで出力 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Study C Ver2 [3.3] 言語: C [4] 期限: 本日の正午まで [5] その他の制限: なし すみません、宜しくお願いします。
>>629 デジャヴ&話題の%lf
タイミングが良すぎるw
>>632 発想を変えるんだ、
printfとは書いてない
%lfを実装すればいいんだ!
ありゃ。カレンダーCで組んどった・・・
>>606 をCで作り終えてからC++だということに気がついた なんか切ない
636 :
634 :2007/01/09(火) 02:44:23
>>635 (・∀・)人(・∀・)なかーま!
俺は寝るから後は任せた。
Cで作ったんならほとんど手間要らずでC++ソースとして使えるからいいじゃん 逆なら本当に切ないが
639 :
555 :2007/01/09(火) 02:58:18
>>617 回答ありがとうございます
書き直して実行してみたところ
延々と文字の入力を求めてきてプログラムが止まる気配がありません
気合いで止めろ
>>639 Ctrl+ZでEOFを入力すればいい
改行で止めたければ
while((c = getchar()) != EOF && c != '\n') {
642 :
629 :2007/01/09(火) 03:05:26
スレ読まずに書き込んですみませんorz 全く同じ問題が書き込まれてたとは…
644 :
デフォルトの名無しさん :2007/01/09(火) 03:11:56
[1] 授業単元: [2] 問題文(含コード&リンク):構造体を用いて以下のプログラムを作成せよ 1 7人分の氏名(ローマ字),試験の点数(100点満点)をそれぞれ構造体に格納する。 2 7人分の氏名、試験の点数をすべて画面に表示する。 3 試験の点数の中央値と氏名を画面に表示する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:cygwin [3.3] 言語: C [4] 期限: 1月10日 [5] その他の制限:
645 :
644 :2007/01/09(火) 03:13:13
#include<stdio.h> struct DATA_LIST { char name[20]; char seiseki[20]; }; struct DATA_LIST data_list[7]; int main(void) { int i; struct DATA_LIST data_list[7]= { {"taro","90"}, {"ziro","40"}, {"saburo","76"}, {"siro","34"}, {"goro","80"}, {"hanako","56"}, {"momoko","72"}, }; for(i=0;i<7;i++) { printf("%s\n",data_list[i].name); printf("%s\n",data_list[i].seiseki); } この続きからお願いします。
647 :
555 :2007/01/09(火) 03:17:13
>>641 回答ありがとうございます
書き直した所うまく動きました
もう一問の方もよろしければお願いします
>>642 おんなじ大学な気がするけど気のせいか
648 :
646 :2007/01/09(火) 03:17:49
if(j%7 == 0){なんて書いてあるけど、if(j == 7){かif(j > 6){あたりに変えておいて だいぶ無駄な計算だw
649 :
デフォルトの名無しさん :2007/01/09(火) 03:21:46
C言語の構造体の値の書き換えでつまづいてます。 struct celldata{ int color; }; 上の様な構造体を定義して、main関数で以下のように 構造体を宣言しています。 struct celldata *cell[DEPTH][HEIGHT][WIDTH]; ここで、cell[0][i][j]に数値を入れていきます。(0<i<HEIGHT, 0<j<WIDTH) 次にcell[1][i][j]にcell[0][i][j]の数値をコピーします。 その後cell[1][2][2]->colorの数値を直接変えるのですが、 同時にcell[0][2][2]->colorの数値も同じ値に変わってしまいます。 cell[1][2][2]の数値だけを変えたいのですが、どのようにすればいいのでしょうか?
>>649 まずは趣旨にあったスレを見つけるところから始めるといいと思うよ
cell[1][i][j]=cell[0][i][j];なんてのをやってそうな予感
651 :
649 :2007/01/09(火) 03:28:26
>>650 まさにそんな感じでやってるのですが・・・。
何が間違いなんでしょうか(ノд;)
宿題とかじゃないのですれ違いなのかもしれませんが。。。
> struct celldata * ^^^^^^^^^^^^^^^^^^↑これがあるのに... > cell[1][i][j]=cell[0][i][j]; って、同じアドレスにしたいのかなw
653 :
649 :2007/01/09(火) 03:42:48
>>652 ポインタの理解がまだ浅かったです(///)
->colorでコピーしたら正常に動作しました。
ありがとうございました;;
655 :
606 :2007/01/09(火) 08:29:41
>>635 >>636 >>646 回答ありがとうございます。なんとか間に合いそうです。
夜遅くまで本当にありがとうございます。私も、いずれは教える側になって
皆さんのようになりたいです。
656 :
デフォルトの名無しさん :2007/01/09(火) 10:34:02
1] 授業単元:プログラミング [2] 問題文(含コード&リンク):数独(ナンバープレース)を解くプログラムを作りなさい 4×4のますめの数字をファイルから入力。 1~4の数字を配置。 各行、各列、2×2の小領域で各数字は1つだけ使用。 例: 1000 0200 3001 0004 (数字の無いところは0) ↓ 1342 4213 3421 2134 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: ([2007年1月16日12:00まで] [5] その他の制限:特に無し お願いします
>>659 > 省略に使う「,」は今回はないものとする。
Q. 英語の省略に使用されるのは「.」だと思うのだが?
663 :
656 :2007/01/09(火) 12:15:13
658さん、有難うございました
664 :
捨て猫 :2007/01/09(火) 13:32:10
1] 授業単元:データ構造とアルゴリズム [2] ファイルを読み込み、英字のみか、先頭が英字で二文字目以降が英字または数字である文字列を抽出し、 文字列の長さが長い順に並べ、その文字列の頻度と共に表示するプログラムを作成したい。 但し、文字列の長さが同じものに関しての順序は任意で良い。以下の設問にしたがって回答しなさい。 [3] 環境 [3.1] Windows XP [3.3] CかC++かJava [4] 期限: 2007年1月10日20:00まで [5] その他の制限: Windows の API は使用しないで作って下さい。
665 :
捨て猫 :2007/01/09(火) 13:33:50
入力 #include <stdio.h> #include <ctype.h> int main(void){ int c0; char c1; c1='\0'; b='\0'; while((c0=getchar())!=EOF){ if((!isalnum(c1))&&isalnum(c0)){ printf("\n"); } if(isalnum(c0)){ printf("%c",c0); } c1=c0; } return 0; }
666 :
捨て猫 :2007/01/09(火) 13:34:40
出力 getchar:1 include:2 isalnum:3 printf:2 return:1 stdio:1 while:1 ctype:1 char:1 main:1 void:1 EOF:1 int:2 if:2 c1:4 c0:6 h:2 n:1 c:1 よろしくお願いします
668 :
依頼者 :2007/01/09(火) 17:20:27
[1] 授業単元:Cプログラミング演習 [2]配列 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Study C Ver2 [3.3] 言語: C [4] 期限: 本日まで [5] その他の制限: なし mXn(m行n列)行列とnXm行列の乗算を求めるプログラムを作成する。 m、nはメモリーの許す範囲で特に上限を定めないので必要とする領域はmalloc() により確保すること。行列を格納する領域は1次元配列でも2次元配列でもよい。 (2次元の場合は行数分のポインタ領域を確保し、次に各行毎に数値用の領域を確保すること。) 入力に関して キーボードから、まず、行列の大きさ、mとnをスペース1つあけて1行で 入力する。次にmXn行列を1行ずつ(=n個の数値を一度に)入力する。 各数値はスペース1つ分あけて入力する。続けてnXm行列を同様に入力する。 全部で(1+m+n)行にて入力が完了する。 出力に関して mXm行列を、1行ずつ改行し、m行出力する。数値はスペース1つあけて そのまま(%d)出力するものとし、%4dのような整形は行なわないこと。 です。お願いします。
[1] 授業単元: プログラム演習 [2] 問題文(含コード&リンク): 円周率を求めるプログラムを作成せよ。 1.rand()関数を用いて0~1のx座標、y座標を生成する。 2.原点との距離を求め、座標が半径1の円内かどうかを調べ、円内である場合、円外である場合をそれぞれカウントする。 3.以上を多数繰り返し、半径1の円内である確立がπ/4である事からπを求める。 入力に関して キーボードから計算に用いる座標数(rand()関数の実行回数ではない)を入力する。上限はint型の最大値(実際には最大値をいれると莫大な時間がかかるのでテストはmaxでも1分で終了する程度でよい) 出力に関して 結果(求めた円周率)のみを浮動小数点(double型を%lf)で出力(+改行) [3] 環境 [3.1] Windows [3.2]StudyC [3.3]C [4] 期限:2007/01/10 [5] その他の制限: お願いします
もう被りまくりでgdgdだなw 長期休暇最後の日の風物詩というか
>>672 へー。インタープリタなんか。
亀さん使えるってのはなんとも懐かしいね
俺も小学校低学年の頃はLogoで遊んでたなあ
676 :
デフォルトの名無しさん :2007/01/09(火) 19:37:15
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 以下に示した「氏名」と「英語」,「数学」,「物理」の得点を構造体の配列を用いて格納する.各 科目について得点の高い順にソートし,ソート終了後に画面表示するプログラムを作成しなさ い(すなわち,ソート,画面表示という一連のプロセスが3 回繰り返されることになる).ただし, 構造体の型は以下に示したものを利用し,各データは構造体の「初期化」により格納しておくこ と.また,ソートを行う場合には,必ず構造体の要素(メンバ)の入れ替えを行うこと. 得点表 氏名 英語 数学 物理 小野妹子 82 93 56 菅原道真 89 87 91 源頼朝 56 76 45 豊臣秀吉 62 83 65 徳川家康 78 56 87 構造体の型 struct SCORE { char name[20]; int english; int mathematics; int physics; }; [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C
677 :
デフォルトの名無しさん :2007/01/09(火) 19:47:15
お願いします [1] 授業単元:基本プログラミング [2] 問題文(含コード&リンク): ある正の数値を読み込み、その約数をすべて(ただし1と自分自身は除く)出力するプログラムを作成せよ。 約数が複数個ある場合はスペースで区切って出力する。繰り返し処理できるようにし、-1を読み込むと終了するようにせよ。 なお約数が存在しない場合は”約数はありません”と出力すること。 実行例 正の整数を入力せよ:50 50の約数は 2 5 10 25 です。 正の整数を入力せよ:53 53の約数はありません。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C++ [4] 期限:明日
>>676 ごめん、SCORE[]とmain()をこう直して
struct SCORE{
char name[20];
int english, mathematics, physics;
} SCORE[]={
{"小野妹子", 82, 93, 56},
{"菅原道真", 89, 87, 91},
{"源頼朝", 56, 76, 45},
{"豊臣秀吉", 62, 83, 65},
{"徳川家康", 78, 56, 87}
};
int main(void){
printout();
sort(0);printout();
sort(1);printout();
sort(2);printout();
}
681 :
555 :2007/01/09(火) 21:17:17
>>662 回答ありがとうございます
実行させた所宣言に誤りがありますとでました
int A,Bをscanfの上に置くと今度はポインタとほかの型が混在していますとでます
どう直せばよいでしょうか
いまさらだけど、ループはi<=n/2まででいい気がする
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 二分探索木のノードの挿入と木の表示と削除を行う関数を作成し 以下の処理を行いなさい。 12を追加 14を追加 20を追加 18を追加 木の表示 5を追加 3を追加 7を追加 13を追加 木の表示 1を追加 4を追加 6を追加 14を削除 木の表示 12を削除 18を削除 20を削除 13を削除 木の表示 [3] 環境 [3.1] OS: xp [3.2] コンパイラ名とバージョン: visualstudio 2003 [3.3] 言語: C [4] 期限: 明日の朝11時までに [5] その他の制限: 特になし よろしくお願いします。
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): 引数として与えられた文字列から、 ハッシュ値を計算するハッシュ関数を作成し、 以下の文字列についてハッシュ値を計算して 画面に出力しなさい。 (ハッシュ関数は実習時間中に作成したものでよい) ハッシュ値を計算する文字列 "Matsuzaka" "Igawa" "Kuwata" "Okajima" 自分の名字 ハッシュ関数の内容 与えられた文字列の、一つ一つの文字の文字コードを合計し、 最後にハッシュ表の大きさで割った余りを計算する。 ハッシュ表の大きさは7とする [3] 環境 [3.1] OS: windowsXP [3.2] コンパイラ名とバージョン: VISUAL STUDIO 2005 [3.3] 言語: C [4] 期限: 締め切りは明日の朝 [5] その他の制限: 制限は無い 急ぎですが、どうかお願いします
>>684 実習はしなかったのか?それともハッシュ関数の内容ってのが実習でやったことなのか?
って削除機能追加されたのか。 すまん。
688 :
デフォルトの名無しさん :2007/01/09(火) 22:57:24
>>685 実習は参加できず、プログラム作成ができませんでした。
問題文通りのハッシュ関数を作成していただければ問題ないと思います。実習内で作ったものでもよいというのは、実習時間内で作成したものが、そのまま延長で課題になったみたいです
んじゃぁハッシュ関数だけ。 #define HASHTABLESIZE (7) int hash(const char *str){ int i, sum; for(i=sum=0;str[i];sum+=str[i++]); return sum%HASHTABLESIZE; }
#define HASH_MAX 7 int hash(const char *s) { int x; for(x = 0; *s; x += *(s++)); return x % HASH_MAX; }
#include<stdio.h> #define HASH_SIZE 7 int hash(char* s){ int h = 0; while(*s!='\0') h += *s++; return h % HASH_SIZE;} int main(){ printf("Matsuzaka %d\n",hash("Matsuzaka")); printf("Igawa %d\n",hash("Igawa")); printf("Kuwata %d\n",hash("Kuwata")); printf("Okajima %d\n",hash("Okajima")); printf("Jibun %d\n",hash("Jibun")); return 0;} この宿題大人気だなw
何この三者三様
>>688 >>688 int strsize(STR *s){
return s->size;
}
int addchararray(STR *s,char *c){
for (;c != NULL; c++) {
if (addchar(s, *c) == 0) {
return 0;
}
}
return 1;
}
void appendstr(STR *s, STR *t){
SLIST *p, tmp;
for(p = t->begin; p->next != NULL; tmp = p, p = p->next, free(tmp)) {
addchar(s, p->moji);
}
free(t);
}
int fputstr(FILE *fh, STR *s){
SLIST *p;
for(p = s->begin; p->next != NULL; p = p->next)
fputchar(fh, p->moji);
}
しまったこいつは修正 int fputstr(FILE *fh, STR *s){ SLIST *p; for(p = s->begin; p->next != NULL; p = p->next) fputchar(p->moji, fh); }
696 :
デフォルトの名無しさん :2007/01/10(水) 00:10:59
顔と同じソースコードだな
【質問テンプレ】 [1] 授業単元: プログラミング言語1 [2] 問題文(含コード&リンク): 自由課題ということで、○×ゲームを作ろうと思っていました。 しかし、自分では難しかったのでお願いします。 [3] 環境 [3.1] OS: WindowsXP Home [3.2] visual studio.net [3.3] 言語:C言語 [4] 期限:[2007年01月12日まで] 期限が短いですが、よろしくお願いします。 [5] その他の制限: コマンドプロンプト上で、 1|2|3 ○|2|3 4|5|6 → 4|5|6 7|8|9 7|8|× と、数字を指定→その位置が○or×なるようにお願いします。
699 :
デフォルトの名無しさん :2007/01/10(水) 01:26:11
1] 授業単元: 情報処理 [2] 問題文(含コード&リンク): 以下に示した構造体の型を利用して,複素数を扱う構造体変数a,b を宣言する.それぞれの 構造体変数の実数部,虚数部の係数をキーボードから入力し,複素数の和,差,積,商を演 算して画面表示するプログラムを作成しなさい. 構造体の型 struct complex_number { double real, imaginary; }; [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C よろしくお願いします。
>>698 ルールは?TickTackToeでいいの?
int ban[3][3] = {0}; char * toString(int r, int c){ if (ban[r][c] == 0){ char *num[]={"1", "2", "3", "4", "5", "6", "7", "8", "9"}; return num[r * 3 + c]; } return (ban[r][c]==1) ? "○" : "×"; } void dispBan(void){ int c, r; putchar('\n'); for (r = 0; r < 3; ++r){ for (c = 0; c < 3; ++c) printf("%2s", toString(r, c)); putchar('\n'); } } int isBlank(int pos){ return (ban[(pos - 1) / 3][(pos - 1) % 3] == 0); } void setValue(int turn){ int pos; do{ pos = getchar()-'0'; } while (pos < 1 || 9 < pos || isBlank(pos)==0); ban[(pos - 1) / 3][(pos - 1) % 3] = turn; } int main(void){ int cnt,turn = 1; for (cnt = 1; cnt <=9 ; ++cnt){ dispBan(); printf("where?> "); setValue(turn); turn = -turn; } dispBan(); return 0; } とりあえず並び判定なしでw
>>554 起動してみるとRAND_MAXのシンボルが未定義です。と言われるのですがどうしたらいいのでしょうか?
アンダーバーを全角から半角に変えてみるとか?
>>703 すいませんorz RAND_MAXでした
702のは変換ミスですorz
>>702 #include <stdlib.h>
の下に次の三行を追加してみて
#ifndef RAND_MAX
#define RAND_MAX 0x7FFF
#endif
書き込みする前に更新してみような
>>705 #ifndef、#define、#endif
この三つは習った事が無いので避けたいのですが使わずには無理でしょうか?><
そういや前もそんなこと言ってる奴がいたな。 Study CとかいうインタプリタはC89準拠じゃないんか。 学習用としては厄介な環境だね。
CASLI/IIみたいなもんだと思えばいいんでね?
一体何を伝えたいのやら・・・
RAND_MAXを0x7FFFに書き換えればいいんじゃないか?
本当の RAND_MAX が分からないと円周率が求まらないのが問題だ
>>709 とりあえずvectorにあるお試し版を試してみたところ、randの最大は0x7FFFみたい
しかし、面白いねこれ。stdio.hなんか5行しかないしw
716 :
デフォルトの名無しさん :2007/01/10(水) 06:41:52
719 :
688 :2007/01/10(水) 09:23:50
>>694 void appendstr(STR *s, STR *t){
SLIST *p, tmp;
for(p = t->begin; p->next != NULL; tmp = p, p = p->next, free(tmp)) {
addchar(s, p->moji);
}
free(t);
}
int fputstr(FILE *fh, STR *s){
SLIST *p;
for(p = s->begin; p->next != NULL; p = p->next)
fputchar(p->moji, fh);
}
この部分で、
.\str.c(46) : error C2440: '=' : 'SLIST *' から 'SLIST' に変換できません。
.\str.c(46) : error C2172: 'free' : 1 番目の実引数がポインタではありません。
.\str.c(54) : warning C4020: 'fputchar' : 実引数が多すぎます。
とエラーが出てしまいコンパイルできません。
どのようにすればよいでしょうか?
[1] 授業単元: [2] 問題文(含コード&リンク): 二次元平面上の点の列 p = [ (x1,y1), ..., (xn,yn) ] が与えられる。 これらのうち、最も近いペアと最も遠いペアをそれぞれ効率よく求めよ。 なお効率の評価について、点は適当に分散していると仮定してよい。 [3] 環境 [3.1,3.2] OS, コンパイラ問わず。 [3.3] 言語: どちらでも可。 [4] 期限: 1月13日程度。 [5] その他の制限: 特になし。
[1] 授業単元:C言語によるプログラミング実習
[2] 問題文(含コード&リンク):
ttp://www.uploda.org/uporg649214.txt [3] 環境
[3.1] OS:Windows XP Professional SP2
[3.2] コンパイラ名とバージョン:Borland C++ 5.5.1 for Win32
[3.3] 言語:C言語
[4] 期限:2007/01/07
[5] その他の制限:
可能な限り問題の欄でうpしましたテキストの一番下に記載してあります、
ヒントとして提示された資料を書き換える形でお願いします。
よろしくお願いいたします。
722 :
デフォルトの名無しさん :2007/01/10(水) 10:30:27
>>719 SLIST *p, tmp; <- 片方ポインタじゃないヨ
>>720 たとえば
p = [ (1, 1), (1, 1), (1, 1), (1, 2), (1, 2), (1, 2)]
ならどういう風に求まるの?
>>723 それよりだったらこっちだ
p=[(1, 1), (1, 2), (2, 3), (3, 4)]
726 :
720 :2007/01/10(水) 11:22:20
>>723 同じ座標であっても異なる点とみなします。また、同じ距離のものが
複数あった場合、どれを表示してもよいことにします。従ってその入力の場合
最近点対: (1,1),(1,1)、最遠点対: (1,1),(1,2) などが解の候補です。
なお、同一距離のものが複数あったり、同一点があったりすることで実装が
面倒になるのであれば、それらは無いものとしてもかまいません。
>>724 その場合は問題なく最近点対: (1,1),(1,2)、最遠点対 (1,1),(3,4) と思います。
正直授業受けるよりココに座って宿題片してた方が力つくな 面白い問題も時々出てくるし
[1] 文系プログラミング [2] 問題文:A、B、Cの3人の英語・国語・数学・物理の点数を入力し、合計・平均を含む次の表を出力する 英語 国語 数学 物理 合計 平均 A XX XX XX XX XX XX B XX XX XX XX XX XX C XX XX XX XX XX XX 合計 XX XX XX XX XX XX 平均 XX XX XX XX XX XX [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:Visual Studio 2005 [3.3] 言語:C++ [4] 期限:1月12日まで よろしくお願いします
731 :
デフォルトの名無しさん :2007/01/10(水) 13:15:08
>>730 C++なら、クラス使えってこと?
RoomクラスとかStudentクラスとか登場しちゃう?
732 :
デフォルトの名無しさん :2007/01/10(水) 13:21:51
>>730 三人の点数の入力は手打ちなのか、それともファイルから読み込むのか
それぐらいは分からないと難しいな
734 :
デフォルトの名無しさん :2007/01/10(水) 13:34:52
>>733 クリックなんかじゃ見せないって訳ね
プログラムは、コピペだと
>>730 ここで解凍
http://www.geocities.jp/c_cpp_cs/code/code.html nVTNTttAED4TKe8wChLYxEpCCaiNk0jAYyAOrrOFRfHa8k9RFXFsS38OXHqipeqhVVupVauqhx76OIY
8Rmd214txQISioN39PPPNNzszu8iFP85GDPoiC1jM/WG9tmgwHgae4FEFS9KYecEVECEu9hCq13Cb+S
kkKX4Qab02qdcWknTU6ykbEF7AXMS4SIGJvTFP9h048CJPsIQ5EHgpnqP9Jwn3E1f6SiLLhslR6eiHI
qEohngJhAOSVC0HagnUEtnQk6EtYTtFXIvZl6GtA1tFtwLbCLAiHZY4kixAFSrwJGZpFouCCZqGB7fE
gkuRBPmPwuzhmIH3mMXeHpuhUdRt6LbcUpJLEEZon4Zxc2AS1l8SFIaWC0bAAJKWPrglMQQXJ1crI4x
2biFRQaVLX9C6VtJ9LoFrVbUHFt2LqEhpD0CUJKijjKy2RVB5ujkYVparVlvCEkZZalUwG80mJX8Ow6
GsMa2FGNwaJbiXMnAt5WqihQVzhP2koxks1CUrYiapl3Jfl5Fu4ZCPkHoA69g8MfN5wkOBx245wxD6f
d2zLD20pItNGKkmOyj+brDTWc1jWmQ9jy3dyjx2+tbmMZUdPZehxsylWWYnv5uR0bU6ctUrU26FoiGH
w2qPOFcnphi3lmoobtO4VQqtufr9agc4cM0MGkbVNKFkJM5Ke1AvrEnp8lXyuKDrmVyOFSQ7YteR99b
IT46nn48bDnTMT6b/KIxBjhxHto6LS58GqtnkegSlYj/MUrq5Rv70Y/7yVDaXc+tb22uYajAxGruXdF
zQxCQ7fFeBWSDfC30241OELb3J1oYDy7As69iYvvo5/XoG+elfWs7f/Mi/fYKLF18uTp6BShjyP7/yd
89nhdwtb1I2QzErE9OoGiHWkg/IAC9PaXGlYfFU3cqg26GDe9kH7ZV6Lf/+fvrh9cXvk/Ozt4TdrSz1
2iasduBeB9Y60O3c3X3L+ML6f7hvG1/YQHc1y3PXUjls4j/mAKQEiA+IESGJrSujrZnvFBNW5W5NG23
PfEdVaHRfYmSkwyscHtBHYl0l267cdaSZlHdbyJX2Pw==
736 :
735 :2007/01/10(水) 14:18:57
すまん、先頭の #include <numeric> は消しといてくれ。
>>733 ありがとうございます。
ですが、87、89行目がエラーでうまくビルドできないみたいです
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 100以下の素数をすべて出力するプログラムを作成しなさい。 自然数xに対して、2以上で、√x以下の素数で割り切れない数が素数である。 ただし、1は素数でも合成数でもない。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1/12
>>739 #include<stdio.h>
int IsPrime(int n){
int i;
if(n<2)
return 0;
else if(n==2)
return 1;
if(n%2==0)
return 0;
for(i=3;i*i<=n;i+=2)
if(n%i==0)
return 0;
return 1;}
int main(){
int x;
for(x=0;x<=100;x++)
if(IsPrime(x))
printf("%d ",x);
return 0;}
>>739 #include<stdio.h>
int prime[]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,};
int main(void){for(int i=0;i<(sizeof(prime)/sizeof(int));i++){printf("%d\n",prime[i]);}return 0;}
>>740 うわっ、また性帝トーマスさんに怒られちゃいますよ?
>>743 寝ぼけてて問題文よく読んでなかった
見逃してくれ
どこを怒れと?
まあ
>>742 よりは遅いだろうが。
>>745 >for(x=0;x<=100;x++)
もっとお怒りになられるでしょ?奇数ずつでやったものよりさらに・・・
100以下の自然数xを表現したかったんだけどなんかまずかった?
>>748 上の方でせっかく偶数をはねてるのにx++はなかろう。
>>739 >、√x以下の素数で割り切れない数が素数である。
いや、まぁそれはおいといて、↑これもソースの中に意味があるように
取り込まなきゃならんのでは?ってことは、やっぱりあのありきたりな
やり方をするべきかと。
>>750 >for(i=3;i*i<=n;i+=2)
があるじゃん。
んで、問題文は「表示しろ」とあるだけで「計算しろ」とは書いてない。
>>750 いやだから寝ぼけてて読んでなかったって書いたじゃん
見逃してくれよ
740 は素数判定ルーチンがあって、main はそれを使います、って 姿勢で書かれてるんだろうからこれでいいと思うんだけどなあ
>>751 >、√x以下の素数で
xは素数って条件は入らないん?まぁ良いや。
ちうかそれ、お主がもろに指摘したことだろ?
奇数を順番に使って割っていくことに対して文句を。
あんたは素数か判別するのにすでに求められた素数だけを使ったんじゃないのかね?
755 :
デフォルトの名無しさん :2007/01/10(水) 15:35:26
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 以下に示した「氏名」と「英語」,「数学」,「物理」の得点を構造体の配列を用いて格納する.各 科目について得点の高い順にソートし,ソート終了後に画面表示するプログラムを作成しなさ い(すなわち,ソート,画面表示という一連のプロセスが3 回繰り返されることになる).ただし, 構造体の型は以下に示したものを利用し,各データは構造体の「初期化」により格納しておくこ と.また,ソートを行う場合には,必ず構造体の要素(メンバ)の入れ替えを行うこと. 得点表 氏名 英語 数学 物理 小野妹子 82 93 56 菅原道真 89 87 91 源頼朝 56 76 45 豊臣秀吉 62 83 65 徳川家康 78 56 87 構造体の型 struct SCORE { char name[20]; int english; int mathematics; int physics; }; [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C よろしくお願いします。
>>754 >xは素数って条件は入らないん?まぁ良いや。
だからその通りになってるじゃん。
>あんたは素数か判別するのにすでに求められた素数だけを使ったんじゃないのかね?
既知の定数を使うことに何か問題でも?
757 :
730 :2007/01/10(水) 15:43:27
>>732 手打ちです。
>>731 Roomとかstudentとかって何ですか?おそらく、考慮しなくても大丈夫だと思いますが・・・
758 :
デフォルトの名無しさん :2007/01/10(水) 15:59:41
[1] 授業単元:programingⅡ [2] 問題文(含コード&リンク): 英数字列 s[] と2以上の整数 r を入力とし、 r進数sを10進数に変換する関数 rad(s, r) を定義する。 10以上の数字には、英字を用いる。すなわち、aは10を、zは35を表す。したがって、36進法までに対応する。 例えば、rad_dec("1z", 36) は、71 を返す。 int rad_dec(char s[], int r); 空行まで入力と計算を繰返すプログラムを作成する。 ? 1011 2 = 13 ? 2a 11 = 32 数字を数値に変換する関数 char_num() を定義する。 情報数学で扱った上位桁から変換する算法で、10進数を求める。 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:bcc32 [3.3] 言語:C [4] 期限:できれば早いうちにおねがいしたい。
759 :
735 :2007/01/10(水) 16:06:53
>>757 これを参照先の解凍ページに貼り付けてボタンをクリックすれば
コードが得られる。
>>759 んな面倒なことしないでソースをうpロダにうpしろ。できない奴は
ソースを見なくても良いってならはじめっから書かなくて良いよ。
>>758 #include <stdio.h>
#include <string.h>
#include <ctype.h>
int rad(char s[], int r) {
unsigned int x = 0;
size_t i, len;
for (i = 0, len = strlen(s); i < len; i++) {
x *= r;
x += isdigit(s[i]) ? s[i] - '0' : toupper(s[i]) - 'A' + 10;
}
return (int)x;
}
int char_num(char s[]) {
return rad(s, 19);
}
int main(void) {
char s[256], r[4];
for (; ; ) {
printf("?");
scanf("%255s%3s", s, r);
printf("= %d\n", rad(s, rad(r, 10)));
}
}
762 :
730 :2007/01/10(水) 16:37:35
764 :
730 :2007/01/10(水) 16:49:39
765 :
デフォルトの名無しさん :2007/01/10(水) 16:51:25
767 :
730 :2007/01/10(水) 17:02:49
>>766 すいません。では、どうしたらいいですか?
769 :
730 :2007/01/10(水) 17:27:03
770 :
765 :2007/01/10(水) 17:28:53
>>770 double trapezium(double a, double b, int n) {
int i;
double x, w;
w = b - a;
x = (func1(a) + func1(b)) / 2;
for(i = 1; i < n; i++) x += func1( a + w * i / n );
return x * w / n;
}
simpsonと挿しかえれ
772 :
765 :2007/01/10(水) 18:12:24
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): int型の変数256個分をメモリ上に動的に10回確保する操作を行え。この際、メモリを確保できた場合 その先頭アドレス(16進数)を順次テキストファイルに書き出せ。 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン: gcc3.4 [3.3] 言語: C [4] 期限: 1/11 8:00まで [5] その他の制限:malloc関数を使う問題です。 よろしくお願いします。
mallocしてすぐfreeを10回するバージョン ----------------------------- #include <stdio.h> #include <stdlib.h> int main() { int i ; FILE* pFile = fopen( "c:\\address.txt", "w" ) ; int* p = NULL ; for ( i = 0 ; i < 10 ; ++i ) { p = malloc( sizeof( int )*256 ) ; if ( p != NULL ) { fprintf( pFile, "%p\n", p ) ; free( p ) ; p = NULL ; } } fclose( pFile ) ; }
mallocを10回して後で全部freeするバージョン ----------------------------- #include <stdio.h> #include <stdlib.h> int main() { int i ; FILE* pFile = fopen( "c:\\address.txt", "w" ) ; int* p[10] = { NULL } ; for ( i = 0 ; i < 10 ; ++i ) { p[i] = malloc( sizeof( int )*256 ) ; if ( p[i] != NULL ) fprintf( pFile, "%p\n", p[i] ) ; } fclose( pFile ) ; for ( i = 0 ; i < 10 ; ++i ) { if ( p[i] != NULL ) free( p[i] ) ; } }
mallocしてfreeしないバージョン ----------------------------- #include <stdio.h> #include <stdlib.h> int main() { int i ; FILE* pFile = fopen( "c:\\address.txt", "w" ) ; int* p[10] = { NULL } ; for ( i = 0 ; i < 10 ; ++i ) { p[i] = malloc( sizeof( int )*256 ) ; if ( p[i] != NULL ) fprintf( pFile, "%p\n", p[i] ) ; } fclose( pFile ) ; }
教授を挑発するバージョン ----------------------------- #include <stdio.h> #include <stdlib.h> int main() { int i ; FILE* pFile = fopen( "c:\\address.txt", "w" ) ; int* p[10] = { NULL } ; fprintf( pFile, "Fuck You!" ) ; for ( i = 0 ; i < 10 ; ++i ) { p[i] = malloc( sizeof( int )*256 ) ; if ( p[i] != NULL ) fprintf( pFile, "%p\n", p[i] ) ; } fclose( pFile ) ; }
778 :
773 :2007/01/10(水) 20:11:39
>>774 ~777
ありがとうございます。教授を挑発しない程度にがんばります。
779 :
688 :2007/01/10(水) 23:00:44
780 :
688 :2007/01/10(水) 23:03:41
5種類の仕事と5人の人がいて、5種類の仕事を行うコストが個人で異なる。 この様な場合、誰にどの仕事を行わせることがもっとも低コストで仕事が 計算方法は、全ての組み合わせ(順列)を求める。その中から最も低コストとなる仕事の割り当てを得る(腕ずく法;Brute Force Method)。なお、最低コストが複数ある場合は、最後に判明した組み合わせのみを表示すればよい。 人1人2人3人4人5 仕事A10、5、7、12、8 仕事B14、20、15、10、15 仕事C18、30、20、25、22 仕事D35、8、18、20、12 仕事E20、13、8、10、17 C#でやりなさいで言われました。全然できなくて、誰か教えていただけないでしょうか? よろしくお願いします
スレ違い
781の問題はCでもいいので、教えてください!
お前、まだその問題解けてなかったのかよ……
785 :
デフォルトの名無しさん :2007/01/10(水) 23:26:05
[1]授業単元;プログラミング [2]問題文 m*n(m行n列)行列とn*m行列の乗算を求めるプログラムを作成する。 m,nはメモリの許す範囲で特に上限を定めないので、必要とする領域はmalloc() により確保すること、行列を格納する領域は一次元配列でも二次元配列でもよい (二次元の場合は行数分のポインタ領域を確保し、次に各行毎に数値用の領域を確保すること) [3.1] OS: windows xp [3.2] コンパイラ名とバージョン: gcc3.4 [3.3] 言語: C [4]1月11日10時まで [5]よくわからないので、お願いします
>>781 XNAスレにまでマルチしてからかわれてた奴かw
784> 解けてない!;;( ´Д`) よくわからないです
>>779 addchararray appendstr fputstrがどう見ても腐っているので修正。 これで動かなかったら俺は知らん。
int addchararray(STR *s,char *c){
for (;*c != NULL; c++) {
if (addchar(s, *c) == 0) {
return 0;
}
}
return 1;
}
void appendstr(STR *s, STR *t){
s->end->moji = t->begin->moji;
s->end->next = t->begin->next;
s->end = t->end;
s->size += t->size;
free(t->begin);
free(t);
}
int fputstr(FILE *fh, STR *s){
SLIST *p;
for(p = s->begin; p->next != NULL; p = p->next)
fputc(p->moji, fh);
return s->size;
}
791 :
789 :2007/01/10(水) 23:32:18
あ、型チェックを強化するためにC++でやったのが裏目に出た *c != NULLを*c != '\0'に直して。
792 :
688 :2007/01/10(水) 23:39:19
>>789 さん
コンパイル通って正常に出力されました。
ありがとうございました~
[1]授業単元;プログラミング [2]問題文 5種類の仕事と5人の人がいて、5種類の仕事を行うコストが個人で異なる。 この様な場合、誰にどの仕事を行わせることがもっとも低コストで仕事が 計算方法は、全ての組み合わせ(順列)を求める。その中から最も低コストとなる仕事の割り当てを得る(腕ずく法;Brute Force Method)。なお、最低コストが複数ある場合は、最後に判明した組み合わせのみを表示すればよい。 人1人2人3人4人5 仕事A10、5、7、12、8 仕事B14、20、15、10、15 仕事C18、30、20、25、22 仕事D35、8、18、20、12 仕事E20、13、8、10、17 [3.1] OS: windows xp [3.3] 言語: C C++ C# [4]明日まで [5]本当にわからないので、お願いします
>>793 ちと遅れたがせっかく書いたし。
ここで解凍
http://www.geocities.jp/c_cpp_cs/code/code.html fVPbbtpAEH12pPzDNCiKL+uGqxLFUIm0fehD8tRKlVqEKF6UBWwj2yQg4n/vzOwFpDaJtNnZ3cOZM2f
GLZXP19tUwrCqU1V8fPp0ftZyd2uVqbriy+dCpVC9zDa+yusQdgJ43wdwOD/zMIZaZhsYQbhL8CLcUb
jncI8hPeKhMUSlfJZlJTXXQpVVbfjWs6rWlIui9BNIIMDYUwvwGQajEWPg9RXcRRzrn5Wy3pY55fTku
pJaLqOiSGhqrYHk5nJXTzeyzLb1rFZF/p4WPiowqWPoCAiXuFaU6x1tEXTspVUH7eS0OKb3lkit4jix
pYYKhpjBvHork5nfvZcntZbgfzCoOF4FwaHhJ90fAatAQ63Ny2P1fMtCOnxqbE5FSlm2TWt/bTz5l6H
tGBq2tZXKhcolPP54gIF2OZup3KeWH+dEkb2p3P1C2AQrO7QFGdoV0BPQbwRkKp/Oi+wPAwTMC7IW2v
aBT98ev08fxj8Tw7ksNNpxkrDrEPAvm2GpuHdx9XD1cQ0gvDaIMYZw6CA7DHDdoBZUAreNMIB7DeijQ
hKKoA7vDvBZA25Rf1uDugjqdh3gCwN6RI8gAjLTEfCVAXzZMyCKb9hZLBG3tNA1WTPYeZwi7hsegWYB
i8cgigLtWTRiX7TZajLB5SaMAcORs9T2/MRi2nS7387jWqXIdZvpOBZghvU/HxtCzSDgZ4KMQaArfTv
ZpsRWL/wL6uhlenc5x/+/8wtkoQ9NwNX4CoMTSYLrP7kgC3iEHZXKVbbNuNY7w+YsIeDJpDd/AQ==
>>795 あー、そっか
順列ってタネの列作ってどんどん転置していけばいいんだ(orz
>>794 本当に感謝します。ありがとうございます。
798 :
デフォルトの名無しさん :2007/01/11(木) 01:05:52
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):数独を解くプログラムを作成せよ。 また別に、数独の問題を作成するプログラムを作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月12日
799 :
デフォルトの名無しさん :2007/01/11(木) 02:19:00
[1] 授業単元:情報科学基礎 [2] 問題文:X-Y平面上に三点A,B,Cがある。点Bの座標は(0,0)とし、 点Cの座標を(100,0)とする。このとき、AB間距離をP、 AC間の距離をQとする。このときPとQの値を与えると、 Aの座標を表示するプログラムを作成せよ。 ただし、X,Yの座標の値および、P,Qの値はいずれも正の値を とるものとする。 [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] 言語:C [4] 期限: 2007年1月26日正午 [5] その他の制限: なし
800 :
デフォルトの名無しさん :2007/01/11(木) 02:38:43
[1] 授業単元:離散数学Ⅱ [2] コマンドライン上の括弧文字列を読み込んで、左括弧と右括弧がつりあっているか(整合しているか) どうかを判定し、つりあっている場合には対応した括弧対に番号をつけて出力する プログラムを作成せよ。 例:入力[ [ ] [ [ ] ] ] [ ] →[ 1[2 ]2 [3 [4 ]4 ]3 ]1 [5 ]5 [3] 環境 [3.1] Linux [3.2] gcc [3.3] C [4] 期限:明日10時 [5] その他の制限:特になし 冬休みやってない僕が馬鹿でしたorz
>800 つりあっていない場合は表示しちゃ駄目なの?
802 :
デフォルトの名無しさん :2007/01/11(木) 03:08:41
>>801 多分その場合は「整合していません」とかエラー文を出して終了させるんだと思います
#include <stdio.h> int main() { char str[1024], *p; int open_cnt = 0; char ret_buf[1024] = ""; char tmp[80]; int stack[100]; int st_level = 0, br_cnt = 0; printf("括弧入れろやゴルァ : "); fgets(str, sizeof(str), stdin); for (p = str; *p != '\n'; p++) { if (*p == '[') { stack[st_level++] = ++br_cnt; sprintf(tmp, " [%d", br_cnt); strcat(ret_buf, tmp); } else if (*p == ']') { st_level--; if (st_level < 0) break; sprintf(tmp, " ]%d", stack[st_level]); strcat(ret_buf, tmp); } } if (st_level != 0) { puts("括弧の対応が不正です"); return 1; } puts(ret_buf); return 0; }
>コマンドライン上の括弧文字列を読み込んで、 って、引数として渡せってこっちゃないん?
そう思ったが、 [ はシェルによっては意味を持つからエスケープしてやんないと駄目だぞ
806 :
デフォルトの名無しさん :2007/01/11(木) 03:46:09
この時間にわざわざありがとうございます あとは・・・頑張ってコマンドライン引数をどうやって取り込むか理解するだけ・・・
807 :
デフォルトの名無しさん :2007/01/11(木) 03:47:29
こういうことか #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { int open_cnt = 0; char ret_buf[1024] = ""; char tmp[80]; int stack[100], st_level = 0, br_cnt = 0; int i; for (i = 1; i < argc; i++) { if ( strcmp(argv[i] , "[") == 0 ) { stack[st_level++] = ++br_cnt; sprintf(tmp, " [%d", br_cnt); strcat(ret_buf, tmp); } else if ( strcmp(argv[i] , "]") == 0 ) { st_level--; if (st_level < 0) break; sprintf(tmp, " ]%d", stack[st_level]); strcat(ret_buf, tmp); } else { puts("引数指定が不正です"); return 1; } } if (st_level != 0) { puts("括弧の対応が不正です"); return 1; } puts(ret_buf); return 0; }
809 :
デフォルトの名無しさん :2007/01/11(木) 04:14:52
本当にありがとうございますorz
>>799 #include <stdio.h>
int main(void) {
double p, q, x, y;
printf("P="); scanf("%lf", &p);
printf("Q="); scanf("%lf", &q);
if(p <= 0 || q <= 0 || p + q < 100) goto no_solution;
x = 50 + (p * p - q * q) / 200;
if(x <= 0 || abs(p) < abs(x)) goto no_solution;
y = sqrt(p * p - x * x);
if(y == 0) goto no_solution;
printf("(x, y) = (%f, %f)\n", x, y);
return 0;
no_solution: puts("解なし");
return 1;
}
結果の数学的な正しさはちょっと保障できんが。
811 :
デフォルトの名無しさん :2007/01/11(木) 04:26:49
[1] 授業単元: プログラミング2 [2] 問題文(含コード&リンク):1方向線状リストを使ってスタックを実現せよ。 ただし、各記憶要素xは整数値をとるものとする。 関数としてpush(x),pop(),empty(),ならびに現在のスタック内容を表示するためのshow()を用意する。 [3] 環境 [3.1] windows [3.2] gcc [3.3] C [4] 期限: 1月11日午後1時迄
>>800 もうとかれてるけど、教授を挑発するタイプ。一度やってみたかった。
#include<stdio.h>
int main(int argc, char* argv[]) {
if(argc == 1) abort();
if(argc != -1) {
char m = 0, n = 0, *argv_[] = {argv[1], &m, &n};
main(-1, argv_);
} else {
char *m = argv[1], *n = argv[2];
while(argv[0][*m] == '[') {
char *argv_[] = {argv[0], m, n}, n_ = ++*n;
++*m;
printf("[%d: ", n_);
main(-1, argv_);
if(argv[0][(*m)++] != ']') abort();
printf(":%d] ", n_);
}
}
return 0;
}
[1] 授業単元: プログラミング [2] 問題文 平面上の2点の座標を読み込み、それら2点の距離を出力するC プログラムを作成せよ。但し、作成においては平面上の座標を構造体で表し、 それに Point というデータ型名をつけるものとする。 [3] 環境 [3.1] Linux [3.2] gcc [3.3] 言語: C [4] 期限: 1月12日 ごめんなさい皆さん。力を貸してください。
>>814 読み込む形式は何?キーボード?ファイルから?
座標の情報はどこまで精度を保持すればいいの?
整数?小数?
[1] 授業単元: C言語 文字列とポインタ [2] 問題文: 文字列str内の全ての英字を大文字に変換する関数および小文字に変換する関数 void str_toupper(char *str) { /* … */ } void str_tolower(char *str) { /* … */ } を作成せよ。 実行結果 文字列を入力してください:aBcDEf 大文字:ABCDEF 小文字:abcdef [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: C [4] 期限:1月15日 以上です。よろしくお願いします。
C言語で重回帰分析のプログラムを作ろうとしてるけど なにをしていいのかわからんのです。 誰か助けてください。
820 :
798 :2007/01/11(木) 13:43:53
>798 お願いします。
821 :
デフォルトの名無しさん :2007/01/11(木) 13:45:03
C言語で重回帰分析のプログラムを作ろうとしてるけど なにをしていいのかわからんのです。 ・データはファイルから読み込む ・扱う変数は実測値、係数ともに10コ。 とりあえずメイン処理部分さえ助けていただけたら最高です。 誰か助けてください。
823 :
johnny :2007/01/11(木) 14:35:41
ぜひお願いします [1] 授業単元:情報処理 [2] 問題文(含コード&リンク):相関係数を求めるプログラムの作成 [3] 環境 [3.1] OS: (Windows XP [3.2] コンパイラ名とバージョン: Win32TeX [3.3] 言語: C++ [4] 期限: すいません。明日の昼の1時までです。1月12日13:00 [5] その他の制限: 制限はありません。 自分ではまったくわかりません。 宜しくお願いします。
>>818 #include <stdio.h>
void str_toupper(char *str){while(*str){*str++=*str>96?*str-32:*str;}}
void str_tolower(char *str){while(*str){*str++=*str<96?*str>64?*str+32:*str:*str;}}
int main()
{
char s[64];
printf("文字列を入力してください:");
scanf("%s",s);
str_toupper(s);
printf("大文字:%s\n",s);
str_tolower(s);
printf("小文字:%s\n",s);
}
825 :
デフォルトの名無しさん :2007/01/11(木) 14:44:55
[1] 授業単元:統計解析学 [2] 重回帰分析をするプログラムを作成しなさい。 [3] 環境 [3.1] cygwin [3.2] gcc 3.4 [3.3] 言語: C [4] 期限: 1/12 よろしくお願いします。
>>825 > ・データはファイルから読み込む
> ・扱う変数は実測値、係数ともに10コ
これも入れとけよ阿呆
827 :
825 :2007/01/11(木) 15:34:03
> ・データはファイルから読み込む > ・扱う変数は実測値、係数ともに10コ すいません、書き忘れてました。 よろしくおねがいします。
829 :
424 :2007/01/11(木) 17:51:08
>>424 をお願いします
月曜日に締め切りです。
どうかよろしくお願いします
830 :
デフォルトの名無しさん :2007/01/11(木) 18:04:31
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://loda.dip.jp/upload/data/loda00067.txt 質問スレで色々聞いていたのですが、どうしても分かりませんでした。
スケジュール帳を作ろうとしているのですが、fopenの部分でエラーが出ます。
どなたか解決お願いします。
[3] 環境
[3.1] OS: (Windows/Linux/等々) WindowsXP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Visual studio
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限:早い方がよいのですが、明日の朝8時くらいまで
[5] その他の制限:
832 :
830 :2007/01/11(木) 18:09:43
>>831 sprintfをどう使えばいいのか分からないのです。
>>829 Cは変態言語だから難しそうだね
コンパイラのパーサ部分をまるまる作んなきゃいけないわけだし。
>>814 途中で飽きたけどせっかくだから出す
入力値の読み込みをコメント部分に入れれば動くはず
a, bに仮の値を入れてるからそこも適当に直して
ここで解凍
http://www.geocities.jp/c_cpp_cs/code/code.html dVHLbsMgELzzFatElRzXdZyz035D720VAcY1koMpj8g08r8XDLS+1AfEzs7O7OA9F3S0HYOzNh2f6uE
F7X+hKzZDQJBxknWsB22UpQZeJy4M3BH4r5ssGRnMFbgWLbHVIhQpN0Yv2pIiVrhKk+SA4nAsZbsWsp
7hGbA/n4DUcwbdCroVdBFUzFglwtyCUFogWI1MJCuZHRJVfylTeIMymDwGVX9zh61Ax7XBgrJ/l01S2
Shn80RyiEqBfsVcFKuA+qQV0AGrMtxvbx9ZSPNvdjHgRWKcyPFv224eBfvYdzhVcIJli5OIN77RhM7a
OpbAhbTpz2gojxGXypd9sXsY+3exq/4y5qU3uZoQ4Qc=
835 :
814 :2007/01/11(木) 18:28:16
座標の情報は整数+少数第2位程度まで、読み込むのはキーボード からでお願いします。
>>832 > sprintfをどう使えばいいのか分からないのです。
ならそう書いておけよ
int a = 1, b = 2;
char str[128];
sprintf(str, "%d %d", a, b);
のような使い方ができて、strには"1 2"が入る
fopenの引数は下のようになっているので、
>FILE *fopen(const char *path, const char *mode);
ファイル名をprintfのような形では渡せない
>>829 bison&flex とか使えるならともかく、まともに構文解析書くのマンドクセ
>>829 構文解析は情報の課題ではかなり難度(めんどくささ)が高いぞ。
丸投げせざるを得ない程度の知識でそんな課題が出る講義でてるのか?
840 :
デフォルトの名無しさん :2007/01/11(木) 19:25:48
あと10ヶ月あれば余裕だろ
>>824 コンパイルできました。
ありがとうございます。
>>840 とりあえず課題部分だけ。
長くなるからdiffとった。
71,72c71
< FILE *fin = fopen("neko.txt", "r"); //テキスト オープン
< //改良1:入力ファイルを↑のような決め打ちでなく,コマンドライン引数から設定できるようにする.
---
> FILE *fin;
78a78,81
> if(argc<2 || (fin=fopen(argv[1],"r"))==NULL) {
> fprintf(stderr, "Unable to open input file.\n");
> return 0;
> }
254,256c257,259
<
< //改良2: この関数を完成させる
<
---
> FILE *fp=fopen("result.csv");
> fprintf(fp, "%s, %d, %lf, %lf, %d\n", text, count_type, t_diff, speed, count_miss);
> fclose(fp);
844 :
デフォルトの名無しさん :2007/01/11(木) 19:57:53
[1] 授業単元:プログラミング [2] 問題文 2問あります。お願いします。 1.ID番号、名前、英語の得点、数学の得点、国語の得点、総得点を格納する構造体を 定義し、その構造体変数にID番号、名前、各教科の得点を入力し、総得点を求めて 表示するプログラムを作成せよ。 ID番号はint型、名前はchar型の配列(要素数20個)、各得点はint型、総得点はint 型とし、構造体名は任意でよい。 全ての処理はmain()関数内で行うこと(別関数に分けないこと)。 2.1と同様の処理を、以下の仕様で実現するプログラムを作成せよ。 ・データを格納する構造体変数はmain()関数にて宣言する ・データの入力は別関数により行う ----- 入力処理の関数の例 ------------------------------------ void inp_data(構造体変数へのポインタ); 返却値:なし 引数 :データ格納先のアドレス 処理 :引数で示される構造体に値を入力する ------------------------------------------------------------- ※main()関数内の変数に対して別関数で入力を行うため、引数にはポインタを用いることになる ・データの表示は別関数により行う 実行例 ID-No. : 2310 Name : example English : 83 Mathematics : 92 Japanese : 78 example(ID:2310) Total point 253 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限: 2007年1月13日
846 :
デフォルトの名無しさん :2007/01/11(木) 20:59:00
848 :
デフォルトの名無しさん :2007/01/11(木) 23:00:16
[1] 授業単元:統計解析学 [2] 重回帰分析をするプログラムを作成しなさい。 [3] 環境 [3.1] cygwin [3.2] gcc 3.4 [3.3] 言語: C [4] 期限: 1/13 [5] その他の制限: 扱う変数は実測値、係数ともに10コ程度 急で難しい問題ですが、よろしくお願いします。
850 :
デフォルトの名無しさん :2007/01/11(木) 23:18:03
どうしてくれるんだ 派遣のほうが給料が高いというから俺様は正社員を辞めて派遣になったんだぞ! 謝る気があるなら俺様に正社員に戻る方法を教えてくれ
なにかすごいソフトウェアを作れ そして大手に売り込め
おいおい。研究室直リンかよw 別にいいけどさ
>>853 スイマセン。
どうしようか迷ったのですが、コピペするのも迷惑かと思いまして…。
>>854 いや普通は自分でアップするだろ
ファイルのコピーとか
struct node* InitNode(int size){ /* 自分で書いてください*/ } これとか戻り値じゃなくてサイズと構造体のアドレス取得しときゃmemsetで一発だろ
860 :
817 :2007/01/12(金) 00:47:26
>>817 本日9時までにお願いできないでしょうか。
どなたかよろしくお願いします
[1]基礎情報処理
[2]縦100 横100 のマス目(点)に分けられた紙の各点が、白と黒に塗り分けられたものを考え
る。この中に、下にあるように黒い点で囲まれた図形が1 つだけある。図形は必ず、黒い
点で囲まれており、内部は白い点で埋め尽くされている。この「囲まれている」とは、各
黒い点の上下左右および斜めの8 つの点のどれかが黒い点となっているものと考えよう。
なお下の例では紙は小さいが、実際には縦横とも100 のマス目がある。
(一応ペイントで例の図を描いてみました…
http://up2.viploader.net/pic/src/viploader392409.jpg )
この図形は整数値の2 次元配列(例えばC 言語ならa[y,x] ただし)で表されている。x 軸は左
から右、y 軸は上から下とするので、a[1,1]は一番左上の点になる。この配列はプログラム
に入る前に何らかの方法で、白い点は0、黒い点は1 になっているものとする。
さて図形の面積、つまり黒い点で囲まれた内部の「白い点」の数を数えるプログラムを
考えよう。ただし図形は必ず紙の上に1 つだけ存在し、またかならず紙の端から点1 つ以
上ずつ少し離れた位置にあるとする(つまり黒い点は紙の上下左右の端には存在しない)。
レポートとしては、プログラムのうち面積を計算する部分を記述して提出すること。ど
のようなプログラミング言語でもかまわないが、プログラムに各自コメントを加え、どの
ようなアルゴリズムに基づいてプログラムが動作しているのか説明すること。
[3]環境
[3.1]OS:Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4]期限:今日中
[5]特にないと思います
問題文長いですが、黒い点で囲まれた内部の「白い点」の数を数えるプログラムが
書ければできると思うんです
お願いします
863 :
デフォルトの名無しさん :2007/01/12(金) 01:30:54
#include <stdio.h> #include <memory.h> int main(void) { int i, j; short NumTotal[4]; short data[][3] = { { 80, 70, 70 }, { 50, 60, 90 }, { 70, 100, 60 }, { 60, 70, 90 }, { 90, 90, 90 } }; short *p; p = &data[0][0]; memset(&NumTotal[0], 0x00, sizeof(NumTotal)); for(i = 0; i < 4; i++) { for(j = 0; j < 3; j++) { NumTotal[i] = NumTotal[i] + *(p + i) + j; } printf("%d番目のトータル = %d\r\n", i, NumTotal[i]); } /* 後の平均処理やレイアウトは考えろ */ return 0; }
865 :
864 :2007/01/12(金) 01:44:31
>>863 何だよ終わってるじゃねーか
csv(桁区切り)にしたけりゃこれ参考にしな
#include <stdio.h>
#include <string.h>
char *ReadName = "moto.txt";
char *WriteName = "kekka.txt";
int main(void)
{
FILE *fp;
int i, j;
char readBuf[256];
char writeBuf[256];
memset(&readBuf[0], 0x00, sizeof(readBuf));
memset(&writeBuf[0], 0x00, sizeof(writeBuf));
i = 0;
j = 0;
fp = fopen(ReadName, "rb");
if(fp == NULL)
{
return -1;
}
while(1) { fread(&readBuf[0], sizeof(readBuf), 1, fp); if(feof(fp) != 0) { break; } } fclose(fp); fp = NULL; fp = fopen(WriteName, "wb"); if(fp == NULL) { return -1; } while(1) { if(readBuf[i] == 0x0D && readBuf[i + 1] == 0x0A) { if(readBuf[i + 2] == 0x00) { break; } writeBuf[j] = ','; i = i + 1; }
867 :
864 :2007/01/12(金) 01:45:46
else { writeBuf[j] = readBuf[i]; } j = j + 1; i = i + 1; } fwrite(&writeBuf[0], sizeof(writeBuf), 1, fp); fclose(fp); fp = NULL; return 0; } じゃ、寝る
868 :
817 :2007/01/12(金) 01:48:04
869 :
デフォルトの名無しさん :2007/01/12(金) 02:00:28
[1] 授業単元:総合演習 [2] 問題文(含コード&リンク):数独 問題を表示させ、キーボードから数字を入力し解答する。 同時に、解答プログラムも作成すること。 [3] 環境 [3.1] OS: Windows Xp [3.2] コンパイラ名とバージョン: Borland C++ 5.02 [3.3] 言語: C言語 [4] 期限: 2007/01/15 [5] その他の制限:APIを使用すること。
>863 C++だったのか!! 教科書片手に必死で書いたのに、残念!! てか、俺みたいなやつは書き込んじゃいけなかったかな・・・?
871 :
デフォルトの名無しさん :2007/01/12(金) 02:37:31
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク):テイラー展開を用いてsinx,cosx,tanxの値を求めよ。 ただしx はキーボードから入力すること。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin [3.3] 言語:c [4] 期限: 1月12日 [5] その他の制限: よろしくお願いします。
872 :
デフォルトの名無しさん :2007/01/12(金) 03:24:43
[1] 授業単元:Cプロ演習 [2] 問題文(含コード&リンク): 引数付きmain()関数main(int argc,char *argv[ ])により,MS-DOSプロンプトから 入力された実行プログラム名およびそれに対する引数の文字列を順に表示する。 実行プログラム名はprnとし、MS-DOSプロンプトから実行する。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: VisualBasic [3.3] 言語: C [4] 期限:今日中 [5] その他の制限:MS-DOSプロンプトから実行というのをしたことがなくて どうすればいいかわかりませんorz 軽く解説つけてもらえるとありがたいですm(_ _)mよろしくおねがいします
873 :
デフォルトの名無しさん :2007/01/12(金) 03:34:43
874 :
デフォルトの名無しさん :2007/01/12(金) 03:39:26
>>798 やってくれた人いませんか???お願いします。
>>871 #include<stdio.h>
#define USER_PI 3.1415926535897932384626433832795
double user_sin_0_n(int n){
if(n%4==1) return 1.0;
if(n%4==3) return -1.0;
return 0.0;
}
double user_sin(double x){
double ret=0.0, kaijo=1.0, x_n=1.0;
int i;
for(i=1;i<100;i++){
kaijo*=i;
x_n*=x;
ret+=user_sin_0_n(i)*x_n/kaijo;
}
return ret;
}
double user_cos(double x){return user_sin(x+USER_PI/2);}
double user_tan(double x){return user_sin(x)/user_cos(x);}
int main(int argc, char *argv[]){
double x;
printf("Input x : ");
scanf("%lf", &x);
printf("sin(%f)=%f\n", x, user_sin(x));
printf("cos(%f)=%f\n", x, user_cos(x));
printf("tan(%f)=%f\n", x, user_tan(x));
return 0;
}
876 :
871 :2007/01/12(金) 04:07:30
>>872 int main(int argc, char *argv[]) {
while(argc - 1) {
printf("%s", argv[argc - 1];
argc--;
}
return 0;
}
コマンドラインからnnnn.exeを起動する場合
c:\nnnn str1 str2 str3 と、半角スペースを空けて、実行するとmain関数の
argcには引数の総数、*argv[]には
半角スペースごとに1つの引数として、引数文字列の先頭アドレスが渡される。
が、しかし、nnnn.exeを引数なしで実行しても、argcが1
実行ファイルの絶対パスがargv[0]に必ず入るので
実行時に自分で指定した引数は[1]以降になる。
>>874 数独はぐぐったらそこらへんに転がってるよ
879 :
デフォルトの名無しさん :2007/01/12(金) 09:22:59
>>861 >例えばC 言語ならa[y,x]
このクソ出題者の名前を晒したら答えてやる。
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): ポインタ,構造体,関数分割,ファイル分割のすべてを利用した簡単なプログラム を作成しなさい [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:c [4] 期限:2007/01/15 [5] その他の制限: なし よろしくお願いいたします。
883 :
デフォルトの名無しさん :2007/01/12(金) 10:16:19
>>877 ありがとうございます。
問題に「実行プログラム名はprnとする」とありますが
これは自分で作成しなければならないのでしょうか??
どういう操作をすれば目的を達成できるのかまだ理解できてません・・・
初心者で申し訳ないです(lll´Д`)
885 :
838 :2007/01/12(金) 10:34:31
あまりなじみがないと思うのですがよろしくお願いいたします。
>>883 ああごめんファイル名が決まってるの忘れてた。
nnnnって書いたとこprnに読み替えてくだしあ。
あとVBでCなんて書いた事ないからわかんないけど
>>877 に書いたソースをprnってファイル名で作れば済むと思うけど
それ自体がわからないなら、まずぐぐってHelloWorld作る所からどうぞ。
887 :
874 :2007/01/12(金) 10:47:04
888 :
デフォルトの名無しさん :2007/01/12(金) 10:54:02
>>886 さっきprnの名前でファイル作ることを試みてたんですが
「prnはデバイス名として予約されています」
って出てきて作成できなかったんです(;゚д゚)
>>887 数独解いたり問題作るのにAPIを使う必要はないと思うのだが。
>>888 MS-DOS/MS-Windowsではそのメッセージの言うように"prn.exe"と言う名前でファイルを作ることは(通常)できない。
問題を出した香具師に文句を言え。
PRNとかCONとかAUXとか、いわゆるDOSデバイスの名前はダメだな。 拡張子ついてても関係ない。
892 :
デフォルトの名無しさん :2007/01/12(金) 11:09:35
>>890 >>891 今から学校行ってクレームつけてきます(爆
色々ありがとうございます┏oペコリ
893 :
874 :2007/01/12(金) 11:19:09
>>889 問題を表示させ、キーボードとマウスを使って解答できるモノを作れとのことです。
>>894 ほい、プログラムで解いてもちょっと難しいのを。
6 □□□9 4 □□8
□□1 □□□4 2 □
7 □□1 □□□□□
□7 □□□1 □□□
5 3 □2 7 8 □9 1
□□□3 □□□5 □
□□□□□7 □□6
□6 7 □□□3 □□
3 □□4 6 □□□5
↑はデータとして使い難いだろうからデータ用も。
6.. .94 ..8
..1 ... 42.
7.. 1.. ...
.7. ..1 ...
53. 278 .91
... 3.. .5.
... ..7 ..6
.67 ... 3..
3.. 46. ..5
簡単に解けるのがよければ作ってもいいけどどこにでも転がってるっしょ。
┌───┬───┬───┐ │6 □□│□9 4 │□□8 │ │□□1 │□□□│4 2 □│ │7 □□│1 □□│□□□│ ├───┼───┼───┤ │□7 □│□□1 │□□□│ │5 3 □│2 7 8 │□9 1 │ │□□□│3 □□│□5 □│ ├───┼───┼───┤ │□□□│□□7 │□□6 │ │□6 7 │□□□│3 □□│ │3 □□│4 6 □│□□5 │ └───┴───┴───┘
[1] 授業単元: プログラミング [2] 問題文 RS232Cのプログラム [3] 環境 [3.1] OS: Linux(Debian) [3.2] gcc [3.3] 言語: C [4] 期限: 1月末 [5] その他の制限: 「やさしいC」を読んだだけの初心者ですが、 よろしくお願いします
899 :
デフォルトの名無しさん :2007/01/12(金) 12:48:29
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 以下に示した「氏名」と「英語」,「数学」,「物理」の得点を構造体の配列を用いて格納する.各 科目について得点の高い順にソートし,ソート終了後に画面表示するプログラムを作成しなさ い(すなわち,ソート,画面表示という一連のプロセスが3 回繰り返されることになる).ただし, 構造体の型は以下に示したものを利用し,各データは構造体の「初期化」により格納しておくこ と.また,ソートを行う場合には,必ず構造体の要素(メンバ)の入れ替えを行うこと. 得点表 氏名 英語 数学 物理 小野妹子 82 93 56 菅原道真 89 87 91 源頼朝 56 76 45 豊臣秀吉 62 83 65 徳川家康 78 56 87 構造体の型 struct SCORE { char name[20]; int english; int mathematics; int physics; }; [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C よろしくお願いします。
こういうのってソートどういうの習ったか言ってくれないと回答しにくいよね… 最初に習う気がするバブルでいいのか?
>>898 もっと具体的に。
「RS232Cのプログラム」では余りに内容がなさ過ぎる。
902 :
デフォルトの名無しさん :2007/01/12(金) 13:48:58
903 :
デフォルトの名無しさん :2007/01/12(金) 13:54:17
>>902 問題にある、「実習時間中に作成したもの」を提示したまえ。
>>863 悪いな、少し遅れた。
ここで解凍
http://www.geocities.jp/c_cpp_cs/code/code.html rVTNbtNAED4nUt5h5F4cSK22cMkvD0Ii5DibxIqzrrxrhEA5uIJGAvUHBCpwQFRAkUBtT5WqquJl3CT
k1Fdgdtd24pCcwBfvznz7zbczs7NmU8vxWwQqptNxPZt3+7Vcdi2xWn2Td1OWNuMeMdMo211iZMts3L
NpB025rE059E2b6nl4lstmxPapSVtmzywA66KUAvQQa/b8MroZb5VK6nQMe6S2ideOlAEudK1pOia1i
MGfcC0vMHYbdPSoaLhjUKvFVOXIZFiOy4gu8QMgDiPCEYGgChvC0XY90MtQhohKBneVmEiBy5ikxD9U
KiARZpPpEZPkz6SvgeyINnCjwitajzwmHipKY40m6YjEFRZSYRDa0vPquFQpkrqNzPfK+Kssoh1CO7y
L4dB5twr3o/ssCDNsyojH9e0CaAWVyszgPwiUxy3X5yJDWp3W6R3xwehgf/z2fHz2avrz/eTseHK4C9
IhEMoaBudQr2uCBJIPSWIReNMNeADaugYl0LS88C0kewla/33xdXR6lI8O/cWuQRh8D4MPt9f7QsrDz
YaQOnrxDddbDUDNo+EVrovFBkwudm6udgVsNDzBG4Q7b6bB5fjlpzA4CoOTMDgIg89h8C4Mnt9ef9SS
Hmk7PuvOZcemoknla4haFHS5g2oVisW4YE1sut6sMKJvIQXdjJGLSVc3mA5fT4/3VihJSZl7kbN3gb0
zb1+hYWuVBpW5f9SwvkrDspg3l3vj0y9h8COqTlzXWWjsU0cFsFzKbeqThHYQz5uETlVblvbXKiI1JO
IJ5S6dUGida1Vh8Qj3PSrHzuAP
>>901 他の媒体から、文字を受け取って表示させるRS232Cのプログラムです。
PADが書けねーよー PAD書けって宿題も受け付けてくれるスレおせーてください
>>910 このプログラムを作るためのPADを書けとかいうヤツでさっぱり書けません
912 :
助けてください :2007/01/12(金) 16:38:08
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):課題 20×20のタイルからできた2次元平面を考える。左上のタイルSから右下のタイルGまでロボットRが移動しようとしている。Rは次の条件でタイル平面上を移動する。 (1)現在位置から東西南北いずれかの隣接タイルに移動する。それまでに通過したタイルには移動しない。 (2)移動するタイルは可能なタイルのなかからランダムにきめる。 (3)移動できるタイルがなければ停止する。 従って、ロボットRはSから出発すると、Gに到着するか、または途中で身動きできなくなって移動を停止する。次のプログラムを書け。 (1)20×20のタイル上で左上にS右下にGが与えられたときに、Gに到着するか停止するまでに通過したタイルを表示する。通過タイルをX、非通過タイルをOで表示する。 (2)Sから出発してGに到着するか停止するまで移動する、という試行を100回繰り返したとき、ロボットがGに到着した回数を求めよ。到達した場合に、SからGまでに通過したタイル数の平均を求めよ。 (3)int sense(int i, int j)を使用する。 (4)Gに到達した最後のタイルパターンを提出せよ。 [3] 環境 [3.1] OS:Linux Redhat [3.2] コンパイラ名とバージョン: gcc [3.3] 言語 : C [4] 期限: 2007年1月15日17時まで [5]特になし すいません、ホントに分かんなくて困ってます。。。 助けてください。よろしくお願いします。
int sense(int i, int j)については? 何か指示がなかった?
914 :
初心者修行中 :2007/01/12(金) 16:55:07
916 :
助けてください :2007/01/12(金) 17:01:04
返事ありがとうございます。 現在位置(i,j)を引数にもらって、次に移動すべき隣接タイルの方向をランダムに選んで戻す。(東西南北には、整数1、2、3、4をそれぞれ対応させる。移動できるタイルが見つからなかったら0をもどす。) って書いてあるんですけどこの事ですか??わかりにくくてすいません。
917 :
初心者修行中 :2007/01/12(金) 17:07:34
>>914 ・コーディングスタイルが気色悪い。
・整数値に意味を持たせてはいけない。⇒enumを使うべき。
・ifやforが1行野郎じゃないなら複文化({})すべき。
・配列の要素数は自分で数えるな。
・ループの上限は配列サイズから得るようにするべき。
919 :
お願いします :2007/01/12(金) 17:10:15
質問です。 最短距離計算の一種なのですが・・・ 複数(数十個)の部品があり各部品は複数(2or3個)のインターフェース(繋がれる点)を持っています。 それらの部品間を直線で繋いだときの距離の総和が最短となる場合を見つけたいのですが 分かる方がいたらお願いします。 ちなみに各部品はどのインターフェースを何度でも繋いでもよいのですが 必ず全ての部品が繋がっているようにしなければなりません。
920 :
初心者修行中 :2007/01/12(金) 17:10:54
>>918 ありがとうございます。これから書くときは、意識するようにします。
直してみます。
>>918 >・コーディングスタイルが気色悪い
これほとんど因縁だろwwwwww
いや、俺もどうかなって思ったけどさ
>>914 よ~し、おじちゃん因縁付けちゃうぞ。
r;ァ'N;:::::::::::::,ィ/ >::::::::::ヽ
. 〃 ヽル1'´ ∠:::::::::::::::::i
i′ ___, - ,. = -一  ̄l:::::::::::::::l
. ! , -==、´r' l::::::/,ニ.ヽ
l _,, -‐''二ゝ l::::l f゙ヽ |、
レー-- 、ヽヾニ-ァ,ニ;=、_ !:::l ) } ト
ヾ¨'7"ry、` ー゙='ニ,,,` }::ヽ(ノ
:ーゝヽ、 !´ " ̄ 'l,;;;;,,,.、 ,i:::::::ミ< switch と case のインデントぐらいは揃えろ。
::::::::::::::::ヽ.-‐ ト、 r'_{ __)`ニゝ、 ,,iリ::::::::ミ< な!?
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
case:に中括弧つけるか普通? とはいえここまで括弧の対応が分かりづらいソースは久しぶりに見た
924 :
初心者修行中 :2007/01/12(金) 17:35:17
>>921 いや、右も左もわからない状態なのに、勉強になるからといって、
回答者になる時点でどうかと思ってたので、こういう指摘はありがたいです。
どうすれば良いかが、まるでわからないので、書いた物へのアドバイスは大変貴重なのです。
綺麗なソースを、できるだけ沢山読むようにしてみます。
>>922 ずれてますね。申し訳ない。
>>923 中括弧要らなかったですね。
なんか、もう初歩的なところでグダグダです。
見にくいソースを読んで、アドバイスくださった皆さん、
ありがとうございました。
指摘されたこと気を付けて、いっぱい書いてみます。
>>925 じゃアドバイス一つだけ。
ここで指摘された事が全てと思わない方が良い。
>>918 みたいに主観と客観が織り交じった意見は
主観の部分は真に受ける必要は無い。
caseの中括弧は、case内で変数宣言したいときとかに使うなぁ。 インデントが狂って泣ける。
>>861 間に合うか?w
ちと面白い問題だった
ここで解凍
http://www.geocities.jp/c_cpp_cs/code/code.html jZRNTxNBGMfvJHyHsUQy2xe35daUPWJC0tSLnOoelnZXNta22S5kG2nCbFGBghgPGoy1IgqlRnsQI4Z
GvwvD0vbEV/CZ2SKlL9htuy//Ps/sb/7PzDOhpxOpxaSKPDkzqWfuLHjGxya6tZQ+z0WQk6qmp1V0b+
4+wlPC+JgoXkrR2dgMwiHhKmg2FkM4KLC8nKmYegIlFhQDKfFQMCjzU4T9J4qt5zVn7Rkl39pv985ff
KZkh9qls+ONs+OS83Pf2f4Of1FySMkeJSVKNp1Prx1yREmN2uudXNt2xdOdGl1ZOV05ocUN/t2lpN7a
L7FgsvoPRE+bAPMIs2vezx8tBKRPxscQHIZqLhppzGYgSUo8L8ctGU1OIowwzPxSCoRkAS0vX9N8vRo
IkHxdC3Q0+IADBWbCUkZPoseKDi9lMIrxMOF37fLC/VJc7tDdnY3OIK+WhTwO7c/7zYyppKRgxEXXNc
ySJWlK6EzGVYE9NheN3pKwlpW0TFZNYz5wSPZ7jHkPh+lK6EnSDFVJYswoDa+g+KF4/Kdl+9PYIYqXN
arDpCk5cColahMo60VjzVkrt3Y3mz9sODtPq+1ilZKq83IVHtsfvsL5/N0XSHRHuGis9w+vZQyELZiz
NQ0UEcvnGwTBDiUeZF6D65YMt3ANh68EuJeAL9KfWxjy0rwUiuSnw+FIfvg7O3QhoIPAG+CuO3VAiQ0
GwRJv1f6cV04oedO90GnxPS02qF13t8fwEXnZ2OKGhW0JbN0Mi3QN4qt7iA1dlNtbTv03pykxGtsGSk
p+jYYCVQoADruMgsTDeYsI3Ig2oEoDJFGEfUztV82jevNwC2ylpMI7yma7/BEU6BmjVHvUYt9sR3dL+
Y8PfGP7fAPmnjVg82vY4/JfNMq3kw/SHrcTCD3xPYZoiVQmp0IT6I7rxBR4M/oL
>>928 おおボケこいたm(_ _)m
33~34行目
if ( chk(100-y, 100-x) )
a[100-y][100-x]=OUT;
の100は99にしてくれ
if ( chk(99-y, 99-x) )
a[99-y][99-x]=OUT;
>>921 これでどう?
pVRNb5RAGL7zK6ZsthkKWNjuScCkscbtoTVp1qhB0rADWwaR3QwsjWm41IMHz6Ynb968mHjy5MF/4qb
+DucDGFaz9SAJM/A+7+cz7zsDnKNsFcXALcoIL+4lD5RBX5ThGZMpgyie4zwGz46PphMwsjrB5NHx48
mUSXBegmRxEftcJ/AFEjgKR4o4L2LIvrAB2JZqVwrgX8gfB94VtNwU7O6CHe4DB35q2oFmQKzbrojaQ
3Wb4hSlHuQDU6ra5LPhSOeOLBf3xKbwUDtNEsRDvhXoyLfZMmLLQcDBOSQ8VUB1SJhHUNsj+2eHp0fn
J4fPHQ7MFwRiz3KwO3Z0HTfq3BbRDHhYSExT6xDmjFbhdL8zEoev2t9aaVf2krhckRwQR6kFl0l4EcO
OPmykBmKWMgvOVy8ThqQUSRt6KJR2qXQ0BVRjIzAWglRsSGzRQhj2zHQdCUNaL/Y8Ht20WdWp54mIpq
21dTS6xSUuUQKbvjBSyQ0KixhY9yVTws5y+rgt8dQ0t/DINUdSE+v6XZoHPZ93a457PrdE5yReJjiLo
a3xo6sWOALLVcmnIPtjTPrHydlOQgL2lj6dDPXHjWqoP2/eq/V/HPOSUO9zqA4L1Vj6O5k4u0CT2Uqd
l7nK5Uy6KavlVTA9e/HwydPTKbAtS/Tl6xDnkFUpR9tg3Uk8y6iMiogGau+J8ywsyr8uC1EF6zXkthF
oHaipo82mJG/AMKI5GUi3ta77YOWJ4ZDdVBHdq9oT2s7dP/lre16kzckDXm8KZBPUyuZO2l5qSKYdwM
w6hns3TFve7bevtx/fra+/r68/rd9+/vXhCxjOWbUwWqxmWaxVZJ80Zbf+eGKdUzk0tfIb
【質問テンプレ】 [1] 授業単元:プログラミング演習 [2] 問題文: x^3-4x^2-51x+54=0をNewton法を用いて解くプログラムを作成し、 そのプログラムと3つの解を示せ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2007年1月15日 [5] その他の制限: 手計算の結果はx=1,9,-6となりました。 多分合ってると思うので、プログラムのみをお願いします。
ニュートン法の部分は組み終わったんだが、 初期値を求めるアルゴリズムはなんでもいいのか?
>>933 特に指定がないので、xの解が出ればなんでも良いと思います。
936 :
861 :2007/01/12(金) 20:12:02
>>880 さん
晒すのはご勘弁を・・
>>881 さん
どうもありがとうございます!
本当に助かりました!
>>928 さん
ありがとうございます、時すでに遅しでしたが
プログラムを拝見させてもらったところ丁寧にコメントまで
つけて頂き本当にありがとうございました!
参考にさせて頂きます!
>>932 ニュートン法だけならこんな感じか。
複数の解があるときに近似解を求める方法がわからん
#include <stdio.h>
#include <math.h>
#define N 10
#define eps 0.00001
double func(double x) { return x*x*x - 4*x*x - 51*x + 54; }
double d_func(double x) { return 3*x*x - 8*x - 51; }
double newton(double s, double (*f)(double x), double (*d_f)(double x)) {
int i;
for(i = 0; i < N; i++) if(fabs((*f)(s = s - (*f)(s) / (*d_f)(s))) < eps) return s;
return NAN;
}
void main() {
printf("%f\n", newton(-10, func, d_func));
printf("%f\n", newton(0, func, d_func));
printf("%f\n", newton(10, func, d_func));
}
938 :
720 :2007/01/12(金) 20:37:41
>>720 お願いします。
>>729 さんが解答していますが、「効率よく」という条件を
満たしていないので、別解を希望します。
>>938 どの部分より効率が悪いと判断したんですか?
940 :
720 :2007/01/12(金) 20:49:35
>>939 どの部分というよりも、アルゴリズム自体が非効率に思えます。
具体的には、実際に全ての点対について距離を計算しているので、計算量 O(n^2) です。
プログラマにアルゴリズムの質問したって碌な答えは返ってこないぞ
そんなことはないだろ 計算量とかアルゴリズムも分からんでやっていけるのは 本当に底辺のプログラマだけだと思うが
しかし新たなアルゴリズムを編み出すのは本業じゃないからな
>>938 もっとも遠いペアなら、
まずは凸包を求めて、
その凸包の各点の対角に当たる点との
距離のうち一番遠い奴ってのが、
それっぽいけど、
もっとも近いペアはどうやるんだろ?
ちょっと思いつかない。
945 :
944 :2007/01/12(金) 21:42:39
>その凸包の各点の対角に当たる点との あ、やっぱり対角とは限らないか・・・
最近(遠)点対問題とか有名なんだけどWeb上でリソースがみつからんなぁ。 アルゴリズムイントロダクションに乗ってた気がするけど手持ちにないし。
947 :
向井 :2007/01/12(金) 23:12:02
[1] 授業単元:プログラミング入門 [2] 問題文:商品の種類・名前・単価・購入個数を入力し、以下のように出力するプログラムを作れ 商品の種類数を入力してください:○○ 商品名を入力してください:A B C 商品名:A 単価:○○ 個数:○○ 商品名:B 単価:○○ 個数:○○ 商品名:C 単価:○○ 個数:○○ 小計:○○ 商品は○○種類です ーーーーーーーーーーーーーーーーーー 商品名 個数 単価(円) 計(円) A ○○ ○○ ○○ B ○○ ○○ ○○ C ○○ ○○ ○○ -------------------- 小計:○○ 消費税:○○ 合計:○○ [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VISUAL STUDIO 2005、Win32コンソールアプリケーション(.cppタイプ) [3.3] 言語:C++ [4] 期限:明日の昼までです [5] その他の制限:「ザ・C」を読んだだけの初心者です。#include<stdio.h>の型でお願いします どうぞ、よろしくお願いします
CがいいのかC++がいいのかはっきりしろ
949 :
向井 :2007/01/12(金) 23:23:36
950 :
814 :2007/01/12(金) 23:58:36
>>834 ありがとうございます。書いてくれたことに気づいていませんでした・・
これをもとにがんばります。本当にすいません。
>>944 ドロネー図を作ればO(n log n)で求まるらしい
953 :
デフォルトの名無しさん :2007/01/13(土) 01:14:23
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):生まれてから今日までの日数の表示(閏年考慮) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual Studio 2005 [3.3] 言語: C
954 :
869 ◆xkG5F/RZlA :2007/01/13(土) 01:15:14
869ですが、何とかならないでしょうか? よろしくお願いします。
956 :
デフォルトの名無しさん :2007/01/13(土) 02:22:54
伝達関数に量子化雑音を組み込むのってどうすればいいのかわかりません…。 量子化雑音の式をz変換しなきゃだめ?
ここは愚痴スレじゃないんだよ
>>956 z変換って線形成なかったっけ?
(もしあるなら)量子化雑音の伝達関数をN(x)とすれば単純に足し合わせるのがいいんじゃないかと
というか"量子化雑音を組み込む"って何
むしろ居た違い死ね
959 :
デフォルトの名無しさん :2007/01/13(土) 02:36:31
伝達関数に量子化雑音を組み込むのってどうすればいいのかわかりません…。 量子化雑音の式をz変換しなきゃだめ?
>>959 量子化雑音の式が定義されてるの?
なけりゃ話にならないよ?
というよりオレも消えて欲しいと思っているから
[1] 授業単元:プログラミング [2] 問題文:CUI/GUI問わずウンコの絵が出てくるアプリを作成せよ あらかじめ作成した画像を使用することはならず、アニメーション表示されるとなおよし [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC8 [3.3] 言語:C++ [4] 期限:明後日 [5] その他の制限:なし お願いします。
>>961 days-=bd;の下に
if(by==ty&&-days>=td)return 1;
を入れると未来の日付をはじけるかも・・・ 眠い・・・
2つの座標が与えられた時、 その2つの座標が結ぶ直線の通る座標を出す方法を教えてください 座標の範囲は(0,0)(600,600)です
>>965 単純に中等数学の問題なの?
そうでなく離散座標上の話なの?
ユークリッド空間の話だとは思いたくないが。
>965 直線上の座標は無限。 別の条件もないと特定はできない。
>>848 なんとかならないでしょうか?
よろしくお願いします!
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 配列に格納されたデータをソートするプログラムを作成するにあたり、 以下の機能を持つ関数を作成しプログラムを完成させなさい。 乱数を生成し配列要素に格納する init_array(int *pa, int n) 配列要素を1行で画面に出力する output_array(int *pa, int n) 指定された2つアドレスのデータを交換する swap(int *x, int *y) [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio 2003 [3.3] 言語: C [4] 期限: 1月15日 よろしくお願いします。
>>971 void swap(int *x, int *y)
{
*x = *x ^ *y;
*y = *x ^ *y;
*x = *x ^ *y;
retrun;
}
x = 0x01
y = 0x02
x = 0x01 xor 0x02 ... x = 0x03
y = 0x03 xor 0x02 ... y = 0x01
x = 0x03 xor 0x01 ... x = 0x02
973 :
972 :2007/01/13(土) 11:56:27
>>971 乱数を生成し配列要素に格納ってあるが
引数の意味は何?int *paは配列のアドレスでint nが要素数なわけか?
だとすると配列要素を1行で画面に出力もわかるんだが
>>972 正しく動きません><
int x = 30;
swap(&x,&x);
コンパイルしてない多分動く #include <stdio.h> #define MAX_ARRAY 10 void init_array(int *pa, int n); void swap(int *x, int *y); void output_array(int *pa, int n); int main(void) { /* その他変数割愛 */ int nArray[MAX_ARRAY]; init_array(&nArray[0], MAX_ARRAY); /********************************************************/ /* この辺でソートするんじゃね?勉強と思って自分で考えろ */ swap(); /********************************************************/ output_array(&nArray[0], MAX_ARRAY); return; }
void init_array(int *pa, int n) { int i; srand((unsigned)time(NULL)); for(i = 0;, i < n; i++) { *(pa + i) = rand(); } return; } void swap(int *x, int *y) { *x = *x ^ *y; *y = *x ^ *y; *x = *x ^ *y; return; }
void output_array(int *pa, int n) { int i; for(i = 0; i < n; i++) { fprintf(stdout, "結果 = %d", *(pa + i)); } fprintf(stdout, "\r\n"); return; }
978 :
972 :2007/01/13(土) 12:16:35
あとヘッダに#include <stdlib.h>も必要だった
srand()
rand()
>>974 動くわけないだろう・・・・
979 :
972 :2007/01/13(土) 12:17:28
>>974 そういう意味で言うなら
int x = 30;
int y = 20;
swap(&x,&y);
[1] 授業単元: データ構造とアルゴリズム [2] 問題文(含コード&リンク): 配列を用いてリングバッファを実現せよ。ただし、データは整数型とする。 キーボードから入力された文字により以下のような動作をする。 i : 後に続いて入力されたデータをキューの末尾に挿入。 d: キューの先頭のデータを削除。キューが空ならその旨を出力。 p: キューのデータを先頭から順番に出力。 q: プログラムの終了。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: LSI C-86 [3.3] 言語: C [4] 期限: 1月16日 [5] その他の制限: 特になし よろしくお願いします。
>>980 LSI C-86は環境ないんでうまく動くかはわからん。
#include<stdio.h>
int main(){
enum{QUEUE_SIZE = 10};
int queue[QUEUE_SIZE],pos=0,size=0,i;
char c;
while(scanf(" %c",&c)==1)switch(c){
default: printf("unknown operation '%c'\n",c);
break;case 'i':
if(scanf("%d",&i) != 1)continue;
else if(size == QUEUE_SIZE)printf("queue is full\n");
else queue[(pos+size++)%QUEUE_SIZE] = i;
break;case 'd':
if(size == 0) printf("queue is empty\n");
else pos = (pos+1)%QUEUE_SIZE , --size;
break;case 'p':
for(i=0;i<size;++i)printf("%d ",queue[(pos+i)%QUEUE_SIZE]);
printf("\n");
break;case 'q':return 0;
}
return 0;
}
982 :
RYO :2007/01/13(土) 12:58:39
最近、プログラムの研修を参加して、どうしても解かなければいけない 問題がでてきました。誰か解いてもらえないでしょうか? 自分はプログラマー超初心者で、CもC++の区別もつかないし、自分 がどの分野をやってるのかすら分かりません。 問題はPseudocode(擬似コード)を取り扱ったもので、果たしてこの スレに書いていい分野かすら分かりません。それでも、だれか優しい人 教えてちょ 問題 擬似コードを使って一から十までのランダムで決められた 一つの数字をあてるプログラムを作る。もし、プレイヤーが数字を言い当てたら ”YOU WIN!!"とスクリーン上に表示させてプログラムが終了する。 もし、プレイヤーが数字を引き当てなければ、プログラムは、プレイヤー に数字を引き当てるまで新しい数字を入力するよう尋ねる。 (注意点)プログラムは、もしプレイヤーが数字をはずした場合 その数字よりも大きいか小さいかをスクリーンに表示させ、もし プレイヤーが、数字とイコール(引き当て)た場合、"YOU WIN!!"と スクリーンに表示させる。 なので、プレイヤーが数字を引き当てなかった 場合に、プログラムがずっとプレイヤーに大きいか小さいかを尋ねる プログラムループを作成しなければいけない。 このランダムで引き当てられた数字は、モジュールですでに書かれて いるものとする。 問題 終了 IF THEN ELSE や FOR を使って表示させるみたいなん だけど、誰か教えて。たぶん、基本的なところだ思うんで。
983 :
RYO :2007/01/13(土) 13:08:13
ついでにこれも ユーザーに入力された5つの数字の平均を計算するプログラムをつくる。 最後に 数字の合計と平均をスクリーンに表示させる。ただし5つの 数字をいれるためのループを作ってくれぇいー
>>982 擬似コードといっても、いろんなものが世の中にあふれすぎていて、
どう書いていいのかまったく想像もつかない。
その擬似コードの規格を具体的かつ厳密に述べよ。
985 :
980 :2007/01/13(土) 13:14:31
>>981 動作確認しました。こちらの意図したとおりに動いてくれました。
ありがとうございます。
987 :
972 :2007/01/13(土) 14:38:02
>>983 スクリーンって言うのはコマンドプロンプトの事か?
それとも自分で作ったウィンドウ上に表示しろって事か?
988 :
972 :2007/01/13(土) 14:44:57
>>982 IF THENとかだとCOBOLとかBASIC関連だと思うんだがCで組んじゃっていいのか
擬似コードだから環境は選ばないって認識でいいのか
989 :
972 :2007/01/13(土) 14:48:06
因みに >>このランダムで引き当てられた数字は、モジュールですでに書かれているものとする。 って言うのはモジュール内で生成すればいいんだな? とりあえず飯
991 :
972 :2007/01/13(土) 14:57:55
>>983 とりあえずこれ
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i;
char useInput[256];
short total, ave;
total = 0;
ave = 0;
for(i = 0; i < 5; i++)
{
fgets(&useInput[0], sizeof(useInput), stdin);
total = total + (short)atoi(&useInput[0]);
}
ave = total / 5;
fprintf(stdout, "合計 = %d\r\n", total);
fprintf(stdout, "平均 = %d\r\n", ave);
return 0;
}
>>982 擬似コードなら日本語でちゃちゃっと書いとけばいいんでは
void swap(int *x, int *y) { if(x!=y){ *x = *x ^ *y; *y = *x ^ *y; *x = *x ^ *y; } retrun; } XORの場合って同じアドレスを排除しなきゃ駄目じゃなかったっけ?
994 :
972 :2007/01/13(土) 15:03:37
>>993 あー、なるほど
アドレス検知は考えてなかったなー
つか吉野家いってくるわ
>>991 いいんだが初心者にfgetsやらfprintfでのI/O切り替えは酷だろうw
void swap(int*x,int*y){if(x!=y)*x^=*y^=*x^=*y;} こうすりゃいいってじっちゃんが言ってた
997 :
972 :2007/01/13(土) 16:07:31
>>982 多分動く
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int ans, cmp;
char useInput[256];
srand((unsigned)time(NULL));
ans = rand() % 10 + 1;
while(1)
{
fgets(&useInput[0], sizeof(useInput), stdin);
cmp = atoi(&useInput[0]);
if(ans == cmp)
{
fprintf(stdout, "You Win!!\r\n");
break;
}
else
{
ans > cmp ? fprintf(stdout, "もっと大きい\r\n") : fprintf(stdout, "もっと小さい\r\n");
}
}
return 0;
}
998 :
972 :2007/01/13(土) 16:09:24
>>995 わかるんだが昔scanfばっか使ってて抜け出すまで苦しんだ経験があるから
いっそ最初からfgetsやら使ったほうが・・・と思ってる。
>>996 おお、そっちのほうがスマートだね
素直にメモリ使ったらあかんの? void swap(int*x,int*y) { int wk; wk=*x; *x=*y; *y=wk; } そしたらこっちもメモリ・・・・・w void init_array(int *pa, int n) { srand((unsigned)time(NULL)); while (n--) *pa++ = rand(); }
>>999 前者はテクニック使うか使わないかの問題だと思う
後者は人それぞれ組み方が違うねー
そのやり方は俺は思い浮かばなかったw
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。