1 :
デフォルトの名無しさん :
2007/11/05(月) 20:38:18
2 :
C :2007/11/05(月) 21:00:26
[1]3 [2] 数値(0:END):2 現在までの合計:2 一つ前の合計:0 a=2, b=0 数値(0:END):5 現在までの合計:7 一つ前の合計:2 a=2, b=7 数値(0:END):7 現在までの合計:14 一つ前の合計:7 a=14, b=7 数値(0:END):9 現在までの合計:23 一つ前の合計:14 a=14, b=23 数値(0:END):3 現在までの合計:26 一つ前の合計:23 a=26, b=23 数値(0:END):0 終了します。 ↑を↓の感じでお願いします。
3 :
C :2007/11/05(月) 21:01:18
#include <stdio.h> #include <stdlib.h> int main() { int a=0, b=0; int *now, *prev; /* 変数宣言、および処理を書く */ printf("現在までの合計:%d\n一つ前の合計:%d\n", *now, *prev); printf("a=%d, b=%d\n", a, b); /* 処理を書く */ } [6]6日まで C言語でお願いします
4 :
デフォルトの名無しさん :2007/11/05(月) 21:08:43
[1] 授業単元: C++ [2] 問題文(含コード&リンク): ・CPlayerクラスの定義 ・CPlayerのオブジェクトをnew演算子の4個の変数を動的に確保 ・4つの変数それぞれのm_nLifeに任意の値を入力させる ・入力された4つの変数それぞれのm_nLifeを表示する。 ・確保したオブジェクトを開放 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語: C++ [4] 期限: 2007年11月6日10:00まで [5] その他の制限:特になし よろしくお願いします
5 :
デフォルトの名無しさん :2007/11/05(月) 21:29:35
6 :
デフォルトの名無しさん :2007/11/05(月) 22:14:19
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): ニュートン法と二分法の両方を用いて、直線y=x+1/2と単位円x*x+y*y=1の交点のの近似解(小数点以下第6位まで)を求めよ。 1つのプログラムに書くこと。 二分法の初期値[a,b]=[-1,1] ニュートン法で用いる初期値は2つとも0とせよ。 ニュートン法も二分法もともに何回で収束したかがわかるようにすること。 関数へのポインタは必ず使うこと。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cのみ [4] 期限: 2007年11月6日17時
7 :
デフォルトの名無しさん :2007/11/05(月) 22:59:15
8 :
aho :2007/11/05(月) 23:48:48
>>4 問題文をちゃんと書かんかい!
まあ一応作ったルわ
まずはCPlayerクラスの定義から
class CPlayer{
int* val1;
int* val2;
int* val3;
int* val4;
public:
CPlayer::CPlayer();
CPlayer::~CPlayer();
void CPlayer::inputData();
void CPlayer::showData();
};
9 :
aho :2007/11/05(月) 23:52:01
>>8 続き
次にコンストラクタ内で動的にメモリを確保する。
CPlayer::CPlayer(){
int size = 10;
val1 = new int[size];
val2 = new int[size];
val3 = new int[size];
val4 = new int[size];
}
次は順番をちょっと変えてメモリの解放から先に
CPlayer::~CPlayer(){
if(val1){
delete[] val1;
val1 = NULL;
}
if(val2){
delete[] val2;
val2 = NULL;
}
if(val3){
delete[] val3;
val3 = NULL;
}
if(val4){
delete[] val4;
val4 = NULL;
}
}
10 :
aho :2007/11/05(月) 23:54:46
>>4 次はデータの入力の実装。
と思ったけど、面倒になったからやめる。
11 :
4 :2007/11/06(火) 00:21:38
>>5 授業を理解してないので・・・
>>8 ありがとうございます。
頑張ってみます。
12 :
デフォルトの名無しさん :2007/11/06(火) 02:56:48
前スレ
>>955 >正四面体があるとする。底面(ある一つの面)に平行な(n-1)枚の面で高さをn等分することを考える。この作業を他の面に平行な面でも行う(他の方向にもn等分する)場合、正四面体は全部で何個に分けられるか。
正四面体をn等分すると正四面体と正八面体の二種類の立体が出来て、それぞれの数は下記の通りです。
正四面体 n*(n^2+2)/3
正八面体 n*(n+1)*(n-1)/6
数学的な証明は自分でしてください。
14 :
デフォルトの名無しさん :2007/11/06(火) 09:07:49
void heikin_bunsan(int tensu[],int num){ int i; double f; double heikin; double bunsan; double goukei; double total; for(i=0;i<num;i++){ goukei=goukei+tensu[i]; } heikin=goukei/num; for(i=0;i<num;i++){ f=(tensu[i]-heikin)*(tensu[i]-heikin); total=total+f;} bunsan=total/num; printf("平均点%3.3d点\n",heikin); printf("分散%3.3d\n",bunsan); } goukeiとheikinの計算部分を間違えているようです、間違いの指摘お願いします。 もっと短縮できるところあったらそこもお願いします><
>>14 なに得意げにCの小汚いソースさらしてんだか
>>16 そういう前に綺麗なソースとやらを見せてくれ
>>15 goukeiとtotalが初期化されてない。
表示は%dじゃなくて%f。
工夫すればループは一回でできる。
void heikin_bunsan(int tensu[], int num) {
int i;
double goukei=0,total=0,heikin,bunsan;
for(i=0; i<num; i++) {
goukei += tensu[i];
total += tensu[i] * tensu[i];
}
heikin = goukei / num;
bunsan = total / num - heikin * heikin;
printf("平均点%3.3f点\n",heikin);
printf("分散%3.3f\n",bunsan);
}
>>17 やだよ。
std::stringを使えってことだから、あの小汚いソースにあるmallocやstrtokなどは不要だし、
リスト構造も不要(std::listを使えという意味じゃない)。
なにより、汚いじゃん。あれ読むのに時間を使うとしたら無駄なので、そう言ったまで。
20 :
デフォルトの名無しさん :2007/11/06(火) 16:21:50
>>19 小汚いソースや変態的ソースで回答するのがこのスレの醍醐味ですよ^^
【質問テンプレ】 [1] 授業単元:1次元配列&2次元配列&else if~&switch case文 [2] 問題文(含コード&リンク): 1つ目。生徒10人分の身長データがある。 この身長データを配列に読み込み、平均身長を計算しなさい。 また、画面に番号・身長、最後に平均身長及び最も高い人の番号と身長を表示させなさい。 なおここでいう番号とは配列番号とする。 2つ目。上のデータを、身長をキーワードにして降順にソートしなさい。 3つ目。最初のプログラムに身長の低い順に順位をつける処理を追加しなさい。 [3] 環境 [3.1] OS: Unix [3.2] gcc34 [3.3] 言語: C言語 [4] 期限: ([2007年11月06日21:00まで) [5] その他の制限: できるだけ初心者でもわかる文がいいです
>>23 身長データはテキストファイルから読み込むのですか?
>>23 に追加です・・・
入力データ:165、173、169、178、175、159、171、169、170、168
です。最初の問題の追加です。入力もれすいません
26 :
デフォルトの名無しさん :2007/11/06(火) 19:03:58
[1] 授業単元:配列の使い方、関数の使い方 [2] 問題文: (1)2行3列の行列AとBの和と差を求めよ. c(i,j)=a(i,j)+b(i,j) d(i,j)=a(i,j)-b(i,j) (2)2行3列の行列Aと3行4列の行列Bの積Cを求めよ c(i,j)=Σ(k=1~3)a(i,k)b(k,j) (3)eのx乗=1+x/1!+xの2乗/2!+xの3乗/3!+・・・ を計算するプログラムを作れ (4)これを関数として定義し、 x=0,0.1,0.2,・・・,1.0を計算せよ. また、power(e,x)と比較せよ. ただし、e=2,71828として計算せよ. [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:不明 [3.3] 言語:C++ [4] 期限:2007念11月07日11:00まで [5] その他の制限:なし
>>26 (3)と(4)、ネーピア数などを求めるプログラムは前スレ
>>427 にもあるみたいです。
#include <stdio.h>
#include <math.h>
double myexp(double x)
{
double s = 0.0;
double a = 1.0;
int n;
s += 1.0;
for (n = 1; n < 20; n++) {
a = a * x / n;
s = s + a;
}
return s;
}
int main(void)
{
double x;
printf("\t x\t myexp(x)\t exp(x)\n");
for(x=0.1;x<=1.0;x+=0.1)
{
printf("\t%2.1f\t%13.5f\t%13.5f\n", x, myexp(x), exp(x));
}
return 0;
}
[1] 授業単元:C [2] 問題文(含コード&リンク): nを入力して、次の級数の和[1+(1/2)+(1/3)+(1/4)+...+(1/n)]の値を計算して出力する。 (整数型変数と実数型変数の混合演算の結果は実数型となり、整数が頼みの演算結果は整数になることに注意せよ) [3] 環境 [3.1] OS:Unix(MacOSX) [3.2] コンパイラ名とバージョン:gcc 4.0.1 [3.3] 言語: Cにて [4] 期限: [2007年11月6日まで] [5] その他の制限:特にはないです。 当方、C言語初心者なのですが、 どうしてもわからないので支援をお願い致します。 軽く書いてみたのですが、結果が0しか返ってきません。 よろしくお願いします。
1.0にすればいいんじゃね?
30 :
デフォルトの名無しさん :2007/11/06(火) 20:34:21
#define MAX 1 #define MIN 3 int * ranking(int *n1, int *n2, int *n3, int rank) { /* rankが1なら最大値、3なら最小値を返す */ /* 関数を作成 */ } int main() { int a, b, c, i; printf("(a,b,c):"); scanf("%d %d %d", &a, &b, &c); printf("(a,b,c)=(%d,%d,%d)\n", a, b, c); printf("最大値 : %d\n", *ranking(&a, &b, &c, MAX)); printf("最小値 : %d\n", *ranking(&a, &b, &c, MIN)); }
>>28 double KyuuSuu(int n)
{
int i;
double num = 0.0;
for(i = 1; i <= n; i++)
num += (1.0/i);
return num;
}
32 :
shin :2007/11/06(火) 21:04:55
[1] 授業単元: 文字と文字列 ASCIIコード [2] 問題文(含コード&リンク): 入力された文字列中に、文字 a がいくつ含まれているか個数を表示し、 見つけた箇所に「^」を表示するプログラム。 【動作例】 文字列を入力 >> aoriunvtyuoertnoainaainAi a を4個発見しました。 文字列・・・aoriunvtyuoertnoainaainAi ^ ^ ^^ (本当は ^ が a 下にきます) [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C++ [4] 期限: 出来れば・・2007年11月7日 22:00までにお願いします
[1] 授業単元:C [2] 問題文(含コード&リンク): for( i?? ;i?? ;i?? ) { for ( j?? ;j?? ;j?? ) { printf("%d ",j); } printf("\n"); } for文の中を埋めて一行目 1 2 二行目 2 4 6 三行目3 6 9 12 四行目 4 8 12 16 20 五行目 5 10 15 20 25 30と表示させよ [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:BCC 5.5 [3.3] 言語: C [4] 期限: [2007年11月8日まで] [5] その他の制限:特にはないです。 よろしくお願いします。
34 :
shin :2007/11/06(火) 21:05:50
ここまでは作りました・・(ちなみに「a」のASCIIコードは「0x61」です) #include <iostream.h> main() { const int Max_Length = 50 ; // 入力文字列の最大値 char sentence[Max_Length] ; // 入力文字列 int count ; // 文字カウンタ // 文字列の入力 cout << "英数字のみの文字列を入力して下さい。 >>> " ; cin.getline( sentence, Max_Length ) ; // 文字数のカウント count = 0 ; while( sentence[count] != '\0'){ count++ ; }
35 :
23 :2007/11/06(火) 21:09:12
>>23 ですが、とりあえず最初の問題はできました。
#include<stdio.h>
int main()
{
int a[9],sum=0,i,j,max=0,n;
printf("身長を入力してください\n");
for(i=0;i<10;i++){
printf("%d人目の身長を入力⇒",i+1);
scanf("%d",&a[i]);
sum=a[i]+sum;
if(max<a[i]){
max=a[i];
n=i+1;
}
}
for(j=0;j<10;j++){
printf("%d番目の身長は%dcmです\n",j+1,a[j]);
}
printf("平均身長は%.2fcm 最高身長は%d番目の%dcmです\n",(float)(sum)/(j),n,max);
}
です。しかし、2番目と3番目がどうしてもわかりませんどなたかご教授ください
36 :
shin :2007/11/06(火) 21:09:52
32と34の書き込みはつながってると思ってください! おねがいします
>>31 ありがとうございましたm(__)m
完成しました。
明日の提出にも間に合いそうです。
38 :
デフォルトの名無しさん :2007/11/06(火) 21:40:03
>>33 for (i=1; i<=5; i+=1) { for (j=i; j<=i*(i+1); j+=i) { printf("%d ",j); } printf("\n"); }
//
>>32 文中のaの数をカウントするプログラム
// bcc 5.5.1 for win32
#include <iostream.h>
int main(void)
{
const int Max_Length = 50 ; // 入力文字列の最大値
char sentence[Max_Length] , dummy[Max_Length]; // 入力文字列
int count = 0, a = 0; // 文字カウンタ
// 文字列の入力
cout << "英数字のみの文字列を入力して下さい。 >>> " ;
cin.getline( sentence, Max_Length ) ;
// 文字数のカウント
while( sentence[count] != '\0'){
if (sentence[count] == 0x61){
a++ ;
dummy[count] = '^' ;
} else {
dummy[count] = ' ' ;
}
count++ ;
}
dummy[count] = '\0' ;
cout << "aは次の数だけ見つかりました : " << a << "\n" << sentence << "\n" << dummy << endl ;
}
40 :
デフォルトの名無しさん :2007/11/06(火) 22:07:50
規制でパソコンから書けないので携帯から 1)C言語 2)積算日数計算(閏年含む)リンクはつなげません 3)環境 3、1)OS Linux 3、2)不明 3、3)言語 C言語 4)期限・2007年11月7日 5)void?は使わない方向で。if 又は for 文でお願いします。 月ごとに{31,28…}と指定したと思います。閏年は{31、29…}という感じで別に指定していました。 よろしくお願いします。
//
>>23 #include<stdio.h>
int main(){
int a[10],sum=0,i,j,max=0,n,temp;
printf("身長を入力してください\n");
for(i=0;i<10;i++){
printf("%d人目の身長を入力 : ",i+1);
scanf("%d",&a[i]);
sum=a[i]+sum;
if(max<a[i]){
max=a[i];
n=i+1;
}
}
for(j=0;j<10;j++){
printf("%d番目の身長は%dcmです\n",j+1,a[j]);
}
printf("\n平均身長は%.2fcm 最高身長は%d番目の%dcmです\n\n",(float)(sum)/(j),n,max);
for (i = 0; i < 10 - 1; i++) {
for (j = 10 - 1; j > i; j--) {
if (a[j - 1] > a[j]) {
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
for(j=0;j<10;j++){
printf("%d番目の身長は%dcmです\n",j+1,a[j]);
}
}
42 :
23 :2007/11/06(火) 22:53:08
>>41 さん
これは、1番最初のやつのプログラムでしょうか?
43 :
デフォルトの名無しさん :2007/11/06(火) 23:06:21
[1] 授業単元: C [2] 問題文(含コード&リンク): int型の変数bunbo、bunshiをメンバに持つ、 構造体struct bunsuuを定義する。 2つのstruct bunsuu型の変数を引数として、 足し算、引き算、掛け算、割り算を行った結果を 戻り値とする関数をそれぞれ作成しなさい。 2つのint型を引数とし、その最大公約数を計算して 戻り値とする関数も作成し、必要に応じて利用しなさい。 struct bunsuu型の変数を出力する関数を作成しなさい。 出力は「分子 / 分母」の形で1行とする。 ただし分母が1の場合は、分子のみとする。 以上6種類の関数が作成できたら、 キーボードから2つの分数を入力し、 足し算、引き算、掛け算、割り算の計算結果を順に 分数で画面に出力するmain関数を作成しなさい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C [4] 期限: 11/8まで [5] その他の制限: 特になし
44 :
デフォルトの名無しさん :2007/11/06(火) 23:07:26
[1] 授業単元: C [2] 問題文(含コード&リンク):要素数が10のint型の配列に キーボードから数値を入力する関数を作成し (main関数の中で)呼び出しなさい。 配列はmain関数の中で宣言し、 入力を行う関数は、配列のアドレスと 配列の要素数を引数として受け取るものとする。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C [4] 期限: 11/8まで [5] その他の制限: 特になし こちらもお願いします
45 :
shin :2007/11/06(火) 23:27:35
>>39 ありがとうございました(´`)!!!!!!!!!!
[1] 授業単元:オペレーティングシステム [2] 問題文(含コード&リンク): HTTPリクエストを受け付けると、URLに記載された名前のHTMLファイルをブラウザに返す 簡単なWebブラウザをC言語を用いて作成せよ。 このWebサーバはHTTPリクエストを受け付ける毎にforkシステムコールにより新しいプロセスを生成し、 そのプロセスがURLに指定されたHTMLファイルをファイルシステムから取り出して、ブラウザに返す。 基本的には、リクエストを送りリプライを返すことができればいい。 また、結果をブラウザで表示できる程度の実装で構わない。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: cygwin [3.3] 言語: C言語 [4] 期限: 11月15日 [5] なし ブラウザに表示させることができません・・・どなたかお助けください
47 :
デフォルトの名無しさん :2007/11/07(水) 02:19:00
(x1+x2+x3+・・・xn)の2乗/N((x1)の2乗+(x2)の2乗+・・・ (xn)の2乗) を計算するプログラムってどうやって書くんですか? 教えてください!!
>>47 あなたにはプログラミングの前にテンプレの使い方を教えます。
[1] には授業名などを書いてください。
[2] には問題文を書いてください。
[3] には環境を書いてください。とくに、CかC++は重要です。
[4] には期日。
[5] にはその他を書いてください。
49 :
デフォルトの名無しさん :2007/11/07(水) 03:29:14
[1] C言語入門 [2] jain fairness index の式をC言語でプログラミングで書きなさい. (x1+x2+x3+・・・xn)の2乗/N((x1)の2乗+(x2)の2乗+・・・ (xn)の2乗) という式 [3] C言語 [4] 11月9日 [5] なし 48さんご指摘ありがとうございました! よろしくお願いします!
50 :
デフォルトの名無しさん :2007/11/07(水) 03:46:17
>>22 遅れましたがどうもありがとうございました。とっても助かりました
>>49 double f(double *x, int n)
{
double s = 0, ss = 0;
int i;
for(i=0; i<n; i++) {
s += x[i];
ss += x[i]*x[i];
}
return s * s / (n * ss);
}
>>44 #include <stdio.h>
void input_array(int *a,int *ptr)
{
printf("%d個目の数値入力\n",(*ptr)+1);
scanf("%d",(a+*ptr));
++*ptr;
}
main()
{
int a[10],ptr=0;
printf("数値を10個入力してください。\n");
while(ptr<10){
input_array(&a[0],&ptr);
}
printf("入力結果: ");
for(ptr=0;ptr<10;ptr++)
printf("%d ",a[ptr]);
putchar('\n');
return;
}
54 :
33 :2007/11/07(水) 07:40:52
>>52 >入力を行う関数は、配列のアドレスと
>配列の要素数を引数として受け取るものとする。
56 :
名無し募集中。。。 :2007/11/07(水) 09:20:23
[1] 自習 明解C++演習5_9 [2] b以上a以下の全整数の和を求める関数sumを作成せよ。 なお、bが省略されて呼び出される場合はbを1とみなして合計を求めること [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:bcc55 [3.3] 言語:C++ [4] 期限:11/7まで お願いします。
57 :
デフォルトの名無しさん :2007/11/07(水) 09:27:25
#include <iostream> using namespace std; int sum(int a){return a*(a+1)/2;} int sum(int b, int a){return a*(a+1)/2 - b*(b-1)/2;} main(){ cout<<sum(2,10); }
58 :
デフォルトの名無しさん :2007/11/07(水) 09:48:19
[1]情報処理 [2]二分法で y=x*x−5 の根をもとめる [3]C言語 LInux [4]10時半まで [5]おねがいします><
59 :
デフォルトの名無しさん :2007/11/07(水) 10:06:56
#include <stdio.h> double f(double x){return x*x-5;} main(){ double a=0,b=10,x; int i; for(i=0;i<100;i++){ x=(a+b)/2; if(f(a)*f(x)>0)a=x; else b=x; } printf("%.6f",x); }
60 :
デフォルトの名無しさん :2007/11/07(水) 10:12:10
>59 めっっちゃありがとうございます!! 何回で収束するかもできますか?><
[1]情報処理 [2]第1引数で指定したint型の先頭から、第2引数で指定した数の要素に中に、 第3引数で指定した値と一致するものがあればその要素のアドレスを、一致す るものが無ければNULLを戻り値とする関数を作りなさい。探索アルゴリズムと して番兵法を用いなさい。作成した関数のテストは、戻り値として得たアドレス に格納されている値を表示する main関数を作成して行いなさい。一致するもの がない場合には何も表示しなくてよい。 [3]c言語 [4]11/7 23:00 お願いします。
62 :
デフォルトの名無しさん :2007/11/07(水) 10:15:50
>>60 できるけど、収束はいくつぐらいだよ たとえば2乗したときに5からのずれが0.00001とか
63 :
デフォルトの名無しさん :2007/11/07(水) 10:19:01
#include <stdio.h> #define gosa 0.00001 double f(double x){return x*x-5;} main(){ double a=0,b=10,x,y; int i; for(i=1;i<100;i++){ x=(a+b)/2; y=f(x); if(y<gosa && y>-gosa){printf("%d回目の試行で収束 x=%.6f",i,x);return 0;} if(f(a)*f(x)>0)a=x; else b=x; } printf("収束しない"); }
64 :
デフォルトの名無しさん :2007/11/07(水) 10:21:52
ありがとうございました!! 条件じぶんでかえてやります><
65 :
教えてください :2007/11/07(水) 11:52:10
double bibun_f(double a, double b,double c, double d) { double f; f = 1 / (1 - mu * pow(cos(d - c), 2)) * (mu * ga * sin(d) * cos(d - c) + mu * pow(a, 2) * sin(d - c) * cos(d - c) - ga * sin(c) + mu / lambda * pow(b, 2) * sin(d - c)); return(f); } ここでエラーが error C2018: 文字 '0x81' は認識できません。 と error C2018: 文字 '0x40' は認識できません。がでるのですが・・・どうすればいいのでしょうか??
66 :
名無し募集中。。。 :2007/11/07(水) 11:55:15
>>65 エラーメッセージを読めばわかるように、全角スペースが混ざっている。
あと、宿題以外は基本的にはスレ違いだから、以後は別のところで聞いてね。
>>61 int *search(int *p, int n, int x) { /* destructive */
for (*(p+n) = x; *p != x; ++p);
return p;
}
main() {
int i, array[10+1]; /* +1 is for sentinel */
for (i = 0; i < 10; ++i) {
array[i] = i % 7;
printf("%p : %d\n", &array[i], array[i]);
}
printf("%d found at %p\n", 4, search(array, 10, 4));
}
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): N×N のチェス盤が与えられる( 左下を (1,1) とする )。 (x1,y1) にビショップを置いたとき、(x2,y2) に移動するまでの 最小手数を表示せよ。ただし移動できない場合は -1 と表示せよ。 [3] 環境 [3.1] OS: 指定なし [3.2] コンパイラ名とバージョン: 指定なし [3.3] 言語: どちらでも可 [4] 期限: 今日中 [5] その他の制限: 特になし
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 同じ形をした正方形のブロックが N 個与えられる (N ≦ 1000)。 各ブロックには自分自身の重さ weight[k] と、 自分の上に乗せられる重さ load[k] が設定されている。 縦に積める最大のブロックの個数を求めよ。 例: N = 5, (weight, load) = (19,15), (7,13), (6,7), (6,8), (1,2) → 4 [3] 環境 [3.1] OS: 指定なし [3.2] コンパイラ名とバージョン: 指定なし [3.3] 言語: どちらでも可 [4] 期限: 今日中 [5] その他の制限: 特になし
>>70 >同じ形をした正方形のブロックが N 個与えられる (N ≦ 1000)。
違う形をした正方形があったら怖い。
同じ大きさと言う解釈でいいのかな?
>>71 そういうことです。形(大きさ)が問題になって積めない、ということはないとします。
>>71 重さ考えるだけでいんだから大きさはどうだっていいだろ
それより
>正方形のブロック
二次元か
>>69 #include<stdio.h>
int main(void){
int x,y,x1,y1,x2,y2;
printf("x1 y1 x2 y2 = ");
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
x=x1>x2?x1-x2:x2-x1;
y=y1>y2?y1-y2:y2-y1;
if(x==0&&y==0)printf("0");
else if(x==y)printf("1");
else if(x%2==y%2)printf("2");
else printf("-1");
printf("\n");
return 0;
}
76 :
デフォルトの名無しさん :2007/11/07(水) 13:45:49
このスレも遂に99代目、次100代目ですね。
[1] 授業単元: C言語演習V
[2] 問題文(含コード&リンク):
前回の講義にてプログラム実行時の引数を表示するプログラムを作成した。
(実行例)
>ensyu1 file1
argv[0]:ensyu1
argv[1]:file1
>ensyu1 file1 file2
argv[0]:ensyu1
argv[1]:file1
argv[2]:file2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5223.txt 今回はプログラムが実行時にファイルを1つだけ引数として取るような
プログラムを作成したい。
そこで引数が違う場合には「Usagi: ./ensyu1 filename」と出力させ、
プログラムを終了するように修正せよ。
(実行例)
>ensyu1 file1
argv[0]:ensyu1
argv[1]:file1
>ensyu1 file1 file2
Usagi: ensyu1 filename
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin gcc
[3.3] 言語: C言語
[4] 期限: 11月8日(木)PM12時までにお願いします。
[5] その他の制限: ファイルの標準入出力まで習いました。
兎じゃなくて、普通はUsageですよ。
78 :
デフォルトの名無しさん :2007/11/07(水) 13:50:40
>>76 ×「そこで引数が違う場合には「Usagi: ./ensyu1 filename」と出力させ、 」
○「そこで引数が2つ以上の場合には「Usagi: ensyu1 filename」と出力させ、」
でした./で実行はLinuxですね。(汗)
79 :
デフォルトの名無しさん :2007/11/07(水) 14:03:53
80 :
デフォルトの名無しさん :2007/11/07(水) 15:27:01
すみませんが、お願いします。 [1] 授業単元: 音響工学 [2] 問題文(含コード&リンク): 正弦波に対してガウス窓を掛け、テキストファイルに出力せよ。窓間は任意。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C++ [4] 期限:2007年11月8日まで [5] その他の制限:特にありません。 よろしくお願いします!
82 :
80 :2007/11/07(水) 16:57:10
一応読みましたけど、至らない点ありましたか?
ガウス窓の説明とその描画方法を書くように
>>83 知らないんなら無視すればいいんじゃないかなー
やる気あるならググれば一発だしー
描画しろなんてどこにも書いてないしー
同意。それは兎も角、テキストファイルへの出力形式については質問させてくれ。 1行1データでずらっとならべればいいのか?
>>80 gnuplot使えば簡単にできるってことでいいのか
87 :
80 :2007/11/07(水) 19:46:33
はい。 1行1データです。 ガウス窓でぐぐってもよくわからなかったので、お願いしに来た次第なのです。 すみませんが、できればお願いします。
88 :
80 :2007/11/07(水) 19:47:48
//
>>80 ガウス窓
// gnuplot でやるには plot sin(x)*exp(-x*x/0.03*0.03)
#include <iostream>
#include <math>
#include <fstream>
#define pi 3.141592
int main (void) // window function - Gauss window
{
double x, sigma=0.03;
std::ofstream window("window.csv");
for (x=-pi; x<pi; x+=0.01){
window << x << ", " << sin(x) * exp(-x*x/sigma*sigma) << std::endl;
}
return 0;
}
90 :
80 :2007/11/07(水) 20:15:28
ありがとうございます! これでなんとかなるかもです! ご迷惑おかけしました。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): cat コマンドの作成 fgetc()とfputc() 関数の使用 標準出力とすること。ファイル名を指定しない場合は標準入力 [3] 環境 [3.1] OS:Linux [3.2] gcc 3.4 [3.3] C [4] 期限:無期限 [5] その他の:ポインタあたりからあやふやです よろしくお願いします。
>[5] その他の:ポインタあたりからあやふやです 自己紹介はしなくておk
[1] プログラミング [2] y=ax*x+b*x+cをfor文を使って計算しなさい。係数a b cは自分で入力 xの始めの値、終わりの値、増やす値も自分で入力できるようにしなさい。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: gcc3.4 [3.3] 言語: Cでおねがいします。 [4] 期限: 明日(11月8日まで) [5] その他 #include<stdio.h> main() { int i, x, y, a, b, c, d, e, f; printf("y=x*x*a+b*x+cを計算します。\n"); printf("aとbとcを入力して下さい。 --->"); scanf("%f %f %f",&a, &b,&c); printf("Xの始めの値を入力して下さい。 --->"); scanf("%f",&d); printf("Xの終わりの値を入力して下さい。--->"); scanf("%f",&e); printf("Xを増やす値を入力してください。 --->"); scanf("%f",&f); for(x=d; x<=e; x+f){ y=(x*x*a)+(b*x)+c; ここまでは自力でやったんですけどその先がまったく分かりません。 よろしくおねがいします。
95 :
デフォルトの名無しさん :2007/11/07(水) 22:02:18
>>53 コードありがとうございます。
所で・・・
答えとして
入力された分数が 1 / 2 と 2 / 3 のとき
1 / 2 + 2 / 3 = 7 / 6
1 / 2 − 2 / 3 = - 1 / 6
1 / 2 × 2 / 3 = 1 / 3
1 / 2 ÷ 2 / 3 = 3 / 4
こうなるんですが、マイナスの所だけ違うんですがどこを修正すれば
↑のようになりますか?
>>95 int gcd(int a,int b)
{
int c,tmp;
if(a<0) a=-a;
if(b<0) b=-b;
if(b>a){
tmp = b;
b = a;
a = tmp;
}
/* ユークリッドの互除法で最大公約数を計算 */
while(a%b!=0){
c = a % b;
a = b;
b = c;
}
return b;
}
符号をチェックしてなかった。gcdをこれに入れ替えてください。
あと、無意味な比較があったのでそれも外してます。
97 :
93 :2007/11/07(水) 23:17:20
98 :
デフォルトの名無しさん :2007/11/07(水) 23:57:15
>>93 基本的にはあと y の値と、必要なら x の値を表示するだけだろう
それに加えて x,y,a〜f の型と、for のカッコの中身を修正するんだ
100 :
デフォルトの名無しさん :2007/11/08(木) 00:11:29
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 画像を上下反転させる [3] 環境 [3.1] OS: Mac [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cです [4] 期限: かなり急いでます、一時ぐらいまで・・・ [5] その他の制限: とりあえず基本的なこと(ポインタ、構造体等)はやりました。 簡単な解説とかあれば嬉しいです。よろしくお願いします。
二次元配列の上下の要素を入れ替えるやり方でいいんじゃないの?
102 :
デフォルトの名無しさん :2007/11/08(木) 00:28:09
それがわからないんです・・・。 ネットで探してみましたが、プログラムの内容がさっぱりわかりません。
単純な二重ループじゃない?
104 :
デフォルトの名無しさん :2007/11/08(木) 00:51:16
105 :
デフォルトの名無しさん :2007/11/08(木) 01:01:06
文字列の配列変数とか使いますか?
[1] 授業単元: プログラミング技術 [2] 問題文(含コード&リンク): 行列Aとベクトルxの積y=Axを求めるプログラムを作成したい。 ・行列nと列数mを入力させる。 ・n×x(nかけるx)の行列Aのメモリを動的に確保する。 ・ベクトルx,yのメモリを動的に確保する。 ・A[0][0]からA[n-1][m-1]までの数値を1つずつ入力させる。 ・ベクトルxの要素x[0]からx[m-1]の数値を入力させる。 ・計算結果yの要素y[0]からy[n-1]を出力する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin [3.3] 言語: C [4] 期限:11/11(日)
>> 106ーーー実行結果ーーー ./ensyu3 行(n)の数は?2 列(m)の数は?3 ------ A[0][0]=1 A[0][1]=2 A[0][2]=3 A[1][0]=4 A[1][1]=5 A[1][2]=6 ------ x[0]=1 x[1]=2 x[2]=3 ------ y[0]=14 y[1]=32 $
そこまで書いてあるなら順番どおりにやるだけじゃん。
110 :
デフォルトの名無しさん :2007/11/08(木) 01:10:18
すみません、自分は100です。 色々定義しないとダメですよね・・・。 呼び出し関数を使わなくてもforを使えばいいのでしょうか?
111 :
デフォルトの名無しさん :2007/11/08(木) 01:30:02
>[4] 期限: かなり急いでます、一時ぐらいまで・・・ 1時くらいまでといってる割には、ノンビリしてるな。 「1時くらいまでには、私は寝たい」から急いでるだけだろ? こんなやつに、教える必要ないぞ。
>>110 #define SWAP(type, a, b) {type c;c=a;a=b;b=c;}
for(y=0;y<height/2;y++)
{
for(x=0;x<width;x++)
{
SWAP(data_t, data[y][x], data[height-1-y][x]);
}
}
>>113 ありがとうございます。
もう出来ないのかと思ってました。ほんとにありがとうございます。
>>91 #include<stdio.h>
void file_output(FILE *fp_in, FILE *fp_out){
int moji;
while((moji=fgetc(fp_in))!=EOF) fputc(moji, fp_out);
}
int main(int argc, char *argv[]){
FILE *fp=stdin;
int i;
if(argc==1) file_output(fp, stdout);
for(i=1;i<argc;i++){
fp=fopen(argv[i], "r");
if(fp==NULL) continue;
file_output(fp, stdout);
fclose(fp);
}
return 0;
}
【質問テンプレ】 [1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): 入力した文字列(行単位)n個をソートして 昇順に表示するプログラムを作成してください。 ただし同じ文字列は1回だけ表示します。 また、nは1024以下とし、文字列は1024文字までします。 <補足> >以下を加えてください。 #include<stdio.h> #include<string.h> [3] 環境 [3.1] OS:Linux [3.2] わかりません [3.3] C言語 [4] 期限: 11月10日 [5] その他の制限: 文字列の関数 strlen(s):sの長さを数える strcmp(s1,s2):2つの文字列s1,s2を比較し、辞書的に大きい、等しい、小さいに対して 正数、0、負数を返す。 strcpy(s1,s2):文字列s2をs1にコピーし、s1のアドレスを返す。 strcat(s1,s2):文字列s2をs1の後に付け、s1のアドレスを返す。
117 :
デフォルトの名無しさん :2007/11/08(木) 11:52:35
【質問テンプレ】 [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 整数除算 a/b (a,b は正または負の整数)を計算する関数 int fdivide(int a, int b )を作成せよ。 a と b とを入力、 fdivide(a,b )を計算して出力するmain 関数を作成し、 プログラムと実行結果を提出せよ。 a/b は a がb未満になるまでaから b を繰り返し 引き続け、その回数を記憶することで実現させる。 [3] 環境 [3.1] OS: (WindowsXP) [3.2] コンパイラ名とバージョン: (bcc) [3.3] 言語: (C++) [4] 期限: ([11月10日]まで) [5] その他の制限:C++ の割り算演算子の利用は禁止 よろしくお願いします
#include <stdio.h> #include <stdlib.h> unsigned fdivide(unsigned a, unsigned b) { unsigned sum = 0; for (unsigned ic = 1; ic < a; ++ic) { sum += b; if (sum > a) return ic - 1; } return a; } int main(int argc, char ** argv) { printf("%d\n", fdivide(atoi(argv[1]), atoi(argv[2]))); return 0; }
>>116 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define WORD_LEN_MAX 1024
int cmp(char **a, char **b){
return strcmp(*a, *b);
}
int main(int argc, char *argv[]){
char buf[WORD_LEN_MAX+1+1], **word=NULL;
int len, wordnum=0L, i;
while(fgets(buf, sizeof(buf), stdin)!=NULL){
len=strlen(buf);
if(len>0 && buf[len-1]=='\n') buf[len-1]='\0';
word=realloc(word, sizeof(*word)*(wordnum+1));
word[wordnum++]=strdup(buf);
}
qsort(word, wordnum, sizeof(*word), cmp);
for(i=0;i<wordnum;i++) printf("%s\n", word[i]);
for(i=0;i<wordnum;i++) free(word[i]);
free(word);
return 0;
}
122 :
デフォルトの名無しさん :2007/11/08(木) 16:40:29
123 :
デフォルトの名無しさん :2007/11/08(木) 17:18:56
>>117 #include <stdio.h>
int fdivide(const int a, const int b )
{
int numerator = a;
int denominator = b;
int result = 0;
int flg;
if(numerator < 0)
numerator *= -1;
if(denominator < 0)
denominator *= -1;
while(numerator >= denominator){
numerator -= denominator;
result++;
};
if((a > 0 && b > 0) ||(a < 0 && b < 0))
flg = +1;
else
flg = -1;
return result*flg;
}
int main()
{
printf("fdivide(6,2) = %d \nfdivide(1,3) = %d \nfdivide(6,-2) = %d \nfdivide(-6,2) = %d \n"
"fdivide(-7,2) = %d \nfdivide(7,-3) = %d \nfdivide(10,1) = %d \n"
,fdivide(6,2),fdivide(1,3),fdivide(6,-2),fdivide(-6,2),fdivide(-7,2),fdivide(7,-3),fdivide(10,1));
return 0;
}
124 :
デフォルトの名無しさん :2007/11/08(木) 18:21:56
[1] 授業単元: データ構造(アルゴリズム) [2] 問題文:下記 [3] 環境 [3.1] OS: LINUX [3.2] 言語: C [4] 期限: 11月14日まで] [5] その他の制限: 特にありません どうぞよろしくお願いします
125 :
デフォルトの名無しさん :2007/11/08(木) 18:24:49
126 :
デフォルトの名無しさん :2007/11/08(木) 18:25:10
124続き #include <stdio.h> #include <malloc.h> struct tfield { int num[20]; struct tfield *pointer; } ; struct tfield *talloc(void); int main(void) { struct tfield *head, *p; head = NULL; while (p = talloc(), scanf("%d", p -> num)!= EOF){ p -> pointer = head; head = p; } p = head; while(p != NULL){ printf("%d\n", p -> num); p = p -> pointer; } } struct tfield *talloc(void) {return((struct tfield *)malloc(sizeof(struct tfield))); } 上記を、二つのリストをソートした新たなリストを表示するように改変せよ。です
128 :
デフォルトの名無しさん :2007/11/08(木) 19:51:08
【質問テンプレ】 [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): n変数の連立1次方程式をガウスの消去法で解くプログラムを作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] gcc 3.4 [3.3] 言語: C) [4] 期限: 明日 [5] その他の制限:配列まで習いました。
[1] 授業単元:プログラミング練習 [2] 問題文(含コード&リンク): あるテキストファイル「memo.txt」にexampleとかかれているとして そのファイルを読み込み、その書かれている単語の1文字ずつ見ていき 母音なら1と、子音なら0と表示するプログラムをつくれ。 exampleなら1010001と表示するように [3] 環境 [3.1] OS:Linux [3.2]GCC [3.3] C言語 [4] 期限: 11月10日
>>129 #include <stdio.h>
#include <ctype.h>
main()
{
int c;
FILE *fp;
if((fp=fopen("memo.txt","r"))==NULL){
printf("file can't open.\n");
return;
}
while((c=fgetc(fp))!=EOF){
switch(c){
case 'a': case 'A': case 'i': case 'I': case 'u':
case 'U': case 'e': case 'E': case 'o': case 'O':
putchar('1');
break;
default:
/* 何がきても0を出力するのならputchar('0');break;だけでいい */
if(isalpha(c))
putchar('0');
else
putchar(' ');
break;
}
}
putchar('\n');
fclose(fp);
}
132 :
131 :2007/11/08(木) 23:39:48
134 :
デフォルトの名無しさん :2007/11/09(金) 00:17:40
どなたか
>>127 よろしくお願いします。どうもすみません
>>133 int binarysearch(int v){
/* ここにプログラムを追加 */
int l = 0, r = N-1,x;
while( l<=r )
{
x = (l + r) / 2;
printf("%d %d %d \n",l,x,r);
if( v == a[x] ) return 0; /* 見つかった */
if( v > a[x] ) l = x + 1;
if( v < a[x] ) r = x - 1;
}
return -1;
}
int interpolationsearch(int v){
/* ここにプログラムを追加 */
int l = 0, r = N-1,x;
while( l<=r )
{
x = l + (v - a[l]) * (r - l) / (a[r]-a[l]);
if(x < 0) return -1;
if(x >= N) return -1;
printf("%d %d %d \n",l,x,r);
if( v == a[x] ) return 0; /* 見つかった */
if( v > a[x] ) l = x + 1;
if( v < a[x] ) r = x - 1;
}
return -1;
}
>>135 一応な……
v>a[x]の場合、xの位置のデータは答えよりも小さいから、それよりも右に位置する(x+1)を新しいlにする。
v<a[x]の場合、xの位置のデータは答えよりも大きいから、それよりも左に位置する(x-1)を新しいlにする。
137 :
デフォルトの名無しさん :2007/11/09(金) 00:59:36
int binarysearch(int v){ /* ここにプログラムを追加 */ int mid; int left = 0; int right = 9; while(left < right){ mid = (left + right)/2; if(a[mid] < v) left = mid + 1; else right = mid; }; if(a[left] == v) return left; return -1; }
>>127 しかしC++でやるんならコンテナがあるんだからqueueの実装なんかやるだけ無駄、
空いた時間で、queueを使った応用をしたほうが宿題として合格だな
queueの応用問題を考えられないのは教師に欠陥があるからだ
>>138 どうもありがとうございました。
助かりました
[1] 授業単元:C言語入門(第7週ファイルの入出力) [2] 問題文(含コード&リンク): 簡単なファイル暗号化・復号化のプログラムを作成せよ。 今回の暗号化は、改行以外の文字のアスキーコードに1を足し、復号化はその逆を行うこととする。 最初の引数が暗号化(c)と復号化(d)のどちらかを決定し、次が入力ファイル名、最後が出力ファイル名を示す。 引数が間違っている場合は"error"を表示する。 (実行例) $ cat input.txt(読み込むファイルの中身確認) Hello! Good bye... $ ./q2-3 c input.txt output.txt $ cat output.txt Ifmmp" Hppe!czf/// $ ./q2-3 d output.txt newinput.txt $ cat newinput.txt Hello! Good bye... ヒント:ファイルからfgetcで1文字づつ読み込み、int型の変数に入れる。 アスキーコードに1足し、fputcでファイルに書き出す。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: GCC [3.3] 言語: C [4] 期限: 11/11(日) [5] その他の制限: 暗号化(c)、復号化(d)の判別には「!strcmp」を使ってください。
143 :
デフォルトの名無しさん :2007/11/09(金) 11:06:18
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 正規分布に従って、乱数を発生させるプログラムを作成しなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5 [3.3] 言語: C++ [4] 期限: 11/9 18時 [5] その他の制限: よろしくお願いします
#include <stdio.h> #include <string.h> void encodeDecode(int codeOffset, FILE * fpIn, FILE * fpOut) { int ch; while ((ch = fgetc(fpIn)) != EOF) { fputc(ch == '\n' ? ch : ch + codeOffset, fpOut); } } int main(int argc, char ** argv) { int codeOffset; FILE * fpIn; FILE * fpOut; if (argc > 3) goto error; if (strcmp(argv[1], "c") == 0) { codeOffset = 1; } else if (strcmp(argv[1], "d") == 0) { codeOffset = -1; } else { goto error; } fpIn = fopen(argv[2], "r"); if (fpIn == NULL) goto error; fpOut = fopen(argv[3], "w"); if (fpOut == NULL) goto error; encodeDecode(codeOffset, fpIn, fpOut); return 0; error: fprintf(stderr, "error\n"); return 1; }
>>144 ×argc > 3
○argc <= 3
>>143 上限と下限は指定しないのか?
あと、出力方法は?
147 :
デフォルトの名無しさん :2007/11/09(金) 12:23:52
>>146 >上限と下限は指定しないのか?
とりあえず、指定されてないので後から変えられるようにしてもらえますか?
あと、マイナスが出ないようにしてもらえると助かります。
>出力方法は?
数字が表示されればいいと思います。
やろうと思ったらC++かよ('A`)
>>144-145 期限まで待つつもりでしたが、お早い回答ありがとうございます。
変数名なども分かりやすく書いてもらったみたいで感謝しております。
150 :
129 :2007/11/09(金) 14:47:59
[1] 授業単元:プログラミング練習 [2] 問題文(含コード&リンク): 129とほとんど同じなんですけど、 main(){ char str1[10]=”four”; /*char型の配列”four”に母音が含まれれば1、子音が含まれれば0と表示する*/ } を作れ。 3] 環境 [3.1] OS:Linux [3.2]GCC [3.3] C言語 [4] 期限: 11月10日
151 :
イトキン ◆lq89E2SwMI :2007/11/09(金) 15:09:16
[1] 授業単元: オペレーティングシステム [2] 問題文(含コード&リンク): コマンドufsinfoを実装し、ソースコードとレポートを提出せよ。 ufsinfoの概要 ufsinfoは、ファイルシステムから次の情報を取り出す。 ○マジック番号(fs_majic) ○ディレクトリ中のファイル名一覧 ◆ディレクトリを引数に指定した場合 ○データブロックの番号の一覧 ◆そのファイルの中身を格納するブロック ufsinfoの書式 ○ufsinfo パス名 スペシャルファイル名 ◆パス名 ファイルシステム中のファイルへの絶対パス ◆スペシャルファイル名 ファイルシステム全体を表すファイル名
152 :
イトキン ◆lq89E2SwMI :2007/11/09(金) 15:10:24
[3] 環境 [3.1] OS: mac OS [3.2] わかりません [3.3] 言語: C言語のみ [4] 期限: 12月5日 [5] その他の制限: mmapは使用禁止 スペシャルファイルでなく、イメージファイル上の動作でok 二重間接まで動作チェックせよ。 Cのみで350行程度でかけるみたいです。 問題文、が長過ぎて、何をここに書けばいいのかまよってしまいました。 問題について聞きたいことがあれば、レスお願いします。
153 :
デフォルトの名無しさん :2007/11/09(金) 15:40:01
期限過ぎてもいいんで、誰か143お願いします。
>>143 //ボックス=ミューラー法で100個の正規乱数を生成するテスト
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<time.h>
int main()
{
int i;
double u1,u2,n1,n2;
srand(time(NULL));
for(i=0;i<50;i++){
u1=(double)(rand())/RAND_MAX;
u2=(double)(rand())/RAND_MAX;
n1=sqrt(-2*log(u1))*sin(2*M_PI*u2);
n2=sqrt(-2*log(u1))*cos(2*M_PI*u2);
std::cout <<n1<<" "<<n2<<std::endl;
}
return 0;
}
155 :
◆a3LMU3qR26 :2007/11/09(金) 16:36:08
1] 授業単元:アルゴリズム [2] 問題文:巡回セールスマン問題を解くプログラムを作成しなさい。 今回は、あらゆる場合を全通り調べる方法で解を求めるプログラムでかまいません。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc [3.3] 言語: Cのみ [4] 期限: できるだけ早く [5] その他の制限: たいていあり
156 :
◆a3LMU3qR26 :2007/11/09(金) 16:38:30
>>155ですけど for(i = 0; i < n; i++) used[i]=NO; perm(0); return(0); } void perm(int d) { int i,j; int b[MAXN]; int s = adj[a[0]][a[n-1]]; if(d == n){ for(i = 0; i < n-1; i++){ s+=adj[a[i]][a[i+1]]; } } else { for (i = 0; i < n; i++) { if (used[i] == NO) { a[d] = i; used[i] = YES; perm(d + 1); used[i] = NO; } } } } このプログラムを利用したいのですが これだけだとただの列挙になってしまいます 最小値だけをだすにはどうしたらいいでしょうか?
157 :
153 :2007/11/09(金) 18:46:49
>>154 ありがとうございます。
できれば、マイナスの値が出ないようにしていただきたいんですけど、無理ですか?
でてきた正規分布を正軸に好きなだけ平行移動させりゃいいじゃん 分散は変わらないから形は変わらないだろ
形っていうのは乱数の母集団分布な
何故マイナスの値を出さないようにしたいのか?その理由気になる。
>>106-107 順番がきましたら、こちらもよろしくお願いします。
期限は日曜日までありますので、土曜日が期限の人を優先していただいて構いません。
正確な期限は11/11(日) PM5時までです。
よろしくお願いします。
[1] データ構造 [2] 問題文(含コード&リンク): n個の頂点からなるグラフを、辺の両端の頂点に同じ色を塗らないようにし、すべての頂点を彩色するのに必要な色数を最小化する。 また、頂点iに接続する辺の数を頂点iの次数とよぶ。以下のアルゴリズムで作るように。 (1) @頂点の次数を降順にソートする。 A頂点1に色1を割り当てる B頂点i=2、...nについて、隣接する頂点に割り当てられていない最小の色番号を頂点iに割り当てる。 (2)頂点iの隣接頂点に彩色された異なる色数を頂点iの飽和次数とする。 @最大次数の頂点に色1を割り当てる A飽和次数が最大の頂点を選ぶ。そのような頂点が複数ある場合は、 未彩色の部分グラフにおいて最大次数の頂点を選ぶ。 B選んだ頂点に彩色可能な最小の色番号を割り当てる C全頂点が彩色済みならば終了。そうでないならAにもどる。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年11月10日24:00まで(出来れば21:00 [5] その他の制限: 関数と変数の定義 #include <stdio.h> #define TRUE 1 #define FALSE 0 #define MAX_N 2000 /*変数*/ int n; /*頂点数*/ int m; /*辺数*/ double x[MAX_N],y[MAX_N]; /*各頂点の座標*/ int a[MAX_N][MAX_N]; /*隣接行列*/ int color[MAX_N]; /*色*/ int max_color; /*最大の色番号*/
164 :
163 :2007/11/09(金) 21:34:07
問題例データの読み込み input_fire = fopen(argv[1],"r"); fscanf(input_fire,"%d %d\n",&n,&m); /*頂点数と辺陬の読み込み*/ for(i = 0;i < n;i++){ fscanf(input_file,"%1f %1f\n"&(x[1]),&(y[i])); /*頂点データの読み込み*/ } for(i = 0;i < n;i++){ /*隣接行列の初期化*/ for(j = 0;j < n;j++){ a[i][j] = 0; } } for(i = 0;i < m;i++){ fscanf(input_file,"%d %d\n",&k1,&k2); /*辺データの読み込み*/ a[k1][k2] = a[k2][k1] = 1; /*隣接行列の生成*/ } for(i = 0;i < n;i++){ color[i] = -1; /*解の初期化*/ } 説明文に意味がわからないところがあったらご指摘ください。お願いします。
169 :
デフォルトの名無しさん :2007/11/09(金) 22:46:25
#include <stdio.h> #include <math.h> double f(double x){ return 1/sqrt(1+pow(x,4)); /*求める定積分*/ } int main(void){ double x,sum=0,h; printf("h:"); scanf("%lf",&h); for(x=2*h;x<1;x+=2*h){ /*範囲指定*/ sum+=(f(x) + 4*f(x-h) + f(x-2*h)) * h/3; /*シンプソンの公式*/ printf("%f %f\n",sum,x); } }
170 :
デフォルトの名無しさん :2007/11/09(金) 22:47:19
for(x=0;x<1-2*h;x+=2*h){ /*範囲指定*/ sum+=(f(x) + 4*f(x+h) + f(x+2*h)) * h/3; /*シンプソンの公式*/ printf("%f %f\n",sum,x);
>>162 >>答える奴は自分がやりたい問題をやるだけ
と言いつつプログラム作ってくれた
>>162 さんに感謝。自分の課題解いてくれてありがとうございます。
わざわざプログラムコード中に説明文まで入れてもらって本当に感謝しています。
m(_ _)m
172 :
aho :2007/11/10(土) 01:06:59
>>142 これ以外に何かあればいってちょ!
encrypt()内がちょっと汚いから書き直してね。
void encrypt(char** argv){
int tmp; //文字読み込みバッファ
FILE* fp = fopen(argv[2], "rb");
if(!fp){
printf("file open error!\n");
return;
}
FILE* fout = fopen(argv[3], "wb");
if(!strcmp(argv[1], "c")){ //暗号化
while((tmp = fgetc(fp)) != EOF){
if(tmp == 0x0A){ //改行コード
fputc(tmp, fout);
continue;
}
tmp += 0x01;
fputc(tmp, fout);
}
}
else if(!strcmp(argv[1], "d")){
while((tmp = fgetc(fp)) != EOF){
if(tmp == 0x0A){
fputc(tmp, fout);
continue;
}
tmp -= 0x01;
fputc(tmp, fout);
}
173 :
aho :2007/11/10(土) 01:09:33
>>172 }
fclose(fout);
fclose(fp);
}
int main(int argc, char** argv){
if(!strcmp(argv[1],"c") && !strcmp(argv[1],"d")){
printf("argument error!\n");
return 0;
}
encrypt(argv);
return 0;
}
もっと細かい引数のチェック(argcでも判断, 拡張子判断etc)もした方がいいかもね。
疲れたので寝ます
>>168 それはもちろん知っているが、問題の一行目には最小化すると書かれている
177 :
153 :2007/11/10(土) 03:10:07
>>176 このアルゴリズムでは最小化できないらしいので、アルゴリズムのほうを優先するみたいです。
よくみたら『この近似解法で作成せよ』と書いてありました。申し訳ございません。
178 :
デフォルトの名無しさん :2007/11/10(土) 06:18:17
誰かいますか?
179 :
デフォルトの名無しさん :2007/11/10(土) 06:25:27
います
180 :
デフォルトの名無しさん :2007/11/10(土) 06:26:41
イター!!! お願いします俺の宿題やってくださいませ
どれどれ。
182 :
デフォルトの名無しさん :2007/11/10(土) 06:32:14
ありがとうございます!!!! えーと 数独の問題をグラフ彩色問題に変換せよ ってもんだいなんですけど どうやらこれをアルゴリズムで説明させる問題らしいんです
183 :
デフォルトの名無しさん :2007/11/10(土) 06:38:08
縦横と正方形に同じ数字が入ってはいけないっていうことだろう 数字をいろと言い換えればいいだけだろう
184 :
デフォルトの名無しさん :2007/11/10(土) 06:40:27
やっぱそれでいいんですよね! 俺もそれ以外に思い浮かばなくて・・・ 数独アルゴリズムの数字を色って書き換えるだけでいいですよね?
185 :
デフォルトの名無しさん :2007/11/10(土) 06:58:06
解くアルゴリズムは作らないと行けないのか?
186 :
デフォルトの名無しさん :2007/11/10(土) 07:01:30
16個のヒントの物は作れるか?
最初にヒントとして配置する数字の数は、24〜32個程度が多く、これ以上だと解くのが簡単になる。
逆にそれ以下にするのは作者の技量も必要になってくる。
問題として成立する初期配置の数字の最少個数はまだ結論が出ていないが、
対称形の問題では18個(初出・パズル通信ニコリ31号 1990年)、
非対称の物では17個(初出・パズラー187号 1997年)のものが確認されている。
http://ja.wikipedia.org/wiki/%E6%95%B0%E7%8B%AC
187 :
デフォルトの名無しさん :2007/11/10(土) 07:05:40
解くアルゴリズムはググッてわかりました ただ、彩色問題とからめた記述がなかったのでどうしようかとおもいまして・・
188 :
デフォルトの名無しさん :2007/11/10(土) 07:06:38
方針としては、縦か横か、正方形で可能な形を全て埋めてみるといいとおもう 例えば正方形の可能数は9! 通りある 9カ所埋めてみて縦が平気か調べていく
189 :
デフォルトの名無しさん :2007/11/10(土) 07:14:21
参考になりました! こんな朝早くにありがとうございました
190 :
デフォルトの名無しさん :2007/11/10(土) 07:24:27
最大でも、9*9! とおりしかないから、全配置を決定しておいてから、初期配置を満たすものをサーチすればいいと思う 9 * (9 !) = 3265920だから解けているからどうかを記録するには3MBくらいだ
191 :
デフォルトの名無しさん :2007/11/10(土) 07:26:18
1行目が 123456789 だとすると、2行目には上の数字はこないから減らせる
192 :
デフォルトの名無しさん :2007/11/10(土) 07:50:49
1から9の順列を昇順に求めるプログラム #include <iostream> using namespace std; main(){ int a,b,c,d,e,f,g,h,i,chk[9]={1,1,1,1,1,1,1,1,1},N=0; char **jretu=new char* [9]; for(a=0;a<9;a++) jretu[a]=new char [362880]; for(a=0;a<9;a++){ chk[a]=0; for(b=0;b<9;b++){ if(chk[b]==0)continue; chk[b]=0; for(c=0;c<9;c++){ if(chk[c]==0)continue; chk[c]=0; for(d=0;d<9;d++){ if(chk[d]==0)continue; chk[d]=0; for(e=0;e<9;e++){ if(chk[e]==0)continue; chk[e]=0; for(f=0;f<9;f++){ if(chk[f]==0)continue; chk[f]=0; for(g=0;g<9;g++){ if(chk[g]==0)continue; chk[g]=0; for(h=0;h<9;h++){ if(chk[h]==0)continue; chk[h]=0; for(i=0;i<9;i++){ if(chk[i]==0)continue; jretu[0][N]=a;jretu[1][N]=b;jretu[2][N]=c;jretu[3][N]=d; jretu[4][N]=e;jretu[5][N]=f;jretu[6][N]=g;jretu[7][N]=h;jretu[8][N]=i; N++; }chk[h]=1; }chk[g]=1; }chk[f]=1; }chk[e]=1; }chk[d]=1; }chk[c]=1; }chk[b]=1; }chk[a]=1; }cout<<N;}
193 :
デフォルトの名無しさん :2007/11/10(土) 08:03:31
32bit変数に、3bitずつデータ入れていけば列に同じ数字があるかどうかはXOR演算で出来るな
194 :
デフォルトの名無しさん :2007/11/10(土) 08:05:36
やっぱり駄目だ 結局9回のループか演算(ifなど)がいるな
195 :
デフォルトの名無しさん :2007/11/10(土) 08:09:10
123456789 251498736 987654321 に縦方向に同一文字があるかどうかはどう判定する?
>>182 演習問題1は、
>数独(ナンバープレイス) をグラフ彩色問題に変換せよ
だからアルゴリズムで説明させるってどういう意味?
>(a) あいているマスに1〜9 までのどれかの数字を入れる
>(b) 縦・横の各列および太線で囲まれた3 × 3 のブロックに同じ数字が入ってはいけない
(b)の定義を以下のように読み替える。
(1)3×3の小ブロック内のマスは全て異なる数字であること
(2)あるマスに対して、同じx、yを持つマスは全て異なる数字であること
特定のマス集合に所属するマスが全て異なる数字である事は、
任意のマスを一つ取り出した場合に、そのマス以外の他のマス集合に所属するマスと数字が異なるということと同じである。
これをグラフで表せば、それぞれのマスをグラフの頂点とした完全グラフにおいて、
任意の辺においてその両端の数値が異なることと同義である。
これはグラフ彩色問題の定義である。
というか、お前
>>166 だろ?演習問題2ぐらい自分でやれよ。
198 :
デフォルトの名無しさん :2007/11/10(土) 09:11:44
数独で16個の初期配置で解けるか調べるプログラム
199 :
デフォルトの名無しさん :2007/11/10(土) 09:12:24
>>198 「問題として成立する」と「解けるか」は意味が違うだろ、常識的に考えて。
なんなら初期配置0個でも解けるぞ。
201 :
198 :2007/11/10(土) 09:51:13
>>200 解ける = 配置が一意的に求まる 解けている全配置を求めるプログラム書いたが 二つ目が出てこない 時間がかかりすぎる
#include <iostream>
using namespace std;
main(){
int G[9][9],R[9][9],S[9][9];
int x,y[81],m,n,l,d,cnt;
for(n=0;n<81;n++)y[n]=0;
for(m=0;m<9;m++)for(n=0;n<9;n++)G[m][n]=R[m][n]=S[m][n]=1;
d=cnt=0;
for(;;){
x=y[d]; m=d/9; n=d%9; l= 3*(m/3) + n/3;
if( G[m][x]+R[n][x]+S[l][x]==3 ){
if(d<80){G[m][x]=R[n][x]=S[l][x]=0; d++; y[d]=0;continue;}
cnt++;for(int k=0;k<81;k++){if(k%9==0)cout<<endl;cout<<y[k]<<" ";};d--;}
ST:
if(y[d]<8)y[d]++;
else{
if(d==0){cout<<cnt;return 0;}
d--;
x=y[d]; m=d/9; n=d%9; l= 3*(m/3) + n/3;
G[m][x]=R[n][x]=S[l][x]=1;
goto ST;}
}}
202 :
198 :2007/11/10(土) 10:08:16
回転や反転の同一視、数字の同一視などを考慮しても全解答を求めるのは困難そうだ もし全配置が決定できれば、初期配置に対してそれを含む解答がただ一つがどうか調べるだけだ
203 :
デフォルトの名無しさん :2007/11/10(土) 11:03:59
***** **** *** ** *
204 :
203 :2007/11/10(土) 11:04:43
投稿ミスですorz
205 :
203 :2007/11/10(土) 11:14:23
下の図形をfor文で作るのですが・・ よくわかりませんorz ***** **** *** ** * 他スレでヒント貰ったのですが・・ 俺の頭じゃ無理だったみたいです・・
206 :
203 :2007/11/10(土) 11:15:26
なんだか一個づれてますが ピラミッド型です。。本当にすみません
>>203 ピラミッドを作るなら各段'*'の数は奇数のような気が
偶数の段があると上手くいかないような
*******
*****
***
*
>>205 #include <stdio.h>
int main()
{
int i,j;
for(i=5;i>0;i--){
for(j=0;j<5-i;j++)
printf(" ");
for(j=0;j<i;j++)
printf("*");
printf("\n");
}
return 0;
}
209 :
203 :2007/11/10(土) 11:30:59
宿題見る限りでは偶数も入ってるんですょね・・ 多少いびつな形かもしれません
>>209 すると、問題が不明瞭だな。「ピラミッド型」が未定義だ。
これまでの回答で満足できないなら問題をきちんと確認してこい。
211 :
203 :2007/11/10(土) 11:37:17
>208 ぉぉーー どうもです;;
>>175 ですけどこれじゃあちょっとわかりにくいので
50回移動すると考えれば、考えやすいのかなと。
無制限にこの確率で移動してendにたどり着くことなんて無限にあるんじゃないかと
おもってしまった。
213 :
デフォルトの名無しさん :2007/11/10(土) 12:55:04
0は空マス これ何秒で解ける? 000 000 061 000 200 007 000 940 000 087 000 000 006 000 400 000 000 230 000 078 000 200 006 000 490 000 000
542 783 961 839 261 547 761 945 823 387 524 619 126 839 475 954 617 238 615 478 392 278 396 154 493 152 786 1秒もかからんわ
215 :
デフォルトの名無しさん :2007/11/10(土) 18:09:05
[1] 授業単元:C言語
[2] 元のファイルslist.c:
http://www.uploda.org/uporg1105430.txt.html 自分で途中まで作ったやつ:
http://www.uploda.org/uporg1105431.txt.html [3] 環境
[3.1] OS:Linux (家ではWindowsでMinGW+MSYS+XEmacs)
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:11月14日
[5] その他の制限:特にないです
[問題文]
課題:slist.c の改良
1.print_person関数を単方向リストを辿るように変更せよ。(自分なりに解決済み)
2.次の機能を実装せよ。
・標準入力から一行ずつ名前と年齢を読み込む
・名前と年齢はカンマ(,)で区切る
・"foo,19"など
・単方向リストに格納して出力
3.その他(授業でヒント「単方向リストの反転」が与えられ、自分なりに解決済み)
[問題文終わり]
自分で作った方はperson_input()の中が全然できてません。
次に続きます。
216 :
215 :2007/11/10(土) 18:11:48
構造体に名前と年齢を標準入力して、単方向リストで出力をするプログラムを考えています。 標準入力の際に名前と年齢は「tanaka,20」のように一行にするよう指示されています。 ヒントとして以下が与えられました。 char buf[256] ; char *name; int age; while (fgets (buf, sizeof(buf), stdin)) { char *sep = rindex (buf, '\n'); if (!sep) continue; *sep = '\0'; sep = rindex (sep, ','); if (!sep) continue; *sep = '\0'; name = buf; age = atoi (++sep); } また使用している構造体pは struct person { char *name; int age; struct person *next; }; です。このヒントを用いて一行の標準入力から適切に構造体に入れ、 単方向リストに格納するにはどうしたらいいでしょうか。 while文の中がややこしくて終了の仕方も分からないのでよろしくお願いします。
218 :
163 :2007/11/10(土) 18:53:17
>>197 ありがとうございます。
あと(2)のほうを、どなたかお願いします。
誰かいますか?
公にはいないことになっている
>>192 char **jretu=new char* [9];
for(a=0;a<9;a++) jretu[a]=new char [362880];
となっているが
char jretu[9][362880];
とすればいいだけじゃないか?
というかこれは一体何をするプログラムなんだ。
>char jretu[9][362880]; >とすればいいだけじゃないか? やってみろw
224 :
デフォルトの名無しさん :2007/11/10(土) 21:24:19
等比数列の和を求めるソースを教えてください 初項a,公比r、項数nとする
>>224 無能でも無能なりにテンプレを埋めてください
226 :
デフォルトの名無しさん :2007/11/10(土) 21:32:28
224です 教えてください(涙)
>>225 折角このオレでも答えられそうな問題なのに、そうつれなくするなよ
>>224 >>1 に質問(しつもん)テンプレっていうのが書(か)いてあるから、よく読(よ)むんだよ
読(よ)めない漢字(かんじ)は辞書(じしょ)を引(ひ)くといいよ
228 :
aho :2007/11/10(土) 21:34:14
>>215 struct person{
char name[20]; //char*では'q'の影響を受けるため
int age;
struct person* next;
};
struct person* addList(char* name, int age, struct person* head){
struct person* list;
/* メモリ確保 */
if((list = (struct person*)malloc(sizeof(struct person))) == NULL){
printf("malloc error!\n");
return NULL;
}
strcpy(list->name, name);
list->age = age;
list->next = head;
head = list;
return head;
}
229 :
aho :2007/11/10(土) 21:35:14
>>228 printf("type 'q' to exit\n");
while(fgets(buf, sizeof(buf), stdin)){
/* 改行コードを取り除く */
char* sep = rindex(buf,'\n');
if(!sep)
continue;
*sep = '\0';
if(!strcmp(buf, "q"))
break;
/* カンマまでをbufに格納 */
sep = rindex(buf, ',');
if(!sep)
continue;
*sep = '\0';
name = buf;
age = atoi(++sep);
head = addList(name, age, head);
}
何かあれば言ってちゃぶだい!
230 :
デフォルトの名無しさん :2007/11/10(土) 21:36:29
>>226 #!/usr/local/perl
$a = <STDIN>;$r = <STDIN>;$n = <STDIN>;
print $a*$n if($r == 1);print $a*(1-$r**$n)/(1-$r) if($r != 1);
232 :
デフォルトの名無しさん :2007/11/10(土) 21:46:45
質問テンプレってどこにあるんですか? 直接とべるようにしてくれたらうれしいです
233 :
デフォルトの名無しさん :2007/11/10(土) 21:52:50
等比数列の初項aと公比rと項数nをキーボードから入力して、それらを画面に表示して最後にそれらの総和を表示する。 ただし、a,rは実数とする
234 :
215 :2007/11/10(土) 21:55:25
>>228 struct person{
char name[20]; //char*では'q'の影響を受けるため
int age;
struct person* next;
};
これはプログラム最初の6行目を書き直せということでしょうか?
addList()が何をしててmain内でどうすればいいのか分かりません。
宿題を書き込んだ人がこのスレの流れをみてるんだけど 難易度高いやつからくそ低い宿題まで書き込まれるんですね。。。
>>232 俺が適当にテンプレを埋めて置く、間違ってる所は指摘しろ
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
等比数列の初項aと公比rと項数nをキーボードから入力して、それらを画面に表示して最後にそれらの総和を表示する。
ただし、a,rは実数とする
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: BCC
[3.3] 言語: C
[4] 期限: 2007年11月11日零時零分零秒
[5] その他の制限: 普通に作ってってね。簡単すぎるからって
ふざけて物凄いコード書かないでね。
>>236 #include<stdio.h>
int main(void){
double a, r, an, sum;
int i, n;
printf("等比数列の初項 a (実数) を入力して下さい : ");
scanf("%lf", &a);
printf("等比数列の公比 r (実数) を入力して下さい : ");
scanf("%lf", &r);
printf("等比数列の項数 n (整数) を入力して下さい : ");
scanf("%d", &n);
printf("a=%g r=%g n=%d\n", a, r, n);
an=a;sum=0.0;
for(i=0;i<n;i++){
sum+=an;
an*=r;
}
printf("sum=%g\n", sum);
return 0;
}
238 :
aho :2007/11/10(土) 22:20:42
>>234 addList()については以下のページを参照。わかりやすくかいてある。
http://www9.plala.or.jp/sgwr-t/c/sec15-5.html --構造体のメンバnameの型変更について--
while()内にif(!strcmp(buf, "q"))
ていう部分があるでしょ?
そこはbufが"q"だったらループを抜けるってこと。
ここまではOKっすよね?
この後の文の
name = buf;
が厄介なのである。
nameの先頭ポインタにbufの先頭ポインタを代入している。
これをaddList()内でstrcpyの代わりにやることが出来ない。
nameはbufのポインタを参照しているから、bufが変わればnameも一緒に変わってしまう。
説明下手でごめんちゃい。
239 :
デフォルトの名無しさん :2007/11/10(土) 22:20:43
巡回セールス問題を解くプログラムを順列を用いて書きたいのですけど for(i = 0; i < n; i++) used[i]=NO; perm(0); return(0); } void perm(int d) { int i,j; int b[MAXN]; int s = adj[a[0]][a[n-1]]; if(d == n){ for(i = 0; i < n-1; i++){ s+=adj[a[i]][a[i+1]]; } } else { for (i = 0; i < n; i++) { if (used[i] == NO) { a[d] = i; used[i] = YES; perm(d + 1); used[i] = NO; } } } } これだけだとただの列挙になってしまいます 最小値だけをだすにはどうしたらいいでしょうか?
240 :
aho :2007/11/10(土) 22:22:15
>>235 その通り。
その中から暇人達がやりたい問題を選んでやるわけなのだよ、明智君。
242 :
215 :2007/11/10(土) 22:29:06
やりたい問題だけなのか。。。 175なんて理解不能な問題だしたおれってアホだな。。。 上の部分だけならなんとか計算できるレベルなのに 下にもあってしかも上と移動するなんてありえないな。。。 どう書いていけばいいのかわからないんだよね。。。
244 :
aho :2007/11/10(土) 22:32:52
>>175 なんて問題すら見えないんだが…
余程のエスパーでないと解きようも無い
246 :
175 :2007/11/10(土) 22:52:39
249 :
175 :2007/11/10(土) 23:26:17
増えただけで考え方は全く同じ
何かこれ有効グラフの最大流と最小カット問題みたいだな
>>246 行列につっこめれば、ただの積ですむのに……
253 :
175 :2007/11/10(土) 23:42:31
上だけなら行列につっこめばいんだけど 下が邪魔なんですよ。
259 :
175 :2007/11/11(日) 00:21:33
260 :
215 :2007/11/11(日) 00:33:21
261 :
215 :2007/11/11(日) 00:36:10
246ですけどもうひとつ付け足しでいいですかね?
グラフって楽しいね
>>256 でんつーだーい
BigNumberとBigNumberNodeの両方でフリーリスト使うようにするとか書かなきゃ
これじゃどっちかだけフリーリストを使って書くかもよ?
なんにせよ全部の問題やるとかなり長いので明日までにはやってられないと思うけど
つかフリーリストの構造がわからないんじゃあフリーリスト使わないで書いてみればいいのに
>>266 ちょwww またでんつーだーいかよwwww
>>267 今回は5%3年生のま科だな
ちょっと上は7%4粘性のか科だったはず
正直お前らもうちょっと頑張れと
>>268 つーか、もとの問題文でも上と下は別要素で扱えってなってるの?
激しくクソなんだが。
271 :
215 :2007/11/11(日) 01:30:41
>>265 ありがとうございます!
うちのコンパイラ(msys)では実行されませんでしたが学校でコンパイルしてみます。
person_free()微妙に変わってましたがさらに手を加えたほうがいいですか?
>>271 ^Zって書いてるけど、ctrl+Dで代用。
Windows用の豆知識な。
273 :
◆wFVK8h9bmM :2007/11/11(日) 01:33:11
[1] 授業単元: 関数、ポインタ変数 [2] 問題文(含コード&リンク): −− 断熱圧縮過程における温度・圧力の計算 −− 初期温度 T0、初期体積 V0、初期圧力 P0 の空気を、 シンリダー中で圧縮比 E (= V0/V) にまで断熱圧縮するときの体積 V、温度 T、圧力 P を計算する関数をつくる。 1) 関数では、初期温度、初期体積、初期圧力と圧縮比を与え、この条件における温度、圧力、体積を求める。 体積は戻り値とせよ(したがって、温度と圧力はポインター変数となる)。 2) 上記関数を用いて、初期値 T0 = 273.15 °K、V0 = 1.0 m^3、P0= 9.80×10^4 P に対する、E=1,2,3,4,5 における値を出力せよ。 3) 計算結果を次のように表示する。 HomeWork5 19.11.24 K3B55 山田太郎 ----- 計算条件 ----- 初期体積 V0 = 1.00 (m^3) 初期温度 T0 = 273.15 (K) 初期圧力 P0 = 9.80×10^4 (P) ----- 状態変化(計算結果) ----- 圧縮比 E 体積 V 温度 T 圧力 P 1. 1000.00 273.15 98000. 2. 500.00 360.42 258623. 3. 333.33 423.89 456242. 4. 250.00 475.58 682511. 5. 200.00 519.98 932790. ↓続く
上と下で区別しないといけないので。 たとえば 上がABBAC と 下がDABCの計算とか 上がBA と 下がADACADBCの計算をできるようにしたいんで。
275 :
◆wFVK8h9bmM :2007/11/11(日) 01:33:41
参考: 空気を断熱圧縮するときの体積 V、圧力 P と絶対温度 T の間には、PVκ=一定、PV=RT (R:気体定数) の関係がある。 これより、V=V0/E、T=T0Eκ-1、P=P0Eκ の関係が得られる。ただし、κは比熱比 (= cp/cv) であり、その値は 1.4 である [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:不明 [3.3] 言語:C [4] 期限:H19年11月5日 [5] その他の制限:関数、ポインタ変数を使って作るそうです。 よろしくお願いします。
>>276 自分の力量からして区別しないといけないかとおもってました。すみません。
別要素で扱わなくてもいいです。
上がABBAC と 下がDABCの計算とか
上がBA と 下がADACADBCの計算をできるようにできれば。
>>275 公式をもう一度確かめてもらえませんか?おかしな結果になります。
>>279 具体的になんの気体かを書いたほうが良いのでは?
気体→液体のときにかかるエネルギーとか、
なぜか温度が-273度を下回るとか、
そういう計算が出てきちゃうから
>>273 公式が違うような気が
T=T0*E^(κ-1)
P=P0*E^κ
計算結果も変な気が
何で圧縮比1つまり体積が変化いてないはずなのに
V0=1.0m^3の空気が1000.00m^3になってるの?
282 :
デフォルトの名無しさん :2007/11/11(日) 11:27:07
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 80〜120の数値を正規乱数で発生させるプログラムを作成しなさい。 平均100・標準偏差0.1とする。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5 [3.3] 言語: C++ [4] 期限: 11/12 12時 [5] その他の制限: よろしくお願いします
283 :
◆wFVK8h9bmM :2007/11/11(日) 11:28:34
機嫌損ねて減点とかもありえそうだから困る。
286 :
◆wFVK8h9bmM :2007/11/11(日) 12:45:40
>>284 はい。まず質問してみます。 返事が返ってきたらまた書き込ませてもらおうと思います。
病苦 借金苦 精神疾患 絶望 鬱+借金苦 死にたいだけ 自分が要らないから。 いても仕方が無い。他の人が必要としても、私は必要ではない 消滅したいから 今持っているものを失うのが怖い 生きる希望がなぃ 生きてる意味を見出せないから 生きていて三'::::::............... .....::::::`y,. 皆にキモがられる・将来に対する漠然 とした不安ナ:::::::::::::::::::::::::::::::::::::::::::::ヾ 鬱 僕の存在はみんなに不快感を与えるだけだ から「死ねV::::::::::::::::_{{ ({∫∬ノノjヾ:::::{ に耐えられない 恋 誰にも必要とされていない 脳の 片隅から ナ::::::::::::::i`__,,,,,,,ァ_ _,,,,,_ t;;:ヌ しするとしたら、支払い苦 過食症 親 配偶者の死 疲れた イヘ::::::(ヾ~!,ャt、 !'''i ィtン )=f }fが嫌だから。 解離性同一障害で、別の人格に 体を乗っi {t)テ" ヘ' '___,イ ヽ_/ 介' じゃないから ここに載っている物から一つだけは ムリだけrヘ_,j|!' /ー--''! |'不明でごめんなさい) 人間が嫌い。人間はどこ まででも/| | /二ク !から。そんな生き物と上っ面だけとはいえ、 付き合/ { ! 、 ヾニン ノ。 かゆいから 幸せなときに死にたい 毎日毎日 疑問が| | ! \ _,,./だしても疑問はなくならない、それならばある日生きる ことをやめるか丶\ `__>-ー´ると告げられても、そうかと思うだけだから 今の日本 は腐ってるから 辛い かゆい 人生つかれたから 自分が世界一かわいいから 金がな いから 一度死に際を経験して生きる意味を見出したい 野球部だから 知らない 生き る事自体が矛盾の繰り返しだから(自分の意思で生まれて来ないのに自分の意思で 生きて行く) 帰りたいから 身内が殺人を犯したから、その罪滅ぼしに 変わりはてた顔 自殺が自分にできる唯一の復讐だから そもそも生きている感覚が無かったし、今も無 いので、不問。 差別に耐えられない 今後受ける肉体的苦痛を回避するため 暇つぶし (生きるのに退屈しか感じなくなった 別に死にたくない 体の障害のため 鬱&スロット依 存症 生きてても金食いつぶすだけ 死んだらどうなるんかなぁと 離婚 母親の裏切り、 恐怖 家にいるのが苦痛。受験のことを考えたり…将来に希望がない。親が勉強の事
288 :
デフォルトの名無しさん :2007/11/11(日) 14:14:07
[1] 授業単元:C++ [2] 問題文:シーザー暗号(文字をA-Zの順に、一定数シフトすることで暗号化する。例えば、Return to Romeは、3文字シフトでUhwxuq wr Urphとなる。) で書かれたファイルを解読し、解読文を表示するプログラムをつくれ。 条件: 1.ファイルの中で暗号化されているのは、アルファベットのA-Z(大文字)とa-z(小文字)のみである。 2.空白、ピリオド、コンマ、セミコロン、コロンは、暗号化はされていないが、解読文のアウトプットを表示するとき、正しく表示すること。 3.ファイルの中で最も頻繁に現れるアルファベットが、“e”であるという事実に頼り、シフト数を計算せよ。 [3] 環境 [3.1] OS: Win [3.2] コンパイラ名とバージョン:DevC++ [3.3] 言語: C++ [4] 期限: 2007年11月16日まで。 [5] その他の制限: 標準ライブラリのみ使用可能。Cのクラスは使用不可。 よろしくお願いします。
>>273 #include <stdio.h>
#include <math.h>
int main(void)
{
double p, v, r, t, kappa;
double p0, v0, t0;
int e;
p0 = 9.80e4, v0 = 1.0, t0 = 273.15;
r = p0*v0/t0;
kappa = 1.4;
printf("----- 状態変化(計算結果) -----\n");
printf("圧縮比 E 体積 V 温度 T 圧力 P\n");
for(e = 1; e <= 5; e++){
v = v0/e;
p = p0*pow(v0, kappa)/pow(v, kappa);
t = p*v/r;
printf("%d %.2f %.2f %f\n", e, v*1000, t, p);
}
return 0;
}
元気ですかー?
ちょとsYレならんしょこれは・・?
ここって何人くらいで作業してるの?
>>292 確か前集計したとき、20人だったような……
[1] 授業単元:プログラム演習 [2] 問題文:等比数列の初項aと公比rと項数nを入力して、それらの総和を表示する。ただしa、rは実数値とする [3] 環境 [3.1] OS:Windows [3.2] gcc [3.3] 言語: C [4] 期限: 11月12日 03:00 [5] その他の制限 よろしくお願いします
296 :
◆EcwVYA3Joo :2007/11/11(日) 17:43:12
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク): キーボードから1〜20までの任意の整数を10個入力する。 さらにもう一つ入力し、最後に入力した値が、始めに入力した10個の整数の中に存在するか存在しないかを調べて、その結果を表示するプログラムを作成せよ。 ※例 1〜20までの整数を10個入力してください。 1 9 11 19 2 3 7 6 15 10 入力した値は 1 9 11 19 2 3 7 6 15 10 です。 探す値(1〜20)を入力してください。:11 11は入力値にあります。 探す値(1〜20)を入力してください。:18 18は入力値にありません。 [3] 環境 [3.1] OS: Windows [3.3] 言語:C言語 [4] 期限:2007年11月11日19:10まで [5] その他の制限: よろしくお願いします。
297 :
デフォルトの名無しさん :2007/11/11(日) 17:45:24
[1] 授業 C言語上級 [2] 結果を出力できるようにプログラムを準備してください. 入力ファイルフォーマット: source-node destination-node packet-loss-rate a b 0.3 a c 0.1 . . z w 0.9 Step1: 二行目からデータを読み込みます.例えば,node a から node bまで のパケット損失率0.3から最後までに読むこと.ノードペア毎のパケット損失率 を記録する. ※ 下記変数が必要 char *node_pair_name[1000]; //ノードペア名を記録する,行ごとは一記録と します.何行があるならば,何個の記録がある.後で使う. double packet_loss_rate[1000];//ノードペア毎に記録する, Step2: 読み込んだデータpacket_loss_rateをJI関数f(double *x, int n)に 渡して,JIを計算します. Step3: JI出力 以上のプログラムを組み込んでください. [3] C言語 [4] 11月13日まで JI関数はすでにできているので気にしなくて大丈夫です。 よろしくお願いします。
>>294 自己解決..?
for(x=0;x<1-h;x+=2*h){
sum+=(f(x) + 4*f(x+h) + f(x+2*h)) * h/3;
printf("%f %f\n",sum,x);
}
>>296 #include <stdio.h>
#define N 10
int main( int argc, char ** args ){
int a[N]={0}, i, o;
printf( "1〜20までの整数を10個入力してください。\n");
for ( i = 0; i < N; ++i ) scanf( "%d", &a[i]);
printf( "入力した値は " );
for ( i = 0; i < N; ++i ) printf( "%d ", a[i]);
printf( "でし。\n" );
for (;;) {
printf( "探す値(1〜20)を入力してください。:" );
scanf( "%d", &o );
for(i=0;i<N;++i) if ( a[ i ] == o ) break;
if ( i != N ) printf( "%d は入力値にあります。\n", o );
else printf( "%d は入力値にありません。\n", o );
}
return 0;
}
たまってるキューはどれくらい?
>>300 ありがとうございます。
起動出来ませんでしたが…
>>295 #include<stdio.h>
double geoSeries(double init, double ratio, unsigned int nth)
{
size_t ix = 1;
double res = init;
while( ix != nth )
{
res *= ratio, res += init;
++ix;
}
return res;
}
int main(void)
{
printf("%lf\n",geoSeries(1.0,2.0,1));
return 0;
}
[1] 授業単元: アドバンスドプログラミング [2] 問題文(含コード&リンク): (1) 最大で10 行10 列の要素取り扱える行列A に対して下記機能を満足するプログラムを作成せよ。 @ main 関数内で3行4列の行列A にキーボードから、要素データを入力する。 A @の後、行列の形式としてA を表示する。 B Aの後、行列A の各要素の先頭アドレスを行列形式で表示する。 注意:入力データは、double 型とする。 (2) 最大で10 行10 列の要素取り扱える行列A,B,C,D に対して下記機能を満足するプログラムを作成せよ。 @ 3 行3列の行列A にデータを入力する。 A 行列A の各要素2倍した行列B を生成する。 B 行列A の転置行列を行列Cとして生成する。 C 行列Aと行列Cの積を行列D に生成する(行列Dは、どんな性質を持った行列か?)。 (3) 最大で10 行10 列の要素取り扱える行列A に対して下記機能を満足するプログラムを作成せよ。 @ 3 行3列の行列A にデータを入力する。 A 行列A を表示する。 B 行列A の3行目を行列A の2行目に加え合わせる。(例えば、21 31 a + a を21 a に代入することを意味 する) C 行列A を表示する。 (4) (1),(2),(3)に対して、各機能の関数を作成して、プログラムのモジュール化を図りなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: マイクロソフトビジュアルスタジオ2005のコマンドプロンプト [3.3] 言語: C [4] 期限: 2007年 11月12日 午前9時 [5] その他の制限: 特にその他の制限は無いですが出来るだけわかりやすくしてもらえるとうれしいです このスレに書き込むのは初めてなので、何か至らないところがあれば指摘してもらえると助かります
>>303 double geoSeries(double init, double ratio, unsigned int nth)
{
double res = init;
while( --nth != 0 ) res = res * ratio + init;
return res;
}
306 :
◆EcwVYA3Joo :2007/11/11(日) 21:25:25
>>300 起動出来ました。
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):1〜100の範囲の整数の乱数値を持つ要素数100の配列から、
キーボードで入力した1〜100の範囲ま整数地を探索し、入力値と同じ値が配列に含まれるか調べて、
その探索結果を表示するプログラムを作成する。
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C
[4] 期限:2007年11月11日22:40まで
[5] その他の制限:
すみませんが宜しくお願いします。
しかしプログラミングって授業多いな
308 :
デフォルトの名無しさん :2007/11/11(日) 21:56:46
>>307 そりゃあ、授業内容がプログラミングを習ってるんだから、授業名「プログラミング」が多いのは当然かと。
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): =======datalist.txt========= 1st:yamada 2st:okamoto 3st:uchida 4st:kondou =========================== のファイルを1st:、2st:などを取り除いて 名前だけをchar型配列にいれて表示せよ。 [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] C [4] 期限:11月12日くらい よろしくお願いします
>>306 #include <stdio.h>
#include <stdlib.h>
#define NOTFOUND (-1)
int find( int ar[], size_t l, int t ){
size_t i;
for (i=0;i<l;i++) if ( ar[ i ] == t ) break;
return (i!=l)?(int)i:NOTFOUND;
}
int main( void ){
int ar[100],i,t;
srand(time(NULL));
for (i=0;i<100;i++) ar[i]=rand()%100 + 1;
/*for (i=0;i<100;i++) printf("%d ",ar[ i ]); puts("");*/
while(1){
do{scanf("%d",&t);}while(!( t>0 && t<101 ));
puts( find ( ar, 100, t )==NOTFOUND ? "Not Found.":"Found");
}
return 0;
}
311 :
309 :2007/11/11(日) 22:17:28
:とその左の部分を取り除くって形でいいです
312 :
デフォルトの名無しさん :2007/11/11(日) 22:41:17
宿題なんですが [1] 授業単元: プログラミング演習 [2] 問題文: 整数型のデータ(サイズは200*200)を読み込み、輝度値を線型に変換(y=ax+b)した上でのプログラム。 ただしa,bはargv,argcを利用する。 さらに、上のプログラムを読み込み、指定の範囲を切り出して出力するプログラムを書け。 暇な人、お願いします。ついでにargcとargvについて教えて頂けるとうれしいです。 [3] 環境 [3.1] OS:WINDOWS [3.3]言語:C言語 [4] 期限:11月13日
313 :
デフォルトの名無しさん :2007/11/11(日) 22:52:36
>>309 #include<stdio.h>
main()
{
int i=0,j,k;
char line[1000],name[4][20];
FILE *fp;
if((fp=fopen("datalist.txt","r"))==NULL){
printf("file can't open.\n");
return;
}
while(fgets(line,1000,fp)!=NULL){
for(j=0;line[j]!=':';j++);
for(j++,k=0;line[j]!='\n';j++,k++)
name[i][k]=line[j];
name[i][k]='\0';
i++;
}
for(i=0;i<4;i++)
printf("%s\n",name[i]);
fclose(fp);
return;
}
>>313 (3)
#include<stdio.h>
#include<string.h>
void put_rstring(const char str[const])
{
size_t len = strlen( str ) + 1;
while( len != 0 )
putchar(str[--len]);
return;
}
>>313 (1)
int str_char(const char str[const], const char c)
{
char *p = strchr( str, c );
return p != NULL ? p - str : -1;
}
317 :
163 :2007/11/11(日) 23:27:14
>>313 (2)
void put_string(const char str[const])
{
if(str[0] != '\0')
{
printf("%c\n",str[0]);
put_string(&str[1]);
}
return;
}
再帰よりループのほうがいいか void put_string(const char str[const]) { size_t idx = 0; while( str[idx] != '\0' ) printf("%c\n",str[idx++]); return; }
>>312 >[2] 問題文: 整数型のデータ(サイズは200*200)を読み込み、輝度値を線型に変換(y=ax+b)した上でのプログラム。
輝度値ってなに?
というかどういう宿題なのかもう少し詳しく。
>>309 これじゃだめ?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *getFileName(char str[])
{
char *p = strstr(str, "st:");
return p != NULL ? p+3 : str;
}
int main(int argc, char *argv[])
{
FILE *fp;
char buffer[BUFSIZ];
if( argc != 2 || (fp = fopen(argv[1], "r")) == NULL ) return EXIT_FAILURE;
while( fgets(buffer, sizeof(buffer)/sizeof(char), fp) != NULL )
printf("%s",getFileName(buffer) );
return EXIT_SUCCESS;
}
323 :
312 :2007/11/12(月) 00:04:19
問題はそのまま書いたものです。 プログラミング初心者なので輝度値を線型に変換(y=ax+b)とかの意味もわからない状態です; 一応200*200の画像を出力するプログラムまでできたんですが。。でもこの場合画像がないと出力できないですよね? 200*200の画像をC言語で作ることできますか?
324 :
309 :2007/11/12(月) 00:09:17
>>323 そりゃできるだろうけど、作っても意味ないだろ。
>プログラミング初心者なので輝度値を線型に変換(y=ax+b)とかの意味もわからない状態です プログラミング初心者は関係ないし,言い訳にするな
2stに噴いた
330 :
デフォルトの名無しさん :2007/11/12(月) 01:20:55
g++?
>>332 糞コードじゃなくて問題文を全文あげろよ
334 :
デフォルトの名無しさん :2007/11/12(月) 06:06:50
[1] 授業単元:アルゴリズム [2] 問題文:巡回セールスマン問題を解くプログラムを作成しなさい。 今回は、あらゆる場合を全通り調べる方法で解を求めるプログラムでかまいません。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc [3.3] 言語: Cのみ [4] 期限: 15日 [5] その他の制限: たいていあり まじおねがいします
>>334 問題文が不足しています
#include<stdio.h>
int main(void){
printf("調べた\n");
return 0;
}
336 :
デフォルトの名無しさん :2007/11/12(月) 06:19:51
まず、地区分けするんだ 沖縄、東京、北海道、福岡など その地区から巡回したらいい
337 :
デフォルトの名無しさん :2007/11/12(月) 06:23:36
mとnの距離を、d(m,n)とするとnとの距離が10以内のものなどを都市として分類する 都市どおしの距離にすれば簡単になる
338 :
334 :2007/11/12(月) 07:18:53
すでに入力されたn個の整数のうちから選んだk個の整数の和の最小値を求めよ
という問題を全順列を使ってプログラムしたらどんなのになりますか?
これが分かれば
>>334 ができるんですけど・・・
for(i = 0; i < n; i++) used[i]=NO;
perm(0);
return(0);
}
void perm(int d)
{
int i;
if(d != n){
for (i = 0; i < n; i++) {
if (used[i] == NO) {
a[d] = i;
used[i] = YES;
perm(d + 1);
used[i] = NO;
}
}
}
}
↑全列挙のプログラム
339 :
デフォルトの名無しさん :2007/11/12(月) 07:44:28
半径rの中に入っている町は、最大2r離れている 他の地区への距離が2r以上になるようにrを設定して分割すればよい
>>338 338 の問題について全順列を使うのは相当無駄な気がするが、
全順列を求めて先頭の k 個を選んだものと考えればいい。
>>329 自分でやってみてもなかなかできずに途方にくれていたところでした
本当にありがとうございます!
[1] 授業単元: プログラミング演習 [2] 問題文:画像で指定の範囲を切り出して出力するプログラムを作れ。 [3] 環境 [3.1] OS: Windows [3.3] 言語: (C/C++/) [4] 期限: 14日まで お願いします
344 :
デフォルトの名無しさん :2007/11/12(月) 10:56:20
要素数5のint型配列datを用意し、適当に数値を入力する。 各要素の数値個「*」を表示するプログラムを作成しなさい 数値1入力==>3 数値2入力==>8 数値3入力==>5 数値4入力==>4 数値5入力==>2 3:*** 8:******** 5:***** 4:**** 2:**
#include <stdio.h> static void print(int dat) { printf("\n%d:", dat); for (int i = 0; i < dat; ++i) putchar('*'); } int main() { int dat[5]; printf("数値1入力==>"); scanf("%d", & dat[0]); printf("数値2入力==>"); scanf("%d", & dat[1]); printf("数値3入力==>"); scanf("%d", & dat[2]); printf("数値4入力==>"); scanf("%d", & dat[3]); printf("数値5入力==>"); scanf("%d", & dat[4]); print(dat[0]); print(dat[1]); print(dat[2]); print(dat[3]); print(dat[4]); return 0; }
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 平面上に多角形が二つ与えられたとき、 これらが共通部分を持つかどうかを判定せよ。 境界でのみ交わる場合は共通部分はないとする。 [3] 環境 [3.1] OS: 指定なし [3.2] コンパイラ名とバージョン: 指定なし [3.3] 言語: どちらでも可 [4] 期限: 11月13日中 [5] その他の制限: 特になし
347 :
346 :2007/11/12(月) 11:31:48
補足:多角形は半時計回りの頂点のリストで与えられる。 よろしくおねがいします
348 :
デフォルトの名無しさん :2007/11/12(月) 11:50:13
297のプログラムわかるひといらっしゃいませんか? よろしくお願いします.
リンクだけだとなかなか見る気にならんからねえ。
>>297 >>348 要するに、通信経路の計算とかは全然関係なく、
下のようなテキストファイルの値を読み込め、という言う事なのか?
source-node destination-node packet-loss-rate
a b 0.3
a c 0.1
.
.
z w 0.9
352 :
デフォルトの名無しさん :2007/11/12(月) 14:36:10
[1] 授業単元: プログラミング言語・配列
[2] 問題文(含コード&リンク): 文字の出現回数を数える
標準入力から入力された 'a' から 'z' までの文字の出現回数を数えるプログラムを作成せよ。
各文字の出現回数は、大きさ 26 の配列 kaisuu に格納するものとする。初期化を忘れずに!
また、'a' から 'z' までの小文字の英字以外はカウントせず、無視するものとする。
以下のプログラムを参考にせよ。
char c;
...
while ( (c=getchar()) != '\n' ){ /* リターンが押されるまで読み込む */
/* ここに 'a' から 'z' のどれが出現したかを数えるプログラムを */
/* 書くこと */
}
/* どの文字が何個あったかを出力する */
ヒント 文字変数 c は、 c - 'a' を計算すれば、要素の番号になる。
例えば、 c に 'a' が入っていれば、 c - 'a' は、0 になる。
日本語が含まれない C 言語のプログラムのソースを読ませてみて、うまく動くか確かめてみること。
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: gcc
[4] 期限: 11月19日
[5] その他の制限: 特になし
参照URL:
http://www.wakhok.ac.jp/biblion/1995/CC/subsection3.18.4.html
353 :
デフォルトの名無しさん :2007/11/12(月) 15:22:39
#include <stdio.h> /* おまじない */ #include <stdlib.h> /* おまじない */ #include NMAX 20 /* リストの構成要素となる構造体 node_tag */ struct node_tag { int num; /* 月を格納する整数 */ char name[NMAX]; /* 名前を格納する配列 */ ??????? /* 自己参照:次のデータへのポインタ next */ }; int main(void) { /* 12の要素をもつ構造体配列の定義 */ struct node_tag Month[12] = { {1, "January", NULL}, {2, "February", NULL}, {3, "March", NULL} }; struct node_tag *p; /* ポインタ p */ /* 各要素をつなぐ (以下の図を参考に)*/ ??????? p=&Month[0]; while (p!=NULL){ /* p を用いてリストの表示 */ printf("%d %s\n", ???????, ???????); /* p の num と p の name を表示する */ p=??????? /* p を p の next とする */ } return 0; } ----------------------------------------------------------------- 忙しいところすみませんが、どうかよろしくお願いします。 今回書き込みは、初めてなので、至らない点がありましたら、よろしくお願いします。
354 :
デフォルトの名無しさん :2007/11/12(月) 15:23:56
↑ 課題 A: 「 月(整数) と 月名(文字) と 次の要素を指すポインタ 」を要素に持つ自己参照構造体を定義する. この構造体を利用して線形リストを作成し,月と月名を表示させるプログラムを完成せよ. * 以下のプログラムの各行にコメントを付加すること. * 以下のプログラムのコメントを参考にすること.
355 :
デフォルトの名無しさん :2007/11/12(月) 15:26:51
#include <stdio.h> /* おまじない */ #include <stdlib.h> /* おまじない */ #define MAX 20 #define MMAX 100 /* リストの構成要素となるセルの構造体 node_tag */ struct node_tag { int num; /* 配列の番号を格納する整数 */ char name[NMAX]; /* 名前を格納する配列 */ ??????? /* 自己参照:次のデータへのポインタ */ }; int main(void) { struct node_tag Meibo[MMAX]; /* 構造体配列の定義 */ int n=0; /* 配列の番号を格納する整数 n,初期値は 0 */ struct node_tag *head, *p; /* リストの先頭を指すポインタ head,新しく追加するノードを指すポインタ p */ head=NULL; while ( scanf("%s", ???????) != EOF ){ Meibo[n].next=???????; /* 新しく追加するノード(Meibo[n]) の next が指すものは? */ head=???????; /* 先頭データ(head)は どこを指すか? */ ???????=n++; /* Meibo[n] の num に配列番号を格納する整数を入れる */ } p=head; while (p!=NULL){ /* リストの表示 */ printf("%d %s\n", ???????, ???????); /* p の num と p の name を表示する */ p=???????; /* p を p の next とする */ } return 0; } 2門続けてすみません。行き詰まってます。よろしくお願いします。
356 :
デフォルトの名無しさん :2007/11/12(月) 15:27:58
↑ 課題 B: 「 標準入力 (キーボード) から入力されたアルファベットの文字列 と 配列の番号 」を要素に持つ自己参照構造体を定義する. この構造体を利用して線形リストを作成し,アルファベットの文字列と配列の番号を表示させるプログラムを完成せよ. 以下のプログラムのコメントに従ってプログラムを完成させること.適宜コメントを追加すること. 付け加えです。よろしくおねがいします。
>>353-
>>356 >>1 にテンプレがあります。
それに沿って書き込むと、回答が多くなります。
358 :
デフォルトの名無しさん :2007/11/12(月) 15:40:25
ありがとうございます。
359 :
デフォルトの名無しさん :2007/11/12(月) 15:45:54
>>353-
>>356 の者です。
[1] 授業単元:プログラミング言語2
[2] 問題文(含コード&リンク):先ほどの二つです
[3] L
[3.1] OS: (/Linux/)
[3.2] コンパイラ名とバージョン: (gcc )
[3.3] 言語: (Cです)
[4] 期限: ([2007年11月15日17:00まで] )
[5] その他の制限: リスト構造ぐらいまで
いろいろ御迷惑かけましてすみませんでした
よろしくお願いします。
>>353-356 微妙な問題だなあ……
配列とリスト併用して、それで順不同ならまだしもnextが指すのはすぐ次の要素だし……
リストの演習やるなら、もっとリストの利点が分かる物にしたらよかろうに
こんなんじゃ、ちょっとできるやつから「何でわざわざリストを使うんですか?」なんて質問されるぞ
361 :
デフォルトの名無しさん :2007/11/12(月) 16:21:31
課題の雛型なので、変えることが出来ないので。 申し訳ありません。
J科生乙
>#include <stdio.h> /* おまじない */ こんなことを書いて恥ずかしくないんかね。
364 :
デフォルトの名無しさん :2007/11/12(月) 16:37:20
>>363 それ書いたの担当の女だよ。
しょうがないんだよ餓えてるから少しでも男連中にアピールしてるんでしょ
かわいさアピール?
時にはややこしいことを隠して教えることも大事。うふ。
コメントにほぼ答えが書いてある穴埋め問題が解けないって奴はなんなんだろうな。
367 :
デフォルトの名無しさん :2007/11/12(月) 16:49:21
[1] 授業単元: 基礎プログラミング [2] 問題文(含コード&リンク): いま、要素数N(N≧1)のint型の配列a[]があり、適当な値がセットされている。以下の要求を満たすfor文を書け。 要素数NはマクロNとして定義されているものとする。要素数NはマクロNとして定義されているものとする。 ●直前・直後の配列要素が存在し、それら2つの値の平均よりも大きな値を持つ要素をすべて印字する。 ●配列の銭湯からi番目(i=0,1,2,...,N-1)の要素と、末尾からi番目の要素の値が等しいとき、 それらの要素の添え字のうち小さな方を印字する。ただしおなじ添え字は1度しか出力しないこと。 [3] 環境 [3.1] OS:VineLinux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語: C [4] 期限: 11月13日まで [5] その他の制限: 特になし
>>367 >配列の銭湯からi番目(i=0,1,2,...,N-1)の要素と、末尾からi番目の要素
これは先頭からi番目の要素と、先頭からN-i番目の要素を比較しろということだよな?
あと、このような特殊な計算をどこに使うのか是非とも教えて欲しい
>>367 for(i=1; i<N-1; i++) if(a[i]*2>a[i-1]+a[i+1]) printf("%d\n", i);
for(i=0; i<N/2; i++) if(a[i]==a[N-1-i]) printf("%d\n", i);
>>367 先越された
#include<stdio.h>
void prArry(const int a[const], size_t sz)
{
size_t idx = 1;
while( idx != sz - 2 )
{
if( 2*a[idx] > a[idx-1] + a[idx+1] ) printf("%d\n",a[idx]);
++idx;
}
return;
}
void prHeqT(const int a[const], size_t sz)
{
size_t idx = 0;
while( 2*idx <= sz )
{
if( a[idx] == a[sz-1-idx] ) printf("%d\n",idx);
++idx;
}
return;
}
int main(void)
{
const int a[] = {1,2,4,1,55,32,1,4,7,6};
prArry(&a[0],sizeof(a)/sizeof(int));
prHeqT(&a[0],sizeof(a)/sizeof(int));
return 0;
}
371 :
367 :2007/11/12(月) 18:07:48
>>368 そうです、誤字すいません。
トレーニング用だと思われます。。。
まだCを始めたばかりで難しくて・・・
アドバイスいただければ幸いです。
>>369 #include <stdio.h>
#define N 10
int main(void)
{
int a[N];
char buf[80];
int i;
for(i=1;i<N-1;i++)
{
fgets(buf,80,stdin);
sscanf(buf,"%d",&a[i]);
}
if(a[i]*2>a[i-1]+a[i+1])
printf("%d\n",i);
}
とりあえず2をこんな感じにやってみたのですが、うまくいきません。。。
どんな数字を入れても9になってしまいます・・・
>>370 ごめんなさい、基礎プログラミングなので、そこまで高度な技術は分かりません^^;
どこら辺が高度?修正するけど。
373 :
367 :2007/11/12(月) 18:18:16
わざわざすいません、テンプレに書くべきだったのですが、 自分はまだ制御構造のwhile文までくらいのコマンドくらいしか分からないので・・・ お勧めの入門書などがあれば教えてもらいたいです。
独習C
>とりあえず2をこんな感じにやってみたのですが、うまくいきません。。。 >どんな数字を入れても9になってしまいます・・・ if(a[i]*2>a[i-1]+a[i+1]) printf("%d\n",i); だとそりゃ9がでる。 for( i = 0; i != N; ++i ) { if(a[i]*2>a[i-1]+a[i+1]) printf("%d\n",i); }
>>371 #include<stdio.h>
#include<stdlib.h>
#define N 10
int main(void)
{
int a[N];
int i;
for( i = 0; i != N; ++i) { scanf("%d",&a[i]); }
printf("--------------------------\n");
for( i=0; i != N; ++i )
{
if(a[i]*2>a[i-1]+a[i+1]) printf("%d\n",i);
}
}
377 :
デフォルトの名無しさん :2007/11/12(月) 18:35:29
何度も同じ質問すみません [1] 授業単元:アルゴリズム [2] 問題文:巡回セールスマン問題を解く(厳密解)プログラムを作成しなさい。 (解=最小値とその最小値を出す通路) 巡回セールスマン問題のデータファイルは次のデータ形式とする。1行目に頂点数、2行目以下に距離行列。例えば、次のようなもの。 5 0 3 2 99 4 3 0 99 12 99 2 99 0 5 6 99 12 5 0 16 4 99 6 16 0 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc [3.3] 言語: Cのみ [4] 期限: 15日 [5] その他の制限: 全列挙を利用して 本当に列挙だけで最小値だけを出すということができません
for (i=0; i<kosu; i++) printf("%s\n", data[i]; のところで printf("%s\n", data[i] ) ; カッコが抜けてる
380 :
デフォルトの名無しさん :2007/11/12(月) 18:54:28
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ・ニュートン法と二分法の両方を用いて、直線 y = x + 1/2 と単位円 x^2 + y^2 = 1 の交点の座標の近似解(小数点以下第6位まで)を求めよ。 ・一つのプログラムに書くこと ・二分法を用いる初期値は、 [a,b] = [-1,1] とせよ。 ・ニュートン法で用いる初期値は、2つとも0とせよ。その際、1つの関数は収束しない。収束しない場合は、求められないとわかった時点でやめるように工夫せよ。 ・ニュートン法も二分法もともに何回で収束したかがわかるようにしておくこと。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc(バージョン不明です) [3.3] 言語:C++ [4] 期限: [2007年11月21日まで(22日提出です)] [5] その他の制限: ・見てわかりやすいように説明文なども各自付加しろ、と指示がありました。 ・デスクトップ環境: GNOME 2.4.2 よろしくお願いします。
381 :
367 :2007/11/12(月) 18:58:25
>>374 ,375,376
ありがとうございます!
ものすごく遅くなってしまいましたが、
>>289 ありがとうございました。
考えて下さった、279、280、281、284のみなさんもありがとうございました。
ちなみに
>>284 の質問の答えが返ってきましてV=V0/E=1.000が正しいらしいです。
>>377 巡回セールスマン問題については、
最適解(厳密解)を求めるアルゴリズム自体が、2007年現在、未だに確立されていません。
近似解を用いるのが一般的です。
最適解(厳密解)を求めるアルゴリズムを考え出すのはほとんど無理です。
384 :
378 :2007/11/12(月) 19:27:58
>>379 ありがとうございます。
問2に関しても自己解決できました。
386 :
◆a3LMU3qR26 :2007/11/12(月) 19:29:33
頂点数が5個程度なら全列挙で解が得られるのではないでしょうか?
387 :
377 ◆a3LMU3qR26 :2007/11/12(月) 19:30:27
すいません 377です
388 :
377 ◆a3LMU3qR26 :2007/11/12(月) 19:40:48
ファイルから読み込むプログラムで #include<stdio.h> #define MAXN (100) #define YES (1) #define NO (0) int n, a[MAXN], used[MAXN]; int adj[MAXN][MAXN]; void perm(int d); void minimum(int s); int main(int argc, char **argv){ int i, j; FILE *fp; if (argc != 2) { printf("Usage: %s <filename>\n", argv[0]); exit(1); } fp = fopen(argv[1],"r"); if (fp == NULL) { printf("File not found.\n"); exit(1); } fscanf(fp, "%d", &n); if ((n > MAXN) || (n < 0)) { printf("Out of range: n.\n"); exit(1); } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { fscanf(fp, "%d", &adj[i][j]); } } fclose(fp);
389 :
377 ◆a3LMU3qR26 :2007/11/12(月) 19:43:37
printf("%d\n",n); for(i = 0; i < n; i++){ for(j = 0; j < n; j++){ printf("%d ",adj[i][j]); } printf("\n"); } printf("\n"); for(i = 0; i < n; i++) used[i]=NO; perm(0); return(0); } void perm(int d) { int i,j; int s = 0; if(d == n){ for(j = 0; j < n-2; j++) s+=adj[a[j]][a[j+1]]; s+=adj[a[0]][a[n-1]]; printf("%d\n",s); } else{ for (i = 0; i < n; i++) { if (used[i] == NO) { a[d] = i; used[i] = YES; perm(d + 1); used[i] = NO; } } } }
390 :
377 ◆a3LMU3qR26 :2007/11/12(月) 19:45:39
スレ汚しスマソ ここまではできてるんですけどこれだけだと和の列挙にしかなりません ここから最小値を取り出して出力させるには何を付け加えたらいいのか教えてください
>>390 TSPのアルゴリズムそのものを付け足せばいい
392 :
334 :2007/11/12(月) 20:44:16
>>391 ググってみたけどもわからないんですけど
具体的にどういう風にすればいいのですか?
393 :
377 ◆a3LMU3qR26 :2007/11/12(月) 20:45:08
394 :
デフォルトの名無しさん :2007/11/12(月) 21:00:16
授業名:アルゴリズム 問題: 次の問題の題意を日本語で説明し問題の解答を与えるプログラムを作成せよ。 For what value of integer N is 10NlgN>2N^2? 環境:C言語でコンパイラはgcc 期限:来週の月曜まで よろしくおねがいします。
>>394 せめて日本語で説明する部分くらいやってもいいのでは?
396 :
デフォルトの名無しさん :2007/11/12(月) 21:13:26
>>395 自分の日本語訳は
整数Nはなんのために10NlgN>2N^2ですか?
みたいな感じなんですけどあってるんでしょうか・・・
初めての英語問題で面食らってます
>>396 どんな値の範囲で10NlgN>2N^2が成り立ちますか?
じゃないかFor = 範囲
10NlogN - 2N*N = 0を満たすNをもとめりゃいい。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆【一番クリックした国が優勝】参加者求ム!☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
イギリス人天才プログラマが運営する前代未聞の無料ブラウザゲーム、
http://clickclickclick.com/ ただひたすらクリックし、国別の総クリック数を世界中で競い合う!
究極にバカバカしくそして意味がなく、ひたすら時間の無駄でなんの得にもならない、だがそれが(・∀・)イイ!
ライバルはハンガリー、そして台湾!! GAME2から参戦し、現在GAME27開催中!
VIPで発祥し現在2ch全土から結集したクリック兵達で日本チームは戦っている!
意味のない事に全力を傾ける、それが2ちゃんねるクオリティ!!
独自のクリックツール開発競争も熱く、各国のプログラマが全力で優秀な兵器開発をしている!!
日本の技術力の高さを世界に見せつけてやろうぜ!
プログラマ、Flashゲーム製作者、動画職人、AA職人、絵師、DJ、wiki編集blog編集者、データ分析者etcも募集中!
ツール放置参加もできるので、PCのスペックに自身のある奴、CPUに空きのある奴、時間が余ってる奴もぜひ参加してくれ!
本スレッド
【簡単多重】一番クリックした国が優勝【8砲門】
http://wwwww.2ch.net/test/read.cgi/news4vip/1194741194/l50 ※落ちているときはここから1発検索
http://www.clickjapan.jp/find2ch.php 日本チームの有志によるまとめサイトポータル
http://www.clickjapan.jp/ ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
>>394 #include<stdio.h>
#include<math.h>
typedef double (*SingleFun)( double );
double newton(SingleFun fun,SingleFun fprime, double x)
{
double fx;
double fp;
double xprev;
do
{
fx = fun(x);
fp = fprime(x);
if(fp == 0) fp = 1;
xprev = x;
x -= fx / fp;
} while( x != xprev );
return x;
}
double fN(double N) { return 10.0 * N * log( N ) - 2*N*N; }
double dfdN(double N) { return 10.0 * log( N ) - 4.0 * N + 10.0; }
int main(void)
{
double res = newton( fN, dfdN, 1.0 );
printf("result = %1lf\n",res );
printf("10Nlog(N) > 2N^2 is true for N > %lf\n",res);
return 0;
}
402 :
デフォルトの名無しさん :2007/11/12(月) 22:25:38
>>402 結果を実数で返してしまった。整数に直してくれ。
だから答えとしてはN > 1だな。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ライブラリ関数atofと同じ動作を行う関数 double strtof(const char *nptr) {/*・・・*/} を作成しなさい。 [3] 環境 [3.1] OS: Windows [3.2] gcc3.4 [3.3] C言語 [4] 11/15まで お願いします
#include<stdio.h> #include<stdlib.h> double strtof_ (const char *nptr) { return strtod_ (nptr, (char **) NULL); }
間違えた。 ていうか衝突するからstrtofって名前使わないほうがいいと思う。 #include<stdio.h> #include<stdlib.h> double strtof_ (const char *nptr) { return strtod (nptr, (char **) NULL); }
>>406 すいません、条件を書き忘れました
申し訳ありません
標準ライブラリ関数を使わないでお願いします
>>404 double strtof(const char *nptr)
{
double ret = 0, div = 10, f = 1;
if(*nptr=='-') {
f = -1;
nptr++;
}
else if(*nptr=='+') nptr++;
while('0' <= *nptr && *nptr <= '9') ret = ret * 10 + *nptr++ - '0';
if(*nptr++!='.') return f * ret;
while('0' <= *nptr && *nptr <= '9') {
ret += (*nptr++ - '0') / div;
div *= 10;
}
return ret * f;
}
double strtof(const char *nptr) { const char *p; int s, n, d; s = 1; n = 0; d = 0; for (p = nptr; *p != '\0'; p++) if (*p == '+' || *p == '-') { if (p != nptr) break; if (*p == '-') s = -1; } else if (*p == '.') d = 1; else if (*p >= '0' && *p <= '9') { n = n * 10 + *p - '0'; d = d * 10; } else break; if (d == 0) d = 1; return (double)s * (double)n / (double)d; }
EBCDICは0〜9の並びについては保証されてるよ アルファベットがいけない
>>397 これ厳密解じゃないよ
しかもnodeを30とかにすると解くのに時間かかりすぎ
やり直してきたほうがいいのでは?
再帰じゃそんなもんざます
416 :
デフォルトの名無しさん :2007/11/13(火) 16:25:41
学校からのカキコミです。 わからないので教えてください。 課題25 1からキーボードで入力した値までの合計を求めるプログラムを作りなさい >kadai25 いくつまで合計しますか> 10 /*10と入力 合計は55 ↑こうしたいのですが、よろしくお願いします。 ちなみにscanfとforを使うみたいです
417 :
デフォルトの名無しさん :2007/11/13(火) 16:29:14
351さん、そうです。 そのやり方がよくわからないのです。
418 :
デフォルトの名無しさん :2007/11/13(火) 16:44:09
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク):ある新聞販売店では新聞を1部40円で仕入れ、100円で売っている。売れ残った新聞 は1部15円で新聞社に引き取ってもらう。過去1年間の統計によれば、1日に売れる新 聞の数(客数)は、平均800、標準偏差120 の正規分布に大体従っている。このとき、こ の店では1 日に何部の新聞を仕入れれば最も利益(粗利)が多くなるか? これをプログラムに記述せよ。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C/C++ [4] 期限: 11月18日 [5] その他の制限:なし よろしくお願いします。
420 :
こまった :2007/11/13(火) 17:08:34
初歩の初歩の質問で本当にごめんなさい。 まったくわからなくって本当にこまってます。 問題:四則演算する電卓を作りなさい。また、あまりも出しなさい。 例:%a.out 5+8 5+8=13 式を入れれば自動計算するようにしたいのですが///さっぱりわからないのです。 すみません。
お前の質問も全くわからん
422 :
こまった :2007/11/13(火) 17:22:26
式を打ち込めば四則演算をしてくれて、かつ、あまりがあれば、それも表示してくれるプログラミング なんですけど(;△;) どうしたらよいのでしょう。
>>422 とりあえずがんばってみたら?
だめなら、ダメなりに、どこがどういうことで行き詰ったかかかなあかんよ
mapのデータ部分にクラスを利用する?ことができるらしいんですがイマイチどうすればいいか わかりません・・・
>>425 例えばDATAっていうクラスがあったとしたら
map<key,DATA>でいいってことですか?
[1] 基礎プログラミング [2] キーボードから与えられる試験の得点(100点満点)を次々と読み込み、その中央値を 求めるプログラムを作成せよ。得点は1行にひとつずつ入力され、負の値は入力の終了を表すも のとする。また、データの個数の上限は適当に決めてよい。ただし、得点が一つも与えられなか ったときは「なし」と印字せよ。 なお、一般に、数値データの中央値は、それらを昇順に並び換えたものに(n個としたとき)、 奇数なら先頭から{(n+1)÷2}番目、偶数なら[{n÷2+(n+1)÷2}÷2]番目である。 [3.1]Linux [3.3]C言語 [4]できれば今日中 [5] 配列
430 :
デフォルトの名無しさん :2007/11/13(火) 21:33:40
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 第1項・第2項の値を1とし、 直前の2つの項の和を項の値とする数列を「フィボナッチ数列」と言う。 この数列のi番目の項を計算する関数は、 以下のように再帰的に記述することができる。 f(i) = f(i-1) + f(i-2) (i > 1のとき) f(i) = 1 (i = 1のとき) f(i) = 0 (i = 0のとき) キーボードから数字を入力して変数aに格納し、 フィボナッチ数列・第a項の値を計算するプログラムを作成せよ。 項の計算は上の定義を使い、 再帰的な呼び出しを実行する関数 int F(int n) を作成して呼び出すこと。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C [4] 期限: 11/15まで [5] その他の制限: #defineはなしで
431 :
デフォルトの名無しさん :2007/11/13(火) 21:35:17
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): キーボードから入力した数値(10進数)を 2進数に変換して画面に出力するコードを作成しなさい。 また,キーボードから入力した2進数の数値を 10進数に変換して画面に出力するコードを作成しなさい。 また、必要に応じて再帰を使っても使わなくてもよい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C [4] 期限: 11/15まで [5] その他の制限: #defineはなしで
432 :
380 :2007/11/13(火) 21:35:40
>>380 です。単位かかってるレポなんでどなたかお願いします。
>>428 if(a==0) {
if(b==0) {
if(c==0) printf("It is trivial!\n");
else printf("Boo-boo!\n");
}
else {
x1 = -c / b;
printf("x=%.2f\n", x1);
}
}
else {
D = b * b - 4 * a * c;
if(D >0) {
x1 = (-b+sqrt(D)) / (2 * a);
x2 = (-b-sqrt(D)) / (2 * a);
printf("x=%.2f,%.2f\n", x1, x2);
}
else if(D==0) {
x1 = -b / (2 * a);
printf("x=%.2f\n", x1);
}
else printf("There exist no real-valued solutions.\n");
}
return 0;
}
434 :
デフォルトの名無しさん :2007/11/13(火) 21:36:01
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): ハノイの塔を解くプログラムを作成する。 キーボードから円盤の枚数を入力し、 円盤を移動する手順を画面に表示すること。 ・円盤は小さい物から順に1から番号で示す ・柱はL・C・Rで示し、円盤全体をLからRへ移すとする ・可能ならば手順の回数も表示すること 【実行結果(枚数を3と入力した場合)】 円盤枚数を入力 3 円盤1をL→Rへ移す 円盤2をL→Cへ移す 円盤1をR→Cへ移す 円盤3をL→Rへ移す 円盤1をC→Lへ移す 円盤2をC→Rへ移す 円盤1をL→Rへ移す (終了) [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C [4] 期限: 11/15まで [5] その他の制限: #defineはなしで
>>434 Hanoiだし再帰使っていいよね?
#include<stdio.h>
void hanoi(int L,int C,int R,int n){
if(n==0)return;
hanoi(L,R,C,n-1);
printf("円盤%dを%c→%cへ移す\n",n,L,R);
hanoi(C,L,R,n-1);
}
main(){
int n;
printf("円盤枚数を入力");
scanf("%d",&n);
hanoi('L','C','R',n);
printf("手順の回数 %d\n",~(~0<<n));
}
437 :
shin :2007/11/13(火) 21:54:59
[1]授業単元: 関数入門 [2]問題文: 100点満点の試験を入力して、5段階評価を返す関数 hyouka を作成せよ。 5段階評価は、100〜90までは5、89〜80は4、79〜70は3、69〜60は2、60未満は1とする。 この関数を利用して、学生10人の試験の点数を入力して、 それぞれの5段階評価を求め一覧表を表示するプログラム quality.cpp を作成せよ。 [3]環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: [3.3] 言語: C++ [4]期限: 2007年11月14日 17:00 まで [5]その他の制限: 関数の作り方、使い方が分からないので、そこを教えていただけるだけでも結構です(´`;) よろしくおねがいします!
439 :
デフォルトの名無しさん :2007/11/13(火) 22:18:09
[1] 授業単元:プログラミング、関数基礎 [2] 問題文(含コード&リンク): メイン関数において、2つの放物線 y=ax2+bx+c y=px2+qx+r の係数a、b、c、p、q、rをキーボードから入力し、その数値を関数に引数として渡す。 関数はその数値を用いて2曲線の交点の有無を調べ、その交点の個数を戻り値とし てメイン関数に渡す(交点が無い場合は0、交点が1つの場合は1、交点が2つの場 合は2、交点が無限に存在する場合はー1を戻り値にする)。また関数は、もし交点が 有限個存在するならばそれらの交点の座標値をメイン関数に渡す。メイン関数は関数 から得たこれらの情報を得て、交点の個数を画面に表示し、さらにもし交点が有限個 存在するならばそれらの座標値を画面に表示する。そのようなプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C [4] 期限: 2007年11月19日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) C言語の基礎しか習っていません。 どなたかよろしくお願いします。
>>430 #include <stdio.h>
int F(int n)
{
if(n==0)
return 0;
else if(n==1)
return 1;
else
return F(n-1) + F(n-2);
}
main()
{
int a,x;
printf("数字を入力:");
scanf("%d",&a);
x = F(a);
printf("フィボナッチ数列第%d項 = %d\n",a,x);
return;
}
>>440 それだと末尾最適化されないはず
こっちで
#include<stdio.h>
#include<stdlib.h>
typedef unsigned int uint;
uint iter(uint a, uint b, uint n) { return n == 0 ? 1 : n == 1 ? a : iter(a+b,a,n-1); }
uint fibonacci(uint n) { return iter(1,1,n); }
int main(void)
{
size_t idx = 0;
for( ; idx != 10; ++idx)
printf("%d: %d\n",idx,fibonacci(idx));
return EXIT_SUCCESS;
}
すまん。大元の問題読んでなかった。
>>440 でいいね。
443 :
46 :2007/11/13(火) 22:46:48
>>443 使っているライブラリは何?よくわからないけど興味あるから勉強してみたい。
で、もしできたら答える。
>>444 とりあえずforkをぐぐるところから始めるといいと思うよ
451 :
shin :2007/11/13(火) 23:47:58
452 :
shin :2007/11/13(火) 23:54:22
>>437 です
自力でやったのですが、
エラーを消すためにいろいろとしていたらよくわからなくなりました..
誰かなおしてください…
お願いします!
453 :
shin :2007/11/13(火) 23:59:48
#include <iostream.h> #include <iomanip.h> int hyouka( int ) ; // 5段階評価する関数 main() { const int x = 10 ; // 入力できる人数 int a[x] ; // テストの点数 int b[x] ; // 1〜5の成績 int i, result ; for( i=0 ; i<x ; i++){ cout << i+1 << "人目の成績 >>> " ; cin >> a[i] ; result = hyouka( a[x] ) ; } return 0 ; }
454 :
shin :2007/11/14(水) 00:00:28
// 関数hyouka int x ; int hyouka(int a[x]) { int x ; int b[x] ; //1〜5の成績 if(90<=a[i]){ b = 5 ; }else if (80<=a[i]){ b = 4 ; }else if (70<=a[i]){ b = 3 ; }else if (60<=a[i]){ b = 2 ; }else{ b = 1 ; } }
面白い
エラー直して欲しいだけならエラーメッセージ見たら大体分かるだろ。
>>437 (
>>452 )
#include <iostream>
#include <iomanip>
int hyouka( int ) ; // 5段階評価する関数
int main(void)
{
const int x = 10 ; // 入力できる人数
int a[x] ; // テストの点数
int b[x] ; // 1〜5の成績
int i ;
for( i=0 ; i<x ; i++){
std::cout << i+1 << "人目の成績 >>> " ;
std::cin >> a[i] ;
b[i] = hyouka( a[i] ) ;
}
std::cout << "番号:点数:評価" << std::endl;
for( i=0 ; i<x ; i++)
std::cout << std::setw(4) << i + 1 << ':'
<< std::setw(4) << a[i] << ':'
<< std::setw(4) << b[i] << std::endl;
return 0 ;
}
承前 int hyouka(int a) { if(90<=a){ return 5 ; }else if (80<=a){ return 4 ; }else if (70<=a){ return 3 ; }else if (60<=a){ return 2 ; } return 1 ; }
>>458 横からスマンがこういうほうが個人的に好き
int hyouka(int a)
{
return 90 <= a ? 5 :
80 <= a ? 4 :
70 <= a ? 3 :
60 <= a ? 2 :
1;
}
>>461 自分のレス流れたから書いてるだけじゃねーかタコが
書き直すんならもっと早くやっとけよ低脳
463 :
aho :2007/11/14(水) 01:06:43
>>461 作るの面倒だから、アルゴリズムを・・・
"s"が並ぶことはないから単純に"b"かどうかを判定すればよい。
従って、
for(省略)
if(!strcmp(sdata[i].word[j], "b"))
sdata[i].num++;
end of for
これじゃあかんのかな?
464 :
458 :2007/11/14(水) 01:18:30
>>459 458 のは、ちょっとずぼら過ぎたね
int hyouka(int a)
{
if (90<=a) return 5 ;
if (80<=a) return 4 ;
if (70<=a) return 3 ;
if (60<=a) return 2 ;
return 1 ;
}
に訂正
>>461 #include<stdio.h>
struct tfield{
char word[5];
int num;
};
int width_get(int value){
char tmp[16];
return sprintf(tmp, "%d", value);
}
int main(void){
struct tfield sdata[20];
const char *initial_data="bsbsbbsbsbsbsbbsbbsb";
int i, prev='b', count;
for(i=0,count=0;i<20;i++){
if(prev=='b') count++;
sprintf(sdata[i].word, "%*c", width_get(count), initial_data[i]);
sdata[i].num=count;
prev=initial_data[i];
}
for(i=0;i<20;i++) printf("%s", sdata[i].word);
printf("\n");
for(i=0;i<20;i++) printf("%d", sdata[i].num);
printf("\n");
return 0;
}
466 :
461 :2007/11/14(水) 01:47:05
467 :
デフォルトの名無しさん :2007/11/14(水) 02:09:09
【質問テンプレ】 [1] 授業単元: [2] 数独を解くプログラムを作れ(なるべく詳しく説明もいれて) [3] 環境 [3.1] 特に指定なし [3.2] 特に指定なし [3.3] 言語:C [4] 期限: 11月17日 [5] 特に制限はなく 単にCを使って数独をとくプログラムをかけばよいらしいのですが 難易度があがってもなるべく解けるように・・・といわれました。 どうしてもうまくいきません。 よろしくお願いします
468 :
デフォルトの名無しさん :2007/11/14(水) 02:48:15
各ブロックに、ある数字が入る可能性が1マスしかない場合 各ブロックに、ある2個の数字が入る可能性が2マスしかない場合 →それらのマスには他の数字は入らない、他のマスにはその数字は入らない 各行ごとに、ある数字が入る可能性が1つのブロックにしか残っていない場合 →そのブロックの他の行にはその数字は入らない
数独程度だと、なまじアルゴリズムを凝るよりも安直に作った方がいい。 何故ならば、どんなに安直に作っても1秒と掛からずに解けてしまうから。 つまり、凝ったアルゴリズムを考える手間やデバッグの暇に何千問も処理できるってこった。
[1] 基礎プログラミング [2] キーボードから与えられる試験の得点(100点満点)を次々と読み込み、その中央値を 求めるプログラムを作成せよ。得点は1行にひとつずつ入力され、負の値は入力の終了を表すも のとする。また、データの個数の上限は適当に決めてよい。ただし、得点が一つも与えられなか ったときは「なし」と印字せよ。 なお、一般に、数値データの中央値は、それらを昇順に並び換えたものに(n個としたとき)、 奇数なら先頭から{(n+1)÷2}番目、偶数なら[{n÷2+(n+1)÷2}÷2]番目である。 [3.1]Linux [3.3]C言語 [4]11月14日朝10時 [5] 配列 おねがいします
>>467 数独のソースはネットで探せば確実にあります
まずは探しましょう
472 :
cvop :2007/11/14(水) 07:41:40
プログラミング初心者ですが、 画像処理のプログラミングで、PGM画像中にある、 それぞれのオプティカルフローの角度[度]と大きさ[pixel]の 頻度の分布(縦軸:フローの頻度、横軸:フローの角度or大きさ)を 検出し、グラフにしたい(ヒストグラムみたいに)のですが、 どのようなプログラムを作れば良いのでしょうか? 分かる方がいらっしゃれば教えて頂けないでしょうか。 言語はC言語です。
スレ違い
>>474 「なお、写したと思われるほど酷似したレポートが複数提出された場合、
原著がどれかの調査を行わず、抽選で一通のレポートのみを評価の対象とし」
こ れ は お も し ろ い
>>474 レポートも書けってこと?Wordでいいのか?
477 :
デフォルトの名無しさん :2007/11/14(水) 10:46:21
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク):ある新聞販売店では新聞を1部40円で仕入れ、100円で売っている。売れ残った新聞 は1部15円で新聞社に引き取ってもらう。過去1年間の統計によれば、1日に売れる新 聞の数(客数)は、平均800、標準偏差120 の正規分布に大体従っている。このとき、こ の店では1 日に何部の新聞を仕入れれば最も利益(粗利)が多くなるか? これをプログラムに記述せよ。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C/C++ [4] 期限: 11月18日 [5] その他の制限:なし よろしくお願いします。
>>429 ありがとうございました
スレ違いすみませんでした・・・
479 :
デフォルトの名無しさん :2007/11/14(水) 13:10:41
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 整数型変数nの値を1から25まで1ずつ変化させて、nの2乗、1/n nの平方根、およびnの立方根を求めて、以下のような数表を作成する プログラムを完成せよ。 n n*n 1/n sqrt(n) n∧(3/1) 1 1 1.00000 1.00000 1.00000 2 2 0.50000 1.41421 1.25992 == == ======= ======= ======= 25 625 0.04000 5.00000 2.92402 (課題分では===のところはくっついていて、 2乗、1/nなどのところはくっついてしまっていますが それぞれ離れています。やりかたがわかりませんでした。 大変見にくくてすみません) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語: C++ [4] 期限: 2007年11月14日(15日提出) [5] その他の制限: 習い始めたばかりなのでよくわかりませんが ないと思います。 宜しくお願いします。
>>475 ひねくれた教授なのでw
>>476 プログラムだけで大丈夫です。
なるべく初歩的な文法でお願いしたいのですが…
482 :
デフォルトの名無しさん :2007/11/14(水) 14:31:30
>>467 数独はアルゴリズムは簡単で良いけど、ハッシュ表は導入した方が良いよ ちょっとやってみた
#include <iostream>
using namespace std;
main(){
int z,w,l=0,n,i,j,bf[8][81];
int tmp[4][3]={0,1,9, 0,9,1, 8,-1,9, 8,9,-1};
for(n=0;n<4;n++){
for(i=0;i<9;i++)for(j=0;j<9;j++){
z=tmp[n][0]+tmp[n][1]*i+tmp[n][2]*j;
bf[l][z]=bf[l+1][80-z]=i+9*j;}l+=2;}
int x[81],p[81],q[81];for(z=0;z<81;z++)x[z]=rand()%10;
for(z=0;z<81;z++){if(z%9==0)cout<<endl;cout<<x[z]<<" ";}
cout<<endl<<"のハッシュ値を求める。"<<endl;
int num[10];
for(i=0;i<81;i++)p[i]=9;
for(l=0;l<8;l++){
for(i=0;i<10;i++)num[i]=0;i=1;
for(z=0;z<81;z++){ n=x[ bf[l][z] ];
if(n>0)if(num[n]==0){num[n]=i;i++;}
q[z]=num[n];}
for(i=0;i<81;i++)if(p[i]<q[i])goto end; else if(p[i]>q[i])break;
if(i<81)for(i=0;i<81;i++)p[i]=q[i];end:}
unsigned int rh[81][9],hash=0;
for(z=0;z<81;z++)for(i=0;i<9;i++)rh[z][i]=(rand()<<16)+rand();
for(z=0;z<81;z++)hash^=rh[z][p[z]];
for(z=0;z<81;z++){if(z%9==0)cout<<endl;cout<<p[z]<<" ";}
cout<<"\nと変形され\nハッシュ値は"<<hash<<endl;}
484 :
デフォルトの名無しさん :2007/11/14(水) 14:37:14
ハッシュ表があれば調べる局面が、1/8以下に出来るよ すぐ解答が出る場面では逆に鈍くなると思うけど、0.5秒以上かかるならハッシュ表使ったら速いと思うよ
474「宿題を2chに丸投げしておk?」 教授「おk。公認するよん」 こんな感じか
底辺大学の教授ってそんなもんなのか
489 :
デフォルトの名無しさん :2007/11/14(水) 15:24:06
[1] 授業単元:情報技術 [2] 問題文: 「キーボードから以下の整数値を入力し,最大値を表示するプログラムを作成せよ キーボードから入力する値 25 , 6 , 45, 18 , 57, 5 ヒント for文を用いてキーボードから数値を読み込みながら, if文を使って読み込んだ数値がそれまでに読み込んだ 数値の最大値maxよりも大きければその値を更新する ・・・・・・ for(i=?;i<=?;??){ scanf(?????); if( ? > max) ???????; } printf(?????); ・・・・・・」 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:すみません、よく分かりません [3.3] 言語:C [4] 期限:2007年11月16日12:00 [5] その他の制限:if文、for文あたりの簡単なレベルでお願いします 大学の授業の課題です。 低レベルかもしれませんが、さっぱり分からないので、よろしくお願いします。
>>486 >>487 いや、教授自身が2ちゃんねらーw
だからここに問題が漏れてる事も知ってる。というより本人が自分で回答とかしてるしw
492 :
◆30lFlSJfAI :2007/11/14(水) 15:54:27
[1] 授業単元: 情報基礎 [2] 問題文:下記の問題のプログラミングを作成してください。 関数y=1/xをシンプソン法により、区間[1,2] で積分せよ。 このとき、区切りの数を変えることによって精度が変化することを確認せよ。 ただし、解析的な解はloge2=0.69314718である [3] 環境 OS: Windows 言語: C言語のみ [4] 期限: ([2007年11月21日まで] [5] 制限は特にありません。 プログラミング初心者にもかかわらず大学でこのような課題を出されました。 来週までで申し訳ないのですが、よろしくお願いします。
_,,..r'''""~~`''ー-.、 ,,.r,:-‐'''"""~~`ヽ、:;:;:\ r"r ゝ、:;:ヽ r‐-、 ,...,, |;;;;| ,,.-‐-:、 ヾ;:;ゝ :i! i! |: : i! ヾ| r'"~~` :;: ::;",,-‐‐- `r'^! ! i!. | ;| l| ''"~~ 、 i' | i! ヽ | | | ,.:'" 、ヽ、 !,ノ ゝ `-! :| i! .:;: '~~ー~~'" ゙ヾ : : ::| r'"~`ヾ、 i! i! ,,-ェェI二エフフ : : :::ノ~|`T <イエーイ、坂本直志君見てるー? ,.ゝ、 r'""`ヽ、i! `:、 ー - '" :: : :/ ,/ !、 `ヽ、ー、 ヽ‐''"`ヾ、.....,,,,_,,,,.-‐'",..-'" | \ i:" ) | ~`'''ー---―''"~ ヽ `'" ノ
教授職って何気に終身雇用なんだよね 同じ空気吸ってても一山いくらで売られていく子羊たちとの間には明らかな次元断層がある
日本語でおk
497 :
shin :2007/11/14(水) 16:15:56
>>474 課題1-1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define STUDENT_NUM_MAX 99999
int get_rand_score(void){
int i, score=0;
for(i=0;i<20;i++) score+=rand()%6;
return score;
}
int main(int argc, char *argv[]){
int i, index, student_num;
if(argc!=2){
fprintf(stderr, "\nUsage : %s <number>\n", argv[0]);
fprintf(stderr, "%5s : number (1-%d)\n", "", STUDENT_NUM_MAX);
return 1;
}
if(sscanf(argv[1], "%d%n", &student_num, &index)<1 || argv[1][index]!='\0'){
fprintf(stderr, "\nERROR : Invalid parameter. %s\n", argv[1]);
return 2;
}
if(student_num<1 || student_num>STUDENT_NUM_MAX){
fprintf(stderr, "\nERROR : Out of range (1-%d). %d\n", STUDENT_NUM_MAX, student_num);
return 3;
}
srand(time(NULL));
for(i=1;i<=student_num;i++) printf("C%05d %d\n", i, get_rand_score());
return 0;
}
>>492 シンプソン公式がわかってれば単純なforループの問題でしかないから。
500 :
デフォルトの名無し :2007/11/14(水) 17:13:23
[1] 授業単元: プログラミング1 [2] 問題文(含コード&リンク): アスキーコードの値を対応する文字を組み合わせた 一覧表を出力するプログラムを作成せよ。 アスキーコードの範囲は「32」〜「126」、スペースには△を出力。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 今週中にお願いします。 [5] その他の制限: なし
#include<stdio.h> int main(void){ int i; printf(" 32 △\n"); for(i=33;i<127;i++) printf("%3d %c\n",i,i); return 0; }
>>492 #include <stdio.h>
#include <math.h>
double func1(double x)
{
return 1.0/x;
}
double simpson(double a, double b, int n, double (*func)(double))
{
double odd = 0, even = 0, h = (b - a)/n;
int i;
for(i = 1; i < n; i += 2)
odd += func(a + i*h);
for(i = 2; i < n; i += 2)
even += func(a + i*h);
return h/3.0*(func(a) + func(b) + 4*odd + 2*even);
}
int main(void)
{
int n;
for(n = 2; n <= 1024; n *= 2)
printf("%4d : %.8f\n", n, simpson(1.0, 2.0, n, (double (*)(double))func1));
return 0;
}
>>460 本当にありがとうございます。
助かりました。
507 :
デフォルトの名無しさん :2007/11/14(水) 21:26:19
どなたか
>>479 を宜しくお願いします。
周りと比べてかなりレベルの低い問題だとは思いますが
まったくわからないのでお願いします。
>>507 #include <iostream>
#include <iomanip>
#include <algorithm>
#include <cmath>
using namespace std;
struct succ{ int operator()(){ return _n++; } succ():_n(1){};int _n; };
struct print{
double qube( const int & n ) {
double x = 0, xn = 1;
while ( fabs( x-xn ) > 1.0e-8 ) { x = xn; xn = x-(x*x*x-n)/(3.0*x*x ); }
return xn;
}
void operator()( const int & n ){
cout<<setw(4)<<n<<" "<<setw(4)<<n*n<<" "<<setw(9)<<1.0/n<<" "<<setw(9)<<sqrt(n)<<" "<<setw(9)<<qube(n)<<endl; }
};
int main( int argc, char ** args ){
const int N = 25;
int v[N]={};
cout << setw(4) << "n"<<setw(4)<<"n^2"<<setw(9)<<"1/n"<<setw(9)<<"n^1/2"<<setw(9)<<"n^1/3"<<endl;
generate( v, v+N, succ());
for_each( v, v+N, print());
return 0;
}
>>474 課題1-5
合格最低点を引数に取り、受験番号順に合格者リストを表示するプログラムを作りなさい。
void pass(int border)
{
char number[7];
int score;
while (scanf("%s %d", number, &score) == 2)
if (score >= border)
printf("%s\n", number);
}
510 :
デフォルトの名無しさん :2007/11/14(水) 21:59:29
[1]プログラミング2 [2] 以下は、下記フォーマットにしたがってデータが収められている配列を表現するためのプログラムです。また、そのフォーマットを持つ配列を引数として、有効なレコード数(つまり配列の0番目の値)を返り値として返す関数 int list_len(const int * list) を作成し、プログラムを完成させなさい。 フォーマット(score table) 配列の要素 内容(ただしi≧0) 0番目 有効なレコード数(K) 5*(i-1)+1番目 i番目の学生の英語の得点 5*(i-1)+2番目 i番目の学生の国語の得点 5*(i-1)+3番目 i番目の学生の数学の得点 5*(i-1)+4番目 i番目の学生の理科の得点 5*(i-1)+5番目 i番目の学生の社会の得点
511 :
デフォルトの名無しさん :2007/11/14(水) 22:00:20
サンプルコード #define MAX 101 /* 得点を入れる配列の最大値 */ #define REC 5 /* 1レコードの要素数 */ #define SUB 6 /* 科目名の文字数 */ char sub[REC][SUB]={"英語","国語","数学","理科","社会"}; /* 関数作成 */ int main() { /* 変数は適切に宣言する */ int score[MAX]={3, /* レコード数 */ 45, 60, 36, 72, 53, /* 1レコード目 */ 87, 48, 77, 69, 91, /* 2レコード目 */ 23, 54, 49, 58, 62}; /* 3レコード目 */ p=score+1; size=list_len(score); /* ここに書く */ } 実行例 +----++----++----++----++----+ |英語||国語||数学||理科||社会| +----++----++----++----++----+ | 45|| 60|| 36|| 72|| 53| +----++----++----++----++----+ | 87|| 48|| 77|| 69|| 91| +----++----++----++----++----+ | 23|| 54|| 49|| 58|| 62| +----++----++----++----++----+
512 :
デフォルトの名無しさん :2007/11/14(水) 22:02:19
[3] 環境 [3.1] OS:win xp [3.2] Microsoft Visual Studio 2005 [3.3] 言語:C言語 [4] 期限:2007年11月17日まで [5] その他の制限ポインタのあたりまで
513 :
デフォルトの名無しさん :2007/11/14(水) 22:10:43
>>508 ありがとうございます。
本当に助かりました。
514 :
デフォルトの名無しさん :2007/11/14(水) 22:28:24
>>510 #include <stdio.h>
#define MAX 101 /* 得点を入れる配列の最大値 */
#define REC 5 /* 1レコードの要素数 */
#define SUB 6 /* 科目名の文字数 */
char sub[REC][SUB]={"英語","国語","数学","理科","社会"};
/* 関数作成 */
int list_len(const int * list);
int list_len(const int * list)
{
return list[0];
}
int main()
{
/* 変数は適切に宣言する */
int size, x, y;
int *p;
int score[MAX]={3, /* レコード数 */
45, 60, 36, 72, 53, /* 1レコード目 */
87, 48, 77, 69, 91, /* 2レコード目 */
23, 54, 49, 58, 62}; /* 3レコード目 */
>>516 p=score+1;
size=list_len(score);
/* ここに書く */
for (x=0 ; x<REC ; x++)
{
printf("+----+");
}
printf("\n");
for (x=0 ; x<REC ; x++)
{
printf("|%s|", sub[x]);
}
printf("\n");
for (x=0 ; x<REC ; x++)
{
printf("+----+");
}
printf("\n");
for (y=0 ; y<size ; y++)
{
for (x=0 ; x<REC ; x++)
{
printf("|%4d|", *p);
>>517 p++;
}
printf("\n");
for (x=0 ; x<REC ; x++)
{
printf("+----+");
}
printf("\n");
}
}
>>431 #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void ten2two(int num)
{
if (num==0)
return;
ten2two(num/2);
if(num&1)
{
printf("1");
}
else
{
printf("0");
}
}
int main()
{
int num;
scanf("%d", &num);
ten2two(num);
printf("\n");
return 0;
}
520 :
デフォルトの名無しさん :2007/11/14(水) 23:03:19
ただ .exe 立ち上げさせるだけのプログラム作りたいんだけど、何かいい方法ある?
>>431 #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int two2ten(char *buf)
{
unsigned int num=0, i;
for (i=0 ; i<strlen(buf) ; i++)
{
num*=2;
if (buf[i]=='1')
{
num++;
}
}
return num;
}
int main()
{
char buf[100];
scanf("%s", buf);
printf("%d\n", two2ten(buf));
return 0;
}
523 :
デフォルトの名無しさん :2007/11/14(水) 23:08:50
>>522 いや、ごもっともなんだけどね。。。
どういう命令をすればやってくれるのかなって思って。
>>520 #include <stdlib.h>
int main()
{
system("%systemroot%\\NOTEPAD.EXE");
return 0;
}
526 :
デフォルトの名無しさん :2007/11/14(水) 23:16:57
>>524 , 525
ありがとお。こんなの知らなかったお。
>>477 当方の環境は WindowsXP / 処理系は cygwin(gcc 3.4.4) です。
乱数は M系列乱数、ガウス分布化は局座標法を使用しています。
仕入れ部数を600部から1000部まで1ずつ変化させ、それぞれに
大して 6 万回の試行を行い、平均を算出しています。
さらに、ピークをわかりやすくするために隣接3区間の平均をもって
平準化しています。(が、はっきりしませんでした。)
結果だけのべると、800 より少し多いところ(830〜850) に極大があるようです。
実行すると仕入れ部数と利益が対になって出力されます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5262.txt (参考文献)C言語による最新アルゴリズム事典/奥村晴彦/技術評論社 1991 ISBN4874084141
>>474 課題1-4
合格最低人数を引数にして合格最低点を求めるプログラムを作成しなさい。
但し、引数のとりかたは付録を参照すること。
void border(int count)
{
char number[7];
int score;
score = 101;
while (count > 0 && scanf("%s %d", number, &score) == 2)
count--;
printf("%d\n", score);
}
>>479 #include <stdio.h>
#include <math.h>
int main()
{
int n;
printf(" n n*n 1/n sqrt(n) n∧(3/1)\n");
for (n=1 ; n<=25 ; n++)
{
printf("%2d ",n);
printf("%3d ",n*n);
printf("%.5f ",(float)1/n);
printf("%.5f ",sqrt((float)n));
printf("%.5f ",powf((float)n, (float)1/3));
printf("\n");
}
return 0;
}
>>474 課題1-1
99999 以下の整数の引数をとり、受験番号を C00001 から順に C00002 のように引数の数だけ発生させ、
さらに各受験番号に対して乱数で発生させた点数を組み合わせたテストファイルを作るプログラムを作りなさい。
但し、点数は、 0 点から 5 点までを乱数で 20 回発生させ和を取ることで求めなさい。
引数のとりかた、乱数の発生の仕方は付録を参照のこと。
void list(int count)
{
int number, score, i;
for (number = 1; number <= count; number++) {
score = 0;
for (i = 0; i < 20; i++)
score += myrand();
printf("C%05d %d\n", number, score);
}
}
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): unsigned long long 型の x, y に対して x^2 を y で割った余り計算しなさい。 ただし x^2 がオーバーフローする 可能性があることに注意すること。 [3] 環境 [3.1] OS: Windows (Cygwin) [3.2] コンパイラ名とバージョン: gcc 4.0 [3.3] 言語: どちらでも可 [4] 期限: 16日まで [5] その他の制限: 特にありません おねがいします
533 :
デフォルトの名無しさん :2007/11/15(木) 01:57:19
534 :
デフォルトの名無しさん :2007/11/15(木) 02:14:51
メイン関数において、2つの放物線 y=ax2+bx+c y=px2+qx+r の係数a、b、c、p、q、rをキーボードから入力し、その数値を関数に引数として渡す。 関数はその数値を用いて2曲線の交点の有無を調べ、その交点の個数を戻り値とし てメイン関数に渡す(交点が無い場合は0、交点が1つの場合は1、交点が2つの場 合は2、交点が無限に存在する場合はー1を戻り値にする)。また関数は、もし交点が 有限個存在するならばそれらの交点の座標値をメイン関数に渡す。メイン関数は関数 から得たこれらの情報を得て、交点の個数を画面に表示し、さらにもし交点が有限個 存在するならばそれらの座標値を画面に表示する。そのようなプログラムを作成せよ。 よろしくお願いします。。
移項して判別式で判定すりゃいいんだから、
>>433 のを適当に変えればいいだけだろ。
>>474 課題1-3
点数表を読み込み、点数の高い順に出力するプログラムを作成しなさい。
プログラムにおいて点数表の容量を制限してはいけない。
コンピュータのメモリが許す限り大きな点数表も表示できること。
int compare(const char *a, const char *b)
{
return atoi(b + 7) - atoi(a + 7);
}
void rank(void)
{
int size, count;
char *buffer;
fseek(stdin, 0L, SEEK_END);
size = 10;
count = ftell(stdin) / (size + 1);
buffer = (char *)calloc(count, size);
fseek(stdin, 0L, SEEK_SET);
fread(buffer, size, count, stdin);
qsort(buffer, count, size, compare);
fwrite(buffer, size, count, stdout);
free(buffer);
}
538 :
デフォルトの名無しさん :2007/11/15(木) 07:02:14
>>532 #include <iostream>
using namespace std;
#define N 4294967295 // 2^32 - 1
unsigned int amari(unsigned int x, unsigned int y){
int k=x-y;
if(k<0)k=-k;
if(x>k)x=k;
k=N/x;
int p=x/k,l=x%k;
return ((x*k)%y)*p+((x*l)%y)%y;}
main(){
int x=97,y=123;
cout<<amari(x,y)<<" "<<(x*x)%y;
}
539 :
538 :2007/11/15(木) 07:28:16
バグがあったよ
あと型が違うんじゃね?
541 :
デフォルトの名無しさん :2007/11/15(木) 10:01:04
画像の指定範囲を決めてそこだけを出力するプログラム教えてください。
544 :
538 :2007/11/15(木) 13:48:07
#include <iostream> using namespace std; typedef unsigned long int Nsu; Nsu N; Nsu amari(Nsu x, Nsu y){ int a; x%=y; a=x-y; if(a<0)a=-a; if(x>a)x=a; a=N/x; int p=x/a, q=x%a , r=0; for(int i=0;i<p;i++){r+=(a*x)%y; r%=y;} r+=(q*x)%y; r%=y; return r;} main(){ N=-1; Nsu x,y; x=(1<<16)-17; y=(1<<14)-3; cout<<amari(x,y)<<" "<<(x*x)%y; }
>>541 存在しない学籍書いてるんじゃねーよ
04kc〜06kcのどれかだろ? 2年〜4年のどれかなんだから
>>543 とりあえず「重き」ってなんなんだ?
「重さ」だよな……
それともオレの知らない専門的な言い回しなのか……
重みじゃないの?
550 :
デフォルトの名無し :2007/11/15(木) 17:27:31
1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 文字列を正数に変換せよ。 入力が空の場合は処理を終了。「入力されていません」と表示。 入力の最大入力桁数は4バイトとし、桁あふれに対して「4文字で入力してください」と表示。 入力が半角数字以外に対しては「半角数字以外入力できません」と表示。 入力がゼロの場合は「0は入力できません」と表示。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 4.0 [3.3] 言語: C言語 [4] 期限: 今週中にお願いします。 [5] その他の制限: 特にありません
>>550 突っ込むべき部分があるな
入力の最大入力桁数は四バイト? それとも四文字?
-129のような文字列は129に変換?
129を変換したあとの数字は、1290? それとも0129?
>>550 #include<stdio.h>
#include<string.h>
#include<ctype.h>
int get_value(void){
char buf[4+1+1]; // 4文字オーバーチェック + 終端 \0
int i, value=0, buflen;
fgets(buf, sizeof(buf), stdin);
buflen=strlen(buf);
if(buf[buflen-1]=='\n') buf[--buflen]='\0';
if(buflen<=0){ puts("入力されていません"); return -1; }
if(buflen>4){ puts("4文字以内で入力してください"); return -1; }
for(i=0;buf[i];i++){
if(!isdigit(buf[i])){ puts("半角数字以外入力できません"); return -1; }
value=value*10+buf[i]-'0';
}
if(value==0) puts("0は入力できません");
return value;
}
int main(void){
int value;
value=get_value();
if(value>0) printf("\n%d\n", value);
return 0;
}
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5263.txt サンプルプログラムは、窓口が1個で,行列が窓口の前にできる場合に,時間と共に窓口の前にできる行列の様子を調べるものである.
(1)サンプルプログラム内の乱数処理を srand関数とrand関数を使用するように書き換えなさい。
(2)参考プログラムを元に,パラメータs, q, aを構造体のメンバ として扱うプログラムBに変更しなさい.
(3)作成したプログラムを変更し,窓口が2個の場合にも(すなわち1個または2個の場合に)対応できるようにしなさい。
このとき,窓口の個数(1または2)もパラメータLやM, シミュレーション時間と同様に入力して指定できるようにしなさい.
なお,新しく到着した客は,最も短い行列(待っている人が少ない窓口)に並ぶものとする.
全ての窓口の行列が同じ長さの場合には,一様な確率 (窓口が2個の場合は1/2の確率)で並ぶ窓口を決定するものとする.
(4)窓口が3個以上にも対応できるようにしなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: bcc32
[3.3] 言語: C
[4] 期限: 明日までです…
[5] その他の制限: 特に無いと思います
>>547 実際はね、重きじゃなくて入力データなんです。
入力データ(配列でいうとdata[50][5])が移動間を動く感じなんですけど
各状態にデータがあって、その入力データを各状態のデータによって
計算して出された値を各移動確率とかけるというわけなんですけど。
で書いてくださったプログラムにおいて、
for(cnt=0;cnt<50;cnt++){それを50回
for(i=0;i<7;i++)cal_next_gs(list[i]);は7つの状態間で1回の移動につき確率計算
}
ってのはわかるんです。1次元配列として引数として渡せば
できるのかなーと今思いました。
for(cnt=0;cnt<50;cnt++){それを50回
for(i=0;i<7;i++)cal_next_gs(list[i],data[cnt]);は7つの状態間で1回の移動につき確率計算
}
void cal_next_gs(struct gstate *gs,float data[5])
{
//計算して移動確率を計算
}
でいけそうな感じがします。
555 :
デフォルトの名無しさん :2007/11/15(木) 21:27:17
>>554 何をいいたいのか、いまいち分からないんだが、
どんな入力に対してどんな出力が欲しいの?
電気回路上の電流のシミュレーション?
入力に対して隠れマルコフモデル(HMM)を使って確率を出すんですけど、 この例では3状態のHMMと2状態のHMMを使って最終的にendにたどりつくとこの 状態の確率が出力値となるんです。 で1つの移動に対して入力1フレームを正規分布によって評価し確率を出す。 その正規分布をHMMで評価するんです。 そのHMMには平均分散、移動確率とあるんですけど、 平均分散を正規分布で用いて確率をだして、移動確率をかけて 最終的な移動の確率となるんです。 前につくってもらったのが移動確率でのみの計算でした
558 :
デフォルトの名無しさん :2007/11/15(木) 22:01:52
神経衰弱を行うゲームを作成すること。 ただし、カードは52枚全て使用し、絵柄の 区別は無いものとする。 このプログラムをお願いします。(^_^)
すみません、どなたか
>>489 をお願いします。
自分でもあつかましいと承知しているのですが、
どうにも分からないので・・・。
コンパイラ名はVS2005のようです。
よろしくお願いします。
557ですけど 頼んだのは移動してくる確率が2つだったらグリッドで計算できたんですけど 3つの場合どうすればいいのかわからなくて。 しかも下のやつも計算しなくてはならなくて。 なので質問させていただきました
>>543 >この(startから状態1への移動確率)X(重き)と
>(状態1の状態確率)X(状態1から状態1への移動確率)X(重き)と、(状態11の状態確率)X(状態11
>から状態1への移動確率)X(重き)の和が状態1の状態確率となります。
状態1ってループしてるけど単純にこれでいいの?
(状態1の状態確率)X(状態1から状態1への移動確率)X(状態1から状態1への移動確率)X(重き)
...
とかは考えなくてもよし?
>>543 >>246 の問題だと矢印にくっつく数値(状態遷移確率)が固定だったのを
時間(移動回数)によって矢印にくっつく数値(状態遷移確率)を変化させたいと言う事でいい?
>>561 考えなくていいです。
>>562 そうです。
実際は入力に対して各HMMの1つの状態の平均分散から
正規分布により出力確率を出してそのHMMから移動確率を出して
確率X移動確率なんですけど
簡単のために、出力確率を重きとしてるわけです。
移動確率を出す関数だけ。 enum states { START, FIRST, SECON, THIRD, TENTH, ELEVE, E_N_D }; enum states movProbMap( enum states from, enum states to ) { return from == START ? (to == FIRST ? 0.5 : to == TENTH ? 0.5 : 0.0) : from == FIRST ? (to == FIRST ? 0.6 : to == SECON ? 0.3 : to == ELEVE ? 0.1 : 0.0) : from == SECON ? (to == SECON ? 0.7 : to == THIRD ? 0.3 : 0.0) : from == THIRD ? (to == THIRD ? 0.8 : to == E_N_D ? 0.2 : 0.0) : from == TENTH ? (to == TENTH ? 0.6 : to == ELEVE ? 0.4 : 0.0) : from == ELEVE ? (to == ELEVE ? 0.7 : to == FIRST ? 0.2 : to == E_N_D ? 0.1 : 0.0) : 0.0; }
激しく無意味だな。スマン無視してくれ。
>>564 これは一体何でしょう?
実数を返したいんじゃないの???
enum states -> double で。
>>568 ありがたいんですけど
これちょっと使いかたわからなくて。
gcc ans478.cして実行のときになにか入力しないといけないんですか?
本来なら ans478 と打って実行するところを ans478 < data.txt のようにしてdata.txtを標準入力にリダイレクト
>>489 #include<stdio.h>
int main(void){
int i, num, max=0;
for(i=20071114;i<=20071114+6-1;i++){
scanf("%d", &num);
if(num>max) max=num;
}
printf("%d\n", max);
return 0;
}
>>570 できました。。。
さっきできなかったのに。
ありがとうございます。
自分で作りなおしてから
できなかったらこれも試してみます
[1] 授業単元:統計学
[2] 問題文:
対数の足し算をするプログラムをつくれ。ただし計算
で用いるのはlog(x)=-1.966113,log(y)=-103.23,log(z)=-80.98,log(w)=0を用いよ。
(1)log(X+Y)
(2)log(X+Y+Z)
(3)log(W+X+Y+Z)
x=0.14 x=0.000000000000000000422
y=0.000000000000000023134 w=1ですが、w,x,y,z,を足してlogかけた値が
(4)になります。
しかしこの問題ではlogの値をexpかけずに計算せよ。
対数の足し算は以下を用いよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5273.txt [3] 環境
[3.1] OS: LINUX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 11月16日24:00
[5] その他の制限:
お願いします。
>>571 int main(void) は間違い。
>>576 何がどう間違いなのか説明してみろカス
逃げるなよ
まさか、そんなところに食いつく奴が居るとは思わなかった。
どうなんだ?
ISO9899:1999でも読めば?
他のスレでやれ
>576は思い込み。 >577はスレ違い。
>>577 古いCではvoid型ってのが無い。
void型が登場するのは比較的新しいCから
とかか?
オレとしては
>for(i=20071114;i<=20071114+6-1;i++){
の部分が非常に素晴らしい実装方法だと思うが
585 :
デフォルトの名無しさん :2007/11/16(金) 12:22:41
>>571 ありがとうございました。
これで単位を落とさずに済みそうです。
営業マンのトップと平が同じ給料でやる気するかよw 仕事だからな、完全実力主義の 格差は当たり前
[1] 授業単元: 専門演習 [2] 問題文(含コード&リンク): 数学の点数を読んで、クラスの平均点と最低点を求めるプログラムを書きなさい [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: ? [3.3] 言語: C#(C、C++じゃなくて申し訳ないです) [4] 期限: 11/23まで [5] その他の制限:できるだけ簡易なプログラムで。 よろしくお願いいたします。
589 :
デフォルトの名無しさん :2007/11/16(金) 17:25:22
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク): モンテカルロ法を用いπの近似値を求める。正方形の面積は1、その中の四分円の面積はπ/4。 この正方形内に入る大量の点P(x,y)を生成する。これらの点が、四分円に入るか入らないかで分け、最終的に入ったものと入 らないものの個数の比を求める。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C/C++ [4] 期限: 2007年11月24日 [5] その他の制限: なし
ぱそこんの使い方がわかりません 2007/11/16まで
591 :
デフォルトの名無しさん :2007/11/16(金) 18:54:48
[1] 授業単元:プログラミング、関数基礎 [2] 問題文(含コード&リンク): メイン関数において、2つの放物線 y=ax2+bx+c y=px2+qx+r の係数a、b、c、p、q、rをキーボードから入力し、その数値を関数に引数として渡す。 関数はその数値を用いて2曲線の交点の有無を調べ、その交点の個数を戻り値とし てメイン関数に渡す(交点が無い場合は0、交点が1つの場合は1、交点が2つの場 合は2、交点が無限に存在する場合はー1を戻り値にする)。また関数は、もし交点が 有限個存在するならばそれらの交点の座標値をメイン関数に渡す。メイン関数は関数 から得たこれらの情報を得て、交点の個数を画面に表示し、さらにもし交点が有限個 存在するならばそれらの座標値を画面に表示する。そのようなプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C [4] 期限: 2007年11月18日 [5] その他の制限:C言語の基礎しか習っていません。 どなたかよろしくお願いします。
592 :
デフォルトの名無しさん :2007/11/16(金) 19:21:23
>>587 早い!!
自分もC言語解説サイト見ながら作っていたのですが、最終的にはコンパイラ
通らなくて、どこが間違えているのかも分からなくて困っていました。
>>587 とても参考になります。分かりやすく書いていただき感謝しています。
半角・全角表示については提出の際に聞いてみて、必要に応じて自分で修正しますので大丈夫です。
594 :
デフォルトの名無しさん :2007/11/16(金) 19:49:20
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): @ 3×10の2次元配列を用意する。 A キーボードから任意の文字列を3つ入力し、配列に入れる。 B その入力データーから文字tがあるかどうかを判定し、見つけた場合、下図のように その2次元配列の場所をすべて画面に表示し、見つけた個数も表示する。 入力データ;Computer、Data、Internet 図 [0]行目の文字列を入力_>Computer [1]行目の文字列を入力_>Data [2]行目の文字列を入力_>Internet [0]行目[5]列目に文字tを発見 [1]行目[2]列目に文字tを発見 [2]行目[2]列目に文字tを発見 [2]行目[7]列目に文字tを発見 文字tを全部で4文字見つけました [3.1] OS: Windows [3.2] コンパイラ名とバージョン: 指定なし [3.3] 言語: C [4] 期限: 2007年11月19日 [5] その他の制限: 初心者ですので、簡単なプログラムでお願いします。
595 :
デフォルトの名無しさん :2007/11/16(金) 19:50:19
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): @ 3×10の2次元配列を用意する。 A キーボードから任意の文字列を3つ入力し、配列に入れる。 B その入力データーから文字tがあるかどうかを判定し、見つけた場合、下図のように その2次元配列の場所をすべて画面に表示し、見つけた個数も表示する。 入力データ;Computer、Data、Internet 図 [0]行目の文字列を入力_>Computer [1]行目の文字列を入力_>Data [2]行目の文字列を入力_>Internet [0]行目[5]列目に文字tを発見 [1]行目[2]列目に文字tを発見 [2]行目[2]列目に文字tを発見 [2]行目[7]列目に文字tを発見 文字tを全部で4文字見つけました [3.1] OS: Windows [3.2] コンパイラ名とバージョン: 指定なし [3.3] 言語: C [4] 期限: 2007年11月19日 [5] その他の制限: 初心者ですので、簡単なプログラムでお願いします。
596 :
デフォルトの名無しさん :2007/11/16(金) 19:52:16
すみません595ですが図のところがずれました
きみの頭もか?
べ、べつにうまくなんてないんだからね!
[1] 授業単元:C入門 [2] 問題文 配列 (の先頭アドレス) a とそのサイズ n を受け取り, 要素を逆順に並び換える (a[0]=1, a[1]=9, a[2]=2, a[3]=6 を a[0]=6, a[1]=2, a[2]=9, a[3]=1 にする) 関数 array_reverse(int *a, int n) を作成せよ また、次のようにデータ 0 をターミネータとするものに書き換えよ. 例えば, 配列 a に 4 個のデータ 10, 11, 12, 13 を記憶する場合には, a[0]=10, a[1]=11, a[2]=12, a[3]=13, a[4]=0 のように記憶する (0 がデータの終わりを表す). データ数を別途他の変数で記憶することはしない. void array_input(int *a) … データ数は入力しない. 最初から0番目のデータ, 1番目のデータ, …, を順に入力し, 0 を入力した時点で終了するようにする. 引数は配列 (の先頭アドレス) a だけで, データ数は特にセットしない. void array_print(int *a), void array_reverse(int *a) … 配列 (の先頭アドレス) a のみ渡し, データ数は渡さない. main は次のようになる. [3.1] OS: Windows [3.2] コンパイラ名とバージョン: 指定なし [3.3] 言語: C [4] 期限: 2007年11月19日 [5] その他の制限: ポインタを用いる
>>599 の問題文続き
int main(void)
{
int a[ARRAY_MAX];
array_input(a);
array_print(a);
array_reverse(a);
array_print(a);
return 0;
}
601 :
デフォルトの名無しさん :2007/11/16(金) 21:11:21
C++初心者なのですが class Foo { void stop(int input[]); void walk(int input[]); void (*po[2])(int input[]) = {stop,walk}; 〜〜 } において、関数ポインタのところで "{"の前に予期せぬトークンがあるとエラー吐いてしまいます。 C++、というかクラス内でのこういった関数ポインタの定義はまちがっているのでしょうか?
>>599 void array_reverse(int *a, int n)
{
int *p = a + n - 1, temp;
while(a < p) {
temp = *a;
*a++ = *p;
*p-- = temp;
}
}
void array_reverse(int *a)
{
int *p = a, temp;
while(*p) p++;
while(a < --p) {
temp = *a;
*a++ = *p;
*p = temp;
}
}
void array_input(int *a)
{
do {
scanf("%d", a);
}while(*a++);
}
void array_printf(int *a)
{
while(*a) printf("%d ", *a++);
putchar('\n');
}
>>592 エラー文をここに書いたらよかったのに。
まぁ、見たら大体どんなエラーか想像もつくし。
>>602 ありがとうございます。array_inputのところ、自分が書いたのは
void array_input(int *a)
{
int i;
for (i=0;a[i]!=0;i++) {
printf("%d 番目の要素 = ", i);
scanf("%d", &a[i]);
}
}
なのですが、これでは何故か0で止まらないのです。
ご教授いただければありがたいです
0入れてからi++してるから
そりゃ数値を入れた直後にインクリメントして、何も入ってないところで終了条件チェックしてるからそうなる。
>>599 です。たびたびすんません
void array_reverse(int *a)
{
int i,temp[ARRAY_MAX],d;
for (d=0,i=;i>=0;d++, i--)
{
temp[d] = a[i];
}
for(i=0;i<;i++)
{
a[i]=temp[i];
}
}
要素数が引き継げないとき、最初のfor文のiの値には何を入れればよいでしょうか。
番兵
ググってみましたが、0のことでしょうか
>>543 ,
>>563 について宿題を解いてもらったんですけど
その宿題を今利用してプログラムを作ってるんですけど
正規分布の結果を実際はlogで計算し、移動確率もlogで計算するんです。
>>257 のプログラムは現在の状態確率に移動確率をかけ、その移動先のsp2に
代入し、一回ループ終え、sp2をspにいれ現在の状態確率とするだとおもうんですけど
対数で計算する場合、+=でどんどん足していくってことはできないんです。
2つずつ計算していかないといけないんです。
sp*gs->???_pのところはlog(sp)+log(gs->???_P)で計算できるんですが
問題はsp2でたまるところなんです。ここはどうすべきでしょうか?
614 :
デフォルトの名無しさん :2007/11/17(土) 00:13:27
π≒4煤o(-1)のn乗/(2n+1)}*{(1/2)の2n+1乗+(1/3)の2n+1}を用いて小数第8位まで正しい値(3.14159265)を出力し、そのπの値を用いて入力された数値εに対して、次の不等式を満たす最小の自然数Nを求めるプログラムを作れ。|(πの2乗/6)-1/kの2乗|<ε 最初のシグマはn=0から100で2個目はk=1からNまでです。関数は使わないで基本的なfor,if,while,dowhileなどだけでお願いします。見にくくてすいません。。。
質問テンプレ無視すなよ。
616 :
614 :2007/11/17(土) 00:21:21
分からないなら答えなくて結構ですよw 他の方お願いしますね
分らないじゃなくルールを守らないと答えがきませんよって事っすよw
620 :
614 :2007/11/17(土) 00:42:52
ここのヤツ答える気ねーのかよ。 テンプレなんてふぉうでもいいやねーかよ。 もういい、自分でやるから。
そもそも自分で考えれる もしくはどこかにのってるような質問を 最初からすなと。
>>620 何で喧嘩腰の奴の宿題やらなきゃならんのだ。
614の書いたソースは間違いなく誰もが きたねえな と思うだろう
はっきり言ってCで数値計算やりたがる奴は変態だと思う。
625 :
380 :2007/11/17(土) 01:00:44
ruby か python か lisp あたりでやるのがベストだとおも(ry ただ、、、この中でベストを決めるのは難しい。
>>627 俺はそのプログラムで一瞬に頭が冷却されたw。
すごい、すごすぎるw。
629 :
612 :2007/11/17(土) 01:05:38
おれ変体だよ。。。 gs->next_gs->sp2 と(spp + gs->next_p)を比較していって 違うとこにいれて またgs->next_gs->sp2にその値でもいれようかな。。。 しかしこの計算あってるかどうか 最終的な値をだしてからじゃないとわからないから困る。
>>627 おまえ、やさしいな。基本に忠実だしな。
>>627 わざわざ実行できる様にしてある優しさに泣けてくる。
#include <stdio.h> void main(){ for(;;){ printf("( ´ω`)<まあ、頭冷やしてこいや)" ); } } これくらいしないと足りないかもしれない。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):度数分布の作成 20人分の身長データのリストを入れた下記の配列dataがある(単位はメートル)。これを元に 平均身長と1.3m〜2.0mの範囲で10cm 刻みの度数分布を表示するプログラムを作りなさい。 ..... double data[ ]={ 1.73, 1.68, 1.89, 1.65, 1.60, 1.75, 1.80, 1.75, 1.83, 1.90, 1.68, 1.77, 1.62, 1.58, 1.53, 1.49, 1.80, 1.72, 1.70, 1.69 }; int main(void) { ..... [期待される実行結果] 平均身長1.71m 1.3m : 1.4m :* 1.5m :** 1.6m :****** 1.7m :****** 1.8m :**** 1.9m :* 2.0m : [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月19日 [5] その他の制限:Cを勉強し始めてまだ1か月なのでできるだけ 簡単なプログラムでお願いします。
>>632 やべー腹痛い。
そんなに回さないと駄目か。
せめてfor(;;)じゃなくてfor(i=0;i<101;i++)にしてあげようよ。
>>634 駄目だ笑いすぎて間違えた、なんで101にしてるんだろ俺。
636 :
625 :2007/11/17(土) 01:38:51
>>614 と同じ人だろ?>380=>614
いちいち「>614のはやってやらなくていいんで」なんて書かなければいいのに。
どうせ、プログラム作ってやっても礼のひとつも無い。
最悪「遅せ〜よ糞」とか返ってきそうだし、
>>380 やるのやめとこ。
それに>614 >620の日本語おかしいよ?機械言語やるより日本語やった方がよくない?
omaemona-
638 :
380 :2007/11/17(土) 01:50:10
>>636 いや614は他人
「>614のはやってやらなくていいんで」とか余計なこと書いたのは悪かった。
人に宿題頼んどいて「遅せ〜よ糞」とか言うヤツいないでしょ普通。
お願いします。
ニコニコ動画の時報ウゼー
>>636 >>機械言語やるより日本語やった方がよくない?
かなり笑った。
642 :
デフォルトの名無しさん :2007/11/17(土) 02:55:26
このすれはなんぞ
初心者が初心者に代わって宿題をやるスレです
648 :
601 :2007/11/17(土) 09:35:36
自己解決しました 宣言時じゃなくて定義時メンバ関数内で void (Foo::*po[])(int a[]) = {&Foo::hoge,&Foo::hogehoge}; のようにすれば、いけました まだクラスのルールがよく理解できていないようです
スレ違いに気がつけよ
まともなC++専用の質問スレが見当たらなかったので・・
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 次のような二人で行うゲームを考える: 縦が n, 横が m の板チョコがある. プレイヤーはこれを縦か横かどちらかに割り, 片方を取り去る. プレイヤーは交互にこの操作を繰り返すが, 割れなくなったほうが負けとする. 例: 3×2 のとき.プレイヤー1が 1×2 と 2×2 に割って 2×2 を取り去る. 残った 1×2 をプレイヤー2が 1×1 と 1×1 に割って 1×1 を取り去る. 残った 1×1 をプレイヤー1は割れないので,プレイヤー2の勝ち. 問1.n, m が与えられたとき,先手勝ちか後手勝ちかを表示せよ. ただし n, m は高々2000 とする. 問2.コンピュータと対戦できるようにせよ. ただしコンピュータは最善を尽くすものとする. [3] 環境 : OS コンパイラ問わず,C/C++どちらでも良し [4] 期限: 11/20 まで. [5] その他の制限:特になし
>>651 > ただしコンピュータは最善を尽くすものとする
最善ったって色々あるんだぜ、
1 早く試合を終了させる
2 試合で相手に勝つ
3 試合で早く相手に勝つ
4 …
5 …
みたいな目標があって、初めて最適化できるんだが、
実際はどんな目標で最適化されたコンピュータなんだ?
>>653 650は「まともじゃない」と判断したんじゃね?w
[1] 授業単元: プログラミング言語・配列 [2] 問題文(含コード&リンク): 文字の出現回数を数える 標準入力から入力された 'a' から 'z' までの文字の出現回数を数えるプログラムを作成せよ。 各文字の出現回数は、大きさ 26 の配列 kaisuu に格納するものとする。初期化を忘れずに! また、'a' から 'z' までの小文字の英字以外はカウントせず、無視するものとする。 以下のプログラムを参考にせよ。 char c; ... while ( (c=getchar()) != '\n' ){ /* リターンが押されるまで読み込む */ /* ここに 'a' から 'z' のどれが出現したかを数えるプログラムを書くこと */ } /* どの文字が何個あったかを出力する */ ヒント 文字変数 c は、 c - 'a' を計算すれば、要素の番号になる。 例えば、 c に 'a' が入っていれば、 c - 'a' は、0 になる。 [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc [4] 期限: 11月19日 [5] その他の制限: 特になし >352と同じ問題です。 解答が出ていないようなので再度質問させていただきました。 すみませんがよろしくお願いします。
656 :
デフォルトの名無しさん :2007/11/17(土) 15:48:57
【質問テンプレ】 [1] 授業単元: c言語 [2] 問題文(含コード&リンク): x[a][b]の内容をy[a][b]に移す [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: c [4] 期限: 2007年11月19日 [5] その他の制限: 特になし よろしくお願いします
657 :
651 :2007/11/17(土) 15:54:57
>>652 特に指定はありませんが、「勝てるときには絶対勝つ」くらいでよいと思います。
>>651 今応えられる環境じゃないのでヒントだけ
問1.
if(n==m){
//後手の勝ち
}else{
//先手の勝ち
}
問2.
常にn=mの状態で相手に渡せば絶対に負けません。
たぶん・・・
659 :
デフォルトの名無しさん :2007/11/17(土) 16:20:25
1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): 以下の4点(x,y)のとり得る近似直線y=ax+bの aとbを求めなさい。但しa,bは小数点以下3桁までで、 4桁目を四捨五入して求めること。 (16, 0.987) (32, 1.879) (48, 2.980) (64, 3.799) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: c [4] 期限: できるだけ早く [5] その他の制限: 特になし よろしくお願いいたします。
>>651 #include<stdio.h>
int main(void){
int m=2000,n=2000,o,p,i;
printf("1 : プレイヤー 対 コンピュータ\n2 : コンピュータ 対 プレイヤー\n3 : プレイヤー 1 対 プレイヤー 2\n");
scanf("%d",&o);
o&=3;
for(p=1;;p^=3){
printf("\n%d x %d\n\n",m,n);
if(m*n<2)break;
if(p==1)printf("先手の番です\n");
else printf("後手の番です\n");
if(o&p){
do{
printf("縦分割なら正数、横分割なら負数で入力してください ");
scanf("%d",&i);
}while(i>0&&i>=m || i<0&&-i>=n || i==0);
if(i>0)m-=i;
else n+=i;
}else{
if(m>n)m=n;
else if(m<n)n=m;
else m=1;
}
}
if(p==1)printf("先手の負け\n");
else printf("後手の負け\n");
return 0;
}
>>651 与えられた初期のチョコの
・m×nが偶なら先攻の負け
・m×nが奇なら先攻の勝ち
となる。
ということで、プレイヤーは自分が取り除いた後のm'×n'が偶になるように保てば負けない
なぜかというと、
・1×1が与えられた時、先攻が負け(自明)
・1×nが与えられた時、先攻が勝つ
という理由から。
662 :
デフォルトの名無しさん :2007/11/17(土) 17:33:16
>>655 ホイ
#include <stdio.h>
#include <string.h>
static char alphastr[] = "abcdefghijklmnopqrstuvwxyz";
static int kaisuu[sizeof(alphastr)-1];
int
main(void)
{
char c, *p;
int i;
memset(kaisuu, 0, sizeof(kaisuu));
while ((c = getchar()) != '\n') {
if ((p = strchr(alphastr, c)) != NULL) {
kaisuu[p-alphastr]++;
}
}
for (i = 0; i < sizeof(alphastr)-1; i++) {
if (kaisuu[i] != 0) {
printf("%c文字が%d個見つかりました。\n", alphastr[i], kaisuu[i]);
}
}
return 0;
}
663 :
デフォルトの名無しさん :2007/11/17(土) 17:51:38
>>656 memcpy(y, x, sizeof(y));
>>661 >・m×nが偶なら先攻の負け
>・1×nが与えられた時、先攻が勝つ
nが偶数の時矛盾するだろw
670 :
655 :2007/11/17(土) 21:10:36
>>662 ありがとうございます。
別解としてmemsetやポインタを使わないとすると、どのような解になるでしょうか。
ポインタが未習であることを書き落としていました。すみません。
>>651 チョコレート分割問題
・n, mが与えられた時、n=mなら先攻の負け。
・n, mが与えられた時、n≠mならn=mと成る様に先攻が取り去れば先攻の勝ち。
>>651 >>658 1*1のときは明らかに先手の負け。
1*1,2*2,...,(k-1)*(k-1)のとき先手が負けると仮定すると、k*kのときは、
先手が縦方向にj列折ったら、後手は横方向にj列折れば(k-j)*(k-j)になる。
このとき仮定から先手は負ける。もちろん縦横をひっくり返しても同じ。
というわけで658の意見は正しい。
>>655 ,
>>670 >>668 はどうですか?
なお、static な変数はプログラムの実行時に最初に一度だけ 0 で初期化されます。
したがって、
>>662 の memset は必要ありません。
674 :
651 :2007/11/17(土) 22:39:46
皆様ありがとうございます、こんなにすぐに回答が来るとは思っていませんでした。 n = m にするくらいならプログラムを書けるとおもうのでやってみます。
675 :
デフォルトの名無しさん :2007/11/17(土) 22:50:10
>>670 #include<stdio.h>
#define MAX 26
int main()
{
char c;
int kaisu[MAX]={0}; int i;
printf("文字を入力>");
while((c=getchar())!='\n'){
if('a'<=c&&c<='z'){ kaisu[c-'a']++;
}
}
for(i=0;i<MAX;i++;){ if(kaisu[i]!=0){
printf("%c=%d回\n",'a'+i,kaisu[i]);
}
}
return 0;
}
676 :
デフォルトの名無しさん :2007/11/18(日) 00:24:41
>>673 >なお、static な変数はプログラムの実行時に最初に一度だけ 0 で初期化されます。
これは環境依存の話だね。
さらにいえば、出題の
「ヒント 文字変数 c は、 c - 'a' を計算すれば、要素の番号になる。 」
というのも環境依存。だから、
>>662 のほうが環境依存じゃない
そもそも出題で環境を限定しているからいいかもしれないけど、
なるだけ環境に依存しない書き方を心がけたほうがいい。
>>676 ISO/IEC 9899:1999
All objects with static storage duration shall be initialized
(set to their initial values) before program startup.
>>676 そんなに環境依存に気を使ってどうするの?
宿題を他へ移植するつもりなの?
679 :
655 :2007/11/18(日) 00:49:33
>>668 >>673 ありがとうございます。
レスを見逃してしまっていました。すみません。
>>675 回答ありがとうございます。
出していただいた解答を参考にやってみます。
>>677 their initial valuesは定義されてるの? 実装依存?
>>680 ISO/IEC 9899:1999
if it has pointer type, it is initialized to null pointer;
if it has arithmetic type, it is initialized to
(positive or unsigned) zero;
if it is an aggregate, every member is initialized
(recursively) according to these rules;
if it is a union, the first named member is initialized
(recursively) according to these rules.
>>662 は一味違う俺をアピールするために仕様を無視したオナニーコードを書いた挙句、
Cの仕様もわかってなかったと。
685 :
680 :2007/11/18(日) 01:22:52
どのsizeofのこと?
687 :
380 :2007/11/18(日) 01:25:04
>>647 遅くなってしまいましたが、ありがとうございます。
勉強になります。
689 :
デフォルトの名無しさん :2007/11/18(日) 02:37:42
>>684 普通だぞ。
移植性が重要な、libcのソースコードとか読んでみろ。
>移植性が重要 宿題スレでこれは本当にオナニーじゃなくて普通のことなのか?
691 :
デフォルトの名無しさん :2007/11/18(日) 05:30:16
>>690 普段からそういう書き方になれることが重要だと
言っているだけだよ。普段からそうしていないのに、
いざ移植性の高いコードを書くように要求されても
かけないと思う。
1] 授業単元:確率論
[2] 問題文(含コード&リンク):
前に
>>257 にて作ってもらったプログラムを
参考にある程度作れたんですけど
確率をsp2にどんどん足していくっていう。これを対数で計算できるように
変更していただきたいんですが。
対数で計算する場合には足し算する2つを
比較して計算をしないといけないんですけど、
gs->sp2 += spp * gs->self_p;
gs->next_gs->sp2 += spp * gs->next_p;
gs->side_gs->sp2 += spp * gs->side_p;
でlog(spp)+l右辺はlog(gs->??_p)でいいんですが
問題はたしていくとこなんです。
前のに対数計算もいれたのがこれです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5287.c [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: c
[4] 期限: できるだけ早く
[5] その他の制限: 特になし
よろしくお願いします。
#define SHI 5 ぬけてました。
694 :
デフォルトの名無しさん :2007/11/18(日) 05:35:30
>>682 実際問題、メモリをOS起動時にゼロクリアするかなんて、
現場ではけっこう実装者のさじ加減しだいだったりする。
組み込みなんかでは特に。
ソフトリセットの時間短縮のために、メモリゼロクリア
しないなんてことはあるよ。
>for (i = 0; i < sizeof(alphastr)-1; i++) { 俺は条件判定部で無駄な演算するヤツの言うことは信用しない
696 :
デフォルトの名無しさん :2007/11/18(日) 06:37:15
>>695 どこに無駄な判定があるのだ?
sizeofはコンパイル時に決定されるのだぞ。
(・∀・)ニヤニヤ
698 :
デフォルトの名無しさん :2007/11/18(日) 06:45:01
?
700 :
デフォルトの名無しさん :2007/11/18(日) 06:48:19
>>699 他者とのコミュニケーションの仕方を教えてくれって言ってるのか?
アマッタレンジャナイ
予想どおりに発狂したw
702 :
デフォルトの名無しさん :2007/11/18(日) 06:52:28
>>701 こういう人間って、どう接したらいいのだろう?
他人ならムシすればすむけど、自分の子供がそうなったらと
思うとゾットしないな。
君の親御さんに同情するわ。
>>694 そんなオレオレ実装の「C言語」の話をされても困る。
特殊環境の話をするならば事前に断るのが筋だよね。
宿題の設定を無視したあげく、俺様理論の展開か……
とりあえず
>>655 に関しては、
> ヒント 文字変数 c は、 c - 'a' を計算すれば、要素の番号になる。
ていうやり方を初めて見たけれども
これは良く使うテクニックなのかどうか
こちらの環境(win XP, bcc5.1.1)ではきちんと動くけれどもlinuxのgccでも大丈夫なのか、
そこまで追及するならcのヘッダファイルを全て解析できるくらいのスキルが必要ではなかろうか、
もっというなら、機械語とアセンブリについても相応の知識が必要なんじゃないか、
……とか、比較的低水準な事を想定して作られたc言語はいろいろと難しいと思う。
結論 : 「c - 'a' を計算すれば、要素の番号になる」という実装はとてもいかがわしい。
良く使うテクニックだし、疑わしくも無い。 それが通用しない環境でプログラミングする場合は、事前にそうとわかるはずだから問題なし。
それを初めて見たような奴が、なにえらそうに語っちゃってるんだよwww
709 :
デフォルトの名無しさん :2007/11/18(日) 11:13:53
konosurehananisuredesuka
>>706 Rationale
The solution is an international agreed-upon repertoire in
terms of which an international representation of C can be
defined. ISO has defined such a standard, ISO/IEC 646,
which describes an invariant subset of ASCII.
Rationale だから仕様ほど強くはないが、事実上
ISO/IEC 646 に従っていることは仮定してよい.
そして ISO/IEC 646 では c-'a' で a から数えた
(普通のアルファベットでの)番号が得られる.
711 :
668 :2007/11/18(日) 11:27:25
>>706 当方、Linuxで確認してますが...。
c-'a' の手法は K&R2 section 1.6 にもある、比較的知られた方法ですが...。
文字セットの仕様は普通ヘッダファイルには載っていないものですが...。
#宿題待ってます。691 は元の問題がわからないので、再度掲載を希望します。
712 :
711 :2007/11/18(日) 11:46:28
>> 691
失礼、問題は
>>257 のソースにありましたね。
>>696 sizeof がコンパイルタイムに決定されることは規定されていない.
むしろ次の記述が示すように,実行時に決定されることもある.
ISO/IEC 9899
EXAMPLE3 In this example, the size of a variable-length array is
computed and returned from a function:
#include <stddef.h>
size_t fsize3(int n)
{
char b[n+3]; // variable length array
return sizeof b; // execution time sizeof
}
>>686 遅レスだけど、charが1バイトであることを前提にsizeofしてるから
wchar_tとか他のサイズの型に変更したときにミスしそう
移植性というより汎用性の問題になってくるのかな?
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 自然数 n ≦ 8000 と整数 k_2, ..., k_n が与えられる。 このとき、整数 1, ..., n を並べ替えたものの中で、 ・ 2 番目の要素よりも小さな要素は 2 番目の前には k_2 個 ・ 3 番目の要素よりも小さな要素は 3 番目の前には k_3 個 ... ・ n 番目の要素よりも小さな要素は 3 番目の前には k_n 個 という条件を満たすものを求めよ。 例1:n = 5, k_2 = 0, k_3 = 0, k_4 = 0, k_5 = 0 → 5 4 3 2 1 例2:n = 5, k_2 = 1, k_3 = 2, k_4 = 1, k_5 = 0 → 2 4 5 3 1 [3] 環境 [3.1] OS: Windows (Cygwin) [3.2] コンパイラ名とバージョン: gcc 4 [3.3] 言語: どちらでも可 [4] 期限: 11月20日まで [5] その他の制限: ありません
>>716 × ・ n 番目の要素よりも小さな要素は 3 番目の前には k_n 個
○ ・ n 番目の要素よりも小さな要素は n 番目の前には k_n 個
だよな
それよりも二個目の"は"が難解さを醸し出す
720 :
716 :2007/11/18(日) 12:37:53
>>718 はい、そうです。貼り付けたときにまちがえました、すみません。
>>719 日本語が下手ですみません。
721 :
デフォルトの名無しさん :2007/11/18(日) 12:39:50
>>716 後ろから決めていけばよい
例えば1からNまでとして、k(n) < nとする
まだ使用されていない数字をsu[n]に記録しておき(使用済みなら0にする)
su[n]の先頭から1を足して k(N-1) + 1 となった番号を一番最後に持ってくる
722 :
デフォルトの名無しさん :2007/11/18(日) 12:40:39
[1]プログラミング2 [2] 各科目の平均値を表示するプログラムを作成します。(score table)のフォーマットに従った配列listとレコードを指定する整数indexを引数とし、index番目のレコードの先頭アドレス(つまり英語の得点の入った要素のアドレス)を返す関数 int * get_rec(int * list, int index) を作成しなさい。また、これを利用して配列listと科目を指定する整数sub(英語:0, 国語:1, 数学:2, 理科:3, 社会:4)を引数として、subに指定した科目の平均値を返す関数 double sub_average(const int * list, int sub) を作成し、プログラムを完成させなさい。
723 :
デフォルトの名無しさん :2007/11/18(日) 12:41:39
#include <stdio.h> #define MAX 101 /* 得点を入れる配列の最大値 */ #define REC 5 /* 1レコードの要素数 */ #define SUB 6 /* 科目名の文字数 */ char sub[REC][SUB]={"英語","国語","数学","理科","社会"}; /* 関数作成 */ int list_len(const int * list); int list_len(const int * list) { return list[0]; } int main() { /* 変数は適切に宣言する */ int size, x, y; int *p; int score[MAX]={3, /* レコード数 */ 45, 60, 36, 72, 53, /* 1レコード目 */ 87, 48, 77, 69, 91, /* 2レコード目 */ 23, 54, 49, 58, 62}; /* 3レコード目 */
724 :
デフォルトの名無しさん :2007/11/18(日) 12:42:36
#include <stdio.h> #define MAX 101 /* 得点を入れる配列の最大値 */ #define REC 5 /* 1レコードの要素数 */ #define SUB 6 /* 科目名の文字数 */ char sub[REC][SUB]={"英語","国語","数学","理科","社会"}; /* 関数作成 */ int list_len(const int * list); int list_len(const int * list) { return list[0]; } int main() { /* 変数は適切に宣言する */ int size, x, y; int *p; int score[MAX]={3, /* レコード数 */ 45, 60, 36, 72, 53, /* 1レコード目 */ 87, 48, 77, 69, 91, /* 2レコード目 */ 23, 54, 49, 58, 62}; /* 3レコード目 */
725 :
デフォルトの名無しさん :2007/11/18(日) 12:43:48
p=score+1; size=list_len(score); /* ここに書く */ for (x=0 ; x<REC ; x++) { printf("+----+"); } printf("\n"); for (x=0 ; x<REC ; x++) { printf("|%s|", sub[x]); } printf("\n"); for (x=0 ; x<REC ; x++) { printf("+----+"); } printf("\n"); for (y=0 ; y<size ; y++) { for (x=0 ; x<REC ; x++) { printf("|%4d|", *p);
726 :
デフォルトの名無しさん :2007/11/18(日) 12:47:23
p++; } printf("\n"); for (x=0 ; x<REC ; x++) { printf("+----+"); } printf("\n"); } } ↑を使ってお願いします。 [3] 環境 [3.1] OS:win xp [3.2] Microsoft Visual Studio 2005 [3.3] 言語:C言語 [4] 期限:2007年11月20日まで [5] その他の制限:ポインタのあたりまで
728 :
デフォルトの名無しさん :2007/11/18(日) 12:54:34
1よまずに書き込むなよ。
730 :
デフォルトの名無しさん :2007/11/18(日) 13:02:20
新企画だと変数配列できる
>>730 新規格があるんだ?
知らなかった…。
教えてくれてありがとう
732 :
デフォルトの名無しさん :2007/11/18(日) 13:15:24
[1] 授業単元:アルゴリズム論 [2] 問題文(含コード&リンク): 入力データ数は制限なしとする。 リスト構造を作り、画面からデータを出力。データは末尾から加える。 データを指定し、削除する。 削除後のデータを画面に表示。 これを満たすプログラムを作成 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年11月18日16:30まで [5] その他の制限: なし
>>733 これってuserクラスをつくってもいいんだよな?
そうしないと何かが釈然としない
>>733 基本料金だけで使える時間(FLetzADSLは10分, YohooBBは30分, NifdyADSLは20分)
ってのをメンバ変数に出来ないのも釈然としない
736 :
デフォルトの名無しさん :2007/11/18(日) 13:46:16
[1] 授業単元:数値計算 [2] 問題文(含コード&リンク): x1 x2 色番号 1.0 1.1 3 1.0 1.2 1 1.0 1.3 2 ・ ・ ・ 2.0 2.0 0 のようなテキストデータが与えられているとする。 色番号は0から3まである。 色番号によって任意の色を対応させ、(たとえば0:黒 1:赤 2:黄色 3:赤) x1とx2をプロットした2次元のグラフを出力せよ。エクセル等でプロットしてみよ。 ・・・・・ ・・・・・ ・・・・・ のようなグラフの点が色わけされたものである。 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 明日 [5] その他の制限: 特になし
なんだこの宿題の数 おれの宿題とやらは流されそうだな。。。
>>736 OpengGLとかDirectXとかを使ってもいいのか?
>>738 OKです。とりあえずエクセルかなんかのグラフが出せればいいです。VBAとかでもOKです。
点数が10000個とかあるんで、それが一つ一つ認識できるようにしてほしいです。
ぶっちゃけこの課題を直接だされたわけじゃなくて、レポートの中でこういうことが必要で、問題を自分で作ったので・・・
740 :
デフォルトの名無しさん :2007/11/18(日) 14:35:41
>>608 (13) ";"が"型"の前にありません
(16) retc:定義されてない関数です
とエラーがでます。
743 :
732 :2007/11/18(日) 15:13:55
>>741 本当に助かりました!!!ありがとうございました!!
>>721 それだと O(N^2) だよね。n = 8000 のときに時間がかかりそうだけど。
745 :
デフォルトの名無しさん :2007/11/18(日) 15:32:18
Nの 1〜5倍くらいだろう
>>715 問題文はそれで全部なのか?
とりあえず、
問3はfgets使え
問4はif(kosu<=10000)でエラー
748 :
715 :2007/11/18(日) 17:14:48
>>747 ありがとうございます。
問2に関して追記があります。
ポインタ値を交換するようにするとのことです。
プログラム全く理解いてないもので問3についても、
もう少し詳しくおねがいします。
749 :
デフォルトの名無しさん :2007/11/18(日) 17:14:58
>>713 そんなコンパイラ実装、実際にミタコトネーヨ
750 :
デフォルトの名無しさん :2007/11/18(日) 17:16:21
>>608 460を実行したところ
(13) ";"が"型"の前にありません
(16) retc:定義されてない関数です
とエラーがでます.
どうしたらいいでしょうか。
C++ の話だけど、Modern C++ Design ではテンプレートで sizeof を使う話が載ってたな。
テンプレートはコンパイル時に全て型計算が終わるから、
>>713 の例はともかく、
コンパイル時に確定している sizeof に関してテンプレートで使えないって強弁するのもなぁ。
要するに sizeof がいつ計算されるかは決まって無いにしろ、コンパイル時に確定している型の
sizeof の計算が必ず実行時に計算されると発想するのは極端なんじゃないかな?
753 :
デフォルトの名無しさん :2007/11/18(日) 17:43:18
>>714 べつだん、
#define NELEMS(a) (sizeof(a)/sizeof(a[0]))
static char alphastr[] = "abcdefghijklmnopqrstuvwxyz";
static int kaisuu[NELEMS(a)];
としてもよかったけどな。やらなかっただけだ。
>>752 これは C の話だし,C++ を範疇に含めても
「コンパイル時に確定している sizeof に関してテンプレートで使えない」
「sizeof の計算が必ず実行時に計算される」
なんて考えている人は居ないと思うんだけど.特に template に関しては
ISO/IEC 14882
In several places, C++ requires expressions that evaluate to an
integral or enumeration constant: (略) and as integral or
enumeration non-type template arguments.
An integral constant-expression can involve only (略),
and sizeof expressions.
と,「sizeof は template 評価に必要なときは評価する」ことが保証されている.
755 :
デフォルトの名無しさん :2007/11/18(日) 18:00:33
>>750 608ではないが。。。
int retc;
の宣言を
double d1, d2, d3, D;
の前か後ろにカッぺすると吉。
>>749 713ではないが例えばgccとか。
c99の規格で可変配列が容認されたことでsizeofの仕様が一部変わって
可変配列のサイズを返すときだけは実行時に計算するようになったらしい。
しかしながらコンパイル時にサイズがわかっているものは
コンパイルタイムで計算される。
ソース:Lepton先生のCの強化書
757 :
◆Iyutn6izzo :2007/11/18(日) 19:15:33
[1] 授業単元:プログラミング2 [2] 問題文(含コード&リンク): 1〜100の範囲の乱数値を持つ要素数100の配列から、キーボードで入力した1〜100の範囲の値を探索し、 探索にかかった時間 と 入力値と同じ値を持つ全ての配列要素の添え字、同じ値を持つ配列要素の数を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C [4] 期限:2007年11月18日20:30まで [5] その他の制限:探索プログラムの基礎を勉強中 よろしくお願いします。
>>753 676が環境依存にこだわってるみたいだったから、
そっちはいいのかと気になっただけ
紛らわしいだけで問題ないんだけどね
[1] 授業単元:経路選択アルゴリズムの評価
[2] 問題文(含コード&リンク):
(これは前963の問題の続きです)
以下の手順に従い、経路選択アルゴリズムを評価せよ
・通信の発生 ランダムに送受信ノードを決定する
・通信の確立 与えられた送受信ノード間の経路を決定し、その経路上のリンクの空き容量を1Mbpsだけ減少させる。
ただし、経路上に空き容量のないリンクが存在する場合、この通信は確立しなかったものとして、何も行わない。
・通信の終了 n回前に発生した通信の経路上の空き容量を1Mbpsだけ増加させる。ただし、その通信が確立していなかった場合には何も行わない。
・評価 10000回の通信を発生させ、そのうちで確立できなかった通信の割合(呼損立)を求める
・試行の繰り返し パラメタnを変化させながら、上記の試行を繰り返し行う。
☆経路の決定に際して以下の4つの方法が考えられる(4つありましたが今回は二つだけの宿題です)
1、最小ホップ経路を用いた固定経路
2、最小ホップ経路を用いた要求時経路(経路選択時点で空き容量のないリンクをグラフから取り除く)
■対象とするグラフは図2に示すようなトポロジを用いよ。各リンクに付加された数字はリンク容量「Mbps」を表す
なおいずれの向きも等量であるとする。
http://bbs.2ch2.net/angstrom/?m=img&q=../angstrom/img/1183891422/0005.jpg ※最小ホップとは経由するノード数が一番少なくという意味です
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:11月22日朝8時
>>692 ですけど
すみませんができました
やってくださってた方、すみmせんでした。
761 :
759 :2007/11/18(日) 20:13:42
762 :
デフォルトの名無しさん :2007/11/18(日) 20:30:44
神経衰弱を行うゲームを作成すること。 ただし、カードは52枚全て使用し、絵柄の 区別は無いものとする。 配列を利用してください。
言語まちがってんじゃねえのか
>>757 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i,num[100],n,cnt=0;
clock_t start,end;
srand((unsigned int)time(NULL));
for(i=0;i<100;i++) num[i]=rand()%100+1;
printf("1〜100の整数入力:");
scanf("%d",&n);
printf("入力値と同じ値の配列番号:\n");
start=clock();
for(i=0;i<100;i++){
if(n==num[i]){
printf("%d\n",i);
cnt++;
}
}
end = clock();
if(cnt>0) printf("総数%d個\n",cnt);
else printf("見つかりませんでした。\n");
printf("実行時間:%lfsec\n",(double)(end-start)/CLOCKS_PER_SEC);
}
>>753 >static int kaisuu[NELEMS(a)];
突っ込むところはここですか
767 :
◆Iyutn6izzo :2007/11/18(日) 20:56:29
引き続いてお願いします。 [1] 授業単元:プログラミング2 [2] 問題文(含コード&リンク): 1〜100の範囲の乱数値を持つ要素数100の配列を、バイナリーファイルに書き込む。 キーボードから1〜100の範囲の任意の整数を入力し、その値が作成したバイナリーファイルに含まれている数を、 ファイルに読み込んで数え表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C [4] 期限:2007年11月18日22:30まで [5] その他の制限:探索プログラムの基礎を勉強中
>>595 #include <stdio.h>
main()
{
int i,j,cnt=0;
char str[3][10];
for(i=0;i<3;i++){
printf("[%d]行目の文字列を入力 >",i);
scanf(" %s",str[i]);
}
putchar('\n');
for(i=0;i<3;i++){
for(j=0;str[i][j]!='\0';j++){
if(str[i][j]=='t'){
printf("[%d]行目[%d]列目に文字tを発見\n",i,j);
cnt++;
}
}
}
printf("文字tを全部で%d文字見つけました\n",cnt);
}
769 :
デフォルトの名無しさん :2007/11/18(日) 20:59:33
762ですけど、カードは54枚です。
○日 25-22 チ● ●日 21-25 チ○ ○日 25-18 チ● ●日 22-25 チ○ ●日 14-16 チ○
771 :
デフォルトの名無しさん :2007/11/18(日) 21:24:20
[1] 授業単元:基礎情報 [2] 問題文 三次方程式を解くプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C [4] 期限:2007年11月21日 [5] その他の制限 このプログラムはぐぐればあるのですが、 他の人と同じプログラミングは減点すると言っていたので、 出来ればオリジナルのを作っていただけると助かります。
ここに書かれたプログラムとか減点どころか下手すりゃ単位出なくなりそうだが
>>767 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i,num[100],n,m,cnt=0;
clock_t start,end;
FILE *fp;
if((fp=fopen("c:/rnd.bin","wb"))==NULL){ printf("file can't open\n"); return; }
srand((unsigned int)time(NULL));
for(i=0;i<100;i++) num[i]=rand()%100+1;
fwrite(num,sizeof(int),100,fp);
fclose(fp);
if((fp=fopen("c:/rnd.bin","rb"))==NULL){ printf("file can't open\n"); return; }
printf("1〜100の整数入力:"); scanf("%d",&n);
printf("入力値と同じ値の配列番号:\n");
start=clock();
for(i=0;i<100;i++){ fread(&m,sizeof(int),1,fp);
if(n==m){ printf("%d\n",i); cnt++; }}
end = clock();
if(cnt>0) printf("総数%d個\n",cnt);
else printf("見つかりませんでした。\n");
printf("実行時間:%lfsec\n",(double)(end-start)/(double)CLOCKS_PER_SEC);
}
775 :
774 :2007/11/18(日) 21:52:59
消し忘れてた。 printf("入力値と同じ値の配列番号:\n"); printf("%d\n",i); この2つはいらないので消してください。
777 :
633 :2007/11/18(日) 22:10:22
>>711 係数は実数のみでよいでしょうか?
また、実根解だけでいいでしょうか?
虚数解も必要であると、ちょっと大変です。
780 :
527 :2007/11/18(日) 22:31:58
>>715 (6)の部分になにをつくればいいのでしょうか?内容を表示するコードですか?
782 :
◆Iyutn6izzo :2007/11/18(日) 22:43:49
すみません。 最後です。 [1] 授業単元:プログラミング2 [2] 問題文(含コード&リンク): アルファベットと数字、記号(半角)からなるテキストファイルの中に、 キーボードから入力した(半角)文字〔アルファベット、数字、記号〕が何文字含まれているか表示するプログラムを作成せよ。 ※半角…日本語入力をOFFの時に入力できる文字 [3] 環境 [3.1] OS:Windows [3.3] 言語:C [4] 期限:2007年11月19日00:30まで [5] その他の制限:探索プログラムの基礎を勉強中
783 :
715 :2007/11/18(日) 22:54:52
>>781 dataは文字列配列ではないので、文字列を直接交換できない。
ポインタ値を交換するようにしないといけない。
とのことです。
よろしくお願いします。
プログラム理解していないので見当はずれのこと
言ってたらごめんなさい。
#include <stdio.h> #include <stdlib.h> int main(void){ FILE *fp; char chk_alph,buf[256]; int i,cnt=0; if((fp=fopen("test,txt","r"))==NULL)exit(1); chk_alph=getchar(); while(getchar()!='\n'); while(fgets(buf,sizeof(buf),fp)!=NULL)for(i=0;buf[i]!='\n';i++)if(buf[i]==chk_alph)cnt++; printf("%d回出現\n") fclose(); return 0; } 動作確認・コンパイルもしてなくて専ブラ上で書いた糞ース
786 :
デフォルトの名無しさん :2007/11/18(日) 23:03:19
>>782 #include <stdio.h>
main()
{
FILE *fp;
char c;
char cc;
unsigned long l = 0;
fp = fopen("test.txt", "r");
scanf("%c", &c);
printf("検索文字:%c\n",c);
while ((cc=fgetc(fp)) != EOF) {
if(cc == c)
l++;
}
printf("検索結果:%ld文字", l);
}
787 :
786 :2007/11/18(日) 23:06:28
>>782 ごめん、ミス。
しかも784にも遅れをとった。。。
#include <stdio.h>
main()
{
FILE *fp;
char c;
char cc;
unsigned long l = 0;
fp = fopen("test.txt", "r");
scanf("%c", &c);
printf("検索文字:%c\n",c);
while ((cc=fgetc(fp)) != EOF) {
if(cc == c)
l++;
}
printf("検索結果:%ld文字\n", l);
fclose(fp);
}
788 :
784 :2007/11/18(日) 23:08:35
fcloseの中にfp入れといて。
>>783 問題のプログラムは次のようなフローだと思います。
1) 1万行のデータ(一行は1000バイトまで)を読み込んで、メモリに格納します。
2) (6) の部分です。何かしら作業するのでしょうか?
3) メモリに格納されたデータをすべて解放(棄却)します。
4) 終了します。
で,(2) のステップで何をしてやればよいのでしょうか?
ポインタの値を交換、というのであれば、「辞書順に並べなおして表示する」ですか?
それを友達か誰かにきいてみてはいかがでしょうか?
790 :
デフォルトの名無しさん :2007/11/18(日) 23:11:56
791 :
790 :2007/11/18(日) 23:13:34
[5] その他の制限:まだ習い始めて3ヶ月ぐらいです。 よろしくお願いします
>>789 それです!!「辞書順に並べなおして表示する」です。
友がソーティングのアルゴリズムって言ってました。
793 :
771 :2007/11/18(日) 23:44:20
どうでもいいがここのは減点されんのかね?
バレなきゃだいじょうぶ
規格厨ってほんとうざいな
規格厨もウザいが独自厨もウザい
といってどちらにも偏らずに流動的にプログラミングされると、
今度はコンパイラ以外誰も読み取れなくなる
それならと、読みやすく書きやすい物を作りたいのなら、
多くの人が学習している既存のコードフォーマットを用いることになる
で、大抵そういうのは世界中に大量にあって派閥問題がある
結局、不毛なんだよな
最後は、「規格は勉強すればだれでも覚えられるし、動きがおかしければ規格書みれば一目瞭然」だから
嫌でも規格書に収束するんだが、ISOなんて数百ページありそうなのを一つ一つみるわけにもいかない
言語使用にとどまらず、関数仕様までなると膨大すぎる
>>793 のリンクは動見てもBASICです
BASICかと思いきやCOBOL・・・?
今日仕様書の内容を張ってくれてた人は、 俺は勉強になったからありがたかったよ。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 3つのエディットボックスに入力された文字列を、CSVファイルから一行ずつAND条件で検索し、 マッチした行をリストビューへ表示せよ。 尚、入力されなかった場合は、検索条件に含めないものとする。 [3] 環境: [3.1] OS:Windows [3.2] 言語: C/C++言語 [3.3] コンパイラ: BCB Pro 6.0 [4] 期限: 11月19日午前9時まで [5] その他: 実際に文字列を検索する処理方法が分からず苦戦しています。 リストビューに吐き出す処理や、CSVファイル読込みは多分できています。 例えば、↓のようなCSVファイルから あ,い,う,え,お か,き,く,け,こ さ,し,す,せ,そ AND条件として『か』と『く』を指定して検索をし、 マッチする2行目抜き出すようなことをしたいのです。 『す』のみ入力した場合は3行目を検索する。 大変申し訳ありませんが、ご教授よろしくお願いします。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク) キーボードで入力した任意の実行例のように、反転させるプログラムを作成せよ。次の4つの関数を作成すること。 int main(void) void moji_retsu_hanten( char *t ) int str_length( char str[] ) void str_copy( char dst[],char src[] ) 実行例 文字を入力してください> Tokyo PC CP cykoT [3] 環境: [3.1] OS:Windows [3.2] 言語: C/C++言語 [3.3] コンパイラ: BCB Pro 6.0 [4] 期限: 11月19日12時まで [5] その他:
803 :
789 :2007/11/19(月) 02:04:18
昨日、今日出てきた規格がらみのこと、 1) static なオブジェクトの初期化の話 2) c - 'a' の話 3) sizeof の話 のうち、3) は新しい話があったりして、まあ、難しいかったんだけれども、 1)、2) は、それこそ K&R の昔から言われていたことだから...。 うざい、と思う人は、勉強不足でしょうね。 2) は K&R の第一章に書かれているのにね。
c-'a'で文字の登場頻度を調べるのはこのスレの宿題でも頻出の部類だよな。
>>802 #include <stdio.h>
int str_length(char str[]) {
char *p = str;
while(*p) p++;
return p - str; }
void moji_retsu_hanten(char *t) {
char *p = t + str_length(t) - 1, temp;
while(p > t) {
temp = *p;
*p-- = *t;
*t++ = temp;
}}
void str_copy(char dst[], char src[]) { while(*dst++ = *src++); }
int main(void)
{
char str[256], rev_str[256];
printf("文字を入力してください> ");
scanf("%s", str);
str_copy(rev_str, str);
moji_retsu_hanten(rev_str);
puts(rev_str);
return 0;
}
str_copyの意味がわからないから無理矢理コピーしてみた。
807 :
802 :2007/11/19(月) 02:54:20
>>806 無事動作確認致しました。
ありがとうございました!
>>734 はい、userクラス作っても問題ないです。、
>>790 課題2
#include<stdio.h>
#include<string.h>
#include<ctype.h>
void del_digit(char str[])
{
size_t ix;
for( ix = 0; str[ix] != '\0'; ++ix )
{
if( isdigit(str[ix]) )
{
str[ix] = '\0';
if( str[ix+1] != '\0' ) strcat(str,&str[ix+1]);
}
}
}
課題4
#include<stdio.h>
int main(void)
{
int i;
int *ptr_i; /* ポインタ変数の宣言 */
ptr_i = &i; /* 変数iのアドレスをポインタ関数ptr_iに格納 */
printf("ptr_i=%p, &i=%p\n",ptr_i, &i);
}
課題5 #include<stdio.h> /* --- n1とn2の和・差をsumとdiffに格納(修正) ---*/ void sum_diff(int n1, int n2, int *sum, int *diff) { *sum = n1 + n2; *diff = (n1 > n2) ? n1 -n2 : n2 - n1; } int main(void) { int na, nb; int wa = 0, sa = 0; puts("二つの整数を入力してください。"); printf("整数A : "); scanf("%d", &na); printf("整数B : "); scanf("%d", &nb); sum_diff(na, nb, &wa, &sa); printf("和は%dです。 \n差は%dです。 \n", wa, sa); return 0; }
812 :
デフォルトの名無しさん :2007/11/19(月) 10:39:24
【質問テンプレ】 [1] 授業単元:プログラミング演習 [2] 問題文: 1)再帰関数を使い、N! (階乗)を計算する関数double factorial(int n); を作成せよ。 Nの階乗の帰納的定義 ・ N=0 のとき N!=1 ・ N>0 のとき N! = N*( (N-1)!) Nを入力してN!を出力するmain 関数を含むプログラムと実行結果 を提出せよ。 2) 参照引数を使い、関数 int divmod( int a, int b, int& rem); return で a/b を 引数 rem に あまりを計算する関数 を作成せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:bcc [3.3] 言語: C++ [4] 期限: (11月21日09:00まで) [5] その他の制限: 割り算演算子/ も 剰余演算子%も使用してはならない。 fdivide関数のアルゴリズムを使う。 期限短いですがよろしくお願いします。
>>812 階乗を行う関数は1スレで3〜4回ほど出されることがある。
>>812 は
>>117 か??
double factorial(int n){ return (n > 0) ? n * factorial(n-1) : 1; }
int divmod( int a, int b, int& rem);は
>>123 に
rem = numerator;
いれりゃいんじゃね
[1] 授業単元:経路選択アルゴリズムの評価
[2] 問題文(含コード&リンク):
(これは前スレ963の問題の続きです)
以下の手順に従い、経路選択アルゴリズムを評価せよ
・通信の発生 ランダムに送受信ノードを決定する
・通信の確立 与えられた送受信ノード間の経路を決定し、その経路上のリンクの空き容量を1Mbpsだけ減少させる。
ただし、経路上に空き容量のないリンクが存在する場合、この通信は確立しなかったものとして、何も行わない。
・通信の終了 n回前に発生した通信の経路上の空き容量を1Mbpsだけ増加させる。ただし、その通信が確立していなかった場合には何も行わない。
・評価 10000回の通信を発生させ、そのうちで確立できなかった通信の割合(呼損立)を求める
・試行の繰り返し パラメタnを変化させながら、上記の試行を繰り返し行う。
☆経路の決定に際して以下の4つの方法が考えられる(4つありましたが今回は二つだけの宿題です)
1、最小ホップ経路を用いた固定経路
2、最小ホップ経路を用いた要求時経路(経路選択時点で空き容量のないリンクをグラフから取り除く)
■対象とするグラフは図2に示すようなトポロジを用いよ。各リンクに付加された数字はリンク容量「Mbps」を表す
なおいずれの向きも等量であるとする。
図2
http://upload.fam.cx/cgi-bin/img-box/xe471118201243.jpg ※最小ホップとは経由するノード数が一番少なくという意味です
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:11月22日朝8時
816 :
デフォルトの名無し :2007/11/19(月) 16:56:27
1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 関数atoiを利用し、文字列を正数に変換するプログラムを作成せよ。 引数:data[] 戻り値:整数 エラー値 −1:未入力 −2:桁あふれ −3:数値以外 −4:ゼロ入力 エラーは 未入力:「入力されていません」 桁あふれ:「4文字以下で入力してください」 数値以外:「半角数字以外入力できません」 ゼロ入力:「0は入力できません」 となる。キーボードからの最大入力数は4バイトとする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C言語 [4] 期限:2007.11.21まで [5] その他の制限:なし
すごい初歩的な質問ですいません 学校の課題ができなくてOTL ・正の数を2つにゅうりょくさせ、小さいほうから大きいほうまでの 数をすべて掛けるプログラムを関数用いろってやつなんですけど、 できる人お願いします;;
818 :
433 :2007/11/19(月) 17:09:30
教えて頂いた通り打ち込んだのですが、a,b,cに同じ数字を何回入力してもバラバラの答えが出てしまうのですがどうすればよいのでしょうか (例えば0,0,0と入力してもx=-1.16,3.61と出たりx=-1.52,4.37と出たりしてしまいます)
820 :
715 :2007/11/19(月) 18:29:12
821 :
803 :2007/11/19(月) 19:11:24
>>820 お役に立てず残念です。
しかし、gets() を使いながら、バッファーあふれを検知できる方法は、ちょっと思いつきません。
で、かわりに fgets() を使ったのですが。
どなたかお願いいたします。
822 :
名無し募集中。。。 :2007/11/19(月) 20:00:28
[1] 自習 [2] [3] 環境[3.1] OS:WindowsXP[3.2] コンパイラ名とバージョン:bcc55[3.3] 言語:C++ [4] なし 下から4行return後ろの(char*)の意味が分かりません お願いします。 #include<stdio.h> char* str_chr(char*,int); int main(void) { char str[10],*p; char uletter[]="abcdefghijklm"; printf("英大文字を入力してください:"); scanf("%s",,str); p=str_chr(uletter,str[0]); if(p!=NULL)puts(p); return 0; } char* str_chr(char* str,int c) { for(;*str;str++){ if(*str==c){ return((char*)str); } return (NULL); }
823 :
デフォルトの名無しさん :2007/11/19(月) 20:28:02
825 :
名無し募集中。。。 :2007/11/19(月) 20:40:30
そういう気分だったんじゃね。俺なら絶対につけない。
827 :
名無し募集中。。。 :2007/11/19(月) 20:45:09
ありがとうございました
>>816 #include <stdio.h>
#include <stdlib.h>
int asciitointeger(char data[])
{
int i,n;
if(data[0]=='\0')
return -1;
for(i=0;data[i]!='\0';i++)
if(data[i]<'0'||'9'<data[i])
return -3;
if(i>4)
return -2;
if((n=atoi(data))==0)
return -4;
return n;
}
main()
{
int i=0,n,c;
char data[7];
while((c=getchar())!='\n')
data[i++]=c;
data[i]='\0';
n=asciitointeger(data);
printf("%d\n",n);
}
桁あふれと数値以外の優先度が書いてなかったので数値以外を優先しました。
(要するに-1234と入力されたときの戻り値を-2にするのか-3にするのかということ)
エラーチェックの部分は書いてないので自分で付け足してください。
エラー値がマイナスなんだから、-は数値以外じゃね?
大学の課題の質問です。 [1] 授業単元:C [2] 問題文(含コード&リンク):文字列をクイックソートで並び替える [3] 環境 visual C++ 2005 Express Edition [4] 期限: 2007年11月20日20:00まで [5] その他の制限: 特になし ↓に貼るクイックソート関数のおかしいところをご指摘ください。 #define NS 3000000 /* 入力の最大数 */ #define WC 64 /* 入力の1行の文字数 */ void your_sort(char *s[NS][WC]) { int pivot; int l_hold,r_hold; int x=0; int left = 0; int right = WC-1; l_hold = left; r_hold = right; pivot = (left+right)/2; while(x<WC){ while(left < right) { while(strcmp(&s[x][right],&s[x][pivot])>0) right--; if(left =right) { s[x][left] = s[x][right]; left++; }
while((strcmp( &s[x][pivot],&s[x][left])<0) &&(left <right)) right--; if(left != right) { s[x][left] = s[x][right]; left++; } while((strcmp( &s[x][pivot], &s[x][left])>0)&&(left < right)) left++; if(left != right) { s[x][right] = s[x][left]; right--; } left = l_hold; right = r_hold; if(left < pivot) your_sort(s[x][pivot-1]); if(right > pivot) your_sort(s[x]pivot+1,right); } x++; } エラーはerror C2664: 'strcmp' : 1 番目の引数を 'char **__w64 ' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 というものが出ました。strcmpの使い方がおかしいのかもしれません。ご指摘お願いします
832 :
デフォルトの名無しさん :2007/11/20(火) 01:04:37
>>805 >c-'a'で文字の登場頻度を調べるのはこのスレの宿題でも頻出の部類だよな。
でもさ、c-'a'ってしょせんASCIIでしか通用しないわけだし、
wchar_tになったら、プログラム大幅修正になるよ?
833 :
デフォルトの名無しさん :2007/11/20(火) 01:05:17
いいたいことは、ロジックとデータはなるだけ分離したほうがいい、ってこと。
もういいから
>>831 さんへ
strcmpについて
&を外せば終了?
文字列構造です。簡単なこれをやってみると分かるかもしれないです
int main(void)
{
char moji[1][4];
char *pointa_moji[1][1];
moji[0][0]='a';
moji[0][1]='i';
moji[0][2]='u';
moji[0][3]='\0';
pointa_moji[0][0]=moji[0];
printf("%d",strcmp(pointa_moji[0][0],"aiu")); //&を付けると同じエラー出ます。
return 0;
}
その他
your_sort関数の呼び出しが引数1つだったり時には2つだったり・・・・
です。
間違ってたらごめんなさい
>>832 こうやって2ch初心者から荒らしになっていくんだな。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 一つの整数を入力したとき、その整数が0〜4ならばA、5〜9ならばB、10〜14ならばC、15〜19ならばA、20〜24ならばB、25〜29ならばC、、、 これが59まで続く物とし、それ以外の数字ならばErrorを返すプログラムを書け。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: VC++2005ExpressEdition [3.3] 言語: C [4] 期限: 2007年11月21日まで [5] 特になし。配列を習ってるときにでました。0〜4と5個、周期的にABCABCと切り替わる評価の仕方をどうするか。 よろしくお願いします。
>>837 #include<stdio.h>
int main(void){
int n;
printf("n=");
scanf("%d",&n);
if(n<0||n>59)printf("Error\n");
else printf("%c\n",n/5%3+'A');
return 0;
}
840 :
デフォルトの名無しさん :2007/11/20(火) 10:00:37
[1] 授業単元:プログラミング基礎演習 [2] 問題文(含コード&リンク): 次の虫喰い算の□に入る数字を決定するプログラムを作成。 □□□□ × □□□□□□ ------------------------ □□□□ □□□□ □□□□□ □□□□□ □□□□□ □□□□ ------------------------ 987654321 [3] 環境 [3.1] OS: Windows [3.3] 言語: C [4] 期限:2007年11月26日 [5] その他の制限: 特にありません。 虫食い算が見にくいかもしれませんがよろしくお願いします。
841 :
840 :2007/11/20(火) 10:09:01
842 :
デフォルトの名無しさん :2007/11/20(火) 12:00:18
あ
843 :
デフォルトの名無しさん :2007/11/20(火) 16:49:57
問1 次のメンバーを持つ構造体_recを定義し、Record型にtypedefせよ。 ・int idx; ・char sname[50]; ・char fname[50]; ↓ Record型へポインタ配列 *p_rec[2](要素数2)を宣言せよ。 次に、*p_rec[0]、*p_rec[1]用にメモリを確保して、以下のデータを代入せよ。 (*p_rec[0])の各メンバーの内容: ・idx:1 ・sname:"Hanamaruki" ・fname:"Miko" (*p_rec[1])の各メンバーの内容: ・idx:2 ・sname:"A" ・fname:"B" ↓ (*p_rec[0]),(*p_rec[1])の各メンバーの内容を、標準出力に書き出すプログラムを作れ ただし、次の仕様を満たすこと。 ・idx,sname,fnameの順に、タブで区切って書き出す。 ・まず(*p_rec[0])の各メンバーを出力、改行して(*p_rec[1])の各メンバーを出力、改行して終了。
844 :
843 :2007/11/20(火) 16:51:48
C言語でお願いします。
>>840 #include <stdio.h>
int main(void){
int a = 1001, b = 100001, ans;
ans = a * b;
while(ans != 987654321){
a += 2;
if(a > 9999 || ans > 987654321){
a = 1001;
b += 2;
if(b > 999999)break;
}
ans = a * b;
}
printf("a:%d b:%d ans:%d\n",a,b,a*b);
printf("%12d\n",a);
printf("x%11d\n",b);
printf("------------\n");
printf("%12d\n",a*(b%10));
printf("%11d-\n",a*((b/10)%10));
printf("%10d--\n",a*((b/100)%10));
printf("%9d---\n",a*((b/1000)%10));
printf("%8d----\n",a*((b/10000)%10));
printf("%7d-----\n",a*((b/100000)%10));
printf("------------\n");
printf("%12d\n",a*b);
return 0;
}
なんという力技コード・・・
>>843 #include <stdio.h>
#include <stdlib.h>
struct _rec {
int idx;
char sname[50];
char fname[50];
};
typedef struct _rec Record;
Record* p_rec[2];
int main(void)
{
p_rec[0] = malloc(sizeof(Record));
p_rec[1] = malloc(sizeof(Record));
p_rec[0]->idx = 1;
p_rec[0]->sname = "Hanamaruki";
p_rec[0]->fname = "Miso";
p_rec[1]->idx = 2;
p_rec[1]->sname = "A";
p_rec[1]->fname = "B";
{
int i;
for(i=0; i!=2; i++)
{
printf("%d\t%s\t%s\n", p_rec[i]->idx, p_rec[i]->sname, p_rec[i]->fname);
}
return 0;
}
847 :
843 :2007/11/20(火) 17:39:05
>>846 ありがとうございました。助かりましたー。
>>846 > p_rec[0]->sname = "Hanamaruki";
> p_rec[0]->fname = "Miso";
> p_rec[1]->sname = "A";
> p_rec[1]->fname = "B";
……いいのか、これ?
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
リングバッファを持った待ち行列を配列を使って作成せよ
その際キューにデータを追加、削除、キューをクリアする関数を作る
ソース:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5302.txt コンパイルしたら
que07.obj(que07.c): Undefined symbol: enterqueue_
とエラーが出てきちんと実行ができません。
[3] 環境
[3.1] OS: windowsXP
[3.2] コンパイラ名とバージョン: LSI C-86
[3.3] 言語:C言語
[4] 期限: [2007年11月26日まで
[5] その他の制限: 特になし
よろしくお願いします。
> p_rec[0]->sname = "Hanamaruki"; > p_rec[0]->fname = "Miso"; > p_rec[1]->sname = "A"; > p_rec[1]->fname = "B"; ここはstrcpyだな
>>850 すいませんでした。
この場合で表示させるとリングバッファにならないのですが
どうしらいいんでしょうか
853 :
デフォルトの名無しさん :2007/11/20(火) 20:10:19
[1]プログラミング2 [2] フォーマットを持つ配列を引数として、有効なレコード数(つまり配列の0番目の値)を返り値として返す関数 int list_len(const int * list) を作成し(score table)のフォーマットに従った配列listとレコードを指定する整数indexを引数とし、index番目のレコードの先頭アドレス(つまり英語の得点の入った要素のアドレス)を返す関数 int * get_rec(int * list, int index) を作成し(score table)のフォーマットに従った配列listとレコードを指定する整数indexを引数とし、index番目のレコードを表にして表示する関数 void print_list(const int * list, int index) を作成しなさい。ただしindexの値が有効なレコード数の範囲を超える場合はエラーメッセージ(「対象のレコードがありません。」)を出力します。プログラムは0が入力されるまで繰り返されるものとし、実行例に従ってプログラムを完成させなさい。
854 :
デフォルトの名無しさん :2007/11/20(火) 20:12:06
サンプルコード #define MAX 101 /* 得点を入れる配列の最大値 */ #define REC 5 /* 1レコードの要素数 */ #define SUB 6 /* 科目名の文字数 */ char sub[REC][SUB]={"英語","国語","数学","理科","社会"}; /* 関数作成 */ int main() { /* 変数は適切に宣言する */ int score[MAX]={3, /* レコード数 */ 45, 60, 36, 72, 53, /* 1レコード目 */ 87, 48, 77, 69, 91, /* 2レコード目 */ 23, 54, 49, 58, 62}; /* 3レコード目 */ /* ここに書く */ }
855 :
デフォルトの名無しさん :2007/11/20(火) 20:15:05
何番目のレコード?(0:END, 1-3) 3 +----++----++----++----++----+ |英語||国語||数学||理科||社会| +----++----++----++----++----+ | 23|| 54|| 49|| 58|| 62| +----++----++----++----++----+ 何番目のレコード?(0:END, 1-3) 4 対象のレコードがありません。 何番目のレコード?(0:END, 1-3) -1 対象のレコードがありません。 何番目のレコード?(0:END, 1-3) 0 終了します。 [3] 環境 [3.1] OS:win xp [3.2] Microsoft Visual Studio 2005 [3.3] 言語:C言語 [4] 期限:2007年11月20日まで [5]特になし
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 各教科名と点数を入力し、点数の大きい順に教科名と点数をソートして表示させなさい。 #include<stdio.h> void main(){ char kyouka[20][10]; int tensu[20],aa,m,k; printf("教科の数:"); scanf("%d",&n); for(k=0;k<n;k++){ printf("科目名:"); scanf("%s",&kyouka[k]); printf("点数:"); scanf("%d",&tensu[k]); } for(k=0;k<n;k++){ tensu[k]=0; } for(m=n;m>1;m--){ for(k=0;k<m;k++){ if(tensu[k]<tensu[k+1]){ gg=g[k]; g[k]=g[k+1]; g[k+1]=gg; } } } [3] 環境 [3.1] OS: Windows [3.3] 言語: C++ [4] 期限: 2007年11月23日 文字配列のソートがわかりません。初心者ですがよろしくおねがいします
>>856 gやggって何だ?
あとaaも使ってないようだが
[1] 授業単元: 情報活用実習 [2] 問題文 たとえば4と入力すると 1 11 111 1111 111 11 1 となるようなプログラムを書きなさい。 [3] 環境 [3.1] OS: Windows [4] 期限: 11/20 23:00まで [5] その他の制限: forをつかって作成せよとのことです。 どこで質問すればいいのかわからずここにたどり着きました。 スレ違いだったらすみません
>>858 #include <stdio.h>
int main(void){
int i, k, cnt;
scanf("%d", &cnt);
for(i=0; i<cnt; i++){
for(k=0; k<i+1; k++)putchar('1');
putchar('\n');
}
for(i=cnt; i>1; i--){
for(k=i; k>1; k--)putchar('1');
putchar('\n');
}
return 0;
}
>>859 さっそく有難うございます、助かりました!
>>851 strcpyだと文字列リテラル使えなくね?
sprintf使ったほうよくね?
>>861 使えるぞぉ
char *strcpy(char *s1, const char *s2);
sprintfでも大丈夫だけど。
864 :
◆A4nZCKYQwM :2007/11/20(火) 22:18:19
[1] 授業単元:プログラミング@ [2] 問題文(含コード&リンク): 2から始まる順番に整列された偶数を20000まで持つ要素数10000の配列から、 キーボードで入力した1〜20000の値を探索し、同じ値を持つ配列要素の添え字を表示するプログラムを二分探索を用いて作成せよ。 [3] 環境 [3.1] OS:Linux [3.3] 言語:C [4] 期限:2007年11月21日00:30まで [5] その他の制限:
866 :
デフォルトの名無しさん :2007/11/20(火) 22:45:39
>>856 今頃気づいたけれどC++!?思いっきりCだと思ってmalloc使ってしまった。
868 :
デフォルトの名無しさん :2007/11/20(火) 22:49:38
1] 授業単元:プログラミング [2] 問題文(含コード&リンク):1. 以下のような、2つの整数の和を求める関数と差を求める関数のプログラムを、□の中に文字を入れて完成させなさい。 #include <stdio.h> int sum( ) { return ( ); } int diff( ); { if(x>y) return ( ); else return( ); } int main(void) { int na, nb; puts(“2つの整数を入力してください。”); printf(“整数A:”); scanf(“%d,&na); printf(“整数B:”); scanf(“%d,&nb); printf(“2の整数の和は%dです。\n”,sum( ) ); printf(“2の整数の差は%dです。\n”,diff( ) ); [3] 環境 [3.1] OS: Windows [3.3] 言語: C言語 [4] 期限: ([2007年12月22日1:00まで]
869 :
デフォルトの名無しさん :2007/11/20(火) 22:53:33
>>845 助かりました!
ほんとにありがとうございます!
870 :
デフォルトの名無しさん :2007/11/20(火) 22:58:58
871 :
デフォルトの名無しさん :2007/11/20(火) 22:59:58
減点くらい我慢しろよ
明日C言語のテストがあるのですが。ポインタのとこ エラーが出たら即終了 合格しないと単位がでません、これからどうしたらいいのか・・・なき
>>868 int x, int y
x + y
int x, int y
x - y
y - x
na, nb
na, nb
ポインタのとこエラーがでたら即終了ってどういう意味だ?
エラーが出たらその時点で単位がでないってことじゃない?
>>872 それを言ったらこのスレの存在意義がなくなるなw
878 :
sage :2007/11/20(火) 23:29:27
>>874 ありがとうございます
879 :
デフォルトの名無しさん :2007/11/20(火) 23:31:19
[1] 授業単元:プログラミング4 [2] 問題文(含コード&リンク): (1)リストの先頭からidx番目のnodeのアドレスを返す関数 MyList *idxMyList(MyList *ptr, int idx);を使う (2)malloc()を用いて元のリストの構造をコピーしたリストを返す関数 MyList *cpMyList(MyList *ptr);を使う (3)malloc()を用いて元のリストの先頭からn個のnodeをコピーした リストを返す関数。 MyList *cpcMyList(MyList *ptr, int n);を使う。 書き始めは #include <stdio.h> #include <stdlib.h> typedef struct node int data; struct node *next; } MyList; [3] 環境 [3.1] OS:Linux [3.3] 言語:C [4] 期限:2007年11月21日10:30まで
>>877 このスレ使うなら、せめて他人のコピペを提出できる度胸くらいはないと
881 :
◆A4nZCKYQwM :2007/11/20(火) 23:36:04
>>864 感謝です。
[1] 授業単元:プログラミング@
[2] 問題文(含コード&リンク):
キーボードから10個の整数値を入力し、基本選択法を用いて小さい順に並び替え、ディスプレイに表示するプログラムを作成せよ。
[3] 環境
[3.1] OS:Linux
[3.3] 言語:C
[4] 期限:2007年11月21日00:50まで
[5] その他の制限:
すいません
>>856 です。
コードの部分の修正を。
#include<stdio.h>
void main(){
char kyouka[20][10];
int tensu[20],aa,m,k;
printf("教科の数:");
scanf("%d",&n);
for(k=0;k<n;k++){
printf("科目名:");
scanf("%s",&kyouka[k]);
printf("点数:");
scanf("%d",&tensu[k]);
}
for(k=0;k<n;k++){
tensu[k]=0;
}
for(m=n;m>1;m--){
for(k=0;k<m;k++){
if(tensu[k]<tensu[k+1]){
aa=tensu[k];
tensu[k]=tensu[k+1];
tensu[k+1]=aa;
}
}
}
}
すいませんでした。どなかたよろしくおねがいします。
884 :
804 :2007/11/20(火) 23:42:13
>>832 確かに Windows だと事情は異なりますね。
ちょっと言い過ぎましたか。すみません。
>>867 すいませんCはまったくわかりません。
丁寧にやって頂いたのにもうしわけないです。
>>879 MyList *idxMyList(MyList *ptr, int idx)
{
while(idx--) ptr = ptr->next;
return ptr;
}
MyList *cpMyList(MyList *ptr)
{
MyList *p;
if(ptr==NULL) return NULL;
if((p=malloc(sizeof(MyList))==NULL) exit(1);
p->data = ptr->data;
p->next = cpMyList(ptr->next);
return p;
}
MyList *cpcMyList(MyList *ptr, int n)
{
MyList *p;
if(ptr==NULL || n == 0) return NULL;
if((p=malloc(sizeof(MyList))==NULL) exit(1);
p->data = ptr->data;
p->next = cpcMyList(ptr->next, n-1);
return p;
}
やっぱりさき越されていた。cpMyList,cpcMyListがほぼ同じ。 悔しいので少し違うidxMyListをあげ MyList *idxMyList(MyList *ptr, int idx) { return idx == 0 ? ptr : ptr->next == NULL ? NULL : idxMyList(ptr->next, idx-1); }
>>887 なんかよく読んだらおかしい。無視でよろしこ。
889 :
デフォルトの名無しさん :2007/11/21(水) 00:07:40
う
>>881 2つに分けときます
#include <stdio.h>
#include <stdlib.h>
#define youso 10
void henkanoyousu(int *data)
{
int i;
for(i=0;i<youso;i++){ printf("%d ",*(data+i)); }
printf(" ");
}
void datachange(int *dataA , int *dataB)
{
int tmp;
tmp=*dataA;
*dataA=*dataB;
*dataB=tmp;
}
>>881 さんへパート2
int main(void)
{
char input[10];
int i , j;
int target;
int data[10];
for(i=0;i<10;i++){
printf("%dつ目の数値入力>",i+1);
scanf("%s",input);
data[i]=atoi(input);
}
printf("\n");
henkanoyousu(data);
printf("初期状態\n\n");
for(i=youso-1;i>0;i--){
target=i;
for(j=0;j<i;j++){
if(data[j] > data[target]){ target=j; }
}
datachange(&data[j],&data[target]);
henkanoyousu(data);
printf("\n");
}
printf("\nPless any key + Enter\n");
scanf("%s",input);
return 0;
}
894 :
デフォルトの名無しさん :2007/11/21(水) 00:39:52
すいません
>>879 の者なんですが、
>>886 で作っていただいた関数の機能をチェックできるmain()を
作って合わせて・・・のようで、でも、どうやったら機能をチェックできるのか
わかりません;;少しばかりレクチャーお願いします。。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):前回のリターン入力から今回のリターン入力までの経過時間(ミリ秒) を測定し表示する [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限:今日まで [5] その他の制限:「明解 C言語」の構造体まで習いました #include <sys/timeb.h>を用いてください、標準ライブラリ関数は使わないでください よろしくお願いします
ありがとうございます。
897 :
デフォルトの名無しさん :2007/11/21(水) 01:18:05
え
>>832 しかし、UTF-16/32なwchar_tなら、c - L'a'も使えるよ。
[1] 授業単元: プログラミング言語 [2] 問題文(含コード&リンク): 2つの2変数関数 f(x,y)=(π-x)^2+(π-y)^2 g(x,y)=x+y が与えられてるとき、これら2つの関数値を比較して大きい方の値を配列V(i,j)に代入せよ。 ただし、変数範囲は0≦x≦5, 0≦y≦6 分割数はXが20、yが30とする。最後に配列を代入した値を表示せよ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: C++ [4] 期限: 11月21日12:00まで [5] その他の制限:
>>900 #include <iostream>
#include <vector>
#include <algorithm>
#define _USE_MATH_DEFINES // to M_PI
#include <cmath>
using namespace std;
double f( double x_, double y_ ) { return ( M_PI - x_ ) * ( M_PI - x_ ) + ( M_PI - y_ ) * ( M_PI - y_ ); }
double g( double x_, double y_ ) { return x_ + y_; }
int main( int argc, char ** args ) {
vector< vector< double > > v;
for ( int i = 0; i <= 20; ++i ) {
double x = ( double ) i * 5.0 / 20.0;
vector< double > _tmp;
for ( int j = 0; j <= 30; ++j ) {
double y = ( double ) j * 6.0 / 30.0;
_tmp.push_back( max< double >( f( x, y ), g( x, y ) ) );
}
v.push_back( _tmp );
}
for ( size_t i = 0; i < v.size(); ++i ) {
cout << ( i * 5.0 / 20.0 ) << " ";
for ( size_t j = 0; j < v[ i ].size(); ++j )
cout << ", " << v[ i ][ j ] << " ";
cout << endl;
}
return 0;
}
なんかいまいちだけどまあいいや.
902 :
デフォルトの名無しさん :2007/11/21(水) 06:42:13
[1] 授業単元:C言語
[2] expr.c :
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5308.txt myexpr.c :
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5309.txt [3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:11/22
[5] その他の制限:設問2.をお願いします。設問1.と設問2.は別のプログラムとして提出します。
設問2.は丸投げになりますが完成した状態のものをリンク張って頂けると嬉しいです。
問題文////////
1.算術式の逆ポーランド記法から中置記法への変換 (配点:70点)(設問1.は上記のmyexpr.c で解決済みです)
逆ポーランド記法で入力された算術式を、中置記法に変換して出力するプログラムを完成させよ。
(expr.c の print_tree を書き換える)
演算子の優先順序は全て同等とみなして良いが、その場合はカッコを使って出力すると良い。
2.算術式の中置記法から逆ポーランド記法への変換 (配点:30点)
設問1の逆を行なうプログラムを作成せよ。
cf.参考図書(C言語によるプログラミング応用編) p.205
問題文終わり////////
ちなみに授業中に先生が
1 2 * 3 4 5 - / + が ((((5)-(4))/(3))+((2)*(1)))
とかになってもいいが括弧は少ない方が良い。
って言ってましたが自分のは括弧だらけでした。(でも減点は少ないそうです)
今から大学に行くので返事が遅れますがよろしくお願いします。
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 今a.txt,b.txt,c.txt,d.txt,e.txtというファイルがある。(これらのファイルを<1>) それぞれのファイルには「a」「b」「c」「d」「e」とかかれている。 また,A.txt,B.txt,C.txt,D.txt,E.txtというファイルがある(これらのファイルを<2>) それぞれのファイルには「A」「B」「C」「D」「E」とかかれている。 <1>のファイルと<2>のファイルを読み込んでその中身を aA aB aC aD aE bA という風に表示せよ。つまり5*5行になります。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限:2007/11/21 24:00まで [5] その他の制限:fscanfで読み込んでほしい。
904 :
◆6mHr6w5qjU :2007/11/21(水) 09:16:56
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):ある文字列aの中にmarikoという綴りが含まれているかを調べ、あったら”あった” なかったら”なかった”と出力するプログラム(入力は6文字以上) [3] 環境 [3.1] OS:Windows/Linux [3.2] コンパイラ名とバージョン: [3.3] 言語:C [4] 期限:11/22 17:00 [5] その他の制限:関数つかうなといわれた おねがいします><
教科書にかいてるだろ
906 :
デフォルトの名無しさん :2007/11/21(水) 10:08:55
>>899 さんありがとうでした!
もはや多少わからずとも仕方ありませんので、後日勉強という形に・・・w
by879
ここのスレ 課題に対して、自分が作ったプログラムをはって 間違ってるところを直して書き直してくれることもしてるのですか?
宿題レベルならたいしたことはないけど、間違ったコードの解析やらされるのは勘弁して欲しいところ。 一から作る方がよっぽど楽だから。
>>907 とりあえずうpしてみたら?
見てから判断するから
1000行以下であれば許容範囲だな 1ソース10000行とか見てるだけでやる気が失せる
911 :
◆6mHr6w5qjU :2007/11/21(水) 10:21:37
僕は53万行まで見てやるぜ
[1] 授業単元: 配列と並べ替え [2] 問題文(含コード&リンク): 次の一連の計算を実行し、指示通りに出力せよ。 1, 10名の学生の番号を 0 から9 とし、数学得点が、番号順に、75,65,68,80,67,79,89,98,66,70 であったとする。 学生番号は配列 no、得点は配列 math に代入し、これらをともに番号順に出力せよ。 2, 全学生の平均値と標準偏差を求め、出力せよ。 3, 高得点順に学生番号を並び替えて、その番号を出力せよ。 4, 高得点順に並んだ学生番号順にその得点を出力せよ。 ・・・配列と並べ替え・・・ HomeWork5 19.11.6 K3A01 山田太郎 --- 数学得点表 --- 0 1 2 3 4 5 6 7 8 9 75 65 68 80 67 79 89 98 66 70 平均値 = 75.699997 標準偏差 = 13.535139 --- 得点順 --- 7 6 3 5 0 9 2 4 8 1 98 89 80 ・・・・・ 注1: 整数の表示で、書式を例えば %6d とすると、6桁の表示域が確保され、そこに整数値を出力する(p. 31)ので、表示の桁を揃えることができる。 注2: n 個のデータ xi の標準偏差は {(1/n)(xi-ave)^2}^(1/2) で求められる。平方根を求める標準関数 sqrt( double ) を用いる場合、ヘッダーファイル math.h のインクルードが必要(p. 240)。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:不明 [3.3] 言語: C言語 [4] 期限: 11月21日 [5] その他の制限: 関数使用 よろしくお願いします。
最近C書いてないから文法とかは自信ないが下の関数の戻り値が1以上なら不整合ってことでおkだと思う。 行数制限あるからブレースは極力省いてある。 char[] braces = "\"\"''()[]{}"; int CheckBraces(char* target) { int len = strlen(target); int i, j, stackcnt=0; char[256] buf; for(i=0; i<len; i++) { for(j=0; j<10; j+=2) if(target[i] == braces[j]) buf[stackcnt++] = braces[i+1]; for(j=1; j<10; j+=2) if(target[i] == buf[j]) { //異なる引用符の中なら無効 if(target[i] == '\'' && buf[stackcnt] == '"' || target[i] == '"' && buf[stackcnt] == '\'') continue; //エスケープ確認 if(target[i] == '\'' || target[i] == '"') if(target[i-1] == '\\') if(target[i-2] == '\\') buf[stackcnt--] = 0; else continue; buf[stackcnt--] = 0; } } return stackcnt; }
>>916-917 米の処理忘れたからそこら辺は自分でやってくれ。
\n//が出現したらその次の\nまで無視、/*がでたら次の*/まで無視で良い。
当然行コメントのほうが優先順位高いから注意な。
>>916-918 米判別機能つきの修正版。
全角SP*2→タブに変換して使ってくれ。
//括弧や引用符のリスト。
//偶数に始まり、奇数に終わりの文字を記入する。
char[] braces = "\"\"''()[]{}";
//括弧や引用符の整合性を簡易的に確認する関数。
int checkBraces(const char* target)
{
int len = strlen(target); //targetの文字長を取得。
int i, j, stackcnt=0; //ループ変数とスタックカウンタ。
int flg_cmnt; //コメントフラグ。
char[256] buf; //スタックにする配列。
for(i=0; i<len; i++)
{
//行コメント確認
if((i==0 || target[i] == '\n') && target[i+1] == '/' && target[i+2] == '/')
{
while(target[i+1] != '\n') i++;
continue;
}
//複数行コメント終了確認
if(flg_cmnt && target[i] == '*' && target[++i] == '/')
{
flg_cmnt = 0;
continue;
}
//複数行コメント開始確認
if(target[i] == '/' && target[++i] == '*')
>>919 の続き
{
flg_cmnt = 1;
continue;
}
//開始文字列一致確認
for(j=0; j<10; j+=2)
{
if(target[i] == braces[j])
{
//一致したら終了文字列をスタックに追加。
buf[stackcnt++] = braces[i+1];
}
}
//終了文字列一致確認
for(j=1; j<10; j+=2)
{
if(target[i] == buf[j])
{
//異なる引用符の中なら無効
if(target[i] == '\'' && buf[stackcnt] == '"' || target[i] == '"' && buf[stackcnt] == '\'')
{
continue;
}
//引用符エスケープ確認
if(target[i] == '\'' || target[i] == '"')
{
if(target[i-1] == '\\')
{
>>920 の続き
if(target[i-2] == '\\')
{
buf[stackcnt--] = 0;
}
else continue;
}
}
//一致かつ諸般の問題がない場合はスタックから削除。
buf[stackcnt--] = 0;
}
}
}
return stackcnt;
}
>>904 mainもprintf等入出力も関数なんだけども
>>733 期限過ぎておりますが、再度お願いします。
>>924 んなこといったら
if(strstr(s,"mariko"))printf("あった\n");//sは文字列
else printf("なかった\n");
でいいってことになるぞ
つか
>>912 も
>>923 もわかってて言ってるんだと思う
>>926 そういうことかww
要するに文字列=文字の配列ってことを理解させるための問題なわけね。
915ですけどやってくださってるかたいますか?
C言語の授業でてますが全くうんこ どうしよう
931 :
デフォルトの名無しさん :2007/11/21(水) 20:09:19
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):以下に示す関数をfunc( 3 )と呼び出した時の実行結果を書きなさい。 void func(int no) { if( no > 0){ func( no-1 ); printf(“%d “, no); func( no-2 ); } } [3] 環境 [3.1] OS: Windows/Linux/等々) [3.3] 言語: C言語 [4] 期限: ([2007年12月13日
932 :
デフォルトの名無しさん :2007/11/21(水) 20:15:44
[1] 授業単元: c [2] 問題文(含コード&リンク): 名前と点数を格納するデータ部を持つ自己参照型構造体を定義し、 線形リストを実装しなさい。 ・構造体の名前は struct grade とし、新たに glist 型として定義する。 ・構造体のメンバは、char name[40]、int score、及びポインタnext。 ・ノードは3つ作成し、それぞれキーボードからデータを入力する。 ・ポインタに値を代入し、ヘッダhdと3つのノードの間を繋ぐ。 ・読み出し用のポインタpを使って、リストのデータを順に画面に出力する。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語: c [4] 期限: 11/22まで [5] その他の制限: #defineはなしで
>>930 流しきれないほどうんこでした。
どうしましょう?
935 :
902 :2007/11/21(水) 20:51:21
どなたか
>>902 お願いできませんか?
明日の9:00締切りなんで実質今日までです。
自分で書いた設問1.のmyexpr.cの方はp->left_childとp->right_childが逆だったみたいです。
936 :
デフォルトの名無しさん :2007/11/21(水) 20:54:55
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): eの近似値を求める eの値は、次の近似式で求めることができる。 e=1+1/1!+1/2!+1/3!+1/4!+……+1/(n-1)!+1/n! nの値を12として、eの近似値を求めるプログラムを作成せよ。 但し、eの値に近づいて行く様子を以下のように出力させるものとする。 n n! 1/n! e 誤差 1 1 1.0000000000 2.0000000000 0.7182818285 2 2 0.5000000000 2.5000000000 0.2182818285 == == ============ ============ ============ 12 XXXXXXXXX X.XXXXXXXXXX X.XXXXXXXXXX X.XXXXXXXXXX (小数点は10桁まで表示) 尚、誤差は、eの真値と近似値との差 exp(1.0)-e である。 nまでの余白は5文字文、nからは全て15ずつ空けます。 出力形式が詰まってしまい見にくくて申し訳有りません。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C++ [4] 期限: 2007年11月22日午前10時まで [5] その他の制限:難しいやり方はほとんど習っていないので途中までと 同じようなやり方でやっていただけると幸いです。 途中まではやったので次に載せます。
>>934 それでも流れないのでたべてしまいました
938 :
936 :2007/11/21(水) 20:58:00
#include <iostream> #include <iomanip> using namespace std ; int main() { int n, ni(1) ; ←←←←←←←←← cout << setiosflags(ios::fixed) ; cout << setw(5) << "n" << setw(15) << "n!" << setw(15) << "1/n!" << setw(15) << "e" << setw(15) << "誤差" << endl ; for ( n=1 ; n<=12 ; ++n ) { ni*=n ; cout << setw(5) << n << setw(15) << ni << endl ; } return 0 ; } 矢印のところと1/n!、eの出し方がよくわかりませんでした。 あとは合っていると思いますが間違っていたらすいません。 宜しくお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):以下のような、関数形式マクロで値が負、零、正で、-1、0、1を返すsign()を定義するように、□の中に文字を入れなさい。 # sign(x) ( ) [3] 環境 [3.1] OS: Windows [3.3] 言語: C言語 [4] 期限:2007年11月24日
今日ファイル入出力について学んだ。 無限にファイル生成も覚えた。 NULLとEOFを間違えて書いた。 気がついたら10GBのテキストファイルになってた。
>>937-938 #include <stdio.h>
#include <math.h>
int kaijou(int number)
{
int result = 1;
for(; number>0; number--)
{
result *= number;
}
return result;
}
int main()
{
int i;
double neip=0;
double prev_neip=0;
double kaijyo=1;
printf(" n|n! |1/n! |e |誤差\n");
for (i=0; i < 12; i++)
{
neip = neip + 1/kaijyo;
kaijyo = kaijyo * (i+1);
printf("%2d|%10d|%11.10f|%11.10f|%11.10f\n", i+1, kaijou(i+1), 1.0/kaijou(i+1), neip, exp(1.0)-neip);
prev_neip = neip;
}
}
>>942 修正版
#include <stdio.h>
#include <math.h>
int kaijou(int number)
{
int result = 1;
for(; number>0; number--)
{
result *= number;
}
return result;
}
int main()
{
int i;
double neip=0;
double prev_neip=0;
double kaijyo=1;
printf(" n|n! |1/n! |e |誤差\n");
for (i=0; i < 12; i++)
{
neip = neip + 1/kaijyo;
kaijyo = kaijyo * (i+1);
printf("%2d|%10d|%11.10f|%11.10f|%11.10f\n", i+1, kaijou(i+1), 1.0/kaijou(i+1), neip, exp(1.0)-neip);
prev_neip = neip;
}
}
>>940 #sign(x) ((x == 0) ? 0 : (x > 0) ? 1 : -1)
>>938 変数追加しちゃだめなの?
double e(1);
と
e += 1/ni;
あと矢印って何がわからないんだろうコンストラクタで初期化してる部分?
n(1)はn=1
946 :
945 :2007/11/21(水) 21:54:48
先にちゃんとしたのでてるし ぜんぜん更新してなかった・・・
947 :
デフォルトの名無しさん :2007/11/21(水) 21:55:42
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 整数aが入力されたとき、 k a=蚤i2^iと展開する。 そのときのa0〜akを出力せよ。 i=0 aiは0か1である。 たとえば a=5のときは 5=1×2^0+0×2^1+1×2^2で、a0=1 a1=0 a2=1である。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 明後日 [5] その他の制限: 特には無いです
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):記憶領域に確保された定数8を4乗した解をGR2に求めなさい。 計算時間が40秒を越すと無限ループとみなされるため、計算速度の速いアルゴリズムが望ましい。 [3] 環境 [3.1] OS:Windows [3.3] 言語:CASLU [4] 期限:11月22日
>>947 #include <stdio.h>
int main()
{
int a,b,i;
printf("a=");
scanf("%d",&a);
b=a<0?-1:1;
a=a<0?-a:a;
for(i=0;a!=0;i++,a>>=1)
printf("a%d=%d\n",i,(a&1)*b);
return 0;
}
どうやったらC言語できるようになったん?
>>950 とりあえず簡単なcのルールを一日で覚える。
bsdあたりのソースを一年くらいかけて読む。
わからないことがあったら調べて自分なりにコメントを書く。
そうしたら俺はこうなった。
ルールはわかってきたんだけど いざ書こうとすると全然だめ・・・。 コツおしえて
わかったつもりにならず、暗唱できるまで勉強しろ そうすれば書ける
>>952 それはお前がひとつのことに集中できないからだ。
そんなお前には不可能
ただやりたいなら、一つのことを死ぬまで研究するつもりで作れ。
C言語のためのお前なのか、お前のためのC言語なのかよく考えろ。
ぶっちゃけた話コピペするのがいいと思うよ 考えて書いてもコピペしてもどっちもコンピュータ上のデータにはかわりないんだから
そういう世界なんですね。。甘くみていました。。。 で、どうすんだwwww
>>956 クズプログラマーなら腐るほどいる
けど、
その中のトップを狙いたいなら
寝れ
だとさ。
あんがい関数型言語から入ってしまったほうが良いという人はいるから Cはいったん諦めて関数型言語から入ってみたら?
ちょっとみんなスルーしてるけど
>>948 CASL2!!!
962 :
デフォルトの名無しさん :2007/11/21(水) 23:29:19
[1]授業単元:Cプログラミング [2]問題文:|π^2/6-(k=1からN)1/k^2|<ε π=3.14159265の値を用いて入力された数値εに対して、上の不等式を満たす最小の自然数Nを求めるプログラムを作れ ただし、ε=0.000001 [3]環境:1 OS:Linux 2 コンパイラ名とバージョン:gcc 3 言語:c [4]期限:明日 [5]その他:特になし for,breakなどを使うんですけど、どうしてもわかりません。 宜しくお願いします。
>>936 #include <iostream>
#include <iomanip>
#include <cmath>
using namespace std ;
int main() {
cout << setiosflags(ios::fixed) ;
cout << setw(5) << "n" << setw(15) << "n!" << setw(15) << "1/n!" << setw(15) << "e" << setw(15) << "誤差" << endl ;
int ni(1);
double e(1);
for ( int n = 1 ; n <= 12 ; ++n ) {
ni *= n ;
e += 1.0 / ni;
cout << setw(5) << n << setw(15) << ni << setw(15) << 1.0/ni << setw(15) << e << setw(15) << exp(1.0) - e << endl ;
}
return 0 ;
}
lisperのおとおりだ。
>>949 ありがとうございます。
(a&1)ってなんですか?
966 :
デフォルトの名無しさん :2007/11/21(水) 23:41:13
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):最大20桁の整数を5つ入力させ、int型配列にそれぞれ格納。入力終了後 5つの数値の和を求め出力する。なお、20桁までを有効とし21桁以降は無視。負の数、整数以外 改行のみの場合はそれぞれエラー表示をし、終了する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C [4] 期限: 11月27日09:00まで よろしくお願いします
>>965 aと1の論理積
aが偶数なら0、奇数なら1になる。
968 :
デフォルトの名無しさん :2007/11/21(水) 23:44:29
高さ情報が入った配列[m][n]があります。 この高さ情報から画像を生成すると時に、傾いているとうまくできません。 うまいこと高さを補正する方法ないですか?
>>967 わかりました。 あとfor文で
for(i=0;a!=0;i++,a>>=1)みたいな書き方はじめてみたんですが、なんですか?i++の右にあるやつです
自分で調べろそれくらい
>>962 #include <stdio.h>
#define EPS 0.000001
#define PI 3.14159265
main( ){
int k;
double diff, tmp = 0, p2 = ( PI ) * ( PI ) / 6.0;
for ( k = 1;; k++ ) {
tmp += 1.0 / ( ( ( double ) k ) * k );
diff = p2 < tmp ? tmp - p2 : p2 - tmp;
if ( diff < EPS ) break;
}
printf( "N=%d ; pi^2/6=%.15lf; 1/1+...+1/N^2 = %.15lf; diff=%.15lf \n", k, p2\
, tmp, diff );
}
972 :
デフォルトの名無しさん :2007/11/21(水) 23:58:36
>>973 i++はわかるんですが、for文の構文がわからないんです。
入門書読めカス
>>976 ;i++,a>>=1みたいに2つになってるのはなんなんですか?1回回るたびにi++とa>>=1を行うんですか?
>>977 そういうこと
って宿題丸投げスレと質問スレは別なのでよろしく
>>977 なんで自分で調べようとしないの?
そんな奴はプログラマにはなれない。
>>977 for(初期化の式;繰り返しの条件;変化式)
お前最高のあほ。
教科書にのってそうなプログラムを大量に宿題にされて 自分の出したやつ流れちゃた
982 :
デフォルトの名無しさん :2007/11/22(木) 00:22:09
984 :
983 :2007/11/22(木) 00:34:01
アドレス張った後で読んでみたら、希望してそうなのと違うっぽいw
985 :
936 :2007/11/22(木) 00:43:15
皆さんありがとうございました。 ほんとに基本プログラミングなんで943さんの やり方なんかはよくわからないのですが 963さんに同じようなやりかたをしていただき なんとなくですがやり方がわかりました。 ちなみに←のところはどれを整数、変数にすればいいのかが よくわかりませんでした。 お手数をおかけしましたがありがとうございました。
986 :
デフォルトの名無しさん :2007/11/22(木) 00:47:03
Cの超ビギナーなんですが、宿題で あなたの名前を入力しなさい と表示させて、名前を入力して、入力したものを最後にもう一度表示させなさい というのがあります。 みんなは 一分でできんじゃんばかじゃね〜 と言ってきますが無理です、3日たちました。 charを使っての入力の段階で何故か漢字で入力できません。 アルファベットになります。なぜでしょうか?
988 :
デフォルトの名無しさん :2007/11/22(木) 00:54:08
すいませんでした
>>986 #include <stdio.h>
int main(a){
scanf("%d",&a);
printf("%d",a);
retrun}
演習 1-20 入力されたタブを,次のタブ・ストップまでのスペースをうめる適当な数のブランク(空白)で置き換えるプログラム detab を書け。タブ・ストップの位置は,例えば n文字ごとというように固定して考えよ。n は変数にすべきか,記号パラメータにすべきか? 演習 1-21 ブランクの列を同じスペーシングを行なう最小のタブおよびブランクで置き換えるプログラム entab を書け。detab と同じタブ・ストップを使え。タブ・ストップに達するのに,タブあるいは単一のブランクのいずれかで十分なときに,どちらを使うべきか? 演習 1-22 長い入力行を,入力の n文字目までにある最後の非ブランク文字の後で,“折りたたむ”プログラムを書け。プログラムは,行が非常に長くても,また指定桁までにブランクもタブもない場合についても,ちゃんと動作するようにせよ。 演習 1-23 Cプログラムからすべてのコメントを除去するプログラムを書け。引用符で囲まれた文字列や文字定数を正しく扱うことを忘れないこと。Cのコメントは入れ子になっていない。 演習 1-24 カッコ,中カッコ,大カッコのつりあいがとれていないといったプログラムの基本的な構文エラーのチェックを行なうプログラムを書け。引用符・二重引用符・コメントなどの処理も忘れないこと。(このプログラムを完全に汎用的にすると,これを書くのは難しくなる)
線は細いがパンチ力があり、長打が期待される選手。もとも とは内野手としての入団で、01年後半から外野に転向した。 1,2年目はほとんど実績なしだったが、01年4ホーマーを 放ち存在をアピール。翌年も5ホーマーを放ち、どちらかといえば 非力なタイプが多いチームの中でパンチ力が目立った。しかしこの年は 定位置確保が期待されながら打率低迷で足踏み。03年も終盤まで故障で 二軍暮らしと、期待は大きいのだがもう一つ感がなかなか抜けない。 細身で一見非力に映るが、リストの強さで長打力が高い。ただ一軍半の 状態が長く、出てきたかと思えば後退と隔年傾向。なかなか印象に残る 活躍を見せられない。04年100打席を越えながら、翌年はまたほとんど 二軍暮らし。 内野に再挑戦した昨年は久々に勢いを見せ、6月以降一軍定着。 軸に期待された清原・中村紀が誤算に終わった中、自己最多の11ホーマーを 放ち遅まきながらも開花の兆しを見せた。しかしこれが続かない。 今季はまたほとんど二軍暮らしに終わり、01年以降では最少の出場機会。 しかも打率1割台と散々に終わってしまった。 どうもスタミナが不足なのか、好調シーズンでも活躍が長続きしない。足踏みを続けているうちにもう30歳を越え、いい加減「期待の戦力」とは言っていられなくなってきた。完全に上に食い込むようでないと、そろそろ立場も危うい。正念場。
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):ある文字列aの中にmarikoという綴りが含まれているかを調べ、あったら”あった” なかったら”なかった”と出力するプログラム(入力は6文字以上) [3] 環境 [3.1] OS:Windows/Linux [3.2] コンパイラ名とバージョン: [3.3] 言語:C [4] 期限:11/22 17:00 [5] その他の制限:関数つかうなといわれた おねがいします><
時効警察」などに出演していたタレントの星野奈津子(20)の所属事務所は21日、星野が自身の公式ブログ「なっちゃん家」で不適切な発言をしたとして 1年間の活動停止処分としたと発表した。事務所名で、星野のブログに処分 内容を記した謝罪文を掲載した。 星野は11月19日付のエントリーで、「今我が家で1番話題なのが、 祖母と3才5才の姉妹が行方不明になった事件」として、香川県で発生した 家族3人が不明となっている事件の犯人を特定するかのような表現をしていた。 星野は事務所の謝罪文に続いて、自らブログに「今回の私のブログでの 記事に関して、大変不適切な発言をしてしまいました事を深く反省して おります」と書き込み。「この事を真摯に受け止め芸能活動を自粛致します」 と本当にご迷惑をお掛けしまして申し訳ございませんでした」と謝罪した。
100get
我が家では今、変な写真が流行ってるんです。 仲良し家族。 家族皆でニュースを観ながらあぁだこぅだ言うのが大好きで、 今我が家で1番話題なのが、祖母と3才5才の姉妹が行方不明になった事件。 『あれは絶対父親の仕業だよ!』 『父親がいい!あんだけテレビで証言してるけど、実は犯人でしたって捕まるのが見たい!』 とかそんな話で持ち切り!! あとはマレーグマのツヨシの苦悩ポーズ!カワユス(^O^)
3
2
1
1
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。