C/C++の宿題を片付けます 53代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。
気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html

【前スレ】
C/C++の宿題を片付けます 52代目
http://pc8.2ch.net/test/read.cgi/tech/1130431335/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
2デフォルトの名無しさん:2005/11/16(水) 10:09:13
>>1
3デフォルトの名無しさん:2005/11/16(水) 10:45:10
学校の宿題です。私の力では解けないのでよろしくおねがいします。
forを使用してください。

・キーボードから実数を5個入力し,その入力データのうち,
3つのデータから実数の平均値を求めよ.
求める平均は最初のデータから3個分,
次のデータから3個分と順次3個のデータとする.(下図参照)
・入力データは配列に入れること.
・ 出力は全部で3個となる.
・ 入力データ(sample)
1.1 1.2 1.3 1.4 1.5

よろしくお願いします
例えば1 2 3 4 5
と入れると,1 2 3の平均と,2 3 4と3 4 5のへいきんが
順に
2 3 4とひょうじされます。
初心者っぽくおねがいします
4デフォルトの名無しさん:2005/11/16(水) 10:56:51
>>3なのに>>1が読めないのはメクラですか?
--- ここから ---
#include <stdio.h>
int main(void){double data[5], sum;int i, j;for( i = 0 ; i < 5 ; i++ ) scanf("%lf", &data[i]);for( i = 0 ; i < 3 ; i++ ) {sum = 0.0;for( j = 0 ; j < 3 ; j++ ) sum += data[i + j];printf("%f ", sum / 3);}printf("\n");return 0;}
--- ここまで ---
printf("\n");なんて初心者っぽさ抜群だろ。
5デフォルトの名無しさん:2005/11/16(水) 11:25:24
double a, b, c, d, e;
scanf("%lf %lf %lf %lf %lf", &a, &b, &c, &d, &e);
printf("%f %f %f\n", (a + b + c) / 3.0, (b + c + d) / 3.0, (c + d + e) / 3.0);
素直すぎるか。
6前スレ695:2005/11/16(水) 11:37:35
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1062.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 今日いっぱい
[5] その他の制限:
ランダム生成プログラム
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1059.txt
一応両方とも書いたのですが、まだindex(索引)を作っていない状態です。
シェルソートの方はコンパイラは通るのですが、500程度のデータを入れるとcore dumpします。
そのあたりの原因も修正していただけたら幸いです。
シェルソート:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1060.txt
挿入ソート:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1061.txt
よろしくお願いします。
7デフォルトの名無しさん:2005/11/16(水) 11:48:08
while(strcmp(a,A[j-h].str)<0 && j-h>=0){

while(j-h>=0 && strcmp(a,A[j-h].str)<0){
かなぁ?わからんけど。
8デフォルトの名無しさん:2005/11/16(水) 12:11:45
double[] a=new double[5];
for(int i=0;i<a.length;i++){
System.out.println("数値入力"+(i+1)+"回目>");
a[i]=Double.parseDouble(buf.readLine());
}
for(int i=0;i<a.length-2;i++){
double sum=a[i];
for(int j=i+1;j<i+3;j++){
sum=sum+a[j];
}
System.out.print(sum/3+" ");
}
9デフォルトの名無しさん:2005/11/16(水) 12:15:52
>>8
スレタイ嫁
10デフォルトの名無しさん:2005/11/16(水) 12:18:34
if(>>9==turaremakuri) System.out.print("ネタにマジレスカコワルイ");
else System.out.print("ウンコー");
11真・前スレ695:2005/11/16(水) 14:49:43
おい!>>6
勝手になりすましてんじゃねぇよ!
しかも、俺のテンプレどころかプログラムまでそのまま使おうとしてるし…
まぁ、俺は自分で解決できたから良いけどね。がんばって
12真・前スレ695:2005/11/16(水) 15:10:52
ついでに>>3もやってみた

#include<stdio.h>

main(){
double data[5];
double ave;
int i,j;

for(i=0;i<5;i++) scanf("%lf",&data[i]);

for(i=0;i<3;i++){
ave=0;
for(j=i;j<i+3;j++) ave+=data[j];
printf("%f ",ave/3.0);
}
}
13デフォルトの名無しさん:2005/11/16(水) 16:02:22
[1] 授業単元:オブジェクト指向言語
[2] 問題文:キーボードから入力されたファイル名のファイルを開き
その内容をそのまま表示するプログラムを作りなさい
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C言語
[4] 期限: 11月17日9時まで
すいません、何卒よろしくお願いします。
14デフォルトの名無しさん:2005/11/16(水) 16:08:54
>>13
#include <stdio.h>
int main(void) {
    char s[256];
    int c;
    FILE* fp;
    scanf("%255s", s);
    fp = fopen(s, "r");
    while ((c = fgetc(fp)) != EOF) putchar(c);
    fclose(fp);
    return 0;
}
15デフォルトの名無しさん:2005/11/16(水) 18:02:39
>>13
オブジェクト指向言語という授業で、11月も半ば既に半分終ってるのに
出てきた課題に激しく吹いた。
16デフォルトの名無しさん:2005/11/16(水) 18:15:15
>>15
それは言わない約束でしょう。
17デフォルトの名無しさん:2005/11/16(水) 18:16:25
[1] 授業単元:プログラミングU
[2] 問題文(含コード&リンク):下記
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月17日まで
[5] その他の制限: stdio.h、string.h、stdlib.hは可

標準入力から読み込んだ文字列に対し,ランレングス符号化を行うプログラムを作成せよ.
ランレングス符号化とは,データ内における同記号の列を,その記号と数値で置き換えることで情報圧縮を行う技術のことである.
例えば, aaaaabbbccdddda の入力に対し, a5b3c2d4a1 と出力する.
//----------解答の最初----------

(* ここに解答を書き加える *)

int main(void){
char buf_r[1024] = {0};
char buf_w[1024] = {0};
int length;

printf("文字列の入力\n");
scanf("%s",buf_r);
runlength(1024,buf_r,buf_w);
printf("[ランレングス符号化]\n%s\n",buf_w);
return(0);
}

//----------解答の終わり----------

どなたか教えてください。お願いします。
18デフォルトの名無しさん:2005/11/16(水) 19:06:19
19デフォルトの名無しさん:2005/11/16(水) 19:15:51
[1] 授業単元:プログラミング論
[2] 問題文(含コード&リンク): 県名、人口、面積が一行に書かれている。
               これを10行分読み込んで県名、人口、面積、人口密度を表示するプログラムを作りなさい。
               ただし、県データを格納する構造体として以下のものを使いなさい。
               
      struct pref {
char name[20];
int pop,area;
float den;
};
*県データ*
hokkaido 5683 83456
aomori 1476 9606
iwate 1446 15278
miyagi 2365 7285
akita 1189 11612
yamagata 1244 9323
fukushima 2127 13782
ibaraki 2985 6096
tochigi 2005 6408
gunma 2025 6363
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C言語
[4] 期限:11月18日18時まで
考えたのですがわからなくて、よろしくお願いします。
20デフォルトの名無しさん:2005/11/16(水) 19:54:18
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク):
main()
{
float *a,*b,c;
c=2.;
a=&c;
b=a;
{
float *a,b,c;
b=2.;
c=3.;
a=&c;
*a=*a+b;
printf("*a=%f\n ",*a);
}
次のプログラムを実行すると表示される値はどれだけになるか調べなさい。又
このプログラムを、ポインタ宣言を使った変数を使って計算するように書き改めなさい。ただし、変数のメモリへの割り当ては、
別に通常の宣言した変数のものを使うこと。
[3] 環境
 [3.1] OS:Windows
 [3.2] gcc 2.9
 [3.3] 言語: C
[4] 期限: 明日
ポインタの説明が口頭のみでわかりませんでした、ほかの人も
苦労していました。お手数ですがよろしくお願いいたします。
21デフォルトの名無しさん:2005/11/16(水) 20:15:14
>>19
#include <stdio.h>
struct pref{
char name[20];
int pop,area;
float den;
};
int main(){
FILE* fp;
char buf[256];
fp = fopen("data.txt","r");
if(fp==NULL){
printf("データファイル'data.txt'が読み込めません.\n");
exit(-1);
}
struct pref prefs[10];int i;
for(i=0;i<10;i++){
fgets(buf,256,fp);
sscanf(buf,"%s %i %i\n",&prefs[i].name,&prefs[i].pop,&prefs[i].area);
prefs[i].den=(float)prefs[i].pop/(float)prefs[i].area;
}
printf("name pop area den\n");
printf("---------------------------------\n");
for(i=0;i<10;i++)printf("%-9s %6i %6i %g\n",prefs[i].name,prefs[i].pop,prefs[i].area,prefs[i].den);
return 0;
}

考えてないのに考えたのですが、とか述べてんじゃねーよ
22デフォルトの名無しさん:2005/11/16(水) 20:23:06
>>20
プログラムのソースも変だし
課題自体もいまいちよくわからんなぁ
表示される値がどれだけになるか調べなさい
なんて実行すりゃわかるじゃねーか
まぁそのソースはコンパイル通らないけど

2+3をポインタを用いて計算したいなら

int x=2,y=3;
int *b=&x,*c=&y;
printf("%i\n",*b+*c);
23デフォルトの名無しさん:2005/11/16(水) 20:28:00
24デフォルトの名無しさん:2005/11/16(水) 20:30:51
>>21
いろいろつっこみどころが満載ですね
25デフォルトの名無しさん:2005/11/16(水) 20:34:57
>>22
スレ汚し&2度手間すいません。2回コピーしてました。本当はこっちです。
main()
{
float *a,*b,c;
c=2.;
a=&c;
b=a;
c=*a+*b;
printf("c=%f\n ",c);
}

このプログラムを、ポインタ宣言を使った変数を使って計算するように書き改めなさい。ただし、変数のメモリへの割り当ては、
別に通常の宣言した変数のものを使うこと。
又、ポインタの概念を使い
底辺と高さを入力して三角形の面積を計算するプログラムを作成せよ。

実行するほうはコンパイルしてみて確認できました。
課題自体はポインタの概念を使わせたいみたいです。


26デフォルトの名無しさん:2005/11/16(水) 20:41:01
取りあえず>>11がヒマなのは分かった
27デフォルトの名無しさん:2005/11/16(水) 20:52:03
>>25
#include <stdio.h>
int main()
{
float t=2;
float *a,*b,*c;
c=&t;
a=c;
b=a;
*c=*a+*b;
printf("c=%f\n ",*c);
float h,w;
float *x=&h,*y=&w;
printf("三角形の高さを入力してください>>");
scanf("%f",x);
printf("三角形の底辺を入力してください>>");
scanf("%f",y);
printf("三角形の面積は %f です.",*x**y/2);
return 0;
}

こういうこと?
28デフォルトの名無しさん:2005/11/16(水) 21:09:02
>>27
うまくいきました!ありがとうございます。
29デフォルトの名無しさん:2005/11/16(水) 22:35:16
[1] 授業単元: 情報処理演習U
[2] 問題文(含コード&リンク):それぞれの数値を配列型変数に入力し、
数値の合計、平均を求め、さらに入力した数値を大きい順に並び替えよ。
(a[0]=20 a[1]=10 a[2]=25 a[3]=30 a[4]=15)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:20日まで
[5] その他の制限:習い始めて間もないので簡単な方法でお願いします
30デフォルトの名無しさん:2005/11/16(水) 22:42:25
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク):
標準入力から複数の数値データを入力して、
データの個数、和、最大値、最小値、平均値
を標準出力に出力するプログラムを以下の条件を守り作成せよ。
このとき、別ファイルdata10.txtをリダイレクションにより入力させた結
果をresult10-2.txtに出力すること。

(a) 入力されるデータはdouble型で事前に個数は与えられない(入力データ
がなくなるまで)が、最大1000個である。
(b) プログラムを3個の関数(main, input, process)で構成する。
(c) データ入力はinput関数で行う。input関数は引数に入力データを格納
する配列のポインタをもち、関数の戻り値でデータ個数を表す。すな
わちinput関数の型はintとする。
(d) 和、最大値、最小値はprocess関数で求める。process関数はvoid型と
し、引数にデータが格納されている配列のポインタ、データ数、なら
びに和・最大値・最小値をmain関数に引き渡すためのポインタをもつ。
(e) main関数では必要な変数の宣言、input関数を利用したデータ入力、
process関数を利用した各種計算、平均値の計算、結果の表示を行う

[3] 環境
 [3.1] OS:Windows
 [3.2] gcc 2.9
 [3.3] 言語: C
[4] 期限: 今週


お願いします!
31デフォルトの名無しさん:2005/11/16(水) 22:47:14
int i,j;
double a[5],ave,sum,tmp;
a[0]=20;a[1]=10;a[2]=25;a[3]=30;a[4]=15;
sum=a[0]+a[1]+a[2]+a[3]+a[4];
ave=sum/5;
for(i=0;i<5;i++) for(j=i;j<5;j++) if(a[i]<a[j]) {tmp=a[i];a[i]=a[j];a[j]=tmp;}
printf("Ave = %lf Sum = %lf\n",ave,sum);
for(i=0;i<5;i++) printf("%d - %lf",i,a[i]);
32教えてください:2005/11/16(水) 23:52:06
キーボードから「100」以下の整数を入力して、その和が「1500」以上
になったときの入力データは何番目であったか求めるプログラムを作成せよ。
これなんですけど、どうしても分からないのでよろしくお願いします。C言語
でお願いします。
33デフォルトの名無しさん:2005/11/16(水) 23:53:52
嫌です。
34教えてください:2005/11/16(水) 23:57:22
お願いします。

35デフォルトの名無しさん:2005/11/16(水) 23:57:40
断る。
36デフォルトの名無しさん:2005/11/16(水) 23:59:10
int input(double *data)
{
 int a, cnt=0;
 for(i=0;i<1000;i++){
  scanf("%d", &a);
  if(EOF == a){
   return (cnt);
  }
  data[cnt] = a;
  cnt++;
 }
 return (cnt);
}

void process(double *data, int cnt, double *sum, double *max, double min)
{
 int cnt;
 if(0 == cnt){
  return;
 }
 for(;1<=cnt;cnt--){
  *sum = *sum+data[i];
  *max = (data[i] > data[i-1]) ? data[i]:data[i-1];
  *min = (data[i] < data[i-1]) ? data[i]:data[i-1];
 }
}

void main()
{
 double data[1000], sum, max, min;
 int cnt;
}
37教えてください:2005/11/16(水) 23:59:39
やっぱできたから大丈夫です。お騒がせしました♪
38デフォルトの名無しさん:2005/11/17(木) 00:01:03
なんかムカついてきた
39デフォルトの名無しさん:2005/11/17(木) 00:01:34
>>36
なんか見たらバグってるが直すつもりは無い
40デフォルトの名無しさん:2005/11/17(木) 00:06:16
[1] 授業単元: コンピュータ入門
[2] 問題文(含コード&リンク): 

問題:
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1106.txt

自分のソースコード:
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1105.txt


[3] 環境 
 [3.1] OS: Windows XP SP2 
 [3.2] Borland C++ Compiler 5.5.1
 [3.3] 言語:C
[4] 期限: 2005/11/22
[5] その他の制限:  変数と型、式と演算子、構造制御文、 関数 
配列ぐらいまで習いました。
がんばったのですが配列の使い方がよくわからず、
自分の力では解けません。。お力添えを。


 

41デフォルトの名無しさん:2005/11/17(木) 00:16:02
>>40
>for (i=0; i<=5; i++ )

配列の要素数が5個だから、使える添え字は0〜4までです
このforループだと0〜5までになっちゃうよ
42デフォルトの名無しさん:2005/11/17(木) 00:23:35
>>41
んだね、それ以外は大丈夫っぽい
43デフォルトの名無しさん:2005/11/17(木) 00:28:55
#include<stdio.h>

void main( void )
{
float k[5] = {92, 56, 89, 76, 81};
float s[5] = {82, 46, 79, 88, 91};

printf("kokugo : %f\n"
"suugaku: %f\n"
"Heikin : %f %f %f %f %f\n",
( k[0] + k[1] + k[2] + k[3] + k[4] )/5,
( s[0] + s[1] + s[2] + s[3] + s[4] )/5,
( k[0] + s[0] ) / 2,
( k[1] + s[1] ) / 2,
( k[2] + s[2] ) / 2,
( k[3] + s[3] ) / 2,
( k[4] + s[4] ) / 2);
}


これでどうだ!
44デフォルトの名無しさん:2005/11/17(木) 00:46:25
[1] 授業単元: プログラミング入門
[2] 問題文(含コード&リンク):正の整数mを読み込んだときに、それを逆順にした数nを求めなさい。
               そのとき、mとnとどちらが大きいかもあわせて出力しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: VisualC++ 6.0
 [3.3] 言語:C
[4] 期限:明日の朝10時まで
自分で途中までやってはみたのですができません…_| ̄|○以下がそのプログラムです。
#include<stdio.h>
int main(void)
{
int m,n,max;

printf("整数を入力してください:");
scanf("%d",&m);

if(m > 0){
n = m % 10;
m = m / 10;}

if(m == 0){
if(m > n){max = m;}
else{max = n;}}
else{printf("NO");}

printf("逆順:%d、大きいのは%d\n",n,max);

return 0;}

ホント、初心者すぎて申し訳ないんですが、よろしくお願いします。
45デフォルトの名無しさん:2005/11/17(木) 00:49:07
>>43
   __             __/  / |    __  ──
     / ─ /  / \ ○   |   /  |      |    ̄ ̄/ ──
  __/  _/  /   \    |  /  レ  ─┴─  _/

      /\___/ヽ    
     /''''''   '''''':::::::\    
    . |(〇),   、(〇)、.:| 
    |   ,,ノ(、_, )ヽ、,, .::::|    
  .   |   `,rェェェ、 ' .:::::::| 
     \  |,r-r-|  .::::/     
  ,,.....イ.ヽヽ、`ニニ´ーノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
      >   ヽ. ハ  |   ||
46デフォルトの名無しさん:2005/11/17(木) 00:55:34
>>45
マジカ
Borlandじゃ通ったんだがなぁ
47デフォルトの名無しさん:2005/11/17(木) 00:58:18
>>44
逆順にするってどういうこと?
48デフォルトの名無しさん:2005/11/17(木) 01:00:36
逆数のことじゃね?
4940:2005/11/17(木) 01:01:02
>>41.42
ありがとうございます。すごい簡単な見落とししてました。。
うまく表示されました。

>>43
実行例どうりに表示されてすごいです。
Heikinの表示参考にしてみます。(void型関数はよくわからない;;

>>45-46

borlandでは自分もコンパイルできました。
50デフォルトの名無しさん:2005/11/17(木) 01:02:55
正の整数を逆数にしても、元の数より大きくなることはない
51デフォルトの名無しさん:2005/11/17(木) 01:07:04
44です。すいません、説明不足でした_| ̄|○
例えば12345って入力したら、54321って表示されるようにしなさいってことです。
そして入力した整数をm、逆から表示した数字をnとするっていう意味です。
ややこしくて本当に申し訳ないです…。
52デフォルトの名無しさん:2005/11/17(木) 01:13:11
>>51
#include<stdio.h>
int main(void)
{
int l,m,n,max;

printf("整数を入力してください:");
scanf("%d",&m);

n = 0; max = l = m;
while(m > 0){
n = n * 10 + m % 10;
m = m / 10;
}

if(l < n) {max = n;}

printf("逆順:%d、大きいのは%d\n",n,max);
return 0;
}
53デフォルトの名無しさん:2005/11/17(木) 01:17:11
>>52
できました!!本当にありがとうございました!!
54デフォルトの名無しさん:2005/11/17(木) 01:23:35
l は要らんかったな。まぁいいや
55c言語初心者:2005/11/17(木) 02:47:20
質問というよりプログラムが長いのでいくつかに分けて書き込みます。
下記の二つのプログラムをまとめて一つにするには、どうしたらよいですか?
/*
コマンドライン引数で指定した解像度と明るさのPPM画像ファイルを生成する。
/*

#include <stdio.h>
#include <stdlib.h>
#include “ppm.h” /*PPM画像ファイル処理関数ライブラリ*/

Int main(int argc,char *argv[])
{
FILE *fpout; /*出力ファイルポインタ*/
unsigned char *buf; /*画像データバッファへのポインタ*/
int width; /*画像の幅*/
int height; /*画像の高さ*/
int br; /*画像の明るさ*/
int i,j         /*注目ピクセルの座標(横、縦) */
int k; /*注目ピクセルの先頭からの位置*/
56c言語初心者:2005/11/17(木) 02:47:56
/*コマンドライン引数の個数チェック*/
if(argc<5){
printf(“Usage:%s<outfile><width><height><bright>\n”,argv[0]);
exit(0);
}

/*コマンドライン引数で指定されたファイルをバイナリ書き込みモードでオープン*/
if(NULL==(fpout = fopen(argv[1],”wb”))){
printf(“%sをオープンできません\n”,argv[1]);
exit(-1);
}

/*画像の横幅を取得*/
Sscanf(argv[2],”%d”,&width);

  if(width <=0){
printf(“画像の横幅の指定が不正です\n”);
exit(-1);
}

/*画像の高さを取得*/
sscanf(argv[3],”%d”,&height);
if(height <=0){
printf(“画像の高さの指定が不正です\n”);
exit(-1);
57c言語初心者:2005/11/17(木) 02:48:25
}
/*画像データバッファを取得*/
if(NULL==(buf = malloc(width*height*3*sizeof(unsigned char)))){
printf(“画像データバッファの取得に失敗しました\n”);
exit(-1);
}

/*画像データバッファに画像データを書き込む*/
for(j = 0;j < height; j++){
for(i = 0; i <width; i++){
k = (i+j*width)*3;
buf[k+0] =(unsigned char)br;
buf[k+1] =(unsigned char)br;
buf[k+2] =(unsigned char)br;
}
}
58c言語初心者:2005/11/17(木) 02:51:59
/*PPMヘッダーをファイルに出力*/
put_ppm_header(fpout,width,height,PPM_DEPTH);

/*画像データバッファの内容をファイルに出力*/
fwrite(buf,width*height*3*sizeof(unsigned char),1,fpout);

/*画像データバッファを解放*/
free(buf);

/*ファイルクローズ*/
fclose(fpout);


retrun0;
ここまでが一つで、
59c言語初心者2:2005/11/17(木) 02:53:19
もう一つが
/* PPM画像の平均輝度を算出する。 */

#include <stdio.h>
#include <stdlib.h>
#include “ppm.h” /*PPM画像ファイル処理関数ライブラリ*/

/*ピクセルのRGB各要素から,輝度を求める*/
int brightness(unsigned char *dat)
{
unsigned int r,g,b;
unsigned int br; /*ピクセルの輝度*/

r=(unsigned int)dat[0];
g=(unsigned int)dat[1];
b=(unsigned int)dat[2];

br=(77*r+151*g+28*b)/256;

return(int)br;
}
60c言語初心者:2005/11/17(木) 03:04:00
r=(unsigned int)dat[0];
g=(unsigned int)dat[1];
b=(unsigned int)dat[2];

br=(77*r+151*g+28*b)/256;

return(int)br;
}

Int main(int argc,char*argv[])
{
FILE*fpin; /*入力ファイルポインタ*/
unsigned char*buf; /*画像データバッファへのポインタ*/
int header_len; /*画像データのヘッダのバイト数*/
int width; /*画像の幅*/
61c言語初心者:2005/11/17(木) 03:04:42
int height; /*画像の高さ*/
int depth; /*画像のデータ最大値*/
int br; /*ピクセルの輝度*/
int sum; /*輝度値の合計*/
double br_mean; /*平均輝度*/
int i,j; /*注目ピクセルの座標(横、縦)*/
int k; /*注目ピクセルの先頭からの位置*/

/*コマンドライン引数の個数チェック*/
if(argc<2){
printf(“Usage:%s<infile>\n”,argv[0]);
exit(0);
}

/*入力ファイルをバイナリ読み取りモードでオープン*/
if(NULL==(fpin = fopen(argv[1],”rb”))){
printf(“%sをオープンできません\n”,argv[1]);
exit(-1);
}
62c言語初心者:2005/11/17(木) 03:05:19
/*入力ファイルのヘッダ情報を取得*/
header_len = read_ppm_header(fpin,&width,&height,&depth);
/*ヘッダが不正な場合は終了*/
if(header_len < 0){
printf(“入力ファイルのヘッダが不正です\n”);
exit(-1);
}

/*画像データバッファを取得*/
in(NULL==(buf = malloc(width*height*3*sizeof(unsigned char)))){
printf(“画像データバッファの取得に失敗しました\n”);
exit(-1);
}

/*画像データの本体をバッファに読み込む*/
fseek(fpin,header_len,SEEK_SET); /*ヘッダの分だけ飛ばす*/
fread(buf,width*height*3*sizeof(unsigned char),1,fpin);
63c言語初心者:2005/11/17(木) 03:05:53
/*バッファ内の画像データの平均輝度を求める*/
sum = 0;
for(j = 0;j < height;j++){
for(i = 0;j < width;i++){
k = (i+j*width)*3; /*j行i列のピクセルはkバイト目*/
br = brightness(buf+k);/*該当ピクセルの輝度*/
sum += br; /*輝度値の総和*/
}
}
br_mean =(double)sum/(double)(width*height);

/*平均輝度を表示する*/
printf(“%sの平均輝度:%lf\n”,argv[1],br_mean);

/*画像データ用バッファを解放*/
free(buf);

/*ファイルクローズ*/
fclose(fpin);

return0;
}
64デフォルトの名無しさん:2005/11/17(木) 03:19:15
>>1読め
65c言語初心者:2005/11/17(木) 04:26:39
/*バッファ内の画像データの平均輝度を求める*/
sum = 0;
for(j = 0;j < height;j++){
for(i = 0;j < width;i++){
k = (i+j*width)*3; /*j行i列のピクセルはkバイト目*/
br = brightness(buf+k);/*該当ピクセルの輝度*/
sum += br; /*輝度値の総和*/
}
}
br_mean =(double)sum/(double)(width*height);

/*平均輝度を表示する*/
printf(“%sの平均輝度:%lf\n”,argv[1],br_mean);

/*画像データ用バッファを解放*/
free(buf);

/*ファイルクローズ*/
fclose(fpin);

return0;
}
の二つです。長すぎて面倒だと思いますがどなたかお願いします。
66デフォルトの名無しさん:2005/11/17(木) 04:29:37
>>65これを使えば1つにできるよ
ttp://www.vector.co.jp/soft/win95/util/se072710.html
67c言語初心者:2005/11/17(木) 04:35:15
ありがとうございます。やってみます。
68デフォルトの名無しさん:2005/11/17(木) 07:15:32
あのC言語で
(x+3)の1/3乗を計算したい時はどのようにしたらいいんでしょうか><?
double pow(double x,double y)
を使うことは解るんですが・・・。

簡単なサンプルソースなどを貼ってもらえると助かります。
69デフォルトの名無しさん:2005/11/17(木) 07:26:28
pow(x + 3.0, 1.0 / 3.0);
70デフォルトの名無しさん:2005/11/17(木) 11:16:28
問:シェルソートのhの系列はどのようなものがよいか.調べて理由を考察せよ

3h+1がいいらしいが理由はどこにもないorz 何故なんですの?
71デフォルトの名無しさん:2005/11/17(木) 11:59:04
>>70
こことか
ttp://www.kusa.ac.jp/~wat/ja/lecture/is2-2003/note11.html#shell

これってC/C++っていうよりむしろアルゴリズムの問題なキガス
実際、複雑なアルゴリズムってあんまり使わない仕事が多いような気がするんだけど、どうだろう。
72デフォルトの名無しさん:2005/11/17(木) 13:49:22
>>70
「数学的に難しい問題が多く、教授にもきっとわからない事でしょう」と
書いて出すとかw
73デフォルトの名無しさん:2005/11/17(木) 14:28:46
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 入力した文字列を逆順で再構成する関数strinverseを作れ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005年11月11日まで(すでに遅れ)
[5] その他の制限: なるべく簡単に・・・

長さを取得して、*(temp+i)に逆から一つ一つ入れていけばできるのかなと思いましたがどうも上手くいきません。
74デフォルトの名無しさん:2005/11/17(木) 14:52:55
>>73
#include <string.h>
char* strinverse(char* str)
{
    int start = 0, end = strlen(str) - 1;
    while (start < end) {
        char temp = str[start];
        str[start++] = str[end];
        str[end--] = temp;
    }
    return str;
}
75デフォルトの名無しさん:2005/11/17(木) 14:53:59
>>73
#include <stdio.h>
int main(void)
{
char str_in[1024], str_out[1024]; // 十分な長さを確保しているという前提で
int i, j;
fgets(str, 1024, stdin);
for( i = strlen(str) - 1 ; i >= 0 && (str[i] == '\n' || str[i] == '\r') ; i-- ) ;
for( j = 0 ; i >= 0 ; i--, j++ ) str_out[j] = str_in[i];
str_out[j] = '\0';
printf("Input -> %s\nReverse -> %s\n", str_in, str_out);
return 0;
}
7671:2005/11/17(木) 15:16:17
迅速な回答ありがとうございます。非常に助かります。

char *strinverse( char *s )
{
     int i, len;
     char *temp;

     len = strlen(s);
     for( i = 0 ; i < len ; i++ )
     *(temp+i) = *(s+len-1-i);

     return temp;
}
これが今まで考えてたものなんですが、入力する文字列によってはエラーが起きたりします。
質問を連発して悪いのですが、一体どこが悪いのでしょうか。
77デフォルトの名無しさん:2005/11/17(木) 15:16:34
>>75
> 関数strinverseを作れ
この部分の仕様を満たしてない。
7873:2005/11/17(木) 15:16:38
73でした・・・すみません。
79デフォルトの名無しさん:2005/11/17(木) 15:18:45
>>76
まず、交換という操作を行っていない。
80デフォルトの名無しさん:2005/11/17(木) 15:50:30
>>76
tempの実体を確保していない。
実体を確保したとしてもauto変数の配列を返すことは出来ない。
従って*s自体を更新するように仕様を変更した方が良い
81デフォルトの名無しさん:2005/11/17(木) 15:51:30
>>79 交換は必須条件ではないのでは?逆順で再構成せよとしかないし。
>>76 char *tempに領域を確保してないのが悪い。エラーなしで動くことがある方が怖いな。
8268:2005/11/17(木) 15:52:09
>>69
教えてくれてありがとうございました!!
とっても助かりました☆
83デフォルトの名無しさん:2005/11/17(木) 16:37:49
1] プログラム演習
[2] 10までの10進法の数字を2進法(char形)に直して表示する。
[3] 
 [3.1] Windows
 [3.2] VC++ 6.0
 [3.3] C
[4] 11/21
[5]たぶん、特になし。

おねがいします。
84デフォルトの名無しさん:2005/11/17(木) 16:58:12
>>71だけど>>76じゃないから(´・ω・`)
ポインタとって実体確保しないなんてミスしないよ(つД⊂)・・・たぶん
85デフォルトの名無しさん:2005/11/17(木) 17:03:30
>>83
#include <stdio.h>
#include <math.h>

int dec2bin(int, char*);

int main(void)
{
char bin[5];
int i = 10;

dec2bin(i, bin);

printf("%s\n", bin);

return 0;
}
int dec2bin(int dec, char* buf)
{
int i, bin = 0;

for (i=0;i<4;i++) {
if (i == 0)
bin += dec % 2;
else
bin += (int)pow(10, i)*(dec%2);
dec /= 2;
}
sprintf(buf, "%04i", bin);
return dec;
}
86デフォルトの名無しさん:2005/11/17(木) 17:20:45
>>83
#include <stdio.h>

char* to_radix_2(unsigned int x, char* s) {
    int index = 0, left = 0;
    char temp;
    do s[index++] = (x & 1) + '0'; while (x >>= 1);
    s[index--] = '\0';
    while (left < index) {
        temp = s[left];
        s[left++] = s[index];
        s[index--] = temp;
    }
    return s;
}

int main(void) {
    char s[256];
    int i = 123456;
    printf("%d(10) = %s(2)", i, to_radix_2(i, s));
}
87デフォルトの名無しさん:2005/11/17(木) 17:30:33
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 1234567890を繰り返し表示するプログラムを作成せよ。
なお、表示する数字は、読み込まれた整数値の個数とする。
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VisualC++ 6.0
 [3.3] 言語: C
[4] 期限: 今夜20時までに

プログラムを自分でも作成してみたのですが、うまく実行できません。
↓が自分で作成したものです。
#include <stdio.h>
int main (void)
{
int i,num;

printf("整数を入力してください:");
scanf("%d", &num);

for(i = 1; i <= num; i++){
if(i== 10){
i = 0;
}
printf("%d",i);
}
return 0;
}
よろしくおねがいします。
88デフォルトの名無しさん:2005/11/17(木) 17:33:21
>>87
それはたとえば3が指定されたときに
012と表示するの?それとも012345678901234567890123456789と表示するの?
89デフォルトの名無しさん:2005/11/17(木) 17:36:21
こんなん?

#include<stdio.h>
int main(void)
{
int s[10] = {1,2,3,4,5,6,7,8,9,0};
int a,i;
scanf("%d",&a);
for(i=0;i<a;i++)
printf("%d ",s[i%10]);
return 0;
}
9088:2005/11/17(木) 17:39:52
>>87
ま、いいや。こんな感じ?
#include <stdio.h>
int main(void) {
    int i = 9, num;
    printf("整数を入力してください:"); scanf("%d", &num);
    while (num-- > 0) {
        if (++i == 10) i = 0;
        printf("%d", i);
    }
    return 0;
}
91デフォルトの名無しさん:2005/11/17(木) 17:41:17
配列使う意味わからん
#include<stdio.h>
int main(void)
{
int num,i;
printf("整数を入力してください:");
scanf("%d",&num);
for(i=0;i<num;i++)
printf("%d ",(i+1)%10);
return 0;
}
92デフォルトの名無しさん:2005/11/17(木) 17:46:10
改行されないね
9387:2005/11/17(木) 17:46:10
意味分からない説明文ですみませんでした。
無事解決しました。
ありがとうございます!
9483:2005/11/17(木) 18:10:17
>>85
>>86
ありがとうございます。
95デフォルトの名無しさん:2005/11/17(木) 19:28:36
宿題というわけではないのですが質問させてください.

「要素それぞれの遷移確率に従ってランダムに1つ選ぶ」
にはどのようにすればよいのでしょうか?
例えばa,b,cがそれぞれ5/10,3/10,2/10の確率のとき、
この確率に従ってa,b,cの中からランダムに1つ選択する
といった感じです.
96デフォルトの名無しさん:2005/11/17(木) 19:43:54
ランダムな数値を配列に入れてソート時間の計測をやっているのですが、

int *a;

printf("要素数を入力:");
scanf("%d",&MAX);

a=(int *)malloc(sizeof(int)*MAX);

srand((unsigned int)time(NULL));

for(i=0;i<MAX;i++)
a[i]=rand()*pow(2,15)+rand();

とした場合、扱えるデータ数の最大はメモリ容量が空いてる限りですか?
それともrand()*pow(2,15)+rand();で表現できる2^30個までですか?
97デフォルトの名無しさん:2005/11/17(木) 19:46:32
rand()*pow(2,15)+rand()はデータ数と関係無いから
98デフォルトの名無しさん:2005/11/17(木) 19:49:39
>>95
コードは適当だけど、素朴に考えるとこんな感じになるんじゃね?

int i = rand() % 10;

if((0 <= i) && (i <= 4)){
next = a;
} else if((5 <= i) && (i <= 7)){
next = b;
} else if((8 <= i) && (i <= 9)){
next = b;
}
9998:2005/11/17(木) 19:50:31
あ、最後のは next = c; だな。
10095:2005/11/17(木) 19:56:03
>>98
なるほど〜、確率に合わせて10を要素に配分してるんですね!
方針が立ちました、ありがとうございます!
101デフォルトの名無しさん:2005/11/17(木) 20:26:10
>>97
ではメモリの容量がある限りデータを生成できるってことですね?
ということはrand()*pow(2,15)+rand()で表現できる数の範囲以上の個数を
指定したら同じ値を何個も使って生成していくってことですよね?
102デフォルトの名無しさん:2005/11/17(木) 20:27:39
[1] 授業単元: プログラミング演習
[2] 下
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VisualC++ 6.0
 [3.3] 言語: C
[4] 期限: 来週中

1. 自然数2個の最大公約数を計算する関数を作成せよ
  標準入力から自然数M, N, dm, dnを入力する。
自然数M〜M+dmとN〜N+dnとの最大公約数をそれぞれ求める。
結果は標準出力に表形式で示す。表形式の出力終了後、これらの中で互
いに素である自然数の組を標準出力に示す。
例:M=3, N=4, dm=3, dn=2の場合
3 4 5 6
4 1 4 1 2
5 1 1 5 1
6 3 2 1 6
互いに素:
(3,4)
(5,4)
(3,5)
(4,5)
(6,5)
(5,6)
d) プログラムは3個以上の関数で構成すること(main, 最大公約
数を計算する関数以外に何かの役割を持たせた関数を作成する必要があ
る)

お願いします
103名無し:2005/11/17(木) 20:32:47
[1] 授業単元:連立一次方程式
[2] 問題文:[入力]4個の実数(一次方程式ax+by+cz=dの定数a,b,c,d)の組を3組
[操作]行列を使って3元一次方程式の解を求める [出力]3元一次方程式の解をx=解1,y=解2,z=解3の形で出力
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2005年11月19日13:00まで]
[5] その他の制限:ガウスの消去法かガウスジョルダン法で解かないといけないみたいです
よろしくお願いいたします。
104デフォルトの名無しさん:2005/11/17(木) 20:48:29
そうだけど、
rand()*pow(2,15)+rand()じゃ、一様な乱数を生成できないんじゃね?
105デフォルトの名無しさん:2005/11/17(木) 20:55:53
>>101
あくまでランダムだから同じ数字が重複することもあるじゃん。
それにmallocでメモリ領域確保できなかったらエラーにしないとね。
あとallocしたらfreeを(´・ω・`)
106デフォルトの名無しさん:2005/11/17(木) 21:56:00
107デフォルトの名無しさん:2005/11/17(木) 22:11:51
>>106
ありがとうございます〜
108デフォルトの名無しさん:2005/11/17(木) 23:21:31
>>103
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1110.c

適当にガウスの消去法かガウスジョルダン法でぐぐったものに
http://user.ecc.u-tokyo.ac.jp/~tt37084/cp9703.html
・C++(//)でなくC(/*…*/)のコメント形式に変更
・main()が長すぎるから適当に関数へ分割
・ほか少々いじる
くらいしかやってないので上のトコの注意見ながら手直ししてください
解が一意に決まらなかったときの処理とかやってないんでかなりやっつけです
109デフォルトの名無しさん:2005/11/18(金) 00:35:33
文字列をさかさまにする関数
str_reverse(char*s,char*d);
を使いなさい
s→dへのコピーをする
"abc"→"cba"になる
110デフォルトの名無しさん:2005/11/18(金) 01:13:09
>>109
主語がわからないけど一応はっとく

#include "stdio.h"
double str_reverse(char *,char*);

int main(void){
    char s[100]="1",d[100];
    str_reverse(s,d);
    printf("_%s_\n_%s_\n",s,d);
    return 0;
}

double str_reverse(char *s,char *d){
    int n=0,i;
    if(*s){
        while(s[++n]);i=d[n--]=0;
        do d[n-i]=s[i];while(s[++i]);
    }else *d=0;
    return 0.0;
}
111デフォルトの名無しさん:2005/11/18(金) 01:31:11
>>110
ありがとうございます
助かりました
112デフォルトの名無しさん:2005/11/18(金) 08:55:45
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
★★★★★ で表現されたバーを回転させながら横に移動させなさい。
回転が速すぎるときは、sleep関数を使いなさい。
[3] 環境
 [3.1] OS: Windows 
 [3.2] コンパイラ名とバージョン: LCC-Win32
 [3.3] 言語: C言語
[4] 期限: 11月18日月曜日
[5] その他の制限:
先週for,whileなどのをやって、今週if switch caseをやった後にこの宿題が出ました。
       ★       ★      ★
        ★      ★     ★
★★★★★  ★     ★    ★    ★★★★★
          ★    ★   ★
           ★   ★  ★
こんな感じに回転させながら右に動き、
1回転したら左に同じく回転しながら動き最初の位置に戻ります。
考えてもさっぱりわかりません。どなたか何卒よろしくお願いします。
113デフォルトの名無しさん:2005/11/18(金) 11:09:06
日本語がいまいちわからん・・・
114デフォルトの名無しさん:2005/11/18(金) 11:43:12
for (int ic = 0; ic <= 8; ++ic) {
printf("%*s%c\n", ic, "", "-\\|/-\\|/-"[ic]);
}
みたいな感じなんだろうか。
115デフォルトの名無しさん:2005/11/18(金) 12:04:05
移動させるだけなら強引にこんな感じで・・・あとは知らない
#include <stdio.h>
#include <windows.h>
int main()
{
int i, j;
for (j = 0; j < 20; j++){
for (i = 0; i < j; i++) printf(" ");
printf("★★★★★\r");
Sleep(100);
}
putchar('\n');
for (j = 20; j >= 0; j--){
for (i = 0; i < j; i++)
printf(" ");
printf("★★★★★\r");
Sleep(100);
printf("                         \r");
}
return 0;
}
116デフォルトの名無しさん:2005/11/18(金) 12:14:31
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
配列a[ ]のすべての要素に1を代入する。
この代入する部分を独立させポインタ変数を明示するプログラムを書け。
(ポインタで渡してポインタで受け取る)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月21日まで
[5] その他の制限:よろしくおねがいします
117デフォルトの名無しさん:2005/11/18(金) 12:31:25
前スレの954と同じ奴かな
なにかの嫌がらせ?
118デフォルトの名無しさん:2005/11/18(金) 13:08:02
自分も最初問題を先生に言われたときは「はぁ?」って感じで、
この実行ファイルを配布されたので、それをみてやっと理解できたんです。
中心の星が右にひとつずつ動きます。それを軸にして周りの4つの星が回ります。
回転するだけでもいいので、よろしくお願いします。
以下のファイルを参考にしてくださいと先生が言っていました。
#include <stdio.h> #include <xxxxxx.h> #include <conio.h>
int main(){
int x=15,y=15;
int dir,col=1;
Cinit(80,40);
while(1){
Cprint(0,0,"");
dir= getchar()-'0';
fflush(stdin);
switch (dir){
case 1: y++; break;
   case 2: x+=2; break;
   case 3: y--; break;
   case 4: x-=2; break;
default : col =(col++)%15+1;
}Color(col);
Cprint(x,y,"■");
}return 0;}
「xxxxxx.h(学部名なので伏せてます。)このファイルをインクルードすると、
Cinit(幅 , 高さ); でコンソールの大きさを指定することができる。
Color(色番号); で色を0〜15 までの16 色選択できる。
Cprint(X,Y,文字列); でX,Y の位置に文字列を表示できる。
座標は文字単位に数えるので、X 方向とY 方向では長さが異なる。
半角文字を基準とするので、横方向長さは縦の約半分になる。
xxxxxx.h を使うときは必ずCinit 関数を使ってください。」とのことです。
119デフォルトの名無しさん:2005/11/18(金) 13:25:49
>>118
・自分のレス番が判るようにしよう。
・そういう条件ははじめから提示しよう。
それはさておき、めんどいし実行できないし、私ゃパスだ。
120デフォルトの名無しさん:2005/11/18(金) 13:33:51
回転って45度毎でいいのかな。
それなら3パターンを静的にもっとけばいいだけのような。
なんにしてもわけのわからん課題だ。
121デフォルトの名無しさん:2005/11/18(金) 13:39:47
>>120
>それなら3パターンを静的にもっとけばいいだけのような
馬鹿ですか?
122デフォルトの名無しさん:2005/11/18(金) 14:06:17
まあ、実際に書き出さんと、数え上げミスはよくやるもんだ。
あと、指定座標に特定のパターンを出力するのも、良くある話だ。
123デフォルトの名無しさん:2005/11/18(金) 14:55:46
[1] 授業単元:情報処理演習
[2] 問題文(含コード&リンク):最短最大路を求めるプログラムを作成せよ
[3] 環境
 [3.1] OS: Windows
 [3.2] vc++6.0
 [3.3] C/C++
[4] 期限: 2005/11/21

色々と調べたのですが、どうしてもわかりません。
宜しくお願いします。
124デフォルトの名無しさん:2005/11/18(金) 16:02:50
>>123
>"最短最大路" の検索結果 1 件中 1 - 1 件目
最短最大路って何かと思って調べてみたらここにバッチリ書いてあるが
最短路の中で最大の重みがついてる路ってことか?
それならダイクストラ法で最短路出せば直ぐだろ
125デフォルトの名無しさん:2005/11/18(金) 17:17:37
[1] 授業単元:プログラミング演習2
[2] 問題文
入力した文字列を反転するプログラムをポインタ変数を用いて作成せよ.
[実行例]
文字列を入力してください:meijo
反転文字列は"ojiem"です.

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Microsoft VisualC++6.0
 [3.3] 言語: C++
[4] 期限:速ければ速いほど助かります。
よろしくお願いします。
126デフォルトの名無しさん:2005/11/18(金) 17:57:08
こんなんじゃ全然遅いかな

#include <stdio.h>
int main(){
char s[120];
char *p = s;

printf("文字列を入力してください:");
scanf("%s", &s);
for (; *p != '\0'; p++);
p--;
printf("反転文字列は\"");
for (; p != s - 1; p--) printf("%c", *p);
printf("\"です.");

return 0;
}
127デフォルトの名無しさん:2005/11/18(金) 18:14:01
>>125
#include <iostream>
using namespace std;
void st_reverse(char *,char *);

int main() {
    char str[128],st2[128];
    cout << "文字列を入力してください:";
    cin >> str;
    st_reverse(str,st2);
    cout << "反転文字列は\"" << st2 << "\"です.\n";
    return 0;
}

void st_reverse(char *s,char *d){
    char* t=s;
    if(*t){
        while(*(++t));
        d-=s-t;*d--=0;t=s;
        while(*t)*d--=*t++;
    }else *d^=*d;
}
128デフォルトの名無しさん:2005/11/18(金) 19:55:01
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 4×4正方行列Aにたいして、A^n(n=1,2,3,4...)
を求めるプログラムを配列を使用して作成せよ。
[3] 環境
 [3.1] OS:unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日いっぱい
[5] その他の制限:

便乗して申し訳ないのですが>>125さんの問題文を 
言語:C言語
制限:ポインタを使わない(まだ習っていないもので...
にした時のプログラムもご教授願います。
129デフォルトの名無しさん:2005/11/18(金) 20:58:07
[1] 授業単元: プログラミング
[2] 問題文: 入力した文字列を 2 回繰り返して表示するプログラムを作成
すること
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限:src が "cha" のとき dst に "chacha" が
         コピーされる関数 void str_dup(char dst[], char src[])
         をつくり、それを用いて。

よろしくお願いします
130デフォルトの名無しさん:2005/11/18(金) 21:08:51
#include <stdio.h>
#include <string.h>
void str_dup(char dst[], char src[])
{
strcpy(dst, src);
strcat(dst, src);
}
int main(void)
{
char s[128], d[256];
scanf("%s", s);
str_dup(d, s);
printf("%s\n", d);
return 0;
}
131デフォルトの名無しさん:2005/11/18(金) 21:10:04
>>129
void(str_dup(char *dst, char*src)
{
char *ptrd = dst, *ptrs = src;
int i;

for (i=0;i<2;i++)
while (ptrs != '\0')
*ptrd++ = *ptrs++;
*ptrd = '\0';
}

str_dupだけ作ったが脳内コンパイル。mainは自分で作ってくれ
それとstrで始まる関数はstring.hで予約済み
st_dupとかの方がいい
132デフォルトの名無しさん:2005/11/18(金) 21:41:47
>それとstrで始まる関数はstring.hで予約済み
str_から始まるのは問題ないはず
133デフォルトの名無しさん:2005/11/18(金) 22:35:17
>>130 >>131
ありがとうございました
134デフォルトの名無しさん:2005/11/18(金) 22:40:12
135デフォルトの名無しさん:2005/11/18(金) 23:58:07
[1] 授業単元: プログラミング
[2] 問題文: 入力した文字列を逆順に表示せよ(abc→cba)
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限:ポインタを使わずに
お願いします
136デフォルトの名無しさん:2005/11/19(土) 00:06:34
>>135
#include <stdio.h>
#include <string.h>
int main(void)
{
int i;
char s[128];
scanf("%s", s);
for (i = strlen(s) - 1; i >= 0; --i) {
printf("%c", s[i]);
}
return ;
}
137デフォルトの名無しさん:2005/11/19(土) 00:35:41
>>136
出来れば#include <string.h> 使わずに・・・だめですか?
138デフォルトの名無しさん:2005/11/19(土) 00:39:05
まだ不満かよ…んじゃ
#include <stdio.h>
int main(void)
{
int i;
char s[128];
scanf("%s", s);
for (i = 0; s[i]; ++i) ;
for (; i >= 0; --i) {
printf("%c", s[i]);
}
return 0;
}
139デフォルトの名無しさん:2005/11/19(土) 00:56:25
>>138
ありがとう まじ感謝
140デフォルトの名無しさん:2005/11/19(土) 01:25:28
>>138
最初に'\0'表示してる…(((( ;゚Д゚))))
まぁ画面上は問題無しか。
141デフォルトの名無しさん:2005/11/19(土) 03:30:42
|3・)
142デフォルトの名無しさん:2005/11/19(土) 03:33:10
>>141
ぼるじょあか?
143デフォルトの名無しさん:2005/11/19(土) 03:54:40
|三(´・3・)
ハズレ。中央の金玉が回転したしょぼんでした。
144ぼるじょあ ◆yBEncckFOU :2005/11/19(土) 03:58:44
(・3・)エェー 呼ばれたかと思ったのに
145デフォルトの名無しさん:2005/11/19(土) 04:19:09
>>144
呼んでないからさっさと巣に帰れ
146ぼるじょあ ◆yBEncckFOU :2005/11/19(土) 05:59:05
(・3・) エェー ぼるじょあがDelphiの宿題を片付けるYO
147デフォルトの名無しさん:2005/11/19(土) 06:53:25
sine
148デフォルトの名無しさん:2005/11/19(土) 15:27:47
>>138
これ、反応(逆にした文字)返ってこなくない?
149デフォルトの名無しさん:2005/11/19(土) 16:39:00
>>148
あふぉか。sprintfでもなんでも使えばいいだろうが。
150デフォルトの名無しさん:2005/11/19(土) 20:34:38
>>148
空白入るとダメっぽいね
#include <stdio.h> 
int main(void){ 
    int i; 
    char s[128]; 
    scanf("%[^\n]",s); /* 改行以外読み込む */
    for (i = 0; s[i]; ++i);
    for (i--; i >= 0; --i)/* i--で\0の部分飛ばす */
        printf("%c", s[i]);
    return 0; 
}
これでも表示できる分は対応したと思うけど十分じゃないかも
%[^\n] については正規表現でぐぐれ
151デフォルトの名無しさん:2005/11/19(土) 21:21:21
[1] 授業単元: 情報処理実習
[2] 問題文:
      (1)入力した文字列をオウム返しで画面に出力するプログラムを作成せよ。
        ただし、何度でも入力可能とし、"q" を入力すると終了するようにすること。
        入力は半角に限定する。このとき、"quiz" や "quit" などの文字を入力しても終了しないようにする。
      (2)Eratosthenes の篩法を用いて入力された整数(2 〜 9999)が素数であるかを判定するプログラムを作成せよ。
        ただし、素数でない場合は、その数を割り切る最初の素数とその他の因数を表示させること(1001=7*143のように)。
        範囲外の数が入力されたときには、エラー処理を行うこと。
      (3)多倍長演算の手法を用いてキーボードから 20 桁までの整数 a, b を入力し、
        減算(a - b)をするプログラムを作成せよ。
        但し、マイナスの場合は、マイナス記号を表示させること。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名:gcc
 [3.3] 言語: C
[4] 期限: 2005年11月21日20時まで
[5] その他の制限: 関数は使わないこと。
Eratosthenes の篩法を用いて2〜9999 までの中の素数を探すプログラム:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1116.txt

多倍長演算の加算プログラム:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1115.txt

(2)と(3)については、上記のプログラムを改変、付け足しする形でお願いします。
152デフォルトの名無しさん:2005/11/20(日) 00:20:08
>>151
(1)、(2)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1117.zip
文字コードがS-JISですので…

(3)は((2)もだけど)一から作り直したい衝動に駆られたので他者にお任せします。申し訳ない
153デフォルトの名無しさん:2005/11/20(日) 01:08:04
[1] 授業単元: プログラミング演習
[2] 問題文: あらかじめ定義した文字列がキーボードから入力した文字列で始まっているかどうかを
      判定して表示するプログラムを作成せよ
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:ポインタを使わずに
お願いします
154デフォルトの名無しさん:2005/11/20(日) 01:49:38
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
長さが3以上の文字列が5つ入力されるまで繰り返し入力を受け付ける。
最後にこれら5つの文字列を出力しなさい。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: VC++6.0
 [3.3] 言語: C++
[4] 期限:2005,11,24
[5] その他:二次元配列?

よろしくお願いします。
155デフォルトの名無しさん:2005/11/20(日) 04:50:55
>>153
#include <stdio.h>
#include <string.h>

#define BUF_SIZE 1024

int isHajimatteru(const char arakajime[], const char buf[], const int buf_len)
{
    int i;

    for (i=0 ; i<buf_len ; i++)
    {
        if (arakajime[i] != buf[i])
        {
            return 0;
        }
    }
    return 1;
}
156デフォルトの名無しさん:2005/11/20(日) 04:51:19
>>155の続き
int main()
{
    const char arakajime[]="hello, world";
    char buf[BUF_SIZE];
    int buf_len;

    fgets(buf, sizeof(buf)-1, stdin);

    buf_len=strlen(buf);
    if (buf[buf_len-1]=='\n')
    {
        buf[buf_len-1]='\0';
        buf_len--;
    }

    if(isHajimatteru(arakajime, buf, buf_len))
    {
        printf("はじまってます\n");
    }
    else
    {
        printf("はじまってません\n");
    }

    return 0;
}
157デフォルトの名無しさん:2005/11/20(日) 05:10:38
>>154
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUF_SIZE 1024

int main()
{
    char *buf;
    char *mojiretufive[5];
    int i;
    int buf_len;

    i=0;
    while (i<5)
    {
        buf=malloc(BUF_SIZE);
        fgets(buf, BUF_SIZE-1, stdin);

        buf_len=strlen(buf);
        if (buf[buf_len-1]=='\n')
        {
            buf[buf_len-1]='\0';
        }
        buf=realloc(buf, strlen(buf)+1);
158デフォルトの名無しさん:2005/11/20(日) 05:10:58
>>157の続き
        if (strlen(buf)>=3)
        {
            mojiretufive[i]=buf;
            i++;
        }
        else
        {
            free(buf);
        }
    }

    for (i=0 ; i<5 ; i++)
    {
        printf("%s\n", mojiretufive[i]);
    }
    for (i=0 ; i<5 ; i++)
    {
        free(mojiretufive[i]);
    }

    return 0;
}
159デフォルトの名無しさん:2005/11/20(日) 05:11:31
>>153
出来るだけ簡潔に書いたつもり
#include <stdio.h>
int startsWith(const char input[], const char test[])
{
    for (; *input && *test; ++input, ++test) {
        if (*input != *test) {
            return 0;
        }
    }

    return *test == '\0';
}
int main(void)
{
    const char s1[] = "The quick brown fox jumps over the lazy dog.";
    char s2[128];

    scanf("%[^\n]", s2);
    printf("%s", startsWith(s1, s2) ? "始まる" : "始まらない");

    return 0;
}
160159:2005/11/20(日) 05:16:05
一見ポインタ使ってないように見せるの忘れてた…
int startsWith(const char input[], const char test[])
{
    for (; input[0] && test[0]; ++input, ++test) {
        if (input[0] != test[0]) {
            return 0;
        }
    }

    return test[0] == '\0';
}
こっちを使ってくれ。
(´-`).。oO(にしても何でポインタ使っちゃいけないんだろう…)
161159:2005/11/20(日) 05:42:38
>>154
暇だからこっちもやってみた
#include <iostream>
#include <iterator>
#include <functional>
#include <vector>
#include <string>
#include <algorithm>
namespace {
    const int NUM_INPUT = 5;
    const int MIN_LENGTH = 3;
    struct StringsGenerator : std::unary_function<void, std::string> {
        const std::string operator()() const
        {
            std::string s;
            do {
                std::getline(std::cin, s);
            } while (s.length() < MIN_LENGTH);
            return s;
        }
    };
}
int main()
{
    std::vector<std::string> strings(NUM_INPUT);
    std::generate(strings.begin(), strings.end(), StringsGenerator());
    std::copy(strings.begin(), strings.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    return 0;
}
(´-`).。oO(こんなん出したら胡散臭そうな目で見られるだろうなぁ…)
162デフォルトの名無しさん:2005/11/20(日) 05:46:19
朝から元気だなおまいらw
163デフォルトの名無しさん:2005/11/20(日) 06:54:12
[1] 授業単元:情報処理演習
[2] 問題文(含コード&リンク)::ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1118.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++どちらでも可
[4] 期限: 12月1日まで
[5] その他の制限: なし

私の力ではできません。どなたか教えてください。よろしくお願いします。
164デフォルトの名無しさん:2005/11/20(日) 07:05:31
んー。よくわからん。図解入りで頼む>163
165デフォルトの名無しさん:2005/11/20(日) 09:28:17
>>163
状態3が定義されていません。
適当に改行をしましょう。

166151:2005/11/20(日) 10:37:39
>>152
ありがとうございました。

できればどなたか(3)のほうもお願いいたします。
167デフォルトの名無しさん:2005/11/20(日) 11:59:18
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):
エコーサーバとクライアントを作成する。
サーバ側の要件
「end+return」を受け付けるとサーバは終了する。
それ以外の文字の場合は、クライアントに再送信する。
終了時には、終了メッセージをクライアントに送信する。
通信が終了した場合は、クライアントのリソースは解放すること。

クライアント側の要件
行の先頭で「q+return」を入力するとクライアントは終了する。
一行づつサーバに入力文字を送信する。
サーバから受信した文字列は画面に表示する。

通信規約は任意のものでよい
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 11月末
[5] その他の制限: 無し

ソケットはやったことがないのです。。。
168デフォルトの名無しさん:2005/11/20(日) 12:17:56
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):
csv形式(カンマ区切り、ダブルコートなし)のファイルがある。
このファイルを読み込んでデータを表示する。ただし、表示は各アイテム毎に改行する事。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 11月末
[5] その他の制限: 無し
169デフォルトの名無しさん:2005/11/20(日) 14:14:53
>>168
ダブルコートって何だ?ダブルバイトなら聞いたこともあるが
170163:2005/11/20(日) 14:43:31
改訂しました。まだ至らぬところもあれば指摘して下さい。お願いします。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1119.txt
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1120.zip
171デフォルトの名無しさん:2005/11/20(日) 14:52:08
>>169
double-quoteだと思う。
172デフォルトの名無しさん:2005/11/20(日) 14:52:32
>>169
ダブルクォート(")だと思われ。
173デフォルトの名無しさん:2005/11/20(日) 14:52:56
うはwかぶったwww
174デフォルトの名無しさん:2005/11/20(日) 15:04:25
>>171-172
そういうことか
日本語(とゆうかダブルバイト文字)の有り無しで変わってくるがどうなんだ?>>168
175デフォルトの名無しさん:2005/11/20(日) 15:11:50
サンプルの入力ファイルがないといまいちわかりづらいな。
176デフォルトの名無しさん:2005/11/20(日) 15:25:23
>CSVの人 入力出力例
入力:
1st,2nd,3rd
a,b,c
出力:
line 1, item 1, '1st'
line 1, item 2, '2nd'
/* 略。質問側は略しちゃだめよ */
とか。出力の形がわからんと組みようがないわ。

>XORでパリティの人
・授業なら「適当に並べ替え」ってところが肝で説明受けてるはず。なんで、それ書きましょう。
・ああ・・・それから、パリティって普通、パリティビットつけるものです。
・誤り訂正符合を考え提出せよってネタだったら、そのままだしたほうがいいよ。
177デフォルトの菜無しさん:2005/11/20(日) 15:47:40
[1]授業単元:プログラミング
[2]問題文(含コード&リンク):
1.実数型変数a, b を宣言し、そのアドレスを画面に表示するプログラムを作成。
2.上記のプログラムでポインタ変数 *pa, *pb を準備し、それぞれに変数 a, b のアドレスを入力して、それを画面に表示させる。
3.上記のプログラムで変数 a, b にキーボードから数値を入力し、その和 sum を計算して画面に表示させる。ただしポインタ *pa, *pb を用いて和を計算する。
4.実数型変数a, b を宣言し、和と差を計算して、結果を画面に表示するプログラムを考える。このとき、ポインタ変数 *pwa, *psa をmain関数内で準備し、関数 wasa に a, b, &pwa, &psa を引数として渡して、関数 wasa 内で「アドレス内のデータ」として和と差を計算する。
178デフォルトの菜無しさん:2005/11/20(日) 15:48:27
↑続きです
 [3.1]OS:Windows
 [3.2]コンパイラ名:gcc
 [3.3]言語:C言語
[4] 期限:明日のお昼3時
[5] その他の制限:ポインタ変数を使うらしいです。
2番の問題までゎかるのですが、3番からが全然謎なので是非お願いします。
179デフォルトの名無しさん:2005/11/20(日) 15:51:13
>>177-178
Cスレにスレ違いのポストしておいてこっち来るんじゃねーよネカマが
180デフォルトの名無しさん:2005/11/20(日) 15:53:58
>>178
おっぱいうp
181168:2005/11/20(日) 15:59:53
>>174
ダブルバイトていうか多分スペース区切りでいいんじゃないでしょか
==============
1111 2222 3333
4444 5555 6666
==============
上記を

1111
2222
3333
4444
5555
.....
見たいに。だからスペースの有無とファイル中の改行を見て
コード内で1アイテムづつ改行を行うんじゃないかと...
182デフォルトの名無しさん:2005/11/20(日) 15:59:54
じゃあ、男のフリすればいいんですよね。
183デフォルトの名無しさん:2005/11/20(日) 16:02:26
おっぱいと聞いて駆けつけました
うpはまだでつか?
184デフォルトの名無しさん:2005/11/20(日) 16:02:39
>>181
カンマ区切りじゃないのか?
それと日本語云々は、(本当にあるのかは知らないが)2バイト目とカンマの文字コードが
一致する場合を避ける必要がある
185デフォルトの名無しさん:2005/11/20(日) 16:05:22
1)
double a, b;
printf("&a %p, &b %p\n", &a, &b);

2)
double a, b, *pa, *pb;
pa = &a;
pb = &b;
printf("pa %p, pb %p\n", pa, pb);

3)
double a, b, *pa, *pb. sum;
pa = &a;
pb = &b;
printf("input a b:");
scanf("%lf %lf", pa, pb); /* scanf("%lf %lf", &a, &b);とどちらがよいだろう? */
sum = *pa + *pb;
printf("pa %p, pb %p\n", pa, pb);

4) はC言語スレで頑張ってた人が居るので宣言考えるだけであとはパス。
double a, b, *pa = &a, *pb = &b, wa, sa, pwa = &wa, psa = &sa;
186デフォルトの名無しさん:2005/11/20(日) 16:06:08
絶対しませんよ。
187デフォルトの名無しさん:2005/11/20(日) 16:06:21
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1121.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC6.0
 [3.3] 言語:C
[4] 期限:2005年11月22日12:00まで
[5] その他の制限:特に無し
188187:2005/11/20(日) 16:06:53
よろしくお願いします
189168:2005/11/20(日) 16:07:05
==============
1111,2222,3333
4444,5555,6666
==============
こうっすね すいません。 日本語云々はどうなんでしょうか...
それこそ宿題程度のものなので作る側の任意で良いと思います。
日本語関係にも対応している高尚なものであればそっちの方がいいとは思いますが。。。
190デフォルトの名無しさん:2005/11/20(日) 16:07:32
185番さんありがとうございます!!
コンパイルしてみます!
191デフォルトの名無しさん:2005/11/20(日) 16:08:16
>181 (CSVではない気がするが)
#include <stdio.h>
int main(void) { char buf[100]; while(scanf("%99s", buf) == 1) printf("%s\n", buf); return 0;}
192デフォルトの名無しさん:2005/11/20(日) 16:11:57
>>191
ファイルじゃ?
193デフォルトの名無しさん:2005/11/20(日) 16:12:07
>189 やっぱしカンマありか・・・
#include <stdio.h>
int main(void) { int c; while ((c = getchar()) != EOF) {if (c == ',' || c == '\n') putchar('\n'); else putchar(c);} return 0;}
194デフォルトの名無しさん:2005/11/20(日) 16:19:36
ああ・・・ファイルを読み込む方法か・・・>191
コマンドラインから
a.exe <file
とか
a.out <file
としてくれ。リダイレクトとかリダイレクションとかいう機能だ。
手抜きプログラムで必須の方法だ。
195168:2005/11/20(日) 16:23:27
>194
ちゃんとやってください
196デフォルトの名無しさん:2005/11/20(日) 16:27:38
なにか不備でも?
197デフォルトの名無しさん:2005/11/20(日) 16:49:44
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
N個の要素よりなる配列をmain関数に宣言する。配列にデータを読み込む関数(例えばinput)
をmainから呼んで入力を行いデータを書き出す関数(例えばoutput)を呼んで出力するプログラムを
配列で呼んで配列で受け取るやり方を書け。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:2005年11月21日
[5] その他の制限:
ヘルプです
198デフォルトの名無しさん:2005/11/20(日) 16:56:10
void input(int *a){int i;for(i=0;i<N;i++){scanf("%d",&(a[i]));}}
void output(int *a){int i;for(i=0;i<N;i++){printf("%d\n",a[i]);}}
int main(){int a[N];input(a);output(a);return 0;}
199デフォルトの名無しさん:2005/11/20(日) 18:04:43
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1123.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:visualC++6
 [3.3] 言語:C
[4] 期限:2005年11月24日まで
[5] その他の制限:無し

宜しくお願いします
200163:2005/11/20(日) 18:44:51
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1125.txt
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1120.zip
再三の変更となり申し訳ありません。
1119.txtからの変更点は
@:1つのブロックを 100000/誤りの数 bitとする。つまり最初は1/e bit。
K:誤りがなくなるまで
です。Aの意味がシャッフルした時に繋がってませんでした。Kはプログラムの終点を言ってませんでした。
1120.zipと共にどうか宜しくお願いします。
201デフォルトの名無しさん:2005/11/20(日) 20:28:41
>>177 の4 問題文に沿った回答
#include <stdio.h>
void wasa(double a, double b, double **ppwa, double **ppsa)
{ **ppwa = a + b; **ppsa = a - b; }
int main(void) {double a, b, wa, sa, *pwa, *psa;
pwa = &wa; psa = &sa;
printf("a b: "); scanf("%lf %lf", &a, &b);
wasa(a, b, &pwa, &psa);
printf("wa %f, sa %f\n", wa, sa);
return 0; }

多分・・・の回答
#include <stdio.h>
void wasa(double a, double b, double *pwa, double *psa)
{ *pwa = a + b; *psa = a - b; }
int main(void) {double a, b, *pa, *pb, wa, sa;
printf("a b: "); scanf("%lf %lf", &a, &b);
wasa(a, b, &wa, &sa);
printf("wa %f, sa %f\n", wa, sa);
return 0; }
202デフォルトの名無しさん:2005/11/20(日) 20:58:18
>200 やっぱりよくわからんな・・・
状態1〜3が発生して、手順が全て示されるように、初期データを書いて、
実際に手順を適用してみてくれ。
ああ・・・ブロックサイズは説明用に小さくしてくれ。
203デフォルトの名無しさん:2005/11/20(日) 21:08:36
>>200
パリティの意味が解らない。

ためしに、16bit、e=1/16でどんなことを求められているのか説明してくれ。
204デフォルトの名無しさん:2005/11/20(日) 21:33:53
パリティーを用いた誤り訂正方法について とかいう卒論だったらイヤン。
205デフォルトの名無しさん:2005/11/20(日) 23:26:55
201番の方、ありがとうございますw
コンパイルしてみますね。
206デフォルトの名無しさん:2005/11/20(日) 23:41:21
#include <stdio.h>
void wasa(double a, double b, double *pwa, double *psa)
{ *pwa = a + b; *psa = a - b; }
int main(void) {double a, b, *pa, *pb, wa, sa;
printf("a b: "); scanf("%lf %lf", &a, &b);
wasa(a, b, &wa, &sa);
printf("wa %f, sa %f\n", wa, sa);
return 0; }
↑で、できましたw
本当にありがとうござぃます〜
また、お世話になると思いますがよろしくお願いしますw
207デフォルトの名無しさん:2005/11/21(月) 01:38:40
>>167 みたいなソケット絡むと誰も解かないね この板。
ボクは知らないからダケド。
208デフォルトの名無しさん:2005/11/21(月) 03:20:58
[1] 授業単元: プログラミング入門
[2] 問題文(含コード&リンク):
文字列10個を入力として受け付け、長さ上位3つを長い順に出力する。
同じ長さの文字列が入った場合には、後に入力されたものが高位とする。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C++
[4] 期限: 2005年11月24日
[5] その他の制限:
http://www9.plala.or.jp/sgwr-t/
ここの9章あたりまでしか習っていません

よろしくお願いします
209デフォルトの名無しさん:2005/11/21(月) 04:38:13
210デフォルトの名無しさん:2005/11/21(月) 05:57:20
>>207
正直面倒くさいしなあ.ネットワーク絡むと下手なプログラム書くとどこかで迷惑になるかもしれんし.
……167,コンパイラが bcc ってことは,winsock でいいんかな?
211デフォルトの名無しさん:2005/11/21(月) 07:23:12
>>207
>>210が書いてるように面倒+ちゃんと書かないと何処かの迷惑になりかねないし
そもそも完全に環境依存だからみんな及び腰になるんじゃまいか?

まぁそういう俺はまだソケットの扱い方分からないんだけどな
どこかにソケット関連のヘッダとそれで宣言されてる命令の一覧無い?
212デフォルトの名無しさん:2005/11/21(月) 09:14:59
1] 授業単元: C++
[2] 問題文:
以下のクラス MyPair に対し, 演算子 == , !=, >=, >, <=, < を定義して下さい. ただし, これらの演算子は以下の性質を満たすようにして下さい.
これらは全て MyPair 同士の比較である.
fst が等しいとき, snd を比べてその比較の結果とする.
fst が異なるとき, fst を比べてその比較の結果とする.
class MyPair {
int fst;
int snd;
public:
MyPair(int f=0, int s=0) {
fst = f;
snd = s;
}
int get_fst() const { return fst; }
int get_snd() const { return snd; }
};

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio.NET
 [3.3] 言語: C++
[4] 期限: 11月28日
[5] その他の制限:
213デフォルトの名無しさん:2005/11/21(月) 09:31:24
1] 授業単元: C言語研究
[2] 問題文:
以下の条件を満たす template 関数 replicate を定義して下さい.
template 引数(型引数) は一つであり, 以下の説明ではこれを T とする.
replicate の引数は2つあり, 第一引数は T型, 第二引数は int型である.
replicate はTの配列を第二引数で表される長さ分確保し, 各要素を第一引数の値で初期化した後, その配列の先頭へのポインタを返す.
メモリ確保失敗等, 異常がある場合, replicate は NULL を返す.

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio.NET
 [3.3] 言語: C++
[4] 期限: 12月5日
[5] その他の制限:
214デフォルトの名無しさん:2005/11/21(月) 09:55:34
>>213
#include <new>
#include <algorithm>
template <class T>
class auto_array {
public:
    typedef T element_type;
    explicit auto_array(int size) : pointee_(new T[size]) {}
    ~auto_array() throw() { delete[] pointee_; }
    T* get(int n = 0) const { return &pointee_[n]; }
    T* release()
    {
        T* oldPointee = pointee_;
        pointee_ = 0;
        return oldPointee;
    }
private:
    T* pointee_;
};
template <class T>
T* replicate(T t, int n)
{
    try {
        auto_array<T> p(n);
        std::fill_n(p.get(), n, t);
        return p.release();
    }
    catch (std::bad_alloc&) {
        return 0;
    }
}
215デフォルトの名無しさん:2005/11/21(月) 10:12:59
>>212
>>213
の書き出しは
#include <iostream>
#include <string>
でおねがいします。
答えを書いてもらった後なのにすみません
216デフォルトの名無しさん:2005/11/21(月) 10:38:13
[1] 授業単元:
初級C言語
[2] 問題文(含コード&リンク):
1から500までの整数から、3の倍数を1行に10個ずつ表示するプログラムを書きなさい。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: 学校のpcなんでわかりません
 [3.3] 言語: C
[4] 期限: 2005年11月22日12:40まで
[5] その他の制限: for文を使えと指示されました。

初歩の初歩で申し訳ないんですけど、馬鹿文系の私をどなたか助けて下さい。
217デフォルトの名無しさん:2005/11/21(月) 10:41:43
>>216
#include <stdio.h>

int main(void)
{
int i, j=0;
for (i=3;i<500;i=i+3) {
if (++j > 10) {
putchar('\n');
j = 0;
}
printf("%d ", i);
}
return 0;
}

脳内コンパイラだからエラーでるかもしれん
しかし文系でもCやるんだな
218デフォルトの名無しさん:2005/11/21(月) 10:42:48
>>215
死ねよ
219デフォルトの名無しさん:2005/11/21(月) 11:22:02
>>215
iostream も string も使わないじゃん。何で必要なんだよ?
220デフォルトの名無しさん:2005/11/21(月) 11:31:26
>>217
即レスありがとうございます。学校行ったら実行してみます。
221デフォルトの名無しさん:2005/11/21(月) 11:39:38
>>215
つーか、足したきゃ自分で勝手に足せよ。
222デフォルトの名無しさん:2005/11/21(月) 11:54:00
1] 授業単元: C言語研究
[2] 問題文:
このプログラムで
#include <iostream>
using namespace std;
int main()
{
Quadratic q1(1,2,3);
for(double i=0; i < 10 ; i += 0.5)cout << q1(i) << endl;

return 0;
}


出力が
3 4.25 6 8.25 11 14.25 18 22.25 27
32.25 38 44.25 51 58.25 66 74.25 83 92.25 102 112.25


となるようにクラスQuadraticの定義とそれを実行するためのmain文を書いて下さい. ただし, Quadraticは二次式を表すクラスです.
この場合, q1は f(x) = 1*x*x + 2*x + 3 を意味します.
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio.NET
 [3.3] 言語: C++
[4] 期限: 12月5日
[5] その他:
223デフォルトの名無しさん:2005/11/21(月) 11:56:35
>>222
書き忘れ
数字の出力は横ではなく縦一列でかまいません。
224167:2005/11/21(月) 12:24:21
>>167 の問題について
bcc でも gcc でもとりあえずそのように動いてくれれば仕様はどんなものでも良いです。
宿題なのでホント動いてくれるコードならなんでも・・・。
bcc なら winsock ですし gcc なら sys/sock ですし。出来れば bcc がよいと言う意味で bcc とは書きましたが。
225デフォルトの名無しさん:2005/11/21(月) 12:56:39
>>224
とりあえず作って見たけどこんな感じでいいのかな。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1128.zip
226デフォルトの名無しさん:2005/11/21(月) 13:03:13
>>222
// main()はそのままでいいんじゃないの?
struct Quadratic {
Quadratic(double a, double b, double c) : a(a), b(b), c(c) {}
double operator()(double x) {return a * x * x + b * x + c;}
private:
double a, b, c;
};
227デフォルトの名無しさん:2005/11/21(月) 13:03:36
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
1, 1/2, 1/3, 1/4, ..., 1/100の値をそれぞれ
配列に保存し、保存した値を全て足し合わせること
によって、
1 + 1/2 + 1/3 + ... + 1/100
を求めるプログラムを書きなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月23日12:00まで
[5] その他の制限: お願いします
228167:2005/11/21(月) 13:21:00
>>225
ありがと〜!!感謝です
229デフォルトの名無しさん:2005/11/21(月) 13:42:26
#include <stdio.h>
int main(void){
int i;
double n[100], sum = 0.0;
for (i = 0; i < 100; i++){
n[i] = (double)1 / (i + 1);
sum = sum + n[i];
}
printf("%f\n", sum);
return 0;
}
230むぅ:2005/11/21(月) 13:51:17
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):ファイルを読み込み、空白が早く現れる順に各行を並べ替えるプログラムを作成したいと思います。
空白とはスペース記号 0x20 とタブ 0x9 を意味します。空白の無い行は 0 番目に空白が現れたことにして下さい。
以下の手順にしたがって作成
@始めに文字列を入れたら最初に空白が来る位置を求める関数を作りたいと思います。
その関数をテストするための文字列をいくつか作り、関数が出力しなければいけない値をそれぞれ求めなさい。
A文字列を入れたら最初に空白が来る位置を求める関数を作りなさい。但し、空白で始まる文字列には 1,
空白がなければ 0 を返しなさい。
次に題意を満たすプログラムを作成しようと思います。そのプログラムをテストするようなファイルをいくつか作りなさい。
そして完成したプログラムが出力すると予想した値を書きなさい。
B上で作成した関数を利用して、題意を満たすプログラムを実際に作成しなさい。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc 2.9
 [3.3] 言語: C,C++
[4] 期限: [2005年11月30日12:00まで
[5] その他の制限: ファイルのサイズに上限を設けてはいけません。
何 MB のファイルでも読めるようになってなければいけません。
(配列は使うなということですか…)
但し、一行の文字制限が無いと入力バッファの処理が複雑になる場合、一行を高々 80 文字と仮定し、
一行を表す文字列としてだけ配列を使っても良い。

長くなってしまい申し訳ありません。
よろしくお願いします。
231デフォルトの名無しさん:2005/11/21(月) 14:08:20
int itiban(const char* pline)
{
int a, b;
char* space = strstr(" ", pline);
char* tab = strstr("\t", pline);

if(space && tab)
{
a = space - pline;
b = tab - pline;

return min(a, b);
}
else if(spacel)
return space - pline;
else if(tab)
return tab - pline;

retrun 0;
}

空白位置を返す関数
こうですか?わかりません 
232& ◆R7PNoCmXUc :2005/11/21(月) 14:34:07
[1] 授業単元:プログラミング
[2] 問題文(s構造体配列のプログラムであるがこのプログラムを正しく直しなさい)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C
[4] 期限:11月20日
#include<stdio.h>

main(void){
int idx;
struct s_type{
int i;
long l;
}s[10];

for (idx=0;idx<10;idx++){
s.i[idx]=0;
s.l[idx]=0;
}
return 0;
}
どう直せばいいのか分かりません。
よろしくお願いします。
233デフォルトの名無しさん:2005/11/21(月) 14:47:24
ヒント:間違い探しレベル
234デフォルトの名無しさん:2005/11/21(月) 15:07:15
>>232
s.i[idx]=0; → s[idx].i=0;
s.l[idx]=0; → s[idx].l=0;


235デフォルトの名無しさん:2005/11/21(月) 15:16:12
[1] 授業単元:プログラミング演習2
[2] 問題文(含コード&リンク): http://making-gold-princessmaki.hp.infoseek.co.jp/12.htm
通常課題2問、応用課題1問

[3] 環境
 [3.1] OS: WinXp
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C++
[4] 期限: 早ければ早いほど助かります。
236デフォルトの名無しさん:2005/11/21(月) 15:18:26
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int idx;
struct s_type {
int i;
long l;
} s[10];

for (idx = 0; idx < sizeof(s) / sizeof(*s); ++idx) {
s[idx].i = 0;
s[idx].l = 0;
}
return EXIT_SUCCESS;
}
237デフォルトの名無しさん:2005/11/21(月) 15:24:04
>>231
ダメ。
・(どうでもいいけど)typoがある。
・strstr()ではなくstrchr()を使うべき。つーかそもそも、もっと便利な関数がある。
・先頭が空白のときに1を返すと言う問題の仕様を満たしていない。
#問題も蛸なんだけどね。
238デフォルトの名無しさん:2005/11/21(月) 15:28:28
5-1
void initialize(int* acc)
{
int i;
for(i=0; i < 5; i++)
acc[i] = 0;

}

void dairy_input(int* acc)
{
int input, i;
const char name[5][] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク",};

for(i=0; i < 5; i++)
{
printf("%s: ", name[i]);
scanf("%d", &input);
printf("\n");
}
}

void dairy_output(const int* acc)
{
int i;
const char name[5][] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク",};

for(i=0; i < 5; i++)
printf("%s: %d\n", name[i], acc[i]);

}
あとマンドクセ('A`)
239デフォルトの名無しさん:2005/11/21(月) 15:29:44
void dairy_input(int* acc) 

int input, i; 
const char name[5][] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク",}; 

for(i=0; i < 5; i++) 

printf("%s: ", name[i]); 
scanf("%d", &input); 
acc[i] = input; // 抜けてた
printf("\n"); 


240デフォルトの名無しさん:2005/11/21(月) 15:34:48
241デフォルトの名無しさん:2005/11/21(月) 15:42:08
3をx86のショート実数にして16進数化するとどうなるんですか><
242デフォルトの名無しさん:2005/11/21(月) 15:45:25
ショート実数なんていう言葉はない
243デフォルトの名無しさん:2005/11/21(月) 15:47:39
仁志になるらしい
244デフォルトの名無しさん:2005/11/21(月) 15:49:40
問題解けた人とセクロス
http://ex14.2ch.net/test/read.cgi/news4vip/1132550835/
この問題出してた奴が池沼なだけでしたか><
245デフォルトの名無しさん:2005/11/21(月) 15:55:24
[1] 授業単元: C++演習
[2] 問題文(含コード&リンク):複数の整数が格納されたnumbers.datというファイルから読み込んだ各整数を整数型の配列に順に格納していき、
              それらの整数をバブルソートとマージソートを用いてそれぞれ降順で整列するプログラムを作成しなさい。
               この時、バブルソートはbubblesortという関数を、マージソートはmargesortという関数を作成し、
               そこで各アルゴリズムに基づいた整列作業を実行させなさい。また、2つの整数の交換作業はswap関数という
               関数を作成しそこで実行させなさい。 
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:g++
 [3.3] 言語:C++
[4] 期限:2005年11月22日12時まで
[5] その他の制限:よろしくお願いします。
246デフォルトの名無しさん:2005/11/21(月) 16:54:51
[1] 授業単元: 情報特講
[2] 問題文(含コード&リンク):
自己参照構造体を使用したプログラムの作成:
キーボードより、名前と身長を次々に入力し、
名前の入力がリターンのみのとき、入力を終了し、身長の一番高い人の
名前と身長、身長の一番低い人の名前と身長及び入力された人数を出力する。
ただ、名前はスペース入力が可能で、身長は実数での入力が可能とする。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 2005年11月24日11:00まで
[5] その他の制限: 条件:関数の使用、mallocの使用。
また、リストの中身も出力する。リストの形式は自由。

氏名 ? ああ ああ
身長 ? 170


氏名 ? AA AA
身長 ? 175


氏名 ?


入力は 2人です。
一番低い人は ああ ああ さん 170センチです。
一番高い人は AA AA さん 175センチです。

出力はこのような形でお願いします。よろしくお願いします。
247デフォルトの名無しさん:2005/11/21(月) 17:04:59
[1] 授業単元:C言語T
[2] 問題文(含コード&リンク):引数4個のハノイの塔の再帰プログラムを作成しなさい
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++6.0
 [3.3] 言語:C
[4] 期限:2005年11月25日まで
[5] その他の制限:特に無し

よろしくお願いします
248デフォルトの名無しさん:2005/11/21(月) 17:06:55
>>238
エラーが出てしまいました。
error C2087: '<Unknown>' : 添字が不正です。
(14) : error C2117: 'りんご' : 指定された配列には、初期化子が多すぎます。
(14) : error C2117: 'みかん' : 指定された配列には、初期化子が多すぎます。
(14) : error C2117: 'イチゴ' : 指定された配列には、初期化子が多すぎます。
(14) : error C2117: 'ナシ' : 指定された配列には、初期化子が多すぎます。
(14) : error C2117: 'イチジク' : 指定された配列には、初期化子が多すぎます。
(28) : error C2087: '<Unknown>' : 添字が不正です。
: error C2117: 'りんご' : 指定された配列には、初期化子が多すぎます。
(28) : error C2117: 'みかん' : 指定された配列には、初期化子が多すぎます。
(28) : error C2117: 'イチゴ' : 指定された配列には、初期化子が多すぎます。
(28) : error C2117: 'ナシ' : 指定された配列には、初期化子が多すぎます。
(28) : error C2117: 'イチジク' : 指定された配列には、初期化子が多すぎます。

249デフォルトの名無しさん:2005/11/21(月) 17:09:40
>>248
×const char name[5][]
○const char name[][9]
250デフォルトの名無しさん:2005/11/21(月) 17:09:55
自分で修正汁('A`)
251デフォルトの名無しさん:2005/11/21(月) 17:10:40
252デフォルトの名無しさん:2005/11/21(月) 17:14:04
void hanoi(int n, int a, int b, int c)
{
if (n > 0) {
hanoi(n - 1, a, c, b);
printf("Disk %d is moved from No.%d to %d\n", n, a, b);
hanoi(n - 1, c, b, a);
}
}
253デフォルトの名無しさん:2005/11/21(月) 18:06:24
>>235
課題の要求通りに動くにはこれだね。
>>250
がんばりました。なんで5-2とかもやってくれるとありがたい。
#include<stdio.h>
void initialize(int* acc, int* sum){
int i;
for(i=0; i < 5; i++) {sum[i] = 0;
acc[i] = 0;
}}
void dairy_input(int* acc)
{
int input, i;
const char name[][9] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク"};
for(i=0; i < 5; i++)
{ printf("%s: ", name[i]);scanf("%d", &input);
acc[i] = input;printf("\n");
} }
void dairy_output(const int* acc, int *sum)
{ int i;
const char name[][9] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク"};
for(i=0; i < 5; i++){sum[i] += acc[i];
printf("%s: %d\n", name[i], sum[i]);
}}
254Ruby:2005/11/21(月) 20:45:45
スレ違いなのは分かっているのですが、
スレが見当たらないのでここで質問させてください。
すいませんです。

今学校でRubyを習っていて、
今日出た課題が解けなくて困っているのですが、
ここで質問は受け付けていただけるでしょうか…?

プログラムに関してはRubyが始めて習う言語であり
なんとも勝手が分かりません。
この質問自体トンチンカンだったらごめんなさい。
255デフォルトの名無しさん:2005/11/21(月) 20:47:28
いいわけねえだろボケ
256¥ ◆HndhSB4UQI :2005/11/21(月) 20:50:04
[1] 関数
[2] nの中からr個選ぶときの組み合わせの総数nCrを求めるプログラムを作成しなさい。ただし、関数名をcombinationと命名してやること。
(余裕のある人は、より大きな数を入力しても正しく表示されるように処理方法を工夫しなさい。)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C言語
[4] 期限: [2005年11月25日22:00まで]
[5] その他の制限: 標準ライブラリstdio.h・math.h・stdlib.hが使用可。

どうか宜しくお願いします。
257デフォルトの名無しさん:2005/11/21(月) 20:50:53
>>254
http://pc8.2ch.net/test/read.cgi/tech/1125587131/
とりあえず誘導。多分教えてくれるよ
258Ruby:2005/11/21(月) 20:55:23
>>257
ありがとうございます!感謝します!
259デフォルトの名無しさん:2005/11/21(月) 22:39:46
>>256

#include <stdio.h>
int conbinetaion(int,int);
int main()
{
printf("%d\n",conbination(7,2));
return 0;
}

int conbination(int n, int r)
{
if(r==0)return 1;
else return n*conbination(n-1,r-1);
}
260デフォルトの名無しさん:2005/11/21(月) 22:43:03
else return n*conbination(n-1,r-1)/r;

だった
261デフォルトの名無しさん:2005/11/21(月) 23:17:47
>>253
それ、ぜんぜん仕様を満たしてないやん

const char food[][9] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク"};
void initialize(int acc[])
{
int i;
for(i=0; i < 5; i++) {
acc[i] = 0;
}
}
void dairy_input(int acc[])
{
int input, i;
for(i=0; i < 5; i++)
{
printf("%s: ", food[i]);
scanf("%d", &input);
acc[i] += input;
}
}
void dairy_output(const int acc[])
{
int i;

for(i=0; i < 5; i++)
{
printf("%s: %d\n", food[i], acc[i]);
}
}
262デフォルトの名無しさん:2005/11/21(月) 23:33:15
>>253
/* 課題5-2 */
int main(void) {
int account[3][5], i, input;
for(i=0;i<3;i++)initialize(account[i]);
printf("初期化を完了しました.\n");

while(1)
{
printf("売上を入力しますか.プログラムを終了しますか.(入力:1,終了:99):");
scanf("%d", &input);
if(input == 99)
{
printf("終了します\n");
break;
}

printf("本日の売上を入力してください.\n");
for(i=0;i<3;i++)
{
printf("【%s】\n",store[i]);
dairy_input(account[i]);
}
printf("<<本日までの売上>>\n");
for(i=0;i<3;i++)
{
printf("【%s】\n",store[i]);
dairy_output(account[i]);
}
}
return 0;
}
263デフォルトの名無しさん:2005/11/21(月) 23:46:11
264超初心者:2005/11/22(火) 00:00:26
課題『☆☆☆☆☆で表現されたバーを回転させながら横に移動させてみよう』
用語なし
期限は明日まで。
補足:windowsでlcc-win32っていうコンパイラ使ってます。chinou.3をインクルードしてCprint(x,y,文字列);っていうのを使うみたいなんですけど、お願いします!!
265デフォルトの名無しさん:2005/11/22(火) 00:01:56
そんな標準ライブラリあったか?
266超初心者:2005/11/22(火) 00:04:44
ないんですか?てことは先生が勝手に作った関数なんですか?

267デフォルトの名無しさん:2005/11/22(火) 00:08:17
これか>>112
>>266
だろうな
268超初心者:2005/11/22(火) 00:12:47
あ〜同じ課題だ・・・前に書き込みあったんですね・・失礼しました!
269デフォルトの名無しさん:2005/11/22(火) 00:15:41
270デフォルトの名無しさん:2005/11/22(火) 00:16:34
chinou.3なんて怪しげな標準ライブラリがあるわけない
271デフォルトの名無しさん:2005/11/22(火) 00:26:56
>>256
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1131.c
259のように再帰を使った方がって…基本的なことを忘れてましたorz

/* intの n=33いけるかな */
int combination(int n,int r){ 
    /* if(n<r || n<0||r<0) return -1;変な値は-1*/
    if(n==r || r==0)return 1;/* 定義に基づいた簡略化 */
    return combination(n-1,r)+combination(n-1,r-1);
}

関数呼び出しの関係上段違いに遅いけどな
272名無し:2005/11/22(火) 02:39:21
[1] 授業単元:情報処理演習
[2] 問題文:a^e (mod n)を効率よく求めるプログラムを作成せよ。ってやつです。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2005年11月22日22:00まで
[5] その他の制限:aとeの値は大きなものとする。

こんなんです。ヨロシクですー。
273デフォルトの名無しさん:2005/11/22(火) 03:05:05
>>272 大きなものって多倍長?とりあえず多倍長使わない版。
ただしコンパイル通してない。
#include <stdio.h>
unsigned int powmod(unsigned int a, unsigned int e, unsigned int n)
{
unsigned int i, mod;
a %= n;
mod = 1;
for( i = 0x80000000 ; i ; i >>= 1 ) {
mod = (mod * mod) % n;
if( e & i ) mod = (mod * a) % n;
}
return mod;
}
int main(void)
{
// n <= 0xffff, e <= 0xffffffff で動作するはず
unsigned int a = 0x1234, e = 0xffffffff, n = 0x4321;
printf("%ud^%ud=%ud (mod %ud)\n", a, e, powmod(a, e, n), n);
return 0;
}
274163:2005/11/22(火) 03:12:20
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1133.zip
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1125.txt
返事が遅くなりすいません。
>202>203
これで宜しいでしょうか? 
>>205
卒論ではないです。
1125.txtと共に宜しくお願いします。
275デフォルトの名無しさん:2005/11/22(火) 05:01:34
>>271 そんなあなたに memoise
276デフォルトの名無しさん:2005/11/22(火) 11:04:03
亀レスで申し訳ないのですが、
>>150さんのプログラムの
for (i = 0; moji[i]; ++i);
for (i--; i >= 0; --i) /* i--で\0の部分飛ばす */
の部分が、どういった動作をしているのかわかりません...。


説明していただける方いましたら、是非教えて欲しいです。
277デフォルトの名無しさん:2005/11/22(火) 11:17:15
>>276
よく流れを確認しないで答えるから間違ってるかもしれないが
for (i = 0; moji[i]; ++i);で\0まで何文字あるか確認して
for (i--; i >= 0; --i)で\0を除いた文字数でループ じゃないだろうか
278デフォルトの名無しさん:2005/11/22(火) 11:18:40
>>276
スレ違い。
文字列について調べろ。
279ぼるじょあ ◆yBEncckFOU :2005/11/22(火) 11:19:50
(・3・) エェー --iにするのはなんか意味あんの?
280デフォルトの名無しさん:2005/11/22(火) 11:26:31
>>279
死ね。

特に意味はないんじゃないか?
While((--i) >= 0) ..
と書きかけてから書き直したとか。
281デフォルトの名無しさん:2005/11/22(火) 11:27:42
Whileってなんだ…
死ぬのは俺だ
282ぼるじょあ ◆yBEncckFOU :2005/11/22(火) 11:35:00
(・3・) エェー やっぱforだと同じ意味なんですNE
          whileだと意味違った気がするけDO
283デフォルトの名無しさん:2005/11/22(火) 12:07:54
>>282
巣に帰RE!
284ぼるじょあ ◆yBEncckFOU :2005/11/22(火) 12:12:16
(・3・) エェー ぼるじょあの宿題スレはどこに行ったんだYO
285デフォルトの名無しさん:2005/11/22(火) 12:21:26
(数値地図から)200×200の数の行列?を読み込まし、iと、i+1と、j、 j+1で四点をとり、その4点の一番大きい値から小さい方へいくプログラムがつくれません
参照できるサイトありますか?わかる人いますか?ヒントください><
もう三ヶ月悩んでます、助けて
馬鹿な為ほんとプログラムわからないんです
286デフォルトの名無しさん:2005/11/22(火) 12:27:10
>>285
もうすこし実例挙げながら詳しく
あと>>1に沿って書いてくれるとありがたい
287デフォルトの名無しさん:2005/11/22(火) 12:34:51
150です。>>277でだいたい説明されてるので略
for (i = 0; moji[i]; ++i); というか個人のクセで可能な限り
stdio.hで済ませようとするのでよくやります。最後の ; が嫌がらせ
と見られることがあるので、素直にstrlen()使った方がいいのかもしれません。

for (i--; i >= 0; --i)を
for (   ; i >= 0; --i)にして実行すればなぜ i-- 入れたのかが
わかると思います。あとは半角1文字ずつ後ろの方から出力して
printf("%c",moji[0]); (i=0最後の文字出力)
--i; (i=-1)
i>=0 が偽になりforループ終了 だと思います

この場合のi--と--iについては両方i--,--iに合わせても問題ないのですが
どっちのi--と聞かれるのがイヤかその時の気分かのどちらかです。
あとfor,whileに関してもその時のノリで決まります。do〜whileなんて
使わねーよとかforでなく普通にwhile使おうよとか1文字変数連発やめれなど、
そのまま使うと採点者が嫌がるように書いてます。その辺は依頼者の方で
多少修正した方がいいと思う。
288デフォルトの名無しさん:2005/11/22(火) 12:58:33
>>287
C++をやる気があるなら、どちらでもいいときには前置インクリメント(デクリメント)を
使う習慣をつけておいた方がいいよ。
#理由についてはスレ違いにつき割愛。
289デフォルトの名無しさん:2005/11/22(火) 13:09:00
C++だからこそ後置だ!
i++
C:++
ほらなんか似てるじゃないか(・∀・)
290デフォルトの名無しさん:2005/11/22(火) 13:12:38
しまった変なもんついてたorz
291デフォルトの名無しさん:2005/11/22(火) 13:22:50
[1] 授業単元:プログラミング
[2] 環境
 [2.1] OS:Linux
 [2.2] コンパイラ名とバージョン:gcc
 [2.3] 言語:C
[3] 期限:11月25日14時
問題文:2題ですがすいません、どうかお願いします;
NO1:線形探索でデータを見つけるプログラムを作成し、実行せよ。ただし、対象とするデータ構造は
struct SportClub kaiin[]={555,"Yuki TERADA",222,"Kaho KANO",789,"Yuko FUKUDOME",444,"Seiko ANDO",456,"Mai YUKAWA",666,"Kyoko KAMIDOHZONO",123,"Yuasa OKADA",777,"Aya SAKATA",
111,"Yua SAITOU",333,"Noriko KIJIMA",0,"};と初期化すること。
<入出力例>
Please input ID#:777
ID#:777 Name:Aya SAKATA

Please input ID#:0
Not found!

NO2:
以下の仕様に従って、番兵採用の効果を確認できるプログラムを作成し、実行せよ。
<仕様>
1、会員番号を格納した配列
int t_array[]={555,222,789,444,456,666,123,777,111,333,55}を作る
2、上記配列の1つの要素に対し、それがNO1のデータ構造に格納されているかどうかを番兵非採用探索プログラムでチェックする。
この操作を1億回繰り返し、その繰り返しに要した時間を求める、ただし、目的とする番号が格納されている場合は、Found!を一度だけ表示させる、また、格納されていなかった場合も、Not Found!を一度だけ表示させる
3、上記2を全要素に対して行い、11名分(t_array[]の要素数文)の会員検索に要した時間を求める
4、上記2,3を番兵採用線形探索プログラムに対して行う

2題もお願いして大変恐縮ですがどうかお願いします;
292デフォルトの名無しさん:2005/11/22(火) 13:24:43
>>289
後置だとオブジェクトが複製されるからでしょ。
293デフォルトの名無しさん:2005/11/22(火) 13:27:12
ネタニマジレス
294デフォルトの名無しさん:2005/11/22(火) 13:27:31
>>292
いや俺Cしか知らんもんw
295デフォルトの名無しさん:2005/11/22(火) 13:33:10
>>291
なにその構造体宣言
いろいろおかしいぞ
296291:2005/11/22(火) 13:36:27
No1 番兵採用線形探索のフローチャートを示します

            始まり
             |
        n←見つけたい会員番号
             |
       kaiin[10].id_num←n(番兵値) 
             |
            i←0(配列先頭)
|
     ↑→→→→→→→|
     ↑    kaiin[i].id_num=nか?→-(YES)--↓
     ↑       |(NO)        i=10(番兵)か?
     ↑←--------← i←i+1           |
↓←←←←(YES)←↓
                  ↓        ↓
           Not Foundを表示       (NO)
               ↓           ↓
               ↓←←←←←←←←nameを表示
               ↓
              おわり
297デフォルトの名無しさん:2005/11/22(火) 13:37:52
いろいろっつーかstructついてなかったら何なのかすら判断不明な物だな
配列か?とか思ってしまうかも
298291:2005/11/22(火) 13:39:42
295,297さん
う〜ん;問題文とか図とかそのままアップできればいいのですが、
アップの仕方わからないのです、でも問題文の写し間違えはありません;;
299デフォルトの名無しさん:2005/11/22(火) 13:42:42
300デフォルトの名無しさん:2005/11/22(火) 13:46:44
>>295
構造体宣言じゃなくてstruct SportClub[]型配列の宣言。
最後に"が一つ足りない点以外はおかしくないだろ。
301デフォルトの名無しさん:2005/11/22(火) 13:51:05
>>291
#include <stdio.h>
typedef struct{int id;char name[64];}SportClub;
int main(){
int _t;
SportClub* psc;
SportClub kaiin[] = {
555,"Yuki TERADA",
222,"Kaho KANO",
789,"Yuko FUKUDOME",
444,"Seiko ANDO",
456,"Mai YUKAWA",
666,"Kyoko KAMIDOHZONO",
123,"Yuasa OKADA",
777,"Aya SAKATA",
111,"Yua SAITOU",
333,"Noriko KIJIMA",
0,""};
while(1){
printf("please input ID#:");
scanf("%d",&_t);
psc=kaiin;
while(1){
if(psc->id == 0){
printf("not found!\n");
break;}
if(_t==psc->id){
printf("%s\n",psc->name);
break;
}psc++;}
}return 0;}
302デフォルトの名無しさん:2005/11/22(火) 14:38:46
>>291
#include <stdio.h>
int search(int); //番兵無し探索
int searchw(int);//番兵付き探索
#define ARRAYS 11
typedef struct{int id;char name[64];}SportClub;
SportClub kaiin[] = {
555,"Yuki TERADA",222,"Kaho KANO",789,"Yuko FUKUDOME",
444,"Seiko ANDO",456,"Mai YUKAWA",666,"Kyoko KAMIDOHZONO",
123,"Yuasa OKADA",777,"Aya SAKATA",111,"Yua SAITOU",
333,"Noriko KIJIMA",0,""};
int t_array[]={555,222,789,444,456,666,123,777,111,333,55};
int main(){
int (*pFunc)(int);
int ob = t_array[5];int i=0;
pFunc = search;
if(pFunc(ob)>0)printf("found\n");
else printf("not found\n");;
while(i++<100000000)pFunc(ob);
return 0;}
int search(int n){
int i;
for(i=0;i<ARRAYS && n!=kaiin[i].id;i++);
if(i<ARRAYS-1) return 1;
else return -1;}
int searchw(int n){
kaiin[ARRAYS-1].id=n;
int i=0;
while(kaiin[i++].id != n);
if(i<ARRAYS)return 1;
else return -1;}
303デフォルトの名無しさん:2005/11/22(火) 14:39:41
上記のは2の2
問題の意図がいまいち掴みきれんので
あってるかどうかはわからん

実行時間は/usr/bin/timeかなんかで計るんだろ
304デフォルトの名無しさん:2005/11/22(火) 14:39:57
>>291
先生、うちのしょぼい環境でも前者37秒、後者37秒で有意差が得られません。
秒未満の精度の時刻測定は勝手にやってもらうってことでよければソース貼りますけど。
305デフォルトの名無しさん:2005/11/22(火) 14:56:06
>>304

うちのマシンだと>>302のを用いて
番兵ありだと4.093000秒
番兵無しだと4.609000秒

プログラム自体が間違ってるんじゃ?
306デフォルトの名無しさん:2005/11/22(火) 14:59:02
先生方すいません、質問です。
printf("%3f %f\n",s,ins[i]);
↑でsの値とins[i]に格納した値を出力しようとしたら
0.001000 1.#QNANO
と出力されてしまいました。
どうゆうことでしょうか?
問題じゃなくてすいません。
307デフォルトの名無しさん:2005/11/22(火) 15:03:44
not a number
すれ違いじゃ
308306:2005/11/22(火) 15:06:10
すいませんでした。。。
309デフォルトの名無しさん:2005/11/22(火) 15:12:47
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
二つの(整数型)配列とその長さを引数とし、その共通の要素を新たな配列に格納するプログラムを作りなさい。
配列とその長さはmain関数で決めておくこととする。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] Borland C++ Compiler
 [3.3] 言語: Cでお願いします
[4] 期限: 2005年11月23日09:20まで
[5] その他の制限: 特に制限なし

よろしくお願いします。
310304:2005/11/22(火) 15:13:13
>>305
日本語読めてます?
標準関数の範囲でプログラミングしたからどちらも37秒なんですが。
#37.000秒だとか37.000000秒だと書いていないのだが。
311デフォルトの名無しさん:2005/11/22(火) 15:19:13
単に>>304のマシンのしょぼさが>>305の想像を越えてただけかと。
312デフォルトの名無しさん:2005/11/22(火) 15:22:12
CPUによって違うだけだろ
特にキャッシュ
313デフォルトの名無しさん:2005/11/22(火) 15:26:12
標準関数てのが何を指してるのか不明だが
time.h使えばもっと正確に出せるだろ

プログラムが間違ってるんじゃないか、と言われてムキになる>>304萌え
314304:2005/11/22(火) 15:41:23
>>313
time.hつーか、time()だと秒単位。
#clock()はCLOCKS_PER_SECが環境依存だと思って避けた。
で、むきになってw、rusage使ってみたら3%強の処理時間差が出た。
#約37.7sec対約36.4sec。
315デフォルトの名無しさん:2005/11/22(火) 15:47:32
まぁあれだ・・・納得いかないなら計ってる途中でなんか不具合でも起きたんだなぁ・・とか思え
316デフォルトの名無しさん:2005/11/22(火) 16:05:31
[1] 授業単元:C言語(ポインタがテーマ)
[2] 問題文(含コード&リンク):3つの引数を取り、第1引数で指定されたint型の値を、第2引数で指定されたint型の値を基数として文字列に変換し、
第3引数で指定されたポインタが示す文字配列に格納する関数ltostr()を定義しなさい。
テストのためのmain()関数を記述したファイルに関数定義を記述すること。
ltostr()関数のプロトタイプ宣言、main()関数については変更を加えないこと。
(main関数は>>317に表示します)
第1引数の値は0以上の正の数、第2引数は2〜36とする。時間に余裕があれば、第1引数が負の場合に先頭に"-"(マイナス)を付けるように拡張せよ。

実行例:

./radix 10 16 4096 1024 2047
4096(10) -> 1000(16)
1024(10) -> 400(16)
2047(10) -> 7FF(16)
./radix 16 10 1000 400 7FF
1000(16) -> 4096(10)
400(16) -> 1024(10)
7FF(16) -> 2047(10)


[3] 環境
 [3.1] OS: Vine Linux
 [3.2] コンパイラ名とバージョン: GNOME 1.4.0.4
 [3.3] 言語: C
[4] 期限: 2005年11月24日18:00まで
[5] その他の制限: とくに指示されていません。
もしよろしければ宜しくお願いします。
317316 ◆cFdF91bb3U :2005/11/22(火) 16:08:13
>>316です。
main関数を下に記載します。

#include <stdio.h>
#include <stdlib.h>

/* 第1引数のint型の数値を第2引数を基数として第3変数として指定した
配列に格納する関数 */
void ltostr( int number, int base, char *buf );

int main( int argc, char *argv[] ) {
int base1 = 10;
int base2 = 10;
int c;
char buf[256];

if ( argc < 4 ) {
fprintf( stderr, "Usage: %s [base1] [base2] [number]...\n", argv[0] );
exit(1);
}
else {
base1 = strtol( argv[1], NULL, 10 ); /* 第1引数をint型に直す */
base2 = strtol( argv[2], NULL, 10 ); /* 第2引数をint型に直す */
}
c = 3;
318316 ◆cFdF91bb3U :2005/11/22(火) 16:09:25
/*>>317の続きです。*/
while ( c < argc ) {
ltostr( strtol( argv[c], NULL, base1 ), base2, buf );
printf( "%s(%d) -> %s(%d)\n", argv[c], base1, buf, base2 );
c++;
}}

よろしくおねがいします。長文失礼しました。
319デフォルトの名無しさん:2005/11/22(火) 16:16:12
>>309
#include <stdio.h>
int* compare(int[],int,int[],int);
int main()
{
int array1[10]={3,6,4,2,7,32,16,31,64,34};
int array2[7]={53,32,17,36,4,99,34};
int *dest,*p;
int i=0;
dest = compare(array1,10,array2,7);
while(dest[i] != -1)printf("%d\n",dest[i++]);
free(dest);
return 0;
}

int* compare(int ary1[],int len1,int ary2[],int len2)
{
int i,j,c=0;
int* buf = (int*)malloc(sizeof(int)*64);
for(i=0;i<64;i++)buf[i]=-1;
for(i=0;i<len1;i++){
for(j=0;j<len2;j++){
if(ary1[i]==ary2[j]){
buf[c++] = ary1[i];
}
}
}return buf;
}

こんな感じか?
320デフォルトの名無しさん:2005/11/22(火) 16:27:28
>>316

void ltostr( int number, int base, char *buf ){
char code[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i=0;
while(number >= 1){
buf[i++] = code[number%base];
number/=base;
}
buf[i] = '\0';
strrev(buf);
}
321名無し:2005/11/22(火) 16:28:59
>>103のプログラム
#include <stdio.h>
#define M_DIM (3)
void sol_gj(double [][M_DIM+1],int);
void sol_g(double [][M_DIM+1],int);
int main(void) {
int n=M_DIM,k,j;
double a[M_DIM][M_DIM+1],aa[M_DIM][M_DIM+1];
for(k=0;k<n;k++){
printf("(%d)ax+by+cz=d a,b,c,d?",k+1);
scanf("%lf,%lf,%lf,%lf",&a[k][0],&a[k][1],&a[k][2],&a[k][3]);
}
for(k=0;k<n;k++)
for(j=0;j<n+1;j++)
aa[k][j]=a[k][j];
sol_gj(a,n);
for(k=0;k<n;k++)
for(j=0;j<n+1;j++)
a[k][j]=aa[k][j];
sol_g(a,n);
return 0;
}
322デフォルトの名無しさん:2005/11/22(火) 16:30:23
>>316

static void ltos(int number, int base, char * buf)
{
static const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char * p;
if (number / base) {
ltos(number / base, base, buf);
}
p = strchr(buf, '\0');
p[0] = digits[number % base];
p[1] = '\0';
}

void ltostr(int number, int base, char * buf)
{
if (number < 0) {
buf[0] = '-';
ltostr(-number, base, buf + 1);
} else {
buf[0] = '\0';
ltos(number, base, buf);
}
}
323名無し:2005/11/22(火) 16:35:21
>>321続き
void sol_gj(double a[][M_DIM+1],int n){
int k,j,i;
double b;
char l[]="xyz";
for(k=0;k<n;k++) {
b = a[k][k];
for(j=0;j<n+1;j++) a[k][j] /= b;
for(i=0;i<n;i++){
if(i==k) continue;
b = -a[i][k];
for(j=0;j<n+1;j++) a[i][j] += (b*a[k][j]);
}
}
printf("Gauss-Jordan\n");
for(i=0;i<n;i++)
printf("%c=%f\n",l[i],a[i][n]);
}
324名無し:2005/11/22(火) 16:36:24
>>323続き
void sol_g(double a[][M_DIM+1],int n){
int k,j,i;
double b;
char l[]="xyz";
for(k=0;k<n;k++) {
b = a[k][k];
for(j=0;j<n+1;j++) a[k][j] /= b;
for(i=k+1;i<n;i++){
b = -a[i][k];
for(j=0;j<n+1;j++) a[i][j] += (b*a[k][j]);
}
}
for(k=n-2;k>=0;k--) {
for(j=k+1;j<n;j++)
a[k][n] -= (a[k][j] * a[j][n]);
}
printf("Gauss\n");
for(i=0;i<n;i++)
printf("%c=%f\n",l[i],a[i][n]);
}
325名無し:2005/11/22(火) 16:37:02
>>324続き
void sol_g(double a[][M_DIM+1],int n){
int k,j,i;
double b;
char l[]="xyz";
for(k=0;k<n;k++) {
b = a[k][k];
for(j=0;j<n+1;j++) a[k][j] /= b;
for(i=k+1;i<n;i++){
b = -a[i][k];
for(j=0;j<n+1;j++) a[i][j] += (b*a[k][j]);
}
}
for(k=n-2;k>=0;k--) {
for(j=k+1;j<n;j++)
a[k][n] -= (a[k][j] * a[j][n]);
}
printf("Gauss\n");
for(i=0;i<n;i++)
printf("%c=%f\n",l[i],a[i][n]);
}
x=1,y=2,Z=3となるように式を入れても答えがx=1.3*****,y=1.5*****,z=3.2*****などになり小数の値になります。
どこがおかしいか教えていただけないでしょうか?
326デフォルトの名無しさん:2005/11/22(火) 16:38:02
>>320
strrev()は標準じゃないし、そのltostr()は0を変換できない。
327デフォルトの名無しさん:2005/11/22(火) 16:42:35
じゃ、これでどうだ
void ltostr( int number, int base, char *buf ){
char code[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i=0;
if(number<0){
buf[i++]='-';
number=-number;
}
if(number == 0)buf[i++]='0';
while(number > 0){
buf[i++] = code[number%base];
number/=base;
}
buf[i] = '\0';
if(buf[0]=='-')buf++;
strrev(buf);
}
strrevと同等の機能をもつものなんて簡単に作れるが割愛
328名無し:2005/11/22(火) 16:43:08
>>321>>323>>325の順です。
>>324は間違いです。
すみません
329デフォルトの名無しさん:2005/11/22(火) 16:44:57
>>325
printf("%c=%f\n",l[i],a[i][n]);

ここがおかしいよ
いや、おかしくはないけど
330329:2005/11/22(火) 16:45:36
おっと勘違い
331デフォルトの名無しさん:2005/11/22(火) 16:48:24
>>299様、
どうもありがとうございました。
332デフォルトの名無しさん:2005/11/22(火) 16:56:23
>>285です、質問のが支離滅裂な文ですいません。説明もむずかしい(◎-◎;)
i方向に200j方向にも200の行列があるです、(数値地図50メートルメッシュ)。この数字を四点(iとi+1とjとj+1)での高さの値が一番高い所から、低いほうへ(→)矢印を引きたいのです
これをFor文で繰り返すことにより、(iとjを200)4万個引矢印を描写したいのです
わかりにくい文ですみませんが、どうかお願いします。
333デフォルトの名無しさん:2005/11/22(火) 17:01:50
>>332
ここは宿題スレ。宿題でないならさようなら。
宿題なら>1参照。
どうでもいいが、それだけ判っていて3ヶ月も掛かって書けないなら諦めた方が早いぞ。
334デフォルトの名無しさん:2005/11/22(火) 17:03:00
>>328
今試しにやってみたらちゃんとした結果が出たよ
335316 ◆cFdF91bb3U :2005/11/22(火) 17:06:38
>>316です。携帯から失礼します。
ここで提案してくださったプログラムを実行したのですが、コンパイルエラーになってしまいました〇П_
336デフォルトの名無しさん:2005/11/22(火) 17:08:12
>>332
ひょっとして
□□□□□□
□□□□□□
□□□□□□

こういう単純マトリクスを書こうとしてるの?
だとしたら大人しくCやC++をやり直したほうがいいぞ
337デフォルトの名無しさん:2005/11/22(火) 17:09:04
>>335
コンパイルエラーの中身も書かずにどう対処しろと?
338デフォルトの名無しさん:2005/11/22(火) 17:12:13
GNOMEはコンパイラじゃないし
339デフォルトの名無しさん:2005/11/22(火) 17:15:59
>>336
いや、
→→↓→\↓
→/↑↓←↓
みたいのを書きたいのだろう。
340デフォルトの名無しさん:2005/11/22(火) 17:18:05
>>316
コンパイルエラーなら実行できないだろ。
それに、>320、>327はstrrev()を自作する必要があるぞ。
あ、>322も#include <string.h>が必要だな。
341デフォルトの名無しさん:2005/11/22(火) 17:19:35
やることもよくわからんが
そもそも200*200って画面収まらんだろうどうすんだ?
もすかすてAPIでも使って描きたいん?
342デフォルトの名無しさん:2005/11/22(火) 17:38:57
>>332

よくわからんが、例えば
0 8
1 4
なら→
2 5
3 9
なら\
とかってしたいのか?

0 0
3 4
とかだったらどうするんだ?
343デフォルトの名無しさん:2005/11/22(火) 17:46:50
問題出したやつに問題あるなこりゃ
344デフォルトの名無しさん:2005/11/22(火) 17:58:04
だから宿題じゃないんだろ。
卒研か何かだったら大笑いだな。
345322:2005/11/22(火) 17:59:21
>>340
strchr()も使う必要なかった。
static char * ltos(int number, int base, char * buf)
{
static const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (number / base) {
buf = ltos(number / base, base, buf);
}
buf[0] = digits[number % base];
return buf + 1;
}

void ltostr(int number, int base, char * buf)
{
if (number < 0) {
buf[0] = '-';
ltostr(-number, base, buf + 1);
} else {
ltos(number, base, buf)[0] = '\0';
}
}
346デフォルトの名無しさん:2005/11/22(火) 18:00:10
00
34なら←です
書き方悪くてみすません、これでも一生懸命書き込んだですが。とにかく書きにくいものでして
とりあえず↑の矢印を縦、横20ずつで400個かくプログラムわかれば教えてください(*_*)おながいします。神様
347デフォルトの名無しさん:2005/11/22(火) 18:05:54
>>346
>>333
いいかげんうざい。
348デフォルトの名無しさん:2005/11/22(火) 18:08:42
大きい方向へっての定義がわからんからな。
極端な話
10
01
なら→をどうするのか。
349デフォルトの名無しさん:2005/11/22(火) 18:08:43
int i,j;
for(i=0;i<20;i++){
for(j=0;j<20;j++)printf("↑");
printf("\n");
}
350デフォルトの名無しさん:2005/11/22(火) 18:12:02
00
34なら←です

まじわかんねぇよ
課題自体が意味不明な場合が多いから
宿題以外のものはご法度なんだよ
351伝説新人タクシ:2005/11/22(火) 18:57:33
すげえ説明。おまいら親切だな。
ところでそいつ、マルチしてたぞ。
http://pc8.2ch.net/test/read.cgi/tech/1131443284/l50
初心者にVisual C++を教えるスレ

>(数値地図から)200×200の数の行列?を読み込まし、
>説明もむずかしい(◎-◎;)
日本語も数学もプログラムもできない (*_*) なんだろう。
質問していながら本人がわかってないカホリがするぜwww
そんな都合のいいエスパーがいないことを教えてやれよ。
352伝説新人タクシ:2005/11/22(火) 19:01:02
C++Builder相談室 Part15 こっちにもマル○してるw
353デフォルトの名無しさん:2005/11/22(火) 19:07:08
雑談にも書き込んでるな
悩むだけ無駄だろ 諦めた方がいいと思う
354ぼるじょあ ◆yBEncckFOU :2005/11/22(火) 19:32:01
(・3・) エェー 日本語がわかる子の質問待ってるYO
355デフォルトの名無しさん:2005/11/22(火) 20:21:10
>>285
|っミ■
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1135.zip
やっつけ。矢印の表示の仕方は環境依存だからどうするのかはそっちで任せる
356デフォルトの名無しさん:2005/11/22(火) 20:51:59
>>299
先程実行してみたところ、エラーがでて、
私には到底分かりそうにないです。
できれば教えて頂けないでしょうか。
357デフォルトの名無しさん:2005/11/22(火) 21:18:34
>>356
>>299じゃないけどWinXP+gcc(MinGW)でコンパイル通るようにはした
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1136.c
訂正@**付近でいじってる

C++型のコメントをC型にした
windowsなので表などの0x5c対策を小手先レベルでした
未定義の変数をやっつけで宣言した
358デフォルトの名無しさん:2005/11/22(火) 21:19:26
俺は製作者ではないが
エラーメッセージすら書かないのではどうしょうもないだろう
メッセージがないなら、ない、と書け
我々はまた神でもないのだから
359デフォルトの名無しさん:2005/11/22(火) 22:06:43
>>356
#include <string.h>
をコピペするのミスった。
コンパイルエラーならこれかも。
360デフォルトの名無しさん:2005/11/22(火) 22:39:17
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
2〜7文字のランダムな文字列を、リダイレクションによって読み込み、出力せよ
なお、下のような構造体[data]を使うこと。
struct data{
char str[8];
};
提示する文字列データは5千個しかないが、最大50万個まで対応できるようにしておくこと。
[3] 環境
 [3.1] OS:Lnux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:できるなら明日まで
[5] その他の制限:
5千個の文字列データ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1137.txt

本来は、格納された文字列を使って文字列のソートを行う問題なのですが
ソートの部分は何とかなりそうなので読み込みの部分をお願いします。
361名無し:2005/11/22(火) 22:50:34
>>334
小数でなく正確な値がでましたか?
362356:2005/11/22(火) 22:53:08
いろいろと不備があって申し訳ないです。エラーメッセージを書きます。
>>299さんの方のエラーがエラー
E2141 tr070.c 21: 宣言の構文エラー
警告 W8065 tr070.c 82: プロトタイプ宣言のない関数 'setFormat3' の呼び出し(関数 a
ddMList3 )
警告 W8065 tr070.c 99: プロトタイプ宣言のない関数 'setFormat3' の呼び出し(関数 a
ddMList3 )
エラー E2141 tr070.c 150: 宣言の構文エラー
*** 2 errors in Compile ***
>>357さんの方のエラー
エラー E2293 tr070.c 15: ) が必要
警告 W8065 tr070.c 158: プロトタイプ宣言のない関数 'memcpy' の呼び出し(関数 setF
ormat3 )
*** 1 errors in Compile ***
363デフォルトの名無しさん:2005/11/22(火) 22:56:40
>>360
リダイレクションってのはな
標準入力の変わりにファイルから入力データを読み込むんだ
つまりscanf使えばそのままリダイレクションで読み込める
364デフォルトの名無しさん:2005/11/22(火) 23:03:25
[1] 授業単元:プログラミング演習1
[2] 問題文(含コード&リンク): IF文と無限ループを使って、
 10人の点数の上位3人(na1is ,na2is ,na3is )
求める。
  
[3] 環境
 [3.1] OS: うに
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 2005年11月23日12時まで
[5] その他の制限:習ったばっかりなので、難しいことはあまりわかりません。
よろしくお願いします
365デフォルトの名無しさん:2005/11/22(火) 23:08:02
雲丹じゃコンピュータは動きませんよ。
せめて原生動物以外にしようよ...
366デフォルトの名無しさん:2005/11/22(火) 23:10:02
>>364
#include <stdio.h>

int main(){
int na1is,na2is,na3is;
int score[] = {37,49,93,25,63,14,56,83,21,15};
int i;
na1is=na2is=na3is=0;
for(i=0;i<10;i++){
if(na1is<score[i]){
na3is=na2is;
na2is=na1is;
na1is=score[i];}
else if(na2is<score[i]){
na3is=na2is;
na2is=score[i];}
else if(na3is<score[i])
na3is=score[i];}
}
printf("1st:%d\n2nd:%d\n3rd:%d\n",na1is,na2is,na3is);
return 0;
}


あえてソートせずにやってみた
367デフォルトの名無しさん:2005/11/22(火) 23:12:55
>>363
アドバイスありがとうございます!やっぱりそれで大丈夫なんですね…
一度ちょっと試してみようと思ったんですけど、上手く書けなくて…

#include<stdio.h>

struct data{
char str[8];
};

main(){
struct data D[500000];
int i=0, j;

while(1){
if() break;
scanf("%s",D[i].str);
i++;
}

for(j=0; j<i; j++) printf("%s",D[j].str);
}
こんな風に書いてみたんですけど、どうしてもifの条件の書き方が分からないんです…
他にもおかしい箇所がありましたら、手直しおねがいします。
368デフォルトの名無しさん:2005/11/22(火) 23:20:43
・読み込む行を制限する
・EOF(ctrl-z)で終了する
369デフォルトの名無しさん:2005/11/22(火) 23:21:12
>>367
scanfの返り値を使えば良い。
if(scanf("%s",D[i].str)!=1) break;

あと、本質的じゃないけどDの定義も下のように変更したほうが良い。
static struct data D[500000];
# 動的確保のほうがより良いけど
370デフォルトの名無しさん:2005/11/22(火) 23:25:27
>>363
変数に代入するのはscanfでいいのだろうけど
リダイレクトで最大50万件の不定数のデータを扱うので
fopenみたいに1回開いて件数把握することができない
おそらく初めに struct data hoge[500000];と宣言できるかも不明
ひょっとしたら50万件mallocでとってしまうのがいいのかもしれない。

また
typedef struct data DAT;  
DAT **temp;
temp = (DAT**)calloc(100,sizeof(DAT*));
for(i = 0; i < 100; i++){
  *(temp+i) = (DAT*)calloc(5000,sizeof(DAT));
  for(j=0;j<5000;j++)
   scanf(ry
}
として5000件ごとに新たに領域を確保していくか
(forよりwhileの方が適してるとか管理が大変だったりするが
[123456] → [24][3456]とかしなきゃならないし)
勘違いだったらすまん
371デフォルトの名無しさん:2005/11/22(火) 23:34:46
>>366
すいません。whhileも条件に入れて、もらえますか?
372デフォルトの名無しさん:2005/11/22(火) 23:39:45
#include <stdio.h>

int main(){
int na1is,na2is,na3is;
int score[] = {37,49,93,25,63,14,56,83,21,15};
int i=0;
na1is=na2is=na3is=0;
while(1){
if(na1is<score[i]){
na3is=na2is;
na2is=na1is;
na1is=score[i];}
else if(na2is<score[i]){
na3is=na2is;
na2is=score[i];}
else if(na3is<score[i])
na3is=score[i];
if(i++==9)break;
}
printf("1st:%d\n2nd:%d\n3rd:%d\n",na1is,na2is,na3is);
return 0;
}

そんくらいてめーでやれよ
373デフォルトの名無しさん:2005/11/23(水) 00:01:44
まぁD[500000]なんてのは
50*8MBものメモリが必要なわけで

それはおいといて
とりあえず
while(fgets(buf,8,stdin)!=NULL)sscanf(buf,"%s\n",D[i++].str);
とでもすればいい
374デフォルトの名無しさん:2005/11/23(水) 00:02:32
勘違い
500*8KBだな
375デフォルトの名無しさん:2005/11/23(水) 00:09:55
[1] コンピュータプログラミング
[2] ttp://www.iba.k.u-tokyo.ac.jp/~iba/C/report1.html
[3] 環境
 [3.1] Windows
 [3.2] gcc
 [3.3] C
[4] 11/24

さっぱりわからなくてお手上げ状態です
どうかお助けください
どれか2つでいいとのことなので1と2or4でかまいません
376デフォルトの名無しさん:2005/11/23(水) 00:16:53
>>373
それだと一行が7文字のときに困る。
377デフォルトの名無しさん:2005/11/23(水) 00:26:32
http://pc8.2ch.net/test/read.cgi/tech/1130431335/768 の人?
http://pc8.2ch.net/test/read.cgi/tech/1130431335/776
じゃまずいのかなぁ…確かにむずいけどね
378デフォルトの名無しさん:2005/11/23(水) 00:30:58
>>375
ここで研究室の名前を晒しておいて、ここで寄せられた回答をそのまま持っていく積もりかね。
当然、伊庭先生に筒抜けなんだがなぁ。
379デフォルトの名無しさん:2005/11/23(水) 00:52:28
>>375
通報しときまs(ry
380デフォルトの名無しさん:2005/11/23(水) 01:00:38
課題2のほうのやつやってみてるんだが
3.14・・じゃなくて2.73・・・

になる・・・
うーんどこがおかしいんだろ
381デフォルトの名無しさん:2005/11/23(水) 01:56:24
[1] 授業単元:コンピュータ基礎
[2] 問題文:行と列を入力し、for文を使い模様を表示するプログラム

      実行例
      行?7
      列?9
      ━|━|━|━|━
      |━|━|━|━|
      ━|━|━|━|━
      |━|━|━|━|
      ━|━|━|━|━
      |━|━|━|━|
      ━|━|━|━|━
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 11月23日22時まで
[5] その他の制限:for文を使う
382デフォルトの名無しさん:2005/11/23(水) 02:11:21
>>380
2.73てネピア定数じゃね?
383デフォルトの名無しさん:2005/11/23(水) 02:13:07
#include <stdio.h>

int main(){
int i, j, x, y;
char ptn[2][3] = {"━", "|"};

printf("行?");
scanf("%d", &y);
printf("列?");
scanf("%d", &x);

for(i = 0;i < y;i++){
for(j = 0;j < x;j++){
printf("%s", ptn[(i + j) % 2]);
}
printf("\n");
}

return 0;
}
384デフォルトの名無しさん:2005/11/23(水) 02:19:52
>>382
あ、いや、原因は分かってちゃんと円周率に近い値を出すようにはなったんだが
針の角度を三角関数を用いずに一様に求める方法が分からん

針のY軸への射影を一様にすると期待通りの値が出ない
マクローリン展開でもしろってか?

385デフォルトの名無しさん:2005/11/23(水) 02:25:40
>>384
マクローリン展開で解を出しちゃったらシミュレーションの意味がないじゃんw
386デフォルトの名無しさん:2005/11/23(水) 02:29:46
>>384
while(1){
x=random()-RAND_MAX/2, y=random()-RAND_MAX/2;
if(x*x+y*y>RAND_MAX*RAND_MAX/4) continue;
r=sqrt(x*x+y*y);
s=y/r, c=x/r;
// 他の処理
}
これで三角関数使わなくても角度(というかsin,cos)出るよ。均等割合くらいで。
387デフォルトの名無しさん:2005/11/23(水) 02:30:08
そこで悩んでるんだ
三角関数や円周率は使ってはいけないが
cosxと同じような分布をもつものが必要なんだよ
388デフォルトの名無しさん:2005/11/23(水) 02:44:36
>>386
それでやってみたけどやっぱりうまくいかん
とりあえずcosバージョンを載せとく

void subject2(int L,int N, unsigned int seed)
{
srand(seed);
double M=0;
double sy,dy;
int i;
double x,y,r,c;
for(i=0;i<N;i++){
sy=2.0*L*rand()/RAND_MAX;
dy = L*cos(rand());
if((sy <= 0 && sy+dy >= 0)||(sy >= 0 && sy+dy <= 0)||
(sy <= L && sy+dy >= L)||(sy >= L && sy+dy <= L)||
(sy <= 2*L && sy+dy >= 2*L)||(sy >= 2*L && sy+dy <= 2*L))M++;
}
printf("%lf\n",(2*N)/M);
}
389デフォルトの名無しさん:2005/11/23(水) 02:48:38
[1] 授業単元:プログラミング基礎演習
[2] 問題文(含コード&リンク):
図のような矢がすり模様を出力するプログラムを 繰り返しと条件分岐,および一文字出力関数 putc() または putchar() を用いて作れ。
矢がすりの大きさや、模様の傾き度合い等は、変数を使い自由に値を指定できるようにすること。
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****
***** ***** ***** ***** *****

[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] 言語: C
[4] 期限:11/25
390デフォルトの名無しさん:2005/11/23(水) 02:53:58
間違い

     *****     *****     *****     *****     *****
    *****     *****     *****     *****     *****
   *****     *****     *****     *****     *****
  *****     *****     *****     *****     *****
 *****     *****     *****     *****     *****
*****     *****     *****     *****     *****
 *****     *****     *****     *****     *****
  *****     *****     *****     *****     *****
   *****     *****     *****     *****     *****
    *****     *****     *****     *****     *****
     *****     *****     *****     *****     *****
     *****     *****     *****     *****     *****
    *****     *****     *****     *****     *****
   *****     *****     *****     *****     *****
  *****     *****     *****     *****     *****
 *****     *****     *****     *****     *****
*****     *****     *****     *****     *****
 *****     *****     *****     *****     *****
  *****     *****     *****     *****     *****
391デフォルトの名無しさん:2005/11/23(水) 03:00:02
傾きってどんな風になるのだべか
392デフォルトの名無しさん:2005/11/23(水) 03:00:30
ああ、そうか
393デフォルトの名無しさん:2005/11/23(水) 03:03:54
大きさって、模様の大きさなのか全体の大きさなのかどっちだべ
394デフォルトの名無しさん:2005/11/23(水) 03:11:29
たぶん全体の大きさだと思います。
395デフォルトの名無しさん:2005/11/23(水) 03:37:22
ちょっと思いつきで進めたんでぐちゃぐちゃだが
こうかな
#include <stdio.h>
int main(int argc,char** argv)
{
int tend=1; //アローの傾き
int arrows=3; //折り返し回数
int width = 3; //ラインの幅
int col = 4; //アローの高さ
int row = 4; //アローの横幅
int w,c,r,x,dx,s;
dx = 1;
for(r=0,x=1;r<(row-1)*2*arrows;r++,x+=dx){
if(x==row-1)dx=-dx;
if(x==0)dx=-dx;

for(s=0;s<x*tend;s++)printf(" ");

for(c=0;c<col;c++){
for(w=0;w<width;w++)printf("*");
for(w=0;w<width;w++)printf(" ");
}
printf("\n");
}
return 0;

}
396デフォルトの名無しさん:2005/11/23(水) 03:40:22
コメントはこうかな
int tend=1; /* アローの傾き */
int arrows=3; /* 折り返し回数 */
int width = 4; /* アローの横幅 */
int col = 4; /* アローの本数 */
int row = 4; /* アローの縦幅 */

うまく説明できん
397デフォルトの名無しさん:2005/11/23(水) 03:54:01
最終的にこんなんできました
#include <stdio.h>
int main(int argc,char** argv)
{
int tend=3; /* アローの傾き */
int refs=2; /* 折り返し回数 */
int width = 4; /* アローの横幅 */
int size = 6; /* アローの大きさ */
int arrows = 3; /* アローの本数 */
int r,w,i,s,a,x,dx=1;
for(r=0,x=1;r<(size-1)*2*refs;r++,x+=dx)
{
if(x==size-1)dx=-dx;
if(x==0)dx=-dx;

for(i=0;i<x*tend;i++)printf(" ");

for(a=0;a<arrows;a++)
{
for(w=0;w<width;w++)printf("*");
for(s=0;s<size;s++)printf(" ");
}
printf("\n");
}
return 0;
}
398デフォルトの名無しさん:2005/11/23(水) 04:01:30
399389:2005/11/23(水) 04:17:43
ありがとうございます。
参考にしつつ明日自分でもう一度考えてみます。
400デフォルトの名無しさん:2005/11/23(水) 04:38:33
401デフォルトの名無しさん:2005/11/23(水) 04:41:08
あれwww
適当作りすぎたせいかCOMが必ず勝つプログラムじゃなくて
COMが必ず負けるプログラムになっちゃったwww

まぁいいか
402デフォルトの名無しさん:2005/11/23(水) 04:42:19
ちょwwwwwそれ言わなきゃ>>375がそのまま出したかもしれないのにwwwwwwwwww
403デフォルトの名無しさん:2005/11/23(水) 04:45:22
++[L:32個 M:0個 N:0個]++
COMの番です.
COM=>Lから32個取りました.
プレイヤーの勝ちです.


なにこいつwwwwwwwww
404デフォルトの名無しさん:2005/11/23(水) 04:47:48
勝利判定が間違ってるんじゃ

テイルズの意思取りは最後の一個を取ったほうが負けだが
この場合全ての石を0にしたほうが勝ちのようだぞ
405デフォルトの名無しさん:2005/11/23(水) 05:31:19
>>378
伊庭さんに筒抜けかどうかはともかくとして少なくとも TA はいますお。
採点は TA がやるので…… ry
406デフォルトの名無しさん:2005/11/23(水) 06:07:26
「TAへの周知徹底をお勧めします。」の一文を添えて通報s(ry
407デフォルトの名無しさん:2005/11/23(水) 06:11:42
別に宿題を解いてやるスレなんだからそんなもんどうでもよくないか
408デフォルトの名無しさん:2005/11/23(水) 06:24:54
どうせ去年も似たような状況だったし、そもそもシケプリの丸ごとコピーで提出してくる奴も例年 1/4 くらいいるし。
自発的に人に聞いて解こうとするのはまあマシなんじゃないかね。

ただ 2ch で聞かなくても伊庭さんのところの掲示板で聞いてくれればそれなりに答えるのになあ。
409デフォルトの名無しさん:2005/11/23(水) 06:29:02
TA もこのスレに出入りしてんのかよw
410デフォルトの名無しさん:2005/11/23(水) 06:30:26
>>408
スレ住人の肴を奪わないでくれw
411デフォルトの名無しさん:2005/11/23(水) 14:06:51
ようしらんがこのスレの住人は毎年同じ問題を解かされているということか
中の人は違うかもしれんが

まぁ日に何度か同じ問題がでることもあるしな
412デフォルトの名無しさん:2005/11/23(水) 14:28:29
すみませんtextoutで文字を180度反転させる方法教えてるください

pDC->TextOut(0,0,"あ");

この"あ"という文字を180度反転させるにはどうすればいいでしょうか?
413ぼるじょあ ◆yBEncckFOU :2005/11/23(水) 14:30:58
(・3・) エェー こちらはAPIは受け付けていませんYO
414デフォルトの名無しさん:2005/11/23(水) 15:38:19
>>412
回転したFontを作る。
415デフォルトの名無しさん:2005/11/23(水) 17:56:36
オラオラどしたどしたぁあ!!
416デフォルトの名無しさん:2005/11/23(水) 18:29:27
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
任意の整数が与えられた時(例:4657の場合)
下記のように表示する再帰プログラムを作る
4 4
6 10
5 15
7 22
22
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++6
 [3.3] 言語:C
[4] 期限:2005年11月26日0:00
[5] その他の制限:特に無し
417デフォルトの名無しさん:2005/11/23(水) 18:38:27
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
入力した文字列の全ての英字を削除する再帰プログラムを作りなさい
例:BC192と入力したら
192だけ表示される
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++6
 [3.3] 言語:C
[4] 期限:2005年11月26日0:00
[5] その他の制限:特に無し

よろしくお願いします
418デフォルトの名無しさん:2005/11/23(水) 18:48:08
>>416
#include <stdio.h>

int main(){

int d,t;
int sum=0;
int k=0,i;
printf("数字を入力してください:");
scanf("%d",&d);
while(d>0){
t=d;
k=0;
while((t/10)!=0){t/=10;k++;}
sum+=t;
printf("%d %d\n",t,sum);
for(i=0;i<k;i++)t*=10;
d-=t;
}
printf("%d\n",sum);
return 0;
}
こんな感じかな
419デフォルトの名無しさん:2005/11/23(水) 18:49:00
おっとぜんぜん再帰的じゃねーや
やりなおしてきまつ
420ぼるじょあ ◆yBEncckFOU :2005/11/23(水) 18:55:27
>>417
(・3・) エェー 

#include<stdio.h>

int main(void)
{
char c;
int i;
while(1)
{
scanf("%c",&c);
if(c=='\n')break;
if(64>=c||(91<=c&&96>=c)||123<=c)
printf("%c",c);
}
return 0;
}
421デフォルトの名無しさん:2005/11/23(水) 18:56:04
>>416

int n2d(int);
int main(){
int d;
printf("数字を入力してください:");
scanf("%d",&d);
printf("%d\n",n2d(d));
return 0;
}


int n2d(int number){
int sum;
if(number==0)return 0;
int d=number%10;
sum=d+n2d(number/10);
printf("%d %d\n",d,sum);
return sum;
}

よし再帰的
422ぼるじょあ ◆yBEncckFOU :2005/11/23(水) 19:00:37
(・3・) エェー int iはいらねーYO
423デフォルトの名無しさん:2005/11/23(水) 19:02:39
>>417
#include <stdio.h>
void delalpha(char* _str);
int main(){
char buf[256];
printf("文字を入力してください:");
scanf("%s",buf);
delalpha(buf);
return 0;
}
void delalpha(char* _str){
if(!(*_str >= 'a' && *_str <='z')&&
!(*_str >= 'A' && *_str <='Z'))putchar(*_str);
if(*_str!='\0')delalpha(_str+1);
}

424ぼるじょあ ◆yBEncckFOU :2005/11/23(水) 19:04:24
(・3・) アルェー 再帰的でしたかYO
425デフォルトの名無しさん:2005/11/23(水) 19:39:37
ここってぼるじょあスレだったんか
426デフォルトの名無しさん:2005/11/23(水) 21:21:08
オラオラどしたどしたぁあ!!
今日はネタが少ないな
当然か、祭日だし
427デフォルトの名無しさん:2005/11/23(水) 21:34:31
宿題ではないのですが以下のような課題が出ました。

1:MSXMLのパーサを簡単に扱えるクラスを作成する
  読込・書出・要素、エレメントの読書き、程度の機能があればよい。

 2:STLを使ったプログラムになれる。
   map list vector ...etc 色々使って、なれておいてください。

以上を覚えるのにどちらか良いサイト、または書籍をご存知でしたら教えてください。
スレ違いかもしれませんが。。。
428デフォルトの名無しさん:2005/11/23(水) 21:41:46
1:まずはbisonやflex等のジェネレータで作ってみて
機能を覚えつつ自作してみる
2:なれておいてください。
429デフォルトの名無しさん:2005/11/23(水) 22:02:30
ttp://www005.upp.so-net.ne.jp/episteme/html/stlprog/
なれておいてください。
430デフォルトの名無しさん:2005/11/23(水) 23:09:43
>>427
1: boost::spiritか、XML程度ならboost::regexでもいいかも
2: なれておいてください。
431デフォルトの名無しさん:2005/11/23(水) 23:12:35
>>428,430
MSXMLのラッパーを作れってことではないのか?
432デフォルトの名無しさん:2005/11/23(水) 23:13:51
>>427
1はまだ勉強中の俺では理解できないから>>428-430に任せるが
まだAcceleratedC++読んでないなら嫁
433429だが:2005/11/23(水) 23:28:48
>>431が正解でしょ? 
XMLを解釈する方法ではなく、MSXMLのラッパーを作れと。
まずはMSXMLでぐぐって使い方を学べ。

こういう選択肢もあることを出しておく。
http://www.grinninglizard.com/tinyxml/
434デフォルトの名無しさん:2005/11/23(水) 23:31:42
MSXMLのヘルプって日本語版でてないんだっけ
435デフォルトの名無しさん:2005/11/24(木) 00:44:38
DOMとかでアクセスするあれのことか。
確か昔日本語マニュアル読んだ気がするけど、最新のはしらね。
436163:2005/11/24(木) 01:19:22
>>274 見逃されているような気がするので再掲。見逃されていなかったらすいません。
お願いします。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1133.zip
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1125.txt
437389:2005/11/24(木) 01:46:36
もう1問お願いします。
[1] 授業単元:プログラミング基礎演習
[2] 問題文(含コード&リンク):
以下のようにcos関数のグラフを出力するプログラムを作れ(定義域は[0,4π]程度)。通常 kterm は横80桁,縦24行ほどあるので,その範囲に指定された定義域分のグラフを出力すること。
なお,変数を使い定義域を指定できるようにすること。
またcos(x)だけではなくcos(2*x)やcos(x/2)なども表示できるようにプログラムしてあると良い。ちなみに,前問同様これも 繰り返しと条件分岐,および一文字出力関数 putc()または putchar() を用いて作れ。
*****                    *****
  ***                   **   *
   **                  **    **
    *                 *      *
    *                *       *
    *               *        *
     *             *          *
      *            *          *
      *            *           *
       *          *            *
        *        *              *
         *       *               *
         *      *                *
         *      *                 *
         **    **                  **
          *   **                   ***
           *****                    *****
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] 言語: C
[4] 期限:11/25
438デフォルトの名無しさん:2005/11/24(木) 01:55:20
>>437
値域はどう扱ったらいいのかな?
439デフォルトの名無しさん:2005/11/24(木) 03:07:08
>>438
24行で表示するみたいです。
440デフォルトの名無しさん:2005/11/24(木) 03:49:49
C使ってQR法で固有値求めるプログラム教えてください。
441デフォルトの名無しさん:2005/11/24(木) 05:21:29
[1] 授業単元: コンピュータプログラミング

[2] 問題文(含コード&リンク):
0 から 1までの間で一様な乱数Xi を M個発生させ、それを M個の同じ幅の「箱」に入れよう。
たとえば、M=4のときには、 [0.0,0.25],[0.25,0.5],[0.5,0.75],[0.75,1.0]の4つの箱になる。
その後で,乱数を受け取っていない箱の数Z を数える。このとき M/Z の値を求めるようなプログラムを書きなさい。
Mのさまざまな値(100〜10000くらい)に対して実験して見よ。 Mの値を自由に入力できるようにすること。

[3] 環境
 [3.1] OS: Mac
 [3.2] コンパイラ名とバージョン: gcc -ansi
 [3.3] 言語: C

[4] 期限: 11/24

Mの値が固定ならできるのですが自由に入力できるようにしたらエラー出まくりで泣きました
よろしくお願いします
442デフォルトの名無しさん:2005/11/24(木) 06:28:38
プログラミングの授業で使うコンピュータが Mac って珍しいな
443デフォルトの名無しさん:2005/11/24(木) 06:52:21
お前ら、前の晩に宿題出せよw 過疎してたのに...
444デフォルトの名無しさん:2005/11/24(木) 06:56:24
>>441 ソースうp。

とりあえず、
int *hako; int M,i; double rvalue;
scanf("%d",&M);
hako = (int*)malloc(sizeof(int)*M);memset(hako,0,なんだったっけ?);
for(i=0;i<M;i++){rvalue=(double)(rand()%10000)/10000.0;
hako[rvalue * M]++;}

こんなかんじになるはず。
445デフォルトの名無しさん:2005/11/24(木) 13:56:12
[1] 授業単元: C言語



[2] 問題文:底辺と高さを入力して三角形の面積を計算するプログラムを作れ。

1。ただし底辺等を引数で渡すと各計算をしてreturn文で計算結果を返す
関数を作り、この関数を使って、その計算を表示するプログラムを作りなさい。
2。又、これとは別に底辺等と計算結果を入れておくものを引数で渡すと
各計算をして計算結果を返す関数を作り、この関数を使って、その計算を表示するプログラムを
作りなさい
3:環境 dcc
4 期限: 11/24

returnを使えということでしょうか?よろしくお願いいたします
446デフォルトの名無しさん:2005/11/24(木) 15:38:57
>>445
脳内コンパイルで試してないけど

1.
double triangle(double b, double h) {return (b*h)/2.0;}
int main(int argc, char **argv)
{
double base, height, ans;
printf("底辺="); scanf("%f", &base);
printf("高さ="); scanf("%f", &height);
ans = triangle(base, height);
printf("面積=%lf\n", ans);
return 0;
}

2.
void triangle(double b, double h, double *a) {*a=(b*h)/2.0;}
int main(int argc, char **argv)
{
double base, height, ans;
printf("底辺="); scanf("%f", &base);
printf("高さ="); scanf("%f", &height);
triangle(base, height, &ans);
printf("面積=%lf\n", ans);
return 0;
}
447291:2005/11/24(木) 15:55:52
302さんどうもありがとうございました、たすかりました
304さん、できればはっていただけると助かります。

ところで302さんのソースを以下のように実行すると
bash-2.05b$ ./a.out
found
となるのですが、これはどういうことでしょうか?
bash-2.05b$ /usr/bin/time
Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--help] command [arg...]
の使いかたもよくわからないのですが
448デフォルトの名無しさん:2005/11/24(木) 16:00:48
>>447
実行結果は特に大事ではない
実行時間が大事なんだろ
foundなら検索した値がマッチしたってことだ

pFunc = search;なら番兵無し
pFunc = searchw;なら番兵あり

それぞれ変えて
/usr/bin/time ./a.outとやれば実行時間が出る
そこんとこ何も聞いてないのかよ
449デフォルトの名無しさん:2005/11/24(木) 16:02:25
>>441
それ上で話題になった伊庭研のやつと一緒ジャン
ソースも上のほうにあるんでは?
450デフォルトの名無しさん:2005/11/24(木) 16:06:11
>446
ありがとうございます、2のほうが結果が0になりうまくいかないのですが、
関数のタイプ等間違いはないでしょうか?
451デフォルトの名無しさん:2005/11/24(木) 16:19:00
>>437
#include <stdio.h>
#include <math.h>
/*値域*/
#define VDOM 24
/*定義域*/
#define FDOM 60

int vcos[FDOM][VDOM]={0};
int main(){
int i,j;
double ang=0;
for(ang=0;ang<FDOM;ang++){
vcos[(int)ang][(int)(12+11*cos(4*M_PI*ang/FDOM))]=1;
}
for(i=0;i<VDOM;i++){
for(j=0;j<FDOM;j++){
if(vcos[j][i]==1)putchar('#');
else putchar(' ');
}
putchar('\n');
}
return 0;
}

とりあえず一部だけ
あとはがんがれ
452デフォルトの名無しさん:2005/11/24(木) 16:31:56
>>450
#include <stdio.h>
void triangle(double b, double h, double *a) {*a=(b*h)/2.0;}
int main(int argc, char **argv)
{
double base, height, ans;
printf("底辺="); scanf("%lf", &base);
printf("高さ="); scanf("%lf", &height);
triangle(base, height, &ans);
printf("面積=%g\n", ans);
return 0;
}


453ふみー:2005/11/24(木) 17:47:26
[1] 授業単元:アルゴリズム
[2] 問題文:ファイルを読み込み、空白が早く現れる順に各行を並べ替えるプログラムを作成する。
空白とはスペース記号 0x20 とタブ 0x9 を意味し、空白の無い行は 0 番目に空白が現れた事にする。
@文字列を入れたら最初に空白が来る位置を求める関数を作る。
その関数をテストするための文字列をいくつか作り、関数が出力しなければいけない値を
それぞれ求める。また、そのような文字列を作った理由を解説しなさい。
A文字列を入れたら最初に空白が来る位置を求める関数を作る。
但し、空白で始まる文字列には 1, 空白がなければ 0 を返す。
B上で作成した関数を利用して、題意を満たすプログラムを実際に作成する。
[3] 環境
 [3.1] OS:Windows
 [3.2] gcc 2.9
 [3.3] 言語:C/C++
[4] 期限: [2005年11月31日17:00]
[5] その他の制限:一行の文字制限が無いと入力バッファの処理が複雑になる場合、
一行を高々 80 文字と仮定し、一行を表す文字列としてだけ配列を使っても良い。

以上、長々とお願いします。
454デフォルトの名無しさん:2005/11/24(木) 18:55:38
455デフォルトの名無しさん:2005/11/24(木) 18:56:27
>>453
提出期限でワラタ
456デフォルトの名無しさん:2005/11/24(木) 19:56:22
[1] 授業単元:プログラミング演習U
[2] 問題文:

平面座標上のn個(4個以上)の長方形の2つの対角となる点をキーボードから入力し、
一方向リストを使って表示するプログラムを作成せよ。
ただし、表示する時には長方形の面積も表示すること。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:11/30まで
[5] その他の制限:初心者にもわかりやすいようにお願いします。

どなたかご教授お願いします。
457デフォルトの名無しさん:2005/11/24(木) 20:38:02
一方向リストを使って何を表示するんだよ
458456:2005/11/24(木) 20:47:14
>>457
長方形の4つの頂点を表示するそうです。
わかり辛くてすいません。
459デフォルトの名無しさん:2005/11/24(木) 20:56:42
[1] 授業単元:情報処理B
[2] 問題文(含コード&リンク):コンピューターにランダムな0〜99を選ばせて数当てゲームを作れ
                  回数制限もつける(10回でお願いします)
                  
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC 2003(たぶん)
 [3.3] 言語: C
[4] 期限: 11月27日(日曜) できるだけ早めがいいです><
[5] その他の制限: かなり初歩的なことしか習ってないと思います。
   一応参考として

      for (cownter=10;cownter>0;cownter--)
何らかの処理;
      if (条件)
      {
break;
}

乱数の発生
#include <atdlib.h>
#include <time.h>
srand((unsigned)time(NULL))
ans=rand()%100;
と言うのが与えられているのでコレも含んだ感じで作ってもらえるとうれしいです。
あと、おもしろければおもいしろいほどイイ点数を付けてくれるそうなので、正解の±5以内だと「おしい!」的なことを言ったり
1行AAを入れてもらえればうれしいです。
よろしくおねがいします。
460デフォルトの名無しさん:2005/11/24(木) 22:13:05
>>459
初歩的なところしかやってないらしいのでif文の条件を&&で繋げずに書いてみた。
おしい!とかあたり!とかは適当に自分で改変しる。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int cownte, ans, x;
srand((unsigned)time(NULL));
ans=rand()%100;
for(cownter=10;cownter>0;cownter--){
printf("数を当ててね(残り%d回)>",cownter);
scanf("%d",&x);
if(x==ans){
printf("あたり!\n");
break;
}
else if(x<=ans+5){
if(x>=ans-5){
printf("おしい!\n");
}else{
printf("はずれ\n");
}
}
else{
printf("はずれ\n");
}
}
return 0;
}
461デフォルトの名無しさん:2005/11/24(木) 23:20:05
三次元での最小二乗法での近似って可能ですか?ググッても見当たりません。
わかる方いらっしゃいますでしょうか?
462デフォルトの名無しさん:2005/11/24(木) 23:39:51
>>456
ちょっち長くなった

#include <stdio.h>

typedef struct LIST{
int x1;
int y1;
int x2;
int y2;
struct LIST *next;
}List;

List* init(int,int,int,int);
void release(List*);

List* init(int _x1, int _y1,int _x2, int _y2){
List* list = (List*)malloc(sizeof(List));
list->x1=_x1;
list->y1=_y1;
list->x2=_x2;
list->y2=_y2;
list->next = NULL;
return list;
}

void release(List* list){
if(list!=NULL){
if(list->next!=NULL)release(list->next);
free(list);
}
}
463デフォルトの名無しさん:2005/11/24(木) 23:42:20
続き
int main(){
List head;
List *lp = &head;
int d1,d2,d3,d4,height,width,i=1;
char buf[80];
while(1){
printf("長方形の対角の二点を入力してください(x1 y1 x2 y2) :");
if(fgets(buf,80,stdin)==NULL)break;
if(sscanf(buf,"%d %d %d %d\n",&d1,&d2,&d3,&d4)!=4){
printf("入力に誤りがあります.\n");
continue;
}
lp->next = init(d1,d2,d3,d4);
lp = lp->next;}
lp = head.next;
while(lp!=NULL){
printf("%d:(%d %d),(%d %d),(%d %d),(%d,%d)",i++,lp->x1,lp->y1,lp->x2,lp->y1,lp->x1,lp->y2,lp->x2,lp->y2);
height = (lp->y2 > lp->y1)? lp->y2-lp->y1 : lp->y1-lp->y2;
width = (lp->x2 > lp->x1)? lp->x2-lp->x1 : lp->x1-lp->x2;
printf(" 面積=%d\n",height*width);
lp=lp->next;}
release(head.next);
return 0;
}

入力ループはCtrl-Zで打ち切る
なんかheadの指定方法が変だな
Cでこういうのやるとオブジェクトの良さがわかる
464デフォルトの名無しさん:2005/11/24(木) 23:44:47
オブジェクト指向の良さ、ね

つーか今気づいたんだが
Cの構造体もメソッドみたいなのつけられるようになったんだよな
忘れてた
465デフォルトの名無しさん:2005/11/25(金) 00:07:23
>>461
直線なら
x座標、y座標で近似 y=ax+b(三次元上では平面)
y座標、z座標で近似 z=cy+d(三次元上では平面)
y=ax+b、 z=cy+dが交わってできる直線をなんとか求める
というのはどうだろう
466デフォルトの名無しさん:2005/11/25(金) 00:10:20
[1] 授業単元:情報処理U
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1143.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:11月27日まで
[5] その他の制限:特になし

よろしくお願いします
467デフォルトの名無しさん:2005/11/25(金) 00:23:58
>>466
int combination(int n,int r)
{
printf("combination(%d,%d)が呼ばれました\n", n, r);
 :
(略)
 :
468デフォルトの名無しさん:2005/11/25(金) 00:30:51
>>466
int combination(int n,int r)
{
    
    if(r==0||r==n){
        printf("<%d,%d>\n",n,r);
        return (1);
    }
    else if(r==1){
        printf("<%d,%d>\n",n,r);
        return (n);
    }
    printf("(%d,%d)->[%d,%d][%d,%d]\n",n,r,n-1,r-1,n-1,r);
    return(combination(n-1,r-1)+combination(n-1,r));
}

<n,r>引数が n,rで呼び出されそこで完結したこと
(n,r)->… 引数が n,rで呼び出されさらに->以降の引数で呼び出しを行っていること
469デフォルトの名無しさん:2005/11/25(金) 00:36:22
>>460
かなり助かりますた!!!!!!!!!!
全部見たことある感じでいい感じです><
本当にありがとうございました。
470163:2005/11/25(金) 00:36:25
[1] 授業単元:情報処理演習
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1125.txt
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1133.zip
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++どちらでも可
[4] 期限: 12月1日まで
[5] その他の制限: なし

すいません。最初しか質問テンプレを使ってなかったです。
私の力ではできません。どなたか教えてください。よろしくお願いします。
471304:2005/11/25(金) 00:54:06
>>447
今日は直行直帰で会社に行かなかったから明日出社したら張るわさ。
472 ◆im.oc2dLp2 :2005/11/25(金) 02:57:35
>>453
うはwww同じ大学wwwww
ちなみに、ひとつ情報たしときます。
for文使ったらその時点でダメとのこと
453氏は線形リスト理解しとけ〜
473 ◆im.oc2dLp2 :2005/11/25(金) 03:01:12
間違った
listで表示させるとこはfor使っていいんだった
ごめんよ
474デフォルトの名無しさん:2005/11/25(金) 03:11:16
>>461
>>465
重回帰分析のことじゃないだろうか?違ったらごめん。
475デフォルトの名無しさん:2005/11/25(金) 04:07:26
>>472
なにいってんのかわかんねぇから消えろよ
476デフォルトの名無しさん:2005/11/25(金) 05:05:18
[1] 授業単元:
プログラミング言語C++

[2] 問題文(含コード&リンク):
std::stringを一つ受け取って、文字列内のスペースを除去したstd::stringを返す関数を作成せよ。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc(バージョン不明)
 [3.3] 言語: C++
[4] 期限:
本日午前中
[5] その他の制限:
STLの概要まで習いました。
477デフォルトの名無しさん:2005/11/25(金) 06:02:40
>>476 erase-remove idiom. erase が必要なのを確認しておこう.
#include <string>
#include <algorithm>
std::string remove_space(std::string s) {
  s.erase(std::remove(s.begin(), s.end(), ' '), s.end());
  return s;
}
478456:2005/11/25(金) 09:36:08
>>462
>>463
プログラム、正常に作動しました。
おかげで助かりました。本当にありがとうございました。
479304:2005/11/25(金) 11:56:30
>>291 1/2
#include <sys/resource.h> // #include <time.h>
#include <stdbool.h>
#include <stdio.h>

struct SportClub {int id; char name[64];} kaiin[] = {
    {555, "Yuki TERADA",}, {222, "Kaho KANO",}, {789, "Yuko FUKUDOME",}, {444, "Seiko ANDO",},
    {456, "Mai YUKAWA",}, {666, "Kyoko KAMIDOHZONO",}, {123, "Yuasa OKADA",}, {777, "Aya SAKATA",},
    {111, "Yua SAITOU",}, {333, "Noriko KIJIMA",}, {0, "",},
};
int t_array[]={555,222,789,444,456,666,123,777,111,333,55};

static bool findWithoutSentinel(struct SportClub const * target, unsigned nTarget, int id)
{
    for (unsigned ic = 0; ic < nTarget; ++ic) {
        if (id == target[ic].id) {
            return true;
        }
    }
    return false;
}

static bool findWithSentinel(struct SportClub const * target, unsigned nTarget, int id)
{
    for (unsigned ic = 0; target[ic].id; ++ic) {
        if (id == target[ic].id) {
            return true;
        }
    }
    return false;
}
480304:2005/11/25(金) 11:59:13
>>291 2/2
static inline unsigned long long getTime()
{
    // return time(NULL); // sec
    struct rusage ru;
    getrusage(RUSAGE_SELF, &ru);
    return ru.ru_utime.tv_sec * 1000 * 1000 + ru.ru_utime.tv_usec; // usec
}
static void find(bool sentinel)
{
    printf("with%s sentinel.\n", sentinel ? "" : "out");
    bool (* func)(struct SportClub const *, unsigned, int) = sentinel ? findWithSentinel : findWithoutSentinel;
    const int Iteration = 100000000;
    bool isFound;
    unsigned long long before = getTime();
    for (unsigned id = 0; id < sizeof(t_array) / sizeof(*t_array); ++id) {
        for (unsigned ic = 0; ic < Iteration; ++ic) {
            isFound = func(kaiin, sizeof(kaiin) / sizeof(*kaiin), t_array[id]);
        }
        printf("id:%d is %sFound !\n", t_array[id], isFound ? "" : "Not ");
    }
    unsigned long long after = getTime();
    // printf("%lld sec.\n", after - before);
    printf("%lld msec.\n", (after - before) / 1000);
}
int main()
{
    find(false);
    find(true);
    return 0;
}
481助けて:2005/11/25(金) 14:05:34
[1] 授業単元: 情報処理2
[2] 問題文(含コード&リンク): 神経衰弱を行うゲ−ムを作成すること。ただし
、カ−ドは52枚使用して、絵柄の区別はないものとする。
[3] 環境
 [3.1] OS: windows [3.2] コンパイラ名とバージョン:Visual C++ 6.0
[4] 期限: 2005年11月27日[5] その他の制限: IF文 FOR文
 配列 乱数を使用して作ります 

助けてくださいお願いします
482伝説新人タクシ:2005/11/25(金) 14:14:41
書き込むスレを変えたのなら前のスレに断りをいれようよ。
それとも、誘導されてきた旨を伝えるか、さ。
レスを見れば印象が悪いことぐらい分かるでしょ。
マルチなんてしたら教えるヤシが確実にいなくなっちゃうよ。
483助けて:2005/11/25(金) 14:24:55
すみませんでした。これからは気をつけます。
484デフォルトの名無しさん:2005/11/25(金) 14:41:22
>>481
ユーザインタフェースが分かんない。どんな入出力になればいいの?
まさかGUIなプログラムを作れとか言わないよね?
485ぼるじょあ ◆yBEncckFOU :2005/11/25(金) 15:46:20
仮にGUIお願いっつーならマズグラ作れ
話はそれからだ
486デフォルトの名無しさん:2005/11/25(金) 15:48:33
ぼるじょあを名乗るならちゃんと演じろよw
487ぼるじょあ ◆yBEncckFOU :2005/11/25(金) 15:50:39
(;・3・) エェー しまった!忘れてた
488デフォルトの名無しさん:2005/11/25(金) 15:51:23
(・3・) エェー 飽きたので名無しの名乗らせていただきますYO
          いままでありがとうございましたYO
489デフォルトの名無しさん:2005/11/25(金) 15:53:02
>>486
(・3・)エェー まずグラ作ってYo
話はそれからだYo
490デフォルトの名無しさん:2005/11/25(金) 15:54:19
今度は名前ぼるじょあじゃねーしw
491デフォルトの名無しさん:2005/11/25(金) 16:02:54
東京電×大学の課題ってややこしいのが多いね・・・・
492デフォルトの名無しさん:2005/11/25(金) 16:07:23
CUIでも作れるだろ
13×4配列に1-13のランダムな数字をひとつずつ入れて
まだめくってないカードは「*」で表示し当て終わったカードは「 」で表示する
プレイヤーには行列で選らばせればいいし
COMはランダムに選べばいい

という感じで誰か作ってやれ
493デフォルトの名無しさん:2005/11/25(金) 16:09:18
>>492
あまりに簡単すぎるのでツマランからいいだしっぺのおまいが作ってやれ
494デフォルトの名無しさん:2005/11/25(金) 16:15:50
よし、じゃ>>493の考えを聞こうか
495デフォルトの名無しさん:2005/11/25(金) 16:18:45
俺はCUIで画面消す方法知らないからできん
496デフォルトの名無しさん:2005/11/25(金) 16:25:51
なんか[とか使う奴じゃなかったっけ?
497デフォルトの名無しさん:2005/11/25(金) 16:31:01
エスケープシーケンスによる端末制御は標準ではないからねぇ。

>>495
消さなくても順次スクロールすればよかろ。
498デフォルトの名無しさん:2005/11/25(金) 16:34:18
>>497
見えなくなるまでスクロールってこと?
499デフォルトの名無しさん:2005/11/25(金) 16:37:42
system("CLS");
これでいいはず
500デフォルトの名無しさん:2005/11/25(金) 16:42:07
>>498
見えててもいいじゃん。対人対戦じゃなければ。
501デフォルトの名無しさん:2005/11/25(金) 16:43:45
>>499
おお消えた!やべぇ楽しい(ノ´∀`*)

>>500
ま〜ね
502デフォルトの名無しさん:2005/11/25(金) 16:58:24
>>499
それってゲイツ限定だろ
まぁかといって\x1b[2Jはゲイツじゃ使えないが
503デフォルトの名無しさん:2005/11/25(金) 17:01:25
元の問題の投稿者を放置してインタフェースについて語るのはアレだと思うが
504デフォルトの名無しさん:2005/11/25(金) 17:01:26
[1] 授業単元:コンピュータ基礎
[2] 問題文:関数rand()を使用して0〜999の整数を10個作り、
      画面に表示させた後、昇順に表示させるプログラム
      実行例
      564 448 669 974 917 483 14 743 155 946
      14 155 448 483 564 669 743 917 946 974  
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 11月27日22時まで
[5] その他の制限: バブルソートを使いソートをする
505デフォルトの名無しさん:2005/11/25(金) 17:05:46
>>504
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
  int a[10], i, j, tmp;
  srand(time(NULL));
  for (i = 0; i < 10; ++i) a[i] = 1000*rand()/RAND_MAX;
  for (i = 0; i < 10; ++i) printf("%d ", a[i]); printf("\n");
  for (i = 0; i < 10; ++i)
    for (j = i+1; j < 10; ++j) 
      if (a[i] > a[j]) tmp = a[i], a[i] = a[j], a[j] = tmp;
  for (i = 0; i < 10; ++i) printf("%d ", a[i]); printf("\n");
}
506246、 356:2005/11/25(金) 17:09:01
>>246ですが、提出は結局間に合わなかったのですが、遅れても一応提出しな
いといけないので、>>246の課題をどなたか簡単に、できればswich文を使わ
ず、簡単な形でお願いできませんか。よろしくお願いします。
507デフォルトの名無しさん:2005/11/25(金) 17:13:42
そんな簡単な問題が放置されてたなんてかわいそうだな
508デフォルトの名無しさん:2005/11/25(金) 17:17:59
お前馬鹿?
>>299
に答えあるじゃん。
検索すらできないアホは質問するな。
509デフォルトの名無しさん:2005/11/25(金) 17:26:12
>>508
たぶん
switch使ってるから気に入らなかったんだろうw
510501:2005/11/25(金) 17:30:26
もしかして流れ的に>>481俺がやるの?
511デフォルトの名無しさん:2005/11/25(金) 17:48:05
やんじゃないの?
512デフォルトの名無しさん:2005/11/25(金) 18:03:55
>>505
gccではRAND_MAX==INT_MAXだからかなり高い確率でオーバーフローするよ。それ
513デフォルトの名無しさん:2005/11/25(金) 18:13:09
以下の仕様を満たす可変個の引数を持つ関数 char *concatStrings(char *format, ... ) を作り,プログラムと実行結果を示せ:

* 関数 char *concatStrings(char *format, ... ) は第 1 引数 format に書式を指す文字列の先頭を指すポインタを受け取り,第 2 引数以降に文字列の先頭を指す char * 型のポインタを受け取る.

* 関数 char *concatStrings(char *format, ... ) は,書式 format 中の %s を左から順に,第 2 引数以降のポインタが指す文字列で置き換えた文字列を 1 本作り,その新しく作られた文字列の先頭を指す char * 型のポインタを返り値とする.

* 書式 format 中に %s 以外の形で % が現れた場合や,引数が正しくない場合に対する動作は不定でよい (エラー処理はさぼってよい).

また,できれば以下の条件も満していることが望ましい:

* 関数 char *concatStrings(char *format, ... ) が作る新しい文字列用のメモリ領域は必要最小限のサイズに抑える (メモリ領域を無駄に多く確保しない).

* 書式 format 中の %% は % に置き換える.
514デフォルトの名無しさん:2005/11/25(金) 18:19:07
>>513
以下の仕様を満たす質問を作り、プログラムと実行結果を求めよ。

>>1
515デフォルトの名無しさん:2005/11/25(金) 18:22:39
[1] 授業単元:可個数
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] 言語: C
516デフォルトの名無しさん:2005/11/25(金) 18:30:45
char * concatStrings(char * format, ...)
{
va_list args;
va_start(args, format);
FILE * fp = fopen("/dev/null", "w");
size_t foo = vfprintf(fp, format, args);
fclose(fp);
char * bar = malloc(foo);
vsprintf(bar, format, args);
va_end;
return bar;
}
517デフォルトの名無しさん:2005/11/25(金) 18:34:16
>>499
いや、それすると新しいコンソールを開いてCLSしてすぐ閉じるようになる場合もあるんだ。
518デフォルトの名無しさん:2005/11/25(金) 18:48:32
519デフォルトの名無しさん:2005/11/25(金) 18:56:07
>>518
221 名前: 電大さんが通る 投稿日: 2005/11/13(日) 02:36:32 [ vyr2Ul.s ]
今年も大騒ぎの予感がするデータ構造とアルゴリズムの課題1。
http://edu.net.c.dendai.ac.jp/ad/1/2005/kadai.html

この課題が分からないとか終わってるだろwwwww


232 名前: 電大さんが通る 投稿日: 2005/11/20(日) 22:14:03 [ zfSDCTN. ]
宿題解くのはいいのだがわざとわかりくく間違えを混ぜてあるとか自慢げに初回の授業で言ってたな
それがストレス発散になるらしいぞ

ちょwwwwwwwwおまwwwwwwwww
坂本出てきてくれ、おまい結構いいやつじゃないか
520デフォルトの名無しさん:2005/11/25(金) 18:59:12
>>505
×1000
○1000.0
521デフォルトの名無しさん:2005/11/25(金) 19:03:04
>>516
nul文字のメモリの確保忘れますよ
#include<stdarg.h>
#include<stdlib.h>
#include<stdio.h>
char * concatStrings(char * format, ...){
    va_list args;
    va_start(args, format);
    {FILE * fp = tmpfile();
    size_t foo = vfprintf(fp, format, args);
    char * bar = malloc(foo+1);
    rewind(fp);
    bar[fread(bar,1,foo,fp)]='\0';
    fclose(fp);
    va_end(args);
    return bar;}
}
522521:2005/11/25(金) 19:05:32
×忘れます
×忘れてますよ
523501:2005/11/25(金) 19:05:39
>>481
え〜ヘタレで時間かかった上に変なんでなんかゴメン

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define omote 1
#define ura 0

void gamen(long card[][13],long baka[][13]);

int main(void)
{
long card[4][13],unko[13],baka[4][13],i,j,k,tate[2],yoko[2],han=0,ok=0;
char end;
srand((unsigned)time(NULL));
for(i=0;i<13;i++)
unko[i] = 0;
for(i=0;i<4;i++)
for(j=0;j<13;j++)
{
baka[i][j] = ura;
while(1)
{
k = rand()%13+1;
if(unko[k-1]<4)
{
card[i][j] = k;
unko[k-1] += 1;
break;
524501:2005/11/25(金) 19:06:09
}
}
}
while(1)
{
gamen(card,baka);
puts("");
while(1)
{
if(ok==1)
{
gamen(card,baka);
puts("ダメもう一回入力");
}
puts("めくる場所を縦横の順に入力");
printf("縦(1〜4):");
scanf("%ld",&tate[han%2]);
printf("横(1〜13):");
scanf("%ld",&yoko[han%2]);
if(tate[han%2]>=1&&tate[han%2]<=4&&yoko[han%2]>=1&&yoko[han%2]<=13&&baka[tate[han%2]-1][yoko[han%2]-1]==0)
{
ok = 0;
baka[tate[han%2]-1][yoko[han%2]-1] = 1;
break;
}
else
{
ok = 1;
system("CLS");
}
}
if(han%2==1)
525501:2005/11/25(金) 19:06:43
{
if(card[tate[0]-1][yoko[0]-1]!=card[tate[1]-1][yoko[1]-1])
{
system("CLS");
gamen(card,baka);
baka[tate[0]-1][yoko[0]-1] = 0;
baka[tate[1]-1][yoko[1]-1] = 0;
puts("そろいませんですた\n続ける?(y/n)");
while(1)
{
scanf("%c",&end);
if(end=='y')break;
if(end=='n')return 0;
}
}
han++;
}
else
han++;
if(han>=52)
break;
system("CLS");
}
return 0;
}
526501:2005/11/25(金) 19:07:16
void gamen(long card[][13],long baka[][13])
{
long i,j;
char c[27] = {"@ABCDEFGHIJKL"};
printf(" ");
for(i=0;i<13;i++)
printf("%c%c ",c[i*2],c[i*2+1]);
puts("");
for(i=0;i<4;i++)
{
printf("%c%c",c[i*2],c[i*2+1]);
for(j=0;j<13;j++)
{
if(baka[i][j] == omote)
printf("%3d ",card[i][j]);
else
printf(" * ");
}
puts("");
}
}
527501:2005/11/25(金) 19:27:53
なんか変だから
最初に
void sleep(int n); 追加して

system("CLS");
gamen(card,baka);
baka[tate[0]-1][yoko[0]-1] = 0;
baka[tate[1]-1][yoko[1]-1] = 0;
puts("そろいませんですた");
sleep(3);

に変えて
最後に

void sleep(int n)
{
time_t start,end;
time(&start);
while(time(&end),difftime(end,start)<n);
}
追加して
528坂本:2005/11/25(金) 20:22:43
11月31日17:00が間近に迫って来て、憂鬱になって来た坂本が出てきましたよ。

>>519
結構いいやつかどうかは定かではないが、「わざと間違いを混ぜる」というのは嘘で、
本当は「動くけど、そのままじゃ提出できないようなプログラム」が正解。

皆様おせわになりますが、うちのできの悪い学生を宜しくお願いします。
529デフォルトの名無しさん:2005/11/25(金) 20:43:32
>>508-509
講師に、今回のプログラムで
swichはないだろうと言われたので。
条件後付けされた感覚ですよ。
530デフォルトの名無しさん:2005/11/25(金) 20:47:00
[1] 授業単元: プログラミングII
[2] 問題文(含コード&リンク):
  以下のプログラムを微分を関数微分から数値微分に変更したプログラムを完成させる
  Δxは打ち切り誤差DELTAと同じ値とする
  √5を計算できるように変更する
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C++
[4] 期限: 2005年11月30日12:00まで
[5] その他の制限: 特にありません。

数学の知識がぶっ飛んでいて、関数積分、数値積分の意味が分かりませんorz
よろしくお願いします。


531以下のプログラム(1):2005/11/25(金) 20:47:51

#include <stdio.h>
#include <math.h>

#define DELTA 0.000001

double f(double x);
double df(double x);
double newton(double ox);

void main(void)
{
double x, ox;
int num = 1;

printf("初期値x0を指定してください:");
scanf("%lf", &ox);
printf("反復回数   近似値\n");
while(1){
x = newton(ox);

if(fabs(x - ox) < DELTA) break;
printf("%d   %lf\n", num++, x);
ox = x;
}

printf("解の近似値は%lfです。\n", x);
}
532以下のプログラム(2):2005/11/25(金) 20:48:40
double f(double x)
{
return x*x*x + 2*x*x - 19*x -20;
}

double df(double x)
{
return 3*x*x + 4*x - 19;

}

double newton(double ox)
{
double x;
x = ox - (f(ox)/df(ox));
return x;
}
533デフォルトの名無しさん:2005/11/25(金) 21:01:22
>>530
関数二つだけ書き換える

double f(double x) 

    return x*x-5; 


double df(double x) 

    return (f(x+DELTA)-f(x)) / DELTA;
534デフォルトの名無しさん:2005/11/25(金) 21:18:21
>>530
ありがとうございます。数学用語が分からないなんて、プログラム以前の問題でしたねorz
535534:2005/11/25(金) 21:19:51
×>>530  ○>>534
536デフォルトの名無しさん:2005/11/25(金) 21:20:57
×>>534>>533
駄目だ自分・・・。
ちょっと落ち着いてきます_| ̄|○
537デフォルトの名無しさん:2005/11/25(金) 21:35:50
>>528
ちょwww先生wwwwwwwww
538デフォルトの名無しさん:2005/11/25(金) 22:18:43
>>505
乱数はrand()/RAND_MAX;ではなく
rand()%1000という形にしたい場合はどうすれば
539デフォルトの名無しさん:2005/11/25(金) 22:23:23
rand()%1000にすりゃええじゃないか
540デフォルトの名無しさん:2005/11/25(金) 22:26:26
>>538 ただしそれだと一様分布にならない可能性が高いが
541デフォルトの名無しさん:2005/11/25(金) 22:29:10
1/32と1/33の違いだが
試行回数を増やしまくると響くな
542デフォルトの名無しさん:2005/11/25(金) 22:42:26
>>539
そのまま変えるとエラーがでてしまう。
543デフォルトの名無しさん:2005/11/25(金) 22:46:38
だから何?
ちょっとは自分で考えろよ
544デフォルトの名無しさん:2005/11/25(金) 22:49:15
どこをどう変えたらエラーがでるのか小一時間問いつめ…たくはないなw
545デフォルトの名無しさん:2005/11/25(金) 23:03:40
記念パピコ ヘ( ゚ρ゚)┌θペタッ
546デフォルトの名無しさん:2005/11/25(金) 23:16:02
printf("Hello World\n");
return 0;
順番変わってないよ・・・
547デフォルトの名無しさん:2005/11/25(金) 23:26:30
>>541
1/32 と 1/32 ってどこから出たの?
俺の計算では rand が一様乱数を生成するとして,X ≦ 647 の要素はどれも 0.00100000016 くらいの確率で出現し,
X > 647 の要素はどれも 0.00099999969 くらいの確率で出現することになったんだけど.
548デフォルトの名無しさん:2005/11/25(金) 23:28:42
>>547
ルーレットじゃね?
549デフォルトの名無しさん:2005/11/26(土) 00:00:57
普通RAND_MAXは32768だからじゃねーの
550デフォルトの名無しさん:2005/11/26(土) 00:04:13
だったら32/1000と33/1000だろう
551デフォルトの名無しさん:2005/11/26(土) 00:10:24
おっと、俺もらりってるな
33/32768と32/32768か
552547:2005/11/26(土) 00:13:29
>>549
サンクス.「The value of the RAND_MAX macro shall be at least 32767」(ISO/IEC 9899:1999) か.
gcc の RAND_MAX が 2147483647 だったから 647 で考えてしまってた.
553デフォルトの名無しさん:2005/11/26(土) 00:32:15
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):


int main(void)
{

char str[] = "abcd";
char *ptr = str;

}

以上のような変数宣言をしたときの
ポインタ変数のアドレス
ポインタ変数が参照する配列変数の先頭アドレス
ポインタ変数そのものの値(ポインタ変数に格納されている値)
ポインタ変数の参照先データ
をそれぞれポインタ変数を用いてポインタの位置を文字数分まで1つずつ進めながら16進数で確認するプログラムを作成
ただし,ポインタの位置を変化させても値が変化しないものについては,1回だけ表示すれば良い.なお,文字型のデータであっても16進数で文字コードを表示させれば良い.

[3] 環境
 [3.1] OS:winXP
 [3.2] コンパイラ名とバージョン:bcc32
[3.3] 言語: C++
[4] 期限: 2005まで
[5] その他の制限:
#include<stdio.h>
まで。
554デフォルトの名無しさん:2005/11/26(土) 01:21:58
>>246
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _PROFILE{
char name[32];
double height;
struct _PROFILE* next;

}profile;
profile* add(char* _str,double d){
if(strlen(_str)>32)return NULL;
profile* p = (profile*)malloc(sizeof(profile));
strcpy(p->name,_str);
p->height = d;
p->next = NULL;
return p;}
int remove(profile* p){if(p!=NULL){if(p->next!=NULL)remove(p);free(p);}}
void minmax(profile* p){
if(p!=NULL){
int c=0;profile *min=p,*max=p;
while(p!=NULL){
if(min->height > p->height)min=p;
if(max->height < p->height)max=p;
c++;
p = p->next;}
printf("入力は%d人です.\n",c);
printf("一番低い人は%sさん %gセンチです.\n",min->name,min->height);
printf("一番高い人は%sさん %gセンチです.\n",max->name,max->height); }}
555デフォルトの名無しさん:2005/11/26(土) 01:22:33
int main(){

profile *head = NULL,*pp;
char buf[32],n[32];
double h;
while(1){

printf("氏名?: ");
if(fgets(buf,32,stdin)==NULL)break;
if(strlen(buf)<=1)break;
buf[strlen(buf)-1]='\0';
strcpy(n,buf);

printf("身長?: ");
if(fgets(buf,32,stdin)==NULL)break;
if(sscanf(buf,"%lf\n",&h)!=1)break;

if(head==NULL){
pp = add(n,h);
head = pp;
}else{
pp->next = add(n,h);
pp = pp->next;
}
}
minmax(head);
remove(head);

return 0;
}
switchなし版
こんなもんで十分だろ
556デフォルトの名無しさん:2005/11/26(土) 01:32:30
>>553
#include <stdio.h>


int main(){
char str[] = "abcd";
char *ptr = str;
while(*(ptr)!='\0'){
printf("ポインタ変数のアドレス:0x%X\n",&ptr);
printf("ポインタ変数が参照する配列変数の先頭アドレス:0x%X\n",ptr);
printf("ポインタ変数そのものの値:%s\n",ptr);
printf("ポインタ変数の参照先データ:%X\n",*ptr);

printf("\n+ポインタを進めます+\n");
ptr++;
}
return 0;
}

こういうことかな?
557デフォルトの名無しさん:2005/11/26(土) 01:40:46
#include <stdio.h>
int main(){
char str[] = "abcd";
char *ptr = str;
printf("ポインタ変数のアドレス:0x%X\n",&ptr);
printf("ポインタ変数が参照する配列変数の先頭アドレス:0x%X\n",str);
while(*(ptr)!='\0'){
printf("ポインタ変数そのものの値:0x%X\n",ptr);
printf("ポインタ変数の参照先データ:%Xh\n",*ptr);
printf("\n+ポインタを進めます+\n");
ptr++;
}
return 0;
}


こうじゃないか?
558デフォルトの名無しさん:2005/11/26(土) 02:17:24
[1] 授業単元:コンピュータ工学
[2] 問題文(含コード&リンク):
  余弦定理を用いて三角形の一辺の長さを求めるプログラムを完成せよ。
  ディスプレイから入力する値:2辺の長さ、辺の間の角度(単位は度)
  出力する値:2辺の長さ、辺の間の角度、計算で求めた1辺の長さ
  注:数学関数を使用すること、π=3.14 として計算。
  ヒント
   余弦定理 
   c^2=a^2+b^2-2abcosθ
   使用する数学関数 
   sqrt( ),cos( )
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: [2005年11月28日11:00まで]
[5] その他の制限:入出力のところまでやりました。

よろしくお願いします。
 
559デフォルトの名無しさん:2005/11/26(土) 02:25:44
>>558
#include <stdio.h>
#include <math.h>
#ifndef M_PI
#define M_PI 3.14/*1592653589793*/
#endif
int main(void)
{
double a, b, c, th;
do{printf("a=?");}while(scanf("%lf\n", &a)!=1);
do{printf("b=?");}while(scanf("%lf\n", &b)!=1);
do{printf("θ=?");}while(scanf("%lf\n", &th)!=1);
c = sqrt(a*a+b*b-2.0*a*b*cos(th*M_PI/180.0));
printf("c=%f\n", c);
return 0;
}
560デフォルトの名無しさん:2005/11/26(土) 02:45:27
>>559
ありがとうございます!
本当に助かりました。
561デフォルトの名無しさん:2005/11/26(土) 02:47:59
do{printf("a=?");}while(scanf("%*c%lf", &a)!=1);
do{printf("b=?");}while(scanf("%*c%lf", &b)!=1);
do{printf("θ=?");}while(scanf("%*c%lf", &th)!=1);

のほうがいいな
562デフォルトの名無しさん:2005/11/26(土) 02:49:36
間違えた
do{printf("a=?");}while(scanf("%lf", &a)!=1);
do{printf("b=?");}while(scanf("%*c%lf", &b)!=1);
do{printf("θ=?");}while(scanf("%*c%lf", &th)!=1);

563デフォルトの名無しさん:2005/11/26(土) 03:05:08
>>561-562
アドバイスありがとうございます!
参考にさせていただきます。
564デフォルトの名無しさん:2005/11/26(土) 06:57:30
>>528
先生、11/31ってなんですか pgr
565デフォルトの名無しさん:2005/11/26(土) 07:14:48
>>554
本当に、ありがとうございます。
ここの人達は物凄く親切ですね。
どうも、ありがとうございました。
566デフォルトの名無しさん:2005/11/26(土) 07:15:52
>>564
9/31、4/31、2/31に次ぐ暗黒の日です
2/30、6/31もあてはまりますがマイナーです
567デフォルトの名無しさん:2005/11/26(土) 10:09:55
>>513 死ねよヴォケ
568坂本:2005/11/26(土) 11:51:03
>>564
闇の締切日です。>>453
この日にレポートを提出すると、大学生活一年分プレゼントのチャンス!!
ただ、危険な技なので自己責任で。
569デフォルトの名無しさん:2005/11/26(土) 14:52:44
[1] 授業単元:プログラミング1
[2] 問題文:fgets()を用いて英文を改行、\0を含む128文字以内で1行入力し、文中に含まれる
単語の長さと単語の出現回数の統計(1,2,3,4,5,6,7,8,9,10,それ以上に分ける)を表示する
処理を繰り返すプログラムを作成しなさい。単語境界は空白文字とし、単語の要素は
英数字記号なら何でも良い。出現回数を単語の長さに応じて記録するlen[]とい
う整数型配列をグローバル変数として定義。 入力行を引数としてlen
[]に値を設定する関数を定義し、main関数から呼び出すようにする。
。sscanf()を用い、書式指定子に%sを多用してはならない。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2005年11月28日16:10まで
[5] その他の制限:stdio.h,string.h内ポインタは使用禁止です。

よろしくお願いしますm(__)m


570246:2005/11/26(土) 15:04:10
>>554-555
エラー E2140 test.c 12: ここでは宣言はできない(関数 add )
エラー E2356 test.c 17: 'remove' の再宣言で型が一致していない
エラー E2344 c:\Borland\Bcc55\include\stdio.h 193: 一つ前の
'remove' の定義位置
警告 W8075 test.c 17: 問題のあるポインタの変換(関数 remove )
警告 W8070 test.c 17: 関数は値を返すべき(関数 remove )
警告 W8075 test.c 56: 問題のあるポインタの変換(関数 main )
*** 3 errors in Compile ***
というエラーがでました。助けてください。お願いします。
571デフォルトの名無しさん:2005/11/26(土) 15:09:06
>>569
1.
%sは何回までなら使用していいのか。

2.
>[5] その他の制限:stdio.h,string.h内ポインタは使用禁止です。

stdinは使うなということか?
572レン:2005/11/26(土) 15:36:23
[1] 授業単元:二分探索法
[2] 問題文:0からN(適当な自然数)までの数を一つ利用者に思ってもらう。計算機は当て推量(ゲスguess)で
0からNまでの数の一つを出力する。計算機のゲスが当たっていたらG(Good)、計算機のゲスした数より思った数が大きければL(Large)、
小さいならばS(Small)を入力してもらって、出来るだけ少ない回数のゲスで利用者の思った数を当てるゲームを作る。
<入力>"G"、"L"、"S"。
<操作>利用者の"L"または"S"の回答によって利用者の思った数の範囲を狭めてゆく、利用者の思った数が0からNまでのどの数であっても、
出来るだけ少ないゲスで利用者の思った数を当てるように工夫する。
<出力>0からNまでの数(ゲス)。
<考察>もっとゲスの回数を少なくする可能性のあるアルゴリズムは?
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2005年11月30日9:00まで]
[5] その他の制限:なし
よろしくお願いいたします。
573デフォルトの名無しさん:2005/11/26(土) 15:38:03
1.
>%sは何回までなら使用していいのか。
わかりませんが、たとえば128文字ならスペース区切りで
64個の%sを用いればできるらしいのですが、そういった使い方
は禁止と言われました。


2.
>stdinは使うなということか?
日本語がまずかったです。すみません。
stdio.hとstring.hに含まれる標準関数は
使用可能です。
574デフォルトの名無しさん:2005/11/26(土) 16:05:22
stdinは関数じゃない。つーかまずかったんなら正確な日本語に書き直せ。
とりあえず。

・stdinは使った。
・%sは1度も使ってない。(%*sは1度だけ使った)

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1146.c
575デフォルトの名無しさん:2005/11/26(土) 16:16:13
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):問題文      http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1147.txt
                  入力データ    http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1148.zip
                  授業中のソース http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1149.c
[3] 環境
 [3.1] OS: Linux)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (どちらでも可)
[4] 期限: ([2005年11月28日15:30まで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

制限は特にありません。
完全にお手上げなので、どうかよろしくお願いいたします。
576デフォルトの名無しさん:2005/11/26(土) 16:20:25
>>574様。
ありがとうございました。
これからは気をつけますm(__)m
577デフォルトの名無しさん:2005/11/26(土) 16:42:00
>>572 考察の部分だけ.
次のメタアルゴリズム(アルゴリズムに対するアルゴリズム)を考える:

入力: アルゴリズム(既知の情報から次のゲスを決める戦略)
出力: 数
1. I = [0,N] とする.
2. これまで得られている情報から,アルゴリズムが x ∈ I を選び出すとき,
I として I∩[0,x) と I∩(x,N] の長いほうを再設定する.
3. I の要素数が 1 になるまで 2 を繰り返す.要素数が 1 ならそれを返す.

このメタアルゴリズムによって得られる数は,構成方法から明らかに
与えられたアルゴリズムの対してその繰り返し回数だけのゲスを必要とする.
その回数は区間の長いほうを常に選んだことから,二分探索以上になる.

従って,任意のアルゴリズムはこのメタアルゴリズムが選ぶ数に対して,
二分探索以上のゲス回数がかかるので,二分探索が最良のアルゴリズム.
578デフォルトの名無しさん:2005/11/26(土) 17:29:55
>>570
ン、プロトタイプ宣言して
メイン関数を一番上に持って行けば直ると思うぞ
579246:2005/11/26(土) 18:20:25
>>578
度々すみません。教科書片手に戦いましたが、分かりそうにないです。
お手数かけますが、馬鹿な私にも分かるように教えてください。
お願いします。
580デフォルトの名無しさん:2005/11/26(土) 18:23:17
だが断る!
この578が最も好きな事のひとつは
自分で馬鹿だと思ってるやつに『NO』と断ってやる事だ…
581デフォルトの名無しさん:2005/11/26(土) 19:16:34
プロトタイプ宣言しなくても警告出るくらいじゃないのか・・・
582デフォルトの名無しさん:2005/11/26(土) 19:44:28
remove()は標準関数に同じ名前が在るから使っちゃ駄目。
583デフォルトの名無しさん:2005/11/26(土) 19:56:35
_PROFILEはどの文脈でも予約済みだから使用禁止。
ブロックの先頭以外でのローカル識別子宣言は>>246は禁止。
584デフォルトの名無しさん:2005/11/26(土) 20:32:41
[1] 授業単元: マージ
[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1150.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 11月28日まで
[5] その他の制限: 使用する関数はmain関数のみでお願いします。

585デフォルトの名無しさん:2005/11/26(土) 20:37:40
>>584
番兵使用/未使用で2通りのマージソートを書けと言うことか
大量にサンプルコードあるんだから自分で探せ


つーか、なんでマージソート書かせておいてmainのみなんだ
別関数化した方が使い回し効いて便利なわけだが
586584:2005/11/26(土) 20:59:55
>>585
ソートはマージソート以外の方法で行えとの指定がありました。
587デフォルトの名無しさん:2005/11/26(土) 21:01:52
> 任意のデータ列2つをキーボードから入力し、
>それぞれのデータ列を整列(ソート)させたうえでマージ
>(どちらの解法でも構わない)を行うプログラムを作成せよ。

>(マージソートではないので、各データ列を個別に整列させた後マージを行うこと。)

>ただし、以下の点に注意すること


これのことか
588デフォルトの名無しさん:2005/11/26(土) 21:04:00
>>586
広義でのマージソートじゃまいか?
まぁ流し読みだった俺も悪いんだが
589デフォルトの名無しさん:2005/11/26(土) 22:48:22
マーチングキューブ法って知ってる?
誰かおせーてくれよん
590デフォルトの名無しさん:2005/11/27(日) 01:55:25
1] 授業単元: プログラミング
[2] 問題文;ファイルから データを読み込み、人口の多い順に都道府県を出力せよ
[3]環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: lcc-win32
[4] 期限:2005年11月29日火曜
都道府県とそれぞれの人口が書いてあるファイルあって、そこからファイルを読み込むまではできるんですけど、
人口が多い順に並び替えるのが、どうやればいいかわからないんでおしえてください!!
591デフォルトの名無しさん:2005/11/27(日) 01:57:58
いぜんどっかで見たようなプログラムだな
データファイルさらせよぼけぇ
592デフォルトの名無しさん:2005/11/27(日) 02:25:29
もうこれリンクあげるから作ってくれ。
http://edu.net.c.dendai.ac.jp/ad/1/2005/kadai.html

解る解らない前に、全てのプログラムそのものが全くわからん
どこの参考書にも載ってない。助けてくれ
593デフォルトの名無しさん:2005/11/27(日) 02:29:06
>>592
<string>を使っていいか否かによって手間が結構変わる。
594デフォルトの名無しさん:2005/11/27(日) 03:15:21
[1] 授業単元:C 言語
[2] 問題文:度数分布
      関数rand()を使用して0〜9の整数を作る。これを100回実行して、
      各数値の出現回数をn[0]〜n[9]の10個の配列にセット、
      これを用いて次のような棒グラフを表示するプログラム。
      実行例
      0:***********
      1:*********
      2:*****
      3:*****************
      4:***********
      5:**********
      6:******
      7:**********
      8:**********
      9:***********  
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 11月28日20時まで
[5] その他の制限: 配列を使う
595デフォルトの名無しさん:2005/11/27(日) 03:16:27
596デフォルトの名無しさん:2005/11/27(日) 03:25:29
>>594
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, n[10];
srand(time(NULL)); // 乱数系列初期化
for( i = 0 ; i < 10 ; i++ ) n[i] = 0; // 初期化
for( i = 0 ; i < 100 ; i++ ) n[rand()%10]++;
for( i = 0 ; i < 10 ; i++ ) {
printf("%d:", i);
for( ; n[i] > 0 ; n[i]-- ) printf("*"); // putchar('*'); も可
printf("\n"); // puts(""); も可
}
return 0;
}
597デフォルトの名無しさん:2005/11/27(日) 03:26:52
>>592
二分探索木版
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1152.cpp

strcpyとかぜんぶ作ってやろうとしたが面倒なんでとちゅうでやめた
598595:2005/11/27(日) 03:32:39
ミス訂正。

× int pos = min( line.find(' '), line.find('\n') );
○ int pos = min( line.find(' '), line.find('\t') );


× m.insert( Pair( max(pos,INT_MIN), line ));
○ m.insert( Pair( pos, line ));
599デフォルトの名無しさん:2005/11/27(日) 04:11:09
600デフォルトの名無しさん:2005/11/27(日) 04:31:27
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク): ポインタ変数を用いて入力した文字列を反転するプログラム
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: どちらでも可
[4] 期限: [無期限]
[5] その他の制限: #include<stdio.h>だけ
601デフォルトの名無しさん:2005/11/27(日) 04:33:36
>>592
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1154.c
>(追加 2005/11/9 午後) 但し、一行の文字制限が無いと入力バッファの処理が複雑になる場合、
>一行を高々 80 文字と仮定し、一行を表す文字列としてだけ配列を使っても良い。 
を逆手にとってやった。ソートを組む気力なかったです
602デフォルトの名無しさん:2005/11/27(日) 04:42:25
>>600
#include <stdio.h>
void st_reverse(char *,char *);

int main() {
    char s[100],d[100];
    scanf("%[^\n]",s);
    st_reverse(s,d);
    printf("_%s_\n_%s_\n",s,d);
    return 0;
}

void st_reverse(char *s,char *d){
    char* t=s;
    if(*t){
        while(*(++t));
        d-=s-t;*d--=0;t=s;
        while(*t)*d--=*t++;
    }else *d^=*d;
}
603デフォルトの名無しさん:2005/11/27(日) 05:00:18
81回ファイルを読み直すとかいってアホだろ
604デフォルトの名無しさん:2005/11/27(日) 05:15:57
>>590

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1155.c
なぜ二分探索木ばっかりかだって?
簡単な上にそこそこ早いからさ
605デフォルトの名無しさん:2005/11/27(日) 05:20:19
作ったプログラムの二つともでファイル閉じてない・・・hahaha
606デフォルトの名無しさん:2005/11/27(日) 08:48:11
>>481
神経衰弱
おもしろそうなんでやってみた。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1156.zip
607デフォルトの名無しさん:2005/11/27(日) 09:15:38
>>606
日本語ファイル名は止めようぜ・・・
608246:2005/11/27(日) 10:44:08
>>582-583
「remove」の所を強引に「remo」に変えた所、エラーは減りました。
エラー E2140 test.c 12: ここでは宣言はできない(関数 add )
警告 W8070 test.c 17: 関数は値を返すべき(関数 remo )
頑張ってみたけど分かりません。助けてください。お願いします。
609デフォルトの名無しさん:2005/11/27(日) 10:46:59
>>601
81行以上のファイルはどうするんだ?
610デフォルトの名無しさん:2005/11/27(日) 10:52:25
[1]基礎情報処理
[2]10000 までのすべての素数をできるだけ効率のいい方法で求めなさい。
[3] 環境
 [3.1] Windows
 [3.3] C
[4] 11月29日火曜まで
[5] とくになし
よろしくお願いいたします。
611デフォルトの名無しさん:2005/11/27(日) 10:56:35
素数のデータベースを作る。
以上
612デフォルトの名無しさん:2005/11/27(日) 11:01:39
2から10000の平方根までふるいにかける
613デフォルトの名無しさん:2005/11/27(日) 11:03:15
エラトステネスのふるいを使う
614デフォルトの名無しさん:2005/11/27(日) 11:25:19
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): abc.txtからデータを読み込み、人口の多い都道府県順に出力せよ
[3] 環境 [3.1] OS: Windows 
[3.2] コンパイラ名とバージョン: lcc
  [3.3] 言語: C言語
[4] 期限: 火曜日まで
[5] その他の制限:
今、配列と構造体をやっています。「abc.txt」とは、
北海道56590
青森1462
岩手1402
宮城2373
秋田116
山形1230
福島2113
茨城299
このようなファイルです。ちなみに、
#include <stdio.h>
int main(){
char ken[12];
double num;
FILE *fp;
fp=fopen("pop.txt","r");
while(fscanf(fp,"%s\t%lf",ken, &num)!=EOF){
printf("%s\t%f \n", ken, num );
} return 0; }
に付け加えるようにと言われました。画面に表示されるのは、県名のみです。
いろいろごちゃごちゃしていますが、なにとぞよろしくお願いします。
615デフォルトの名無しさん:2005/11/27(日) 11:27:22
すみません。pop.txtのところがabc.txtです。
ファイル名は何でもいいです。
616デフォルトの名無しさん:2005/11/27(日) 11:38:34
[1] 授業単元:
[2] 問題文(含コード&リンク): 画像一画素あたりのRGBそれぞれの平均の値を数値で取得するプログラムを書け。
[3] 環境
  [3.1] OS: FreeBSD
[3.3] C
[4] 11月30日水曜まで
[5] とくになし
617デフォルトの名無しさん:2005/11/27(日) 11:59:23
>>614 データの県と人口の間にタブが入っているという前提で。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define DATA_MAX 256
typedef struct {char ken[12]; double num; } data_t;
int cmp_of_num(const void *a, const void *b){ return (*(data_t**)b)->num -(*(data_t**)a)->num; }
int main()
{
  data_t DataBase[DATA_MAX] = {0};
  data_t *pDataBase[DATA_MAX] = {0};
  int i, numOfData;
  FILE *fp; 
  if(!(fp = fopen("abc.txt","r"))) return -1;
  for(i = 0; i < DATA_MAX; ++i)
  {
    if(i == DATA_MAX || fscanf(fp,"%s\t%lf",DataBase[i].ken, &DataBase[i].num) ==  EOF) break;
    pDataBase[i] = &DataBase[i];
  }
  numOfData = i;
  qsort(pDataBase, numOfData, sizeof(data_t*), cmp_of_num);
  for(i = 0; i < numOfData; ++i) printf("%s\t%f \n", pDataBase[i]->ken, pDataBase[i]->num );
  close(fp);
  return 0;
}
618デフォルトの名無しさん:2005/11/27(日) 12:04:56
[1] 授業単元:プログラミング演習U
[2] 問題文:

http://ysserve.int-univ.com/sugsi/Lecture/c2/e_07-05-04.html

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:11/30まで
[5] その他の制限:課題の一番下にあるプログラムの大枠に従って作成してください。

よろしくお願いします。
619デフォルトの名無しさん:2005/11/27(日) 12:17:55
そういや、
>>470
誰か解けた?答えが見当たらない。
問題文の意味はなんとか分かる。
が、プログラム作成はオレには無理だorz
そもそもC言語でできるのかな?
620デフォルトの名無しさん:2005/11/27(日) 13:11:48
621デフォルトの名無しさん:2005/11/27(日) 13:14:38
>>609
テスト時は109万行(50MB)のテキストで試したけど
1行80字以上のテキストに仮対応(1行1024文字までだけど)するなら
#include<stdio.h> の次行に
#include N (1024) 追加

char d[81]; → char d[N+1];
for(i=0;i<81;i++){ → for(i=0;i<N+1;i++){
while(fgets(d,80,f)!=NULL){ → while(fgets(d,N,f)!=NULL){
if(!a[i] || i>80)return 0; → if(!a[i])return 0;/* やっぱいらないか */
の5ヶ所を修正

また20-22行のwhile文内でiより大きい最小の整数を見つけておくと
無駄なループを省ける
inti; → int i=0,t,c; に修正後

while(i<N+1){
    fseek(f,0,SEEK_SET);/* 初めから読み直し */
    t=N+1;
    while(fgets(d,N,f)!=NULL){
        if((c=s(d))==i) fputs(d,g);
        /* iより大きい最小の空白開始位置がどこにあるかの目星をつける */
        if(c>i && c<=t) t=c;
    }
    i=t;
}

いわゆる char d[N+1] が気に入らないというのならお手上げですorz
622デフォルトの名無しさん:2005/11/27(日) 13:28:59
623デフォルトの名無しさん:2005/11/27(日) 14:13:59
>>616
データ形式定義よろ。

まあこういう課題ならふつうはJPEG2000だろうが。
624デフォルトの名無しさん:2005/11/27(日) 14:48:42
[1]データベース
[2]簡単なDBMSを作る
[3]windowsXP
C言語
[4]2005/11/28 (月)

問題 search1.txtまたはsearch2.txtを読み込んで、次にそれら1行目に書かれている
gakusei.csvを読み込み、2行目に書かれている項目を表示する。

↓search1.txtの中身

gakusei.csv
学籍番号,氏名,電話番号


↓search2.txtの中身
gakusei.csv
氏名,住所


↓gakuseki.csvの中身

学籍番号,氏名,住所,電話番号
401,市川雅紀,つくば市,2985421
402,海老原徹,潮来市,2894654
403,小林誠二,水戸市,2924583

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1159.lzh

マジ切羽詰ってるんでよろしくお願いしますm(__)m
625伝説新人タクシ:2005/11/27(日) 14:59:07
それはDBMSではない。
626デフォルトの名無しさん:2005/11/27(日) 15:02:10
めんどくさそうだからやらない
627デフォルトの名無しさん:2005/11/27(日) 15:02:31
>>624
つまりsearch*.txtを読み込んで
select (2行目) from (1行目);
だと解釈しろってことか?
628デフォルトの名無しさん:2005/11/27(日) 15:12:35
Cだとめんどいな。
perl向きだ。
629伝説新人タクシ:2005/11/27(日) 15:13:04
つか、むちゃくちゃだろ。
最低レベルのDB作るにしてもレベル低い、
DBを実装を除いて教えているかと思うと、まったくの無知。
これじゃ、Cを教えているだけwwww
630デフォルトの名無しさん:2005/11/27(日) 15:16:15
>>628
perlならcsv読み込んで、一行目を,で区切った上でハッシュのキーにしておけば
楽に読み出せるもんな
C++ならmap使えばどうにか出来なくも無いが、面倒だな

Cじゃ何もないから自力でやらないとダメだし面倒杉
631デフォルトの名無しさん:2005/11/27(日) 15:24:03
超簡単な課題にしてやると先生が言ってたので・・・(´Д`;)
Accessとかを習う授業ではなく、データベース管理はどういう仕組みになってるかって言う
授業なもので・・・orz

>>627
SQLだとそういうことと思います。
632デフォルトの名無しさん:2005/11/27(日) 15:27:17
だったらなおさらCでやる意味無いな。
633624:2005/11/27(日) 15:41:50
やっぱ別の言語の方が簡単にできる系ですか?

一応先生がそのプログラムをテストできる言語なら何でも良いとのことです。
それからソースコードと実行例のみ提出すれば良いらしいです。
634デフォルトの名無しさん:2005/11/27(日) 15:47:13
>>633
そもそも文字列処理はPerlの十八番
言語指定無しならわざわざC/C++でやる意味が無い
635ぼるじょあ ◆yBEncckFOU :2005/11/27(日) 15:50:10
(・3・) エェー ファイル処理忘れましたYO
636デフォルトの名無しさん:2005/11/27(日) 16:34:51
637デフォルトの名無しさん:2005/11/27(日) 16:37:00
>>619
パワポ入ってないので詳しい定義等がわからn
638デフォルトの名無しさん:2005/11/27(日) 17:58:48
>>619
計算可能である限り C で書けんことはない.

が,俺には 470 の問題の意味が全然わからんので無理.
これまで回答が無いのも問題をきちんと理解できた奴が居ないからだと思ってた.

具体的に何をしたらいいか,きちんとした定義で書いてくれれば,やったるよ.
639デフォルトの名無しさん:2005/11/27(日) 18:07:04
>>621
char d[N+1] が気に入らない、以前に
プログラムのボトルネックとなるファイル入出力を
無駄に81回も1024回も繰り返して、更に肥大させてどうするんだよ

プログラミングじゃなくて計算機の構造を勉強しなおせ
640619:2005/11/27(日) 18:33:38
641デフォルトの名無しさん:2005/11/27(日) 19:07:00
[1] 授業単元: program
[2] 問題文(含コード&リンク): ポインタ変数を用いて入力した文字列から指定した文字を検索するプログラム。
[3] 環境
 [3.1] OS:Windows/Linux
 [3.2] コンパイラ名とバージョン: .NET
 [3.3] 言語: c++
[4] 期限: 無期限
[5] その他の制限:
#include<stdio.h>
int main(void)
だけでお願いします。
642デフォルトの名無しさん:2005/11/27(日) 19:08:31
みんなIQテストやってるから無理
643デフォルトの名無しさん:2005/11/27(日) 19:12:28
>>640
「誤り訂正」というよりも,「区間に渡る xor」だけを用いて,ビット列の 1 になってる場所を
特定して 0 に置き換えていくときの「区間に渡る xor」の回数を求める感じなのか.

図5.wmf, ブロックのサイズは,全ビット数/誤り個数 に定められてるものなの?
あと,「半分にしたブロックまで記憶」って意味がわからん.
644デフォルトの名無しさん:2005/11/27(日) 20:13:42
>>641
ジャンクすぽーつみている俺がやってきましたよ。

#include<stdio.h>

int main(void)
{
char src[1000]="abcdefghijklmnopqrstuvwxyz";
char dst[1000]="mno";
char *p1,*p2,*d;

for(p1=src;*p1;p1++){
for(p2=p1,d=dst;(*p2==*d)&&(*p2);++p2,++d);
if(!*d) printf("%s\n",p1);
}
return 0;
}
645デフォルトの名無しさん:2005/11/27(日) 20:33:19
ふむ、状態1を求めるのは容易いが・・・
646デフォルトの名無しさん:2005/11/27(日) 20:44:44
[1] 授業単元:プログラミング(2)
[2] 問題文(含コード&リンク): 2次元配列を利用してパスカルの三角形を 作るプログラム
ただし、行数は入力して指定出来るようにすること(最大で16行まで)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 2005年12月2日23:59まで
[5] その他の制限: 表示された際、二等辺三角形型ではなく、直角三角形型で表示する事
※パスカルの三角形:頂点は全て1、それ以外は全て(上の数)+(左上の数)
例)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
647646:2005/11/27(日) 20:46:10
その他、特に指定はありません
よろしくお願いします
648デフォルトの名無しさん:2005/11/27(日) 21:15:43
#include <stdio.h>
int comb(int,int);

int main(){
int i,j;
int n=16;
for(i=1;i<=n;i++){
for(j=0;j<=i;j++){
printf("%d ",comb(i,j));
}
putchar('\n');
}
return 0;
}

intcomb( int m, int n )
{
if( (m>n) && (n>0) ) {
returncomb(m-1,n-1) + comb(m-1,n);
} else {
return1;
}
}
649デフォルトの名無しさん:2005/11/27(日) 21:31:23
>>641
char c,s[64],*p=s;
fgets(s,64,stdin);
c=getchar();
for(;(*p!=c)!='\0';p++);
if(!*p) puts("not found");
else printf("%d番目",p-s);
650デフォルトの名無しさん:2005/11/27(日) 21:50:42
[1] 授業単元: 情報処理
[2] 問題文: 1999リットルの水が入った容器Aと、同じ大きさのからの容器B がある。
        1 回目は、A の1/2 の量をB へ移し、2 回目は、B の1/3 をA に移す、
        3 回目は、A の1/4 をB へ移す、次はB の1/5 をA へ・・・・
        この方法で、次々と水を移す。1999回目にA からB へ移したとき、
        B の容器には、何リットルの水が入っているかを求めるプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 11月29日まで
[5] その他の制限: 特にありません
651デフォルトの名無しさん:2005/11/27(日) 22:06:47
>>650
#include <stdio.h>
int main(){
  double a = 1999.0;
  double b = 0.0;
  int i;
  for(i = 1; i <= 1999; ++i){
    if( i % 2 ){
      b += a /= 2.0;
    }else{
      a += b / 3.0;
      b -= b / 3.0;
    }
  }
  printf("A = %f\n", a);
  printf("B = %f\n", b);
  return 0;
}
652651:2005/11/27(日) 22:07:41
ごめん、ちがった。
653デフォルトの名無しさん:2005/11/27(日) 22:11:05
>>650 ほい訂正。
#include <stdio.h>
int main(){
  double a = 1999.0;
  double b = 0.0;
  double c = 2.0;
  int i;
  for(i = 1; i <= 1999; ++i, ++c){
    if( i % 2 ){
      b += a / c;
      a -= a / c;
    }else{
      a += b / c;
      b -= b / c;
    }
  }
  printf("A = %f\n", a);
  printf("B = %f\n", b);
  return 0;
}
654デフォルトの名無しさん:2005/11/27(日) 22:14:44
doubleで++使えたかな?
655デフォルトの名無しさん:2005/11/27(日) 22:15:27 BE:403331696-##
>>653
それだと一回目に3で割ってませんか?
>> 1 回目は、A の1/2
656デフォルトの名無しさん:2005/11/27(日) 22:27:32
>>654
gcc と vc7 では使えるようだ。

>>655
んなことはない。
657655:2005/11/27(日) 22:29:55
>>656
あぁそうなのか。forの部分いつもi++にしててつい。
658デフォルトの名無しさん:2005/11/27(日) 22:36:46
>>657
関係ない.for の第三項はループの終端で評価される.
659デフォルトの名無しさん:2005/11/27(日) 22:38:23
>>653

漏れもそのソースと同じのを上げようとしてしまったやww
660619:2005/11/27(日) 23:50:06
>>643
一番大きいブロックが 全ビット数/シャッフルした時の誤り個数 。
「半分にしたブロックまで記憶」 は要するに図4で一番下の状態になったら
0000 0 0 00 00000000 1010 0 0 00 10001000 …    (α)
のブロックの塊で記憶しているということだろう。
もちろん各ブロックには誤りがない又は偶数の状態。
というか図4の一番下の区切り方がまずいなぁ。
(α)のように区切っていてくれれば分かりやすいのに。
もちろん図5の上から1番目がまずいのは当然として、3番目、4番目もまずい。
図5の上から3番目の緑の部分は
0 0 00 1100 00000000
のブロックの塊、
図5の上から4番目の訂正後はおそらく
0000 0 0 00 00000000 00 0 0 0 0 00 0 0 00 0000
のブロックの塊で記憶しているということのはず。
661おーすけ:2005/11/28(月) 00:01:55
 2 つのデータ列(3,8,11,19,24,30,37,43)、(5,13,24,31)をマージするプログラムを作成せよ。
662デフォルトの名無しさん:2005/11/28(月) 00:05:47
[1]授業単元: プログラミング演習
[2]問題:
要素数[20]、マイナスになったら終了。
入力した数の分だけ*で表示。

 実行例

 データ入力:3
データ入力:1
データ入力:4
データ入力:-1

 結果

[0]:***
[1]:*
[2]:****


[3]環境
 [3.1]OS:Windows
 [3.2]コンパイラ名とバージョン:bcc
 [3.3]言語:C
その他の制限:特になしです

問題うろ覚えなのですが、よろしければお願いします。
663デフォルトの名無しさん:2005/11/28(月) 00:07:36
これのシャッフルってかなり複雑だから
もう一から構成しなおしたほうが早くないか
664デフォルトの名無しさん:2005/11/28(月) 00:10:31 BE:358517186-##
>>662
#include <stdio.h>
void main()
{
int n[20];
int cnt = 0;
int i , k;

do {
scanf("%d" , &n[cnt]);
} while (n[cnt++] >= 0);

for (i = 0 ; i < cnt - 1 ; i++) {
printf("[%2d]:" , n[i]);
for (k = 0 ; k < n[i] ; k++) printf("*");
printf("\n");
}
}

どうでしょうか
665662:2005/11/28(月) 00:15:47
>>664
ありがとうございました。
助かりました。
666デフォルトの名無しさん:2005/11/28(月) 00:17:22
>>665
×printf("[%2d]:" , n[i]);
○printf("[%2d]:" , i);
下から5行目
667デフォルトの名無しさん:2005/11/28(月) 00:21:32
>>663
一から構成したら問題にならん.全部 0 に置き換えれば済んでしまう.
668デフォルトの名無しさん:2005/11/28(月) 00:21:34
初期状態:エラー数12619
状態(1):エラー数6984
シャッフル後:当然6984
状態(2):エラー数5951

ぜんぜんへらねぇ
669デフォルトの名無しさん:2005/11/28(月) 00:36:35
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):ポインタ変数を用いて入力した文字列のアルファベットをカウントするプログラム

abcdABCDE

a,A=2
b,b=2
c,C=2
d,D=2
e,E=1

[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] 言語: c++
[4] 期限: なし
[5] その他の制限:
#include<stdio.h>
int main(void)
{
670デフォルトの名無しさん:2005/11/28(月) 00:49:25
>>667
#include <stdio.h>
int main(){
char buf[80],c,*pc;
pc = (char*)malloc(sizeof(char)*80);
int count[26]={0},i;

fgets(buf,80,stdin);
sscanf(buf,"%s",pc);

while(*pc!='\0'){
putchar(*pc);
if((*pc)>='A' && (*pc)<='Z')count[*pc-'A']++;
if((*pc)>='a' && (*pc)<='z')count[*pc-'a']++;
pc++;
}
for(i=0;i<26;i++){
if(count[i]!=0)printf("%c,%c=%d\n",'a'+i,'A'+i,count[i]);
}
return 0;
}
671デフォルトの名無しさん:2005/11/28(月) 00:50:22
おっとputchar(*pc);は消しといてくれ
672619:2005/11/28(月) 01:02:32
>>663
>>667
「一から構成」の意味を取り違えて解釈してしまったかもしれないけど、
状態1の?番目→状態2の?番目は、1→1 2→50001 3→2 4→50002 のようでなくても、
ランダムにシャッフルして
状態1の何番目が状態2の何番目になったかが追跡できればいいんじゃないのかな?

全ビット数/シャッフルした時の誤り個数 にするのは、
出力する「誤りの数を確かめる回数」を一番少なくするためだと思う。
673デフォルトの名無しさん:2005/11/28(月) 01:07:45
初期状態 エラービット数:12424 エラー率:0.12424 ブロックサイズ:8
状態(1) エラービット数: 6808 エラー率:0.06808000 ブロックサイズ: 8
状態(2) エラービット数: 4306 エラー率:0.04306000 ブロックサイズ: 16

状態(1) エラービット数: 4306 エラー率:0.04306000 ブロックサイズ: 8
状態(2) エラービット数: 2302 エラー率:0.02302000 ブロックサイズ: 16

状態(1) エラービット数: 2302 エラー率:0.02302000 ブロックサイズ: 8
状態(2) エラービット数: 874 エラー率:0.00874000 ブロックサイズ: 16

状態(1) エラービット数: 874 エラー率:0.00874000 ブロックサイズ: 8
状態(2) エラービット数: 288 エラー率:0.00288000 ブロックサイズ: 16

状態(1) エラービット数: 288 エラー率:0.00288000 ブロックサイズ: 8
状態(2) エラービット数: 62 エラー率:0.00062000 ブロックサイズ: 16

状態(1) エラービット数: 62 エラー率:0.00062000 ブロックサイズ: 8
状態(2) エラービット数: 10 エラー率:0.00010000 ブロックサイズ: 16

状態(1) エラービット数: 10 エラー率:0.00010000 ブロックサイズ: 8
状態(2) エラービット数: 0 エラー率:0.00000000 ブロックサイズ: 16

パリティ回数97369

追跡するとどれだけ減るのやら
674デフォルトの名無しさん:2005/11/28(月) 01:14:23
課題のほうも説明プリントのほうも激しく分かりずらい
出題者のほうもあまり知識がないんじゃないか?
675デフォルトの名無しさん:2005/11/28(月) 02:22:40
1] 授業単元: C++
[2] 問題文:
以下のクラス MyPair に対し, 演算子 == , !=, >=, >, <=, < を定義して下さい. ただし, これらの演算子は以下の性質を満たすようにして下さい.
これらは全て MyPair 同士の比較である.
fst が等しいとき, snd を比べてその比較の結果とする.
fst が異なるとき, fst を比べてその比較の結果とする.
それと下記を実行するためのmain文も書いてください

class MyPair {
int fst;
int snd;
public:
MyPair(int f=0, int s=0) {
fst = f;
snd = s;
}
int get_fst() const { return fst; }
int get_snd() const { return snd; }
};

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio.NET
 [3.3] 言語: C++
[4] 期限: 11月28日
[5] その他の制限:


676619:2005/11/28(月) 02:37:02
>>673
状態3は無視?んまぁ、そこまで減らないと思うけど。

>>674
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1164.txt
1125.txtの問題文を改良、というか出題者の意図に近くしたはずのもの。
難しいから、
できない場合は、なるべく近いプログラムを作成する
ということを書いているのだろうなぁ。
677673:2005/11/28(月) 02:41:01
まだ追跡を取り入れてないがパリティチェック回数が大変な数になってきた
しかも下手打った場合状態10くらいまでいくこともあるし


>>675
#include <iostream>
using namespace std;
class MyPair {
int fst;int snd;
public:
MyPair(int f=0, int s=0) {fst = f;snd = s;}
bool operator ==(const MyPair mp){if(this->fst!=mp.fst)return this->fst == mp.fst;else return this->snd == mp.snd;}
bool operator !=(const MyPair mp){if(this->fst!=mp.fst)return this->fst != mp.fst;else return this->snd != mp.snd;}
bool operator <=(const MyPair mp){if(this->fst!=mp.fst)return this->fst <= mp.fst;else return this->snd <= mp.snd;}
bool operator <(const MyPair mp){if(this->fst!=mp.fst)return this->fst < mp.fst;else return this->snd < mp.snd;}
bool operator >=(const MyPair mp){if(this->fst!=mp.fst)return this->fst >= mp.fst;else return this->snd >= mp.snd;}
bool operator >(const MyPair mp){if(this->fst!=mp.fst)return this->fst > mp.fst;else return this->snd > mp.snd;}
int get_fst() const { return fst; }
int get_snd() const { return snd; };
void isTrue(bool b){if(b)cout << "true" << endl;else cout << "false" << endl;}
int main(){
MyPair mp1(2,6);MyPair mp2(2,4);
isTrue(mp1==mp2);
isTrue(mp1!=mp2);
isTrue(mp1>=mp2);
isTrue(mp1>mp2);
isTrue(mp1<=mp2);
isTrue(mp1<mp2);
return 0;}
678デフォルトの名無しさん:2005/11/28(月) 02:43:21
>>677
何もC++に直さなくて、最初の「ひまわり」で実装したバージョンで良くないか?
679デフォルトの名無しさん:2005/11/28(月) 02:44:25
ミズラ

#include <iostream>
using namespace std;
class MyPair {
int fst;int snd;
public:
MyPair(int f=0, int s=0) {fst = f;snd = s;}
bool operator ==(const MyPair mp){
if(this->fst!=mp.fst)return this->fst == mp.fst;else return this->snd == mp.snd;}
bool operator !=(const MyPair mp){
if(this->fst!=mp.fst)return this->fst != mp.fst;else return this->snd != mp.snd;}
bool operator <=(const MyPair mp){
if(this->fst!=mp.fst)return this->fst <= mp.fst;else return this->snd <= mp.snd;}
bool operator <(const MyPair mp){
if(this->fst!=mp.fst)return this->fst < mp.fst;else return this->snd < mp.snd;}
bool operator >=(const MyPair mp){
if(this->fst!=mp.fst)return this->fst >= mp.fst;else return this->snd >= mp.snd;}
bool operator >(const MyPair mp){
if(this->fst!=mp.fst)return this->fst > mp.fst;else return this->snd > mp.snd;}
int get_fst() const { return fst; }
int get_snd() const { return snd; }};
void isTrue(bool b){if(b)cout << "true" << endl;else cout << "false" << endl;}
int main(){
MyPair mp1(2,4);MyPair mp2(2,4);
isTrue(mp1==mp2);
isTrue(mp1!=mp2);
isTrue(mp1>=mp2);
isTrue(mp1>mp2);
isTrue(mp1<=mp2);
isTrue(mp1<mp2);
return 0;}
680デフォルトの名無しさん:2005/11/28(月) 03:02:52
C++の月刊誌って無いでしょうか?
一度にどっさり覚えるの苦手なんで、毎月チマチマと
新鮮な気分で習得していきたいんです。
雑誌買うと、真新しい気分になれるじゃん。
681デフォルトの名無しさん:2005/11/28(月) 03:03:58
いろいろあるが
今月はクラス、来月はポインタやりますよー
なんて初歩的なのはないと思うぞ
682デフォルトの名無しさん:2005/11/28(月) 03:16:39
CMAGAってそういう内容も取り扱ってなかったか?
683デフォルトの名無しさん:2005/11/28(月) 03:36:08
>>670
mallocとは?
684デフォルトの名無しさん:2005/11/28(月) 04:10:06
>>661
#include <stdio.h>

int main(void)
{
 int a[] = {3, 8, 11, 19, 24, 30, 37, 43};
 int b[] = {5, 13, 24, 31};
 int c[20] = {0};
 int asize = sizeof(a) / sizeof(int), bsize = sizeof(b) / sizeof(int), i = 0, j = 0, num = 0;

 do {
  if (i < asize && j < bsize) {
   if (a[i] < b[j])
    c[num++] = a[i++];
   else
   c[num++] = b[j++];
  } else if (i < asize)
   c[num++] = a[i++];
  else /* j < bsize */
  c[num++] = b[j++];
 } while (i < asize || j < bsize);

 for (i = 0; i < num; i++)
  printf("%d ", c[i]);
 putchar('\n');

 return 0;
}
685デフォルトの名無しさん:2005/11/28(月) 04:41:10
アンカーミスだな
>>670>>669あて
686デフォルトの名無しさん:2005/11/28(月) 04:53:55
>>624
chomp ($src = <STDIN>);
open (FS, "< $src") || die "can't open $src\n";
chomp ($from = <FS>);
open (F, "< $from") || die "can't open $from\n";
chomp ($category = <F>);
($no, $name, $addr, $tel) = split(",", $category);
%data = ($no => [], $name => [], $addr => [], $tel => []);
$i = 0;
foreach $line (<F>)
{
    chomp $line;
    ($data{$no}->[$i], $data{$name}->[$i], $data{$addr}->[$i], $data{$tel}->[$i]) = split(",", $line);
    $i++;
}
chomp ($key = <FS>);
@keys = split(",", $key);
print "$_ " foreach (@keys);
print "\n";
$cnt = $data{$no};
foreach $l (0..@$cnt-1)
{
    print "$data{$_}->[$l] "foreach (@keys);
    print "\n";
}
close(FS);
close(F);
文字コードとか考慮してない
687614:2005/11/28(月) 08:20:58
今更ながら>>617さんありがとうございました。
Tabが間に入っていることにも察してくれたことには感謝です。
本当は都道府県が47個なので読み込むのは47回でよかったのですが、
わざわざdefineとか使わせてしまってすみませんでした。
今後気をつけます。

後は自分で調整にがんばってみようと思います。
できないかもしれませんが・・・。

本当にありがとうございました。
688デフォルトの名無しさん:2005/11/28(月) 09:04:05
>>614>>590は同一人物なのか
学科が同じなだけなのか
689618:2005/11/28(月) 10:00:06
>>620
>>622
プログラム、正常に作動しました。
どうもありがとうございます。助かりました。
返事が遅くなって申し訳ないです。
690デフォルトの名無しさん:2005/11/28(月) 10:22:36
1] 授業単元: C言語研究
[2] 問題文:
以下のプログラムのキャスト記法を, 正しいC++のキャスト演算子に直して下さい.
#include <iostream>
void func(int* x)
{
cout << *x << endl;
}
int main()
{
const int a=1;
double b=1.2;
unsigned int c = ('a' << 24) | ('b' << 16) | ('c' << 8) | 'd';
const int* d=&a;
func((int *)d);
cout << (int)b << endl;
cout << ((char *)(&c))[0] << endl;
cout << ((char *)(&c))[1] << endl;
cout << ((char *)(&c))[2] << endl;
cout << ((char *)(&c))[3] << endl;
return 0;
}
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio.NET
 [3.3] 言語: C++
[4] 期限: 12月10日
[5] その他:

691デフォルトの名無しさん:2005/11/28(月) 11:43:33
2A+3B+4C-5D=0
5A+2B-2C+D=0
3A+B-C+D=0
7A+2B+C-3D=0
この連立一次方程式をガウス・ザイデル法で解くプログラムの作成
なんですが
これを参考にしても出来ません
http://www5.airnet.ne.jp/tomy/cpro/sslib6.htm
どなたかお願いします

692デフォルトの名無しさん:2005/11/28(月) 13:33:39
>>690
こういうことでいいのか?

#include <iostream>
void func(int* x)
{
cout << *x << endl;
}
int main()
{
const int a=1;
double b=1.2;
unsigned int c = ('a' << 24) | ('b' << 16) | ('c' << 8) | 'd';
const int* d=&a;
func(const_cast<int*>( d ));
cout << static_cast<int>( b ) << endl;
cout << (reinterpret_cast<char*>( &c ))[0] << endl;
cout << (reinterpret_cast<char*>( &c ))[1] << endl;
cout << (reinterpret_cast<char*>( &c ))[2] << endl;
cout << (reinterpret_cast<char*>( &c ))[3] << endl;
return 0;
}
693デフォルトの名無しさん:2005/11/28(月) 14:02:48
[1] 授業単元: プログラミング1
[2] 問題文(含コード&リンク):
ローン返済プログラム
・元利均等方式
・ボーナス返済はなし
・月払い
・単位期間における支払総額 = 当初借入額 × 利率/(1-(1+利率))^(-返済回数)
・月の支払額と、支払い総額を求め表示する
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ 5.5
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 2005年12月01日
[5] その他の制限:
習ったもの↓
・printf
・scanf
・基本的な算術演算
・if
・for、while、do-while
・多次元配列
#include <stdio.h>
void main ( void ){
でお願いします。
初心者なので初心者ぽくお願いします…。
うちのガッコのプログラミングはあまり授業が進まない…。
進んでもついていけないけどorz
694デフォルトの名無しさん:2005/11/28(月) 14:16:27
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
1:いくつかの要素を持つ配列のなかから最大値を求めるユー
ザー関数を作成。
2:文字列のコピーを行うユーザー関数を作成。標準関数は使
用しない。
[3] 環境
 [3.1] OS: /Linux/
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: すぐにお願い致します
[5] その他の制限:ポインタを少し習いました。
今授業中なんでできれば早めにお願い致します。
695デフォルトの名無しさん:2005/11/28(月) 14:41:35
>void main ( void ){
進まない方がいいかもね。
696デフォルトの名無しさん:2005/11/28(月) 14:42:13
>>694の1
#include <stdio.h>

int max(int *array, int size)
{
    int max;
    int i;

    max=array[0];
    for (i=1 ; i<size ; i++)
    {
        if (array[i]>max)
        {
            max=array[i];
        }
    }

    return max;
}

int main()
{
    int array[]={1,5,6,3,2};
    printf("%d\n", max(array, sizeof(array)/sizeof(array[0])));

    return 0;
}
697デフォルトの名無しさん:2005/11/28(月) 14:42:22
リアルタイムで出てる宿題なのですが
キーボードから入力された5つの整数を配列の中に保存し、それを表示するプログラムを作れ
で授業終わりまでに仕上げないといけません^^;
先輩方知恵を貸してくださいTT
698デフォルトの名無しさん:2005/11/28(月) 14:47:31
>>694の2
#include <stdio.h>

void my_string_copy(char *src, char *dest)
{
    while(*src!='\0')
    {
        *dest=*src;
        dest++;
        src++;
    }
    *dest='\0';
}

int main()
{
    char *src="fuck'n jap";
    char dest[80];
    my_string_copy(src, dest);
    puts(src);
    puts(dest);
}
699デフォルトの名無しさん:2005/11/28(月) 14:52:13
>>697
#include <stdio.h>

int main()
{
    char buf[1919];
    int num[5];
    int i;

    for (i=0 ; i<5 ; i++)
    {
        fgets(buf, sizeof(buf)-1, stdin);
        sscanf(buf, "%d", &num[i]);
    }
    for (i=0 ; i<5 ; i++)
    {
        printf("%d\n", num[i]);
    }
}
700デフォルトの名無しさん:2005/11/28(月) 14:57:38
>695
意味がわからないですけど、マジでそれしか習ってないんでorz
701デフォルトの名無しさん:2005/11/28(月) 15:04:53
699さんまだ最初の方の授業なのでもっと簡単な感じかと思うのですが
そんな風にはできますか??
702デフォルトの名無しさん:2005/11/28(月) 15:11:08
>>701
#include <stdio.h>

int main()
{
    int num[5];
    int i;

    for (i=0 ; i<5 ; i++)
    {
        scanf("%d", &num[i]);
    }
    for (i=0 ; i<5 ; i++)
    {
        printf("%d\n", num[i]);
    }
}
703デフォルトの名無しさん:2005/11/28(月) 15:18:34
numのところはssでも平気でしょうか?
704デフォルトの名無しさん:2005/11/28(月) 15:20:41
>>703
平気
705デフォルトの名無しさん:2005/11/28(月) 15:22:32
ありがとうございます、なんだかcharというのを使わないといけないような
雰囲気なのですが・・・
706デフォルトの名無しさん:2005/11/28(月) 15:24:43
>>705
となりの奴が間違ってる
好評価を得るチャンス
707デフォルトの名無しさん:2005/11/28(月) 15:27:01
Σ マジデスカ!?
今日は初期化の授業をしております
708デフォルトの名無しさん:2005/11/28(月) 15:43:32
今講義中で配列は引数にできないからポインタで渡すとか禿がぬかしてますが、
渡す配列が、「要素全部」なのか「一つの要素だけ」なのかわかりません。
見回りの院生に聞いたら「ハァ?」みたいな顔された・・・orz

質問が悪いのかも、意味補完して理解できる人オシエテクレ
709デフォルトの名無しさん:2005/11/28(月) 15:46:23
>>699
sizeof(buf)から1引いてるのは何かのトラップですか?
710デフォルトの名無しさん:2005/11/28(月) 15:46:43
隣の奴は、256以上の数字とか入れるとフィーバータイムが始まる。
711名無し:2005/11/28(月) 15:47:09
>>572
の期限が近いのでよろしくお願いします。
712デフォルトの名無しさん:2005/11/28(月) 15:47:36
>>708
要するに、配列の先頭要素のポインタです。
713デフォルトの名無しさん:2005/11/28(月) 15:48:05
>>708
上げんなやスレ違いヴォケ帰れ
714デフォルトの名無しさん:2005/11/28(月) 15:51:40
まぁまぁ、暇だし。

>>709
fgets manpageより抜粋

fgets() は stream から最大で size - 1 個の文字を読み込み、
s が指すバッファに格納する。
読み込みは EOF または改行文字を読み込んだ後で停止する。
読み込まれた改行文字はバッファに格納される。
'\0' 文字が一つバッファの中の最後の文字の後に書き込まれる。

なんで、確かにいらないですね。
715デフォルトの名無しさん:2005/11/28(月) 17:01:18
>>230
いまだにわかんね
締め切りが…
716デフォルトの名無しさん:2005/11/28(月) 17:12:41
>>715
去年は2ch又はプログラミング掲示板に投稿された事が坂本先生に発覚。
そのプログラムを使用した人は100%落ちた。その数は全体の6割強。

この掲示板を見てる人はお前さんが思ってるよりもずっと多い、今回も同じだろ。
賢いあの先生のことだ・・・見て無いはずがないし生徒じゃ到底気づかない罠を仕掛けてるに決まってる。
717坂本:2005/11/28(月) 17:45:58
>>716
補足すると、別に 2ch で書かれたプログラムだから落したわけではないよ。
問題のプログラムは Java で書かれていたもの。
実行結果を読むと明白に問題を解いてないことが分かるのに
それをチェックもせずに「正しく動作した」とか書いて来たから不合格になっただけ。

今回の課題の「罠」は他人が作ったプログラム程レポートが書きづらくなっているだけ。
他に裏は無いよ。まあ課題 2 も同じ人にプログラムを書いてもらってね。
# この一行でパニックになっている人がいるかも
718デフォルトの名無しさん:2005/11/28(月) 18:07:32
坂本先生、sage知ってるんですねw もう一人前のねらーですね。

6割がJavaで書いてくるとは... お疲れ様です。
719デフォルトの名無しさん:2005/11/28(月) 18:09:14
>>715
教えて差し上げます。








11/30の12:00が締め切りです。
720デフォルトの名無しさん:2005/11/28(月) 18:10:37
内輪ネタは他所でやれ
721デフォルトの名無しさん:2005/11/28(月) 18:13:08
>>718
sageくらい小学生でも知ってるが・・・
722デフォルトの名無しさん:2005/11/28(月) 18:14:53
723デフォルトの名無しさん:2005/11/28(月) 18:17:31
>>721
社会に出たほうがいいよ。
724デフォルトの名無しさん:2005/11/28(月) 18:30:53
#define N (20)
int main(int argc, char* argv[])
{
char buf[5];
int guess_number,lower,higher;
printf("Think A number from 0 to %d.\n" , N);
lower=0; higher=N;
do{
guess_number = (lower + higher)/2;
printf("I guess %d , how about it is? ->" , guess_number);
fgets(buf,sizeof(buf),stdin);
switch (buf[0]){
case 'L':higher = guess_number-1; break;
case 'H':lower = guess_number+1; break;
}
}while(buf[0]!='C');
printf("Number = %d\n",guess_number);
return 0;
}
725デフォルトの名無しさん:2005/11/28(月) 18:32:49
>>723
「ここに書き込んでる時点で」って言いたいが、どいつもこいつも揃って馬鹿ばっかだな(pgr
726デフォルトの名無しさん:2005/11/28(月) 18:33:40
>>711だな。
727デフォルトの名無しさん:2005/11/28(月) 18:34:52
>>725 ちょっとだけディスプレイの電源を切ってごらん。
もう一人馬鹿が見えるよwww
728デフォルトの名無しさん:2005/11/28(月) 19:03:21
>>715
仕様に沿ってないようだけど>>269
729sage:2005/11/28(月) 19:37:21
Qに最初なかった変数が一度現れて、また消えたときにプログラムを
終了させるには、どのような終了条件にすればいいですか

730デフォルトの名無しさん:2005/11/28(月) 20:00:35
>>715
>>592

いままで3回くらい同じ課題があげられて
そのつど何人かが答えを提示してるのに
731デフォルトの名無しさん:2005/11/28(月) 20:01:47
意味が解らない。っていうか宿題じゃねーだろ、消えろ。
もしくは>>1を読んで半年ROMれ。
732デフォルトの名無しさん:2005/11/28(月) 20:02:31
>>730
ヒント:一人じゃない。
733デフォルトの名無しさん:2005/11/28(月) 20:06:34
ヒント  とかいって馬鹿じゃねーのおめー
734デフォルトの名無しさん:2005/11/28(月) 20:19:57
ごめんなさい。わかりました。すみませんでした。本当に・・・
735デフォルトの名無しさん:2005/11/28(月) 20:58:15
所詮2ちゃんねる限度を超えて面倒な問題は誰もやらないことを理解しろ
736デフォルトの名無しさん:2005/11/28(月) 20:59:54
面倒ってほどの問題でもないし実際いっぱい答え出てるじゃん
何がNGなの?
737デフォルトの名無しさん:2005/11/28(月) 21:05:45
単純にしつこいと嫌気さすだけだろ
738デフォルトの名無しさん:2005/11/28(月) 21:28:15
>>702
return 0;抜けとる。
739デフォルトの名無しさん:2005/11/28(月) 21:42:52
C言語の最初の授業でreturnなんか書いた記憶ないからおそらく書いたら逆にぁゃιぃ
740デフォルトの名無しさん:2005/11/28(月) 21:44:38
釣れますか?
741デフォルトの名無しさん:2005/11/28(月) 21:53:56
整数を文字に変換する関数を作る。
引数は5つで変換元整数、変換先、桁数、16進表示or10進表示か、先頭の0を表示するか。
sprintfで同じことができますが、自作しろとのことです。
お願いします。
742デフォルトの名無しさん:2005/11/28(月) 21:54:20
>>1を読め。
743デフォルトの名無しさん:2005/11/28(月) 21:57:45
つーかさー、>>741だけじゃなく
過去に類似する、または同一の課題が腐るほど存在した、
あるいはソートのように検索するだけで答えがでるようなものに
いちいち答えてたらきりがないよな

テンプレでもありゃいいのに
744デフォルトの名無しさん:2005/11/28(月) 22:06:08
>>742
そのアンカーの先「E:数字9桁-」が見えるんだが何だ?
745通りすがり:2005/11/28(月) 22:17:42
東京電機大学以外の理工系大学の問題はそれほど出てこないけど
東京電機大学の課題ってそんなに鬼畜なの?
746デフォルトの名無しさん:2005/11/28(月) 22:26:05
こういうところで聞くやつは交友関係が乏しいんだろうな

747デフォルトの名無しさん:2005/11/28(月) 22:29:33
>>745
東京電機大ってこれのことか?
ttp://edu.net.c.dendai.ac.jp/ad/1/2005/kadai.html

俺は国立の情報系学部に行ってるが、こんなつまらんのよりよっぽどややこしいのばっかりだ
あれだろ、東京ryの奴らが馬鹿ばっかなんだろ
748デフォルトの名無しさん:2005/11/28(月) 22:49:28
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1166.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1167.txt
http://vista.x0.com/img/vi12907.gif
http://vista.x0.com/img/vi12908.gif
http://vista.x0.com/img/vi12909.gif
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005/12/1

よろしくお願いします
749デフォルトの名無しさん:2005/11/28(月) 22:57:04
これか
【原田@J】東京電機大学part31【は2ちゃんねらー】
http://school4.2ch.net/test/read.cgi/student/1117981232/
750デフォルトの名無しさん:2005/11/28(月) 23:20:22
751デフォルトの名無しさん:2005/11/28(月) 23:35:50
原○タソのエロ画像キボンヌ
752デフォルトの名無しさん:2005/11/28(月) 23:37:34
>>748
とりあえず1167のほうは生めてやったぞ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1168.txt
753デフォルトの名無しさん:2005/11/28(月) 23:39:10
さっそく間違いハケーン
void change_board( char** board, int size, Coordinates input )
{
board[input.j][input.i]^=1;
if(input.j>0)board[input.j-1][input.i]^=1;
if(input.i>0)board[input.j][input.i-1]^=1;
if(input.j<size-1)board[input.j+1][input.i]^=1;
if(input.i<size-1)board[input.j][input.i+1]^=1;
}
754デフォルトの名無しさん:2005/11/29(火) 00:01:08
うはwwwwwwwwww課題必死中乙wwwwwwwwwwww
755デフォルトの名無しさん:2005/11/29(火) 00:12:15
もう年末だってのに確かに課題の程度は低いものが多いな
俺がかよってた大学だと2年の終わりにCでスモールコンパイラ作らされたぞ
756デフォルトの名無しさん:2005/11/29(火) 00:42:12
ここにあるのは専門学校の宿題ばかりですよ
757デフォルトの名無しさん:2005/11/29(火) 00:43:11
>>755
どこの大学?つか教授誰?コンパイラやりたい高校生にはマジ欲しい情報だと。
758694:2005/11/29(火) 00:45:14
>>696
>>698
授業中にはできませんでしたが、自分のために勉強になります。
本当にありがとうございました。
759デフォルトの名無しさん:2005/11/29(火) 00:48:03
>>755
そういや俺の所も2年の最後か3年初めどっちかで
CでPascalのコンパイラ(といってもサブセットだが)を作らせるとか言ってたな
まだ1年の俺には関係ない話だがw
760デフォルトの名無しさん:2005/11/29(火) 04:42:46
1] 授業単元: プログラミング演習
[2] 問題文:
"end"が入力されるまで繰り返し文字列の入力を受け付ける。入力された文字列のうち,
長さが4 以上7 未満のものを配列に格納して,最終的にその配列の全要素を出力せよ。

一回作ってみたソース
http://up.viploader.net/mini/src/viploader0820.txt.html
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++
 [3.3] 言語: C
[4] 期限: 11月29日
[5] その他:
コンパイラは通るのですが問題が発生したためa.exeを終了します。ご不便をおかけして申し訳ありませんって出ます




761デフォルトの名無しさん:2005/11/29(火) 04:59:29
>>760
jを初期化してません。
762761:2005/11/29(火) 05:01:37
>>761
あとj++の位置をstrcpyのあとにしたほうがよいです。
763デフォルトの名無しさん:2005/11/29(火) 05:14:17
>>761 おお!見落としてましたorz
確かにj++の位置を変えたほうがいいですね
おかげさまで出来ました。ありがとうございます!
夜遅くにやるもんじゃないっすねぇ
764デフォルトの名無しさん:2005/11/29(火) 05:15:58
イテレータに入っている
文字データを文字配列に渡すにはどうすれば
いいんでしょうか?
coutで画面には出せるんですが・・・・
765デフォルトの名無しさん:2005/11/29(火) 05:36:09
それって宿題?
766デフォルトの名無しさん:2005/11/29(火) 06:13:44
>>757
大学じゃなくて専門じゃないの?
大学だと情報系でも一般教養とかうざったいからあんまし授業時間とれないし
767デフォルトの名無しさん:2005/11/29(火) 10:11:13
東京電機大の場合、ハードの中に中途半端にソフトがあるから十分授業数が足りないように見える。
レベルが低いのに授業を演習も十分にやらないで先に進めるから学生もついてこれないわけだ
教師も大変だね
768デフォルトの名無し:2005/11/29(火) 10:13:29
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):二分検索
@10個数字を取り込む
A検索したい数を入れる
B二分検索
C数字○は、○個目にあると表示
 なければ、エラー表示
          終了
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual c++ 6.0
 [3.3] 言語: c言語
[4] 期限: 11月30日
[5] その他の制限:   配列かリストで実現してください。
二分検索お願いします。
769デフォルトの名無しさん:2005/11/29(火) 11:31:23
二分探索なw
   ~~~~
770デフォルトの名無しさん:2005/11/29(火) 12:09:48
77198:2005/11/29(火) 13:04:49
>>766
情報工学とか情報科学の学部なら簡単なコンパイラぐらい作るだろ。
772768:2005/11/29(火) 13:25:53
770 見れないんですが……
773768:2005/11/29(火) 13:29:42
770さんソースをメールで くれませんか? [email protected] こちらにおねがいします
774たべちゃう:2005/11/29(火) 13:30:06
[1] 情報処理実習
[2] x^2^sinx=0の解は0以外にx=0.1から1の間にある。
  これを10^-6の精度で解の存在範囲を示せ。
(解法は中点を次々に取り、範囲を縮める方法)
[3] 環境
  OS:UNIX
  言語:C
[4] 期限:17年12月2日(金)
[5] インクルード関数はstdio,math のみ。

おねがいします。
775たべちゃう:2005/11/29(火) 13:31:21
x^2-sinx=0の間違いでした。
776197:2005/11/29(火) 13:43:44
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
>>197の派生で
最後の行を、配列で呼んでポインタで受け取るやり方を教えてください
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:2005年11月30日
[5] その他の制限:
おねがいします
777デフォルトの名無しさん:2005/11/29(火) 14:04:50
777get
778デフォルトの名無しさん:2005/11/29(火) 14:09:43
>>776 どこのコードの「最後の行」?
>>198なら
配列a[]で呼んで、char*aで受け取っているように見えるが。
779デフォルトの名無しさん:2005/11/29(火) 14:12:22
>>774
#include <stdio.h>
#include <math.h>
double f(double x){ return x * x - sin(x); }
int main(void) {
double left, right, middle;
double eps = 1e-6; // 精度
for( left = 0.0, right = 1.0 ; right - left >= eps ; ) {
printf("[%.6f,%.6f]を調査\n",left, right);
middle = (left + right) * 0.5;
if( f(right) * f(middle) > 0 ) right = middle else left = middle;
}
middle = (left + right) * 0.5;
printf("解: x=%.6f (f(x)=%.6f)\n", middle, f(middle));
return 0;
}
780デフォルトの名無しさん:2005/11/29(火) 14:17:04
>>774
#include <stdio.h>
#include <math.h>

double f(double x){ return x*x-sin(x); }

int main(int argc, char* argv[])
{
double l=0.1, r=1.0 , c;
do{
c = (l + r) / 2;
//printf("x = %f , f(x) = %f \n" , c , f(c) );
if( f(c) < 0) l=c; else r=c;
}while( fabs(f(c)) > 1E-6);
printf("x = %f , f(x) = %f" , c , f(c) );
return 0;
}
781たべちゃう:2005/11/29(火) 14:29:28
>>779
ありがとうございます。
僕自身はこれで納得いくのですが、どうも
授業では関数の定義をやっていないので、
できればmain関数のみでできないでしょうか?
このソースをヒントに作り変えているところですが。
お願いします。
782たべちゃう:2005/11/29(火) 14:34:26
すみません勘違いです。
これで完璧です。
ありがとうございました。
783780:2005/11/29(火) 14:34:52
うはwww 俺スルーされたwwww

先生に「関数って自分で定義出来ませんか?」って聞いてしまえ。
もしくは本に載っていたので使ってみましたで。
784780:2005/11/29(火) 14:52:05
>>768
int i,j;
int l,r,c;
int a[10] = { 3 , 15, 24, 14 , 76 , 39 , 48 , 52 , 6 , 10};
int b;
/* Sort */
for(i=0;i<9;i++){
for(j=i+1;j<10;j++){
if(a[i]>a[j]){ int t = a[i];a[i]=a[j];a[j]=t; }
}
}
for(i=0;i<10;i++){printf ("%d ",a[i] ); } printf("\n");
/* Find */
scanf("%d",&b);
for(l=0, r=9 , c=(l+r)/2; a[c]!=b; c=(l+r)/2){
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if(l==r) break;
if(a[c]<b) l=c+1; else r=c-1;
}
if( l==r && a[l]!=b){
printf("Not found \n");
}else{
printf("%d - %d - %d \n",a[l],a[c],a[r]);
}
785784 ◆RyqPmHPleY :2005/11/29(火) 15:24:39
【質問テンプレ】
[1] 授業単元:プログラミング演習(ポインタ)
[2] 問題文(含コード&リンク):
次のフォーマットで格納されたバイナリファイルを読み込み、標準出力にその内容を書き出すプログラム(ファイル名 readBinDat.c )を作成せよ。

国名(40個のchar型(40バイト))
面積(double型(8バイト))
人口(double型(8バイト))
GDP(double型(8バイト))

の順に記録されたデータの繰り返し、国の数は256を越えない。
入力ファイル名はコマンドラインの引数として受け取ること。
入力ファイルの例として、country.bin.datを使用せよ。
[3] 環境
 [3.1] OS: Vine Linux
 [3.2] コンパイラ名とバージョン: gcc 2.9
 [3.3] 言語: C
[4] 期限: 2005年12月1日17:20まで

バイナリーファイルはうpロダにうpします。
もしよろしければ御協力お願いします。
786デフォルトの名無しさん:2005/11/29(火) 15:27:09
>>785 データうp
787785 ◆DxAEe3f6tw :2005/11/29(火) 15:27:59
785の間違いでしたorz
788785 ◆DxAEe3f6tw :2005/11/29(火) 15:34:21
dat形式をうpロダにうpできませんorz
拡張子変換をしたいけど窓しか使ったこと内のでできないっすorz
789デフォルトの名無しさん:2005/11/29(火) 15:36:46
lhasaとかlhacaとかで圧縮してZIPやLZHにしてくれ。
ソースは出来たので、動作確認したい。
790785 ◆DxAEe3f6tw :2005/11/29(火) 15:38:23
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1170.txt
にバイナリーファイルをうpしますた。
txt形式なので拡張子をdatにしてください。
よろしくおねがいします。
791デフォルトの名無し:2005/11/29(火) 15:44:45
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):二分探索
@10個数字を取り込む
A検索したい数を入れる
B二分探索
C数字○は、○個目にあると表示
 なければ、エラー表示
          終了
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual c++ 6.0
 [3.3] 言語: c言語
[4] 期限: 11月30日
[5] その他の制限:   配列かリストで実現してください。
二分探索お願いします。 前の二分探索木になってて二分探索してほしいんです
792デフォルトの名無しさん:2005/11/29(火) 15:48:28
FILE *fp;
char name[40];
double area, population , GDP;
int n;

fp=fopen(argv[1],"rb");
if(fp==NULL){return 1;} /* file cannot open */
for(n=0;n<256;n++){
fread(&name,sizeof(char),40,fp);
fread(&area,sizeof(double),1,fp);
fread(&population,sizeof(double),1,fp);
fread(&GDP,sizeof(double),1,fp);
if(feof(fp)) break;
printf("%d - %-40s %10.2lf %8.0lf %10.0lf\n",n,name,area,population,GDP);
}

fclose(fp);
return 0;
793デフォルトの名無しさん:2005/11/29(火) 15:49:47
794デフォルトの名無しさん:2005/11/29(火) 15:52:33
>>785
>>792
一応補足。printf("-40s")は文字列を表示するとき左詰でやるということ。
あと、本当はfreadの返り値でチェックするのが望ましいけど、
面倒なので最後にチェック。
795デフォルトの名無しさん:2005/11/29(火) 16:00:20
難しい宿題はスルーするんですね、情けない
796デフォルトの名無しさん:2005/11/29(火) 16:02:45
>>795
どの宿題??

ばっちこーーい
797デフォルトの名無し:2005/11/29(火) 16:12:15
791して(´..`)
798デフォルトの名無しさん:2005/11/29(火) 16:13:44
>>784じゃだめなのか?じゃちょっとまて。
799デフォルトの名無しさん:2005/11/29(火) 16:16:17
・・・ちょっとまて、微妙な気がする。

二分探索だと数字をソートしないといけないのだが、
「n番目」を表示するのはソート前?だったら二分探索自体いらない罠。
800デフォルトの名無しさん:2005/11/29(火) 16:19:41
int i,j;
int l,r,c;
int a[10];
int b;
/* Input*/
for(i=0;i<10;i++){
scanf("%d" , &a[i]);
}
/* Sort */
for(i=0;i<9;i++){
for(j=i+1;j<10;j++){
if(a[i]>a[j]){ int t = a[i];a[i]=a[j];a[j]=t; }
}
}
for(i=0;i<10;i++){printf ("%d ",a[i] ); } printf("\n");
/* Find */
scanf("%d",&b);
for(l=0, r=9 , c=(l+r)/2; a[c]!=b; c=(l+r)/2){
if(l==r) break;
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if(a[c]<b) l=c+1; else r=c-1;
}
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if( l==r && a[l]!=b){
printf("%dは見つかりませんでした\n",b);
}else{
printf("%dは小さいほうから数えて%d番目の要素です\n",b,c+1);
}
return 0;
801デフォルトの名無し:2005/11/29(火) 16:22:09
最終表示するときに 検索した数字となん個目か表示してほしいです
802デフォルトの名無しさん:2005/11/29(火) 16:25:46
>>801 そういうのを言ってもらえると対応できるんだけど...
これは元の数列での何個目かも表示するバージョン。

int main(int argc, char* argv[]){
int i,j; int l,r,c;
int a[10],a2[10]; int b;
/* Input*/
for(i=0;i<10;i++){
scanf("%d" , &a[i]); a2[i]=i;
}
/* Sort */
for(i=0;i<9;i++){
for(j=i+1;j<10;j++){
if(a[i]>a[j]){ int t = a[i];a[i]=a[j];a[j]=t; t=a2[i];a2[i]=a2[j];a2[j]=t;}
}
}
for(i=0;i<10;i++){printf ("%d ",a[i] ); } printf("\n");
/* Find */
scanf("%d",&b);
for(l=0, r=9 , c=(l+r)/2; a[c]!=b; c=(l+r)/2){
if(l==r) break;
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if(a[c]<b) l=c+1; else r=c-1;
}
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if( l==r && a[l]!=b){
printf("%dは見つかりませんでした\n",b);
}else{
printf("%dは小さいほうから数えて%d番目の要素です\n",b,c+1);
printf("%dは元の数列では%d番目の要素です\n",b,a2[c]+1);
}
}
803791:2005/11/29(火) 16:27:21
800さん 二分探索ですか? 今ケータイなんで 確認できなくて……
804デフォルトの名無しさん:2005/11/29(火) 16:29:56
・・・「二分探索です」としか答えられないw
家帰ってから確認してください。
数字の配列だけ使っているので、多分大丈夫ですよ。
805デフォルトの名無しさん:2005/11/29(火) 16:32:46
10取り込むとき 前の数よりちいさいとはじいてエラー表示も忘れてました(´..`)
806デフォルトの名無しさん:2005/11/29(火) 16:33:37
・・・殺意が芽生えてきたおwww
807デフォルトの名無しさん:2005/11/29(火) 16:34:39
数字10個取り込むときでした
808785:2005/11/29(火) 16:35:30
携帯からカキコします。%lfを%fにかえたら実行できました。
ありがとうございました(_ _*)_ _*)
もう一つあるのですがもう少し考えてみます。わからなかったらまたカキコさせてください(_ _*)_ _*)
809デフォルトの名無しさん:2005/11/29(火) 16:37:35
ごめんなさい(PД`q) 10個取り込むとき前の数よりちいさいとはじいてエラー表示もしてまたいれなおしです(PД`q) やってくれたら お礼します(^ε^)-☆Chu!!
810デフォルトの名無しさん:2005/11/29(火) 16:39:41
とりあえず、>>80は日本語を勉強してきてくれ。意味が解らない。
811デフォルトの名無しさん:2005/11/29(火) 16:46:14
ご、ごめんなさい>>80さんwwww

int main(int argc, char* argv[])
{
int i,j;int l,r,c;
int a[10]; int b;
printf("%3d ->",0); scanf("%d", &a[0]);
for(i=1;i<10;i++){
printf("%3d ->",i); scanf("%d" , &a[i]);
if(a[i-1]>a[i]){
printf("前の数字よりも大きい数値を指定してください\n");
i--;
}
}
/* Find */
scanf("%d",&b);
for(l=0, r=9 , c=(l+r)/2; a[c]!=b; c=(l+r)/2){
if(l==r) break;
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if(a[c]<b) l=c+1; else r=c-1;
}
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if( l==r && a[l]!=b){
printf("%dは見つかりませんでした\n",b);
}else{
printf("%dは小さいほうから数えて%d番目の要素です\n",b,c+1);
}
}
812デフォルトの名無しさん:2005/11/29(火) 16:48:18
ということで、お礼よこせ。
813デフォルトの名無しさん:2005/11/29(火) 16:49:18
>>808
おぉぉーけーーい。ばっちこーい!
814809:2005/11/29(火) 16:56:13
具体的に何をお礼すれば (^ε^)-☆Chu!!
815デフォルトの名無しさん:2005/11/29(火) 16:57:09
具体的なお礼は>>820が指定。
816809:2005/11/29(火) 17:54:19
http://red.ap.teacup.com/redsun/
お礼に私のブログ・・。
817デフォルトの名無しさん:2005/11/29(火) 17:58:14
ちっ、女かつまらん。
818デフォルトの名無しさん:2005/11/29(火) 18:23:46
2A+3B+4C-5D=0
5A+2B-2C+D=0
3A+B-C+D=0
7A+2B+C-3D=0
この連立一次方程式をガウス・ザイデル法で解くプログラムの作成
819785 ◆ONOrs/34Aw :2005/11/29(火) 18:32:56
>>785です。先ほどはありがとうございましたm(__)m
今までもう一つの課題を考えていたのですが何もできなかったので助けていただけるとうれしいです。
[1] 授業単元: プログラミング演習(ポインタ)
[2] 問題文(含コード&リンク):
次のフォーマットで格納されたバイナリファイルを読み込み、人口密
度順にソートして、その内容を同じ形式のバイナリファイルに書き出
すプログラム(ファイル名 sortBinDat.c )を作成せよ。

国名(40個のchar型(40バイト))
面積(double型(8バイト))
人口(double型(8バイト))
GDP(double型(8バイト))

の順に記録されたデータの繰り返し、国の数は256を越えない。

入力ファイル名、出力ファイル名はこの順にコマンドラインの引数と
して受け取ること。
入力ファイルの例として、country.bin.dat を使用せよ。
国名等のデータを格納するメモリ領域は動的に確保すること。
[3] 環境
 [3.1] OS: Vine Linux
 [3.2] コンパイラ名とバージョン: gcc 2.9
 [3.3] 言語: C
[4] 期限: 2005年12月1日17:20まで
バイナリーファイルは>>790のURLです。
もしよろしければ御協力お願いします。
820デフォルトの名無しさん:2005/11/29(火) 18:32:57
>>1を読んでから出直しな。
821デフォルトの名無しさん:2005/11/29(火) 18:44:05
>>717
てかさ、本人じゃねーだろwww
822デフォルトの名無しさん:2005/11/29(火) 19:01:02
>国名等のデータを格納するメモリ領域は動的に確保すること
やばい・・・スルーしましたw ちょっとまって
823デフォルトの名無しさん:2005/11/29(火) 19:10:00
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1172.txt

構造体+qsortも使ってるけど大丈夫?
824デフォルトの名無しさん:2005/11/29(火) 19:14:22
一応解説。
「C言語 ファイルサイズ 取得」でぐぐると
上から二つ目の908に「ファイルサイズの取得」がある。

でもって、ファイルサイズ/構造体のサイズ=データ件数のはず。
fseekを調べたらSEEK_ENDで最後に移動できて、SEEK_SETで先頭に移動できるのを発見。
まあこんなとこ。
825デフォルトの名無しさん:2005/11/29(火) 20:41:09
>>818
AX=0 よって解なし。
826デフォルトの名無しさん:2005/11/29(火) 20:49:59
>>825 もうちょっと説明すると...
AX=b においてb=0の形のものを斉次形と呼ぶ。
この際、解の重なりがありうるので、一意に決定することが出来ない。
よってこの解をガウス・サイデル法で求めるのは不可能である。
827むう:2005/11/29(火) 21:41:19
[1] 授業単元: TCP/IP
[2] 問題文(含コード&リンク):サーバから送られてくるデータは0,1。これをクライアント側で3×3配列に[0][0]=1,[0][1]=1,[0][2]=0,[1][0]=0の順にデータを
格納するプログラムを作る。今回はサーバ側からデータが送られてきたと仮定してプログラムを作成する。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VW BC++
 [3.3] 言語: C
[4] 期限: [無期限]
[5] 制限: Winsockを必ず使う。
以上、よろしくお願いします
828デフォルトの名無しさん:2005/11/29(火) 21:45:19
ここAPIスレじゃないから
829デフォルトの名無しさん:2005/11/29(火) 21:52:48
>>825-826
線型代数の本を読み直しましょう.

A について斉次方程式 Ax = 0 の解は rank(A) だけの余自由度を持って「必ず」存在する.解なしなんてのは絶対にありえない.
特にこの問題の A は正方で,det(A) ≠ 0 即ち rank(A) = n だから自由度 0 の解,つまり一意解が存在(x = 0).

あと,ガウス法は解がなす線型空間を求める解法だから,ちゃんと組めば自由度付きで解が求まるよ.
830826:2005/11/29(火) 22:04:06
>>825は嘘だなw
で、自由度をどうやってプログラム中であらわすんだ?
とりあえず四の五の言わずにプログラムを出してくれ。
831デフォルトの名無しさん:2005/11/29(火) 22:35:12
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):
スケジュールを入力、閲覧、日付順に並べ替えするプログラムを作りなさい。
スケジュールはsche.datに入力すること
全ての機能はユーザー定義関数で個別に分け行うこと。mainは各機能に飛ぶのみ
スケジュールの書式は
年月8桁 予定20桁半角英数字 コメント半角英数字10桁 時間半角英数字4桁とする
余力のあるものは時間を取得し今現在の日付に何があるかmain画面に表示させなさい
並べ替えは演習のため
mainでレコード数を取得→何らかの手段を使い並べ替えの関数に移動→レコードを構造体の配列で管理し入れ替える
とする
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ 5.5
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 2005年12月02日

入力閲覧はあっさりできましたが時間取得、並べ替えの最後の部分がうまくいきません。
どうかお願いします。
832831 ◆CmLj3PLs4E :2005/11/29(火) 22:37:42
トリップ忘れたのでつけました。スレ汚しすいません
833デフォルトの名無しさん:2005/11/29(火) 22:39:15
1] 授業単元: プログラミング演習
[2] 問題文: 除算は,減算を繰り返すことによって実現できる。例えば,6 / 2 は6 から2 を3 回引け
るということである。これを利用して,2 つの整数a とb を引数としてとり,a をb で割っ
た結果を返す関数を作成せよ。ただし,a あるいはb に負の数が入力された場合にも正しく
動くことを確認すること。テストは,a とb の正負全ての組み合わせに対して行うこと。
やりかけソース
http://up.viploader.net/mini/src/viploader0834.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++
 [3.3] 言語: C
[4] 期限: 11月30日 0:00
[5] その他:








834デフォルトの名無しさん:2005/11/29(火) 22:43:20
>>831 うp。
835デフォルトの名無しさん:2005/11/29(火) 22:44:33
>>833
scanf("%d%d",&divis(a,b));
ってなんですか?
836デフォルトの名無しさん:2005/11/29(火) 22:50:50
ガウス・ザイデル法ってのは、反復法の事かな?
837デフォルトの名無しさん:2005/11/29(火) 22:51:01
>>833
(オリジナルを尊重)

int divis(int a,int b){
int i , j = 0;
if ((a < 0 && b > 0) || (a > 0 && b < 0)) j = 1;
a = abs(a);
b = abs(b);
if (b == 0) return(0);
for(i = 0 ;; i++){
a = a - b;
if (a < 0) break;
}
if (j == 1)i *= -1;
return(i);
}

int main(void){
int a, b, i;
printf("a÷bを計算します\n");
printf("a、b順に入れてください");
scanf("%d%d", &a, &b);
i = divis(a, b);
printf("割った結果;商=%d\n",i);
return(0);
}
838デフォルトの名無しさん:2005/11/29(火) 22:53:25
>>833
if(a<0||b>0 && a>0||b<0){
j=1;
}
でなくて
if(a<0||b>0 && a>0||b<0){
j=1;
} else {
j=0;
}

int j; でなくてint sign;を使って
sign = a*b<0? -1: 1;
として、最後の
if(j==0){
i=-1*i;
}
をi *= sign;
としたほうがエレガント。

839デフォルトの名無しさん:2005/11/29(火) 22:56:00
>>835-837 うわぁ…とんでもない間違いしてましたorz
ちょっと恥ずかしい//
840デフォルトの名無しさん:2005/11/29(火) 22:59:00
>>838 なるほど、そういう書き方もあるんですね
ありがとうございます
841デフォルトの名無しさん:2005/11/29(火) 23:05:45
>>833 オリジナルを木っ端微塵。

#include <stdio.h> #include <stdlib.h>
int divis(int a,int b){
int i;
if(a<0 && b<0){ return divis(-a,-b); }
if(b==0) { return 0; }
if(a * b < 0) { return -1; }
for(i=0;a!=0;i++){ a-=b; if(a<0) return -2; }
return i;
}

int main(void){
int a,b,c;
printf("a÷bを計算します\n a、b順に入れてください");
scanf("%d%d",&a,&b);

c = divis(a,b);
switch(c){
case 0:printf("0で除算しようとしました\n"); break;
case -1:printf("割り算の左右の項の符号が一致しません\n"); break;
case -2:printf("割り切れませんでした\n"); break;
default: printf("割った結果;商=%d\n",divis(a,b)); break;
}
return(0);
}
842デフォルトの名無しさん:2005/11/29(火) 23:06:09
どうでもいいけど、
i = -1 * i;

i = -i;
と書くべきだな。コンパイラによっては余計な演算が一個減らせる。
843デフォルトの名無しさん:2005/11/29(火) 23:07:15
default: printf("割った結果;商=%d\n",divis(a,b)); break;

default: printf("割った結果;商=%d\n",c); break;
844831 ◆yhhkigCuTE :2005/11/29(火) 23:09:40
すいません、datファイルの例をうpしました。txtになっているので申し訳ありませんが書き換えてください
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1173.zip
作りかけのものは学校に忘れてしまい、なんとか並び替えと時間だけでもやろうとしています。
構造体名は自由です。変数も条件としてあったのですが書き加えになるのでご迷惑になると思います。一応datに同梱します

お手数かけますがお願いします
845デフォルトの名無しさん:2005/11/29(火) 23:13:38
馬鹿に付き合うと苦労するよな
846デフォルトの名無しさん:2005/11/29(火) 23:17:01
#include <stdio.h>
#include <stdlib.h>

int divis(int a,int b){
int i;
if(a < 0) { return -divis(-a,b); }
if(b < 0) { return -divis(a,-b); }
if(b==0) { return 0; }
for(i=0;a!=0;i++){
a-=b;
if(a<0) return 0;
}
return i;
}

int main(void){
int a,b,c;
printf("a÷bを計算します\n a、b順に入れてください");
scanf("%d%d",&a,&b);
switch((c = divis(a,b))){
case 0:printf("除算エラー\n"); break;
default: printf("割った結果;商=%d\n",c); break;
}
return(0);
}
847デフォルトの名無しさん:2005/11/29(火) 23:19:04
>>845 お前とかな
848833:2005/11/29(火) 23:25:31
>>837のif文とかの大括弧はいらないんですか?
一応出来たんですが837がちょっと気になりました
849デフォルトの名無しさん:2005/11/29(火) 23:28:10
>>837ではないが、基本的に付けるほうが確実。
for() 命令1; ってやってて、命令2を足そうとして
for() 命令1; 命令2; とかやってバグだすよかまし。
850デフォルトの名無しさん:2005/11/29(火) 23:28:10
>>848
ifのあと1文だけなら要らない
そもそもifの後は1文処理ってのからきて、
複数文処理したい時に、じゃあ{ }使って
ブロック化し、1文と見なしちゃおう
という発想
851849:2005/11/29(火) 23:28:58
ケコーン...
852デフォルトの名無しさん:2005/11/29(火) 23:32:09
>>849-850 なるほど、そういうことなんですか
まだまだ勉強が足りないっすねぇ。。
アルゴリズムの勉強をもうちょっとした方がよさそう
853デフォルトの名無しさん:2005/11/29(火) 23:33:26
アルゴリズムじゃなくてコードの書き方ですよ、お客さん。
85498:2005/11/29(火) 23:35:13
俺は1文でも括弧つけるけどな。
855デフォルトの名無しさん:2005/11/29(火) 23:52:13
>>853 毎日一つプログラム作って鍛錬しますorz
856デフォルトの名無しさん:2005/11/29(火) 23:55:16
>>855
じゃあ、俺の代わりにこのスレで宿題やっててくれ。俺はもう練る。
857デフォルトの名無しさん:2005/11/29(火) 23:58:51
ノシ
858デフォルトの名無しさん:2005/11/30(水) 00:05:54
>>855
シフト管理システム作ってくれ
859デフォルトの名無しさん:2005/11/30(水) 00:06:58
>>857 ノシ

・・・あ、>>831忘れてた。誰かおねが
860デフォルトの名無しさん:2005/11/30(水) 00:07:23
            ∧,,∧
           ( ´・ω・)
       ____(____)___
      / \       ___\
     .<\※ \____|\____ヽ
        ヽ\ ※ ※ ※| |====B=|
        \`ー──-.|\|___l__◎..|ヽ
          ̄ ̄ ̄ ̄| .| ̄ ̄ ̄ ̄|
               \|        |〜

            _∧,,∧
       ___( ( ´・ω・)___ フゥ・・・
      / \    ̄ ̄ ̄__\
     .<\※ \____|\____ヽ
        ヽ\ ※ ※ ※| |====B=|
        \`ー──-.|\|___l__◎..|ヽ
          ̄ ̄ ̄ ̄| .| ̄ ̄ ̄ ̄|
               \|        |〜
          _________
         /             /
         /             /
        /             /
        /             /   バタンッ!
       /_________/
      / \ ※     ※__\
     .<\※ \_____※___|\____ヽ
        ヽ\ ※ ※ ※| |====B=|
        \`ー──-.|\|___l__◎..|ヽ
          ̄ ̄ ̄ ̄| .| ̄ ̄ ̄ ̄|
               \|        |〜
861829:2005/11/30(水) 00:22:52
>>830
「四の五の言わず……」とか喧嘩腰で言われるとなんかアレですが,
口を出したのはこっちなので一応やりました:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1174.cpp

見ればわかると思うけれど,自由度の表し方なんていくらでもあって,
例えばその変数を記号処理的に残してやればok.
特にガウス法は >>829 で言ったように解空間の基底を取り直してるだけだから,
前進消去+交代消去で消えない基底を自由変数と思えばそれだけで十分:

あ,>>818 はこれを参考にしてがんばってください.
862デフォルトの名無しさん:2005/11/30(水) 00:50:40
今日は賑わってんなーと思って除いてみたら
なんかちょっと荒れてんな
863デフォルトの名無しさん:2005/11/30(水) 01:37:11
一行分の文字列を入力し、次に数字nを入力すると、文字列がn番目から表示される
って問題の解答例を教えてくれませんか?
864デフォルトの名無しさん:2005/11/30(水) 01:37:42
>>863
>>1のテンプレに従ってください。
865デフォルトの名無しさん:2005/11/30(水) 01:49:46
>>864
あ、すいません
[1]授業単元:プログラミングU
[2]問題文:一行分の文字列を入力し、次に数字nを入力すると、文字列がn番目から表示される
[3]環境
 [3.1]OS:Windows
 [3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト
 [3.3]言語:C
[4]期限:今日中
お願いします
866デフォルトの名無しさん:2005/11/30(水) 01:59:04
>>865
#include<stdio.h>

int main(void)
{
char *c;
int i,n;
printf("文字列入力:");
scanf("%s",c);
printf("何番目表示?:");
scanf("%d",&n);
for(i=1;i<n;i++)
c++;
printf("%d番目は%cです\n",n,*c);
return 0;
}

例外は一切考えてないぞ
867デフォルトの名無しさん:2005/11/30(水) 02:00:29
あっ悪い問題読み違えたw
868デフォルトの名無しさん:2005/11/30(水) 02:06:31
#include<stdio.h>

int main(void)
{
char *c;
int n;
printf("文字列入力:");
scanf("%s",c);
printf("何番目から表示?:");
scanf("%d",&n);
c += n-1;
while(*c!='\0')
{
printf("%c",*c);
c++;
}
puts("");
return 0;
}

例によって例外は考えてない
869デフォルトの名無しさん:2005/11/30(水) 02:06:34
>>867
いえいえ
"HELLO"って文字列を入力した場合、数字2を入力すると"LLO"
みたいになる感じです
870デフォルトの名無しさん:2005/11/30(水) 02:10:23
>>869
じゃあ>>868のc+=n-1→c=nにでも変更しといて
871デフォルトの名無しさん:2005/11/30(水) 02:12:17
寧ろ
c += n-1;
以下を、
printf("%s\n", c + n);
return 0;
}
に。
872デフォルトの名無しさん:2005/11/30(水) 02:16:11
マジだ初めて知った Σ(゚д゚lll)

ちなみにあんまり長いの入れるとボロでるよ (´σ `)
873デフォルトの名無しさん:2005/11/30(水) 02:17:25
ちょっと待て、それ以前に>868は重大なバグを抱えているぞ。
874デフォルトの名無しさん:2005/11/30(水) 02:18:16
>>865
ただし1023文字まで。
#include <stdio.h>
int main(void) {
    char buf[1024];
    int n;
    scanf("%1023[^\n]", buf);
    scanf("%d", &n);
    printf(buf + n);
}

>>866-868,870-871
それでは領域を確保していない。
875デフォルトの名無しさん:2005/11/30(水) 02:19:02
>>868
char *c;
scanf("%s",c);
はまずいべ
876デフォルトの名無しさん:2005/11/30(水) 02:20:12
あーもう、
int main(void)
{
char c[100];
int n;
printf("文字列入力:");
scanf("%99s",c);
printf("何番目から表示?:");
scanf("%d",&n);
printf("%s\n", c + n);
return 0;
}
にでもしとき。

>>874
それは流石に、%を含む文字列を入力されるとまずい。
877デフォルトの名無しさん:2005/11/30(水) 02:22:53
いや・・動的メモリ確保が面倒だったからこれでどうにかならんかなと思ってw
いろいろ試したら文字列長くなるとバグるなこれww
878デフォルトの名無しさん:2005/11/30(水) 02:23:47
>>874
多謝。
>>868
考えて下さってありがとうございます
879デフォルトの名無しさん:2005/11/30(水) 02:25:49
>>876
本当にありがとうございます
880デフォルトの名無しさん:2005/11/30(水) 02:31:08
【質問テンプレ】
[1] 授業単元: IT入門B2
[2] 問題文(含コード&リンク): 円周率πを以下の式を用いて計算するプログラムを作成しなさい。

π/4 = arctan 1/2 + arctan 1/5 + arctan 1/8

ただし、arctanは以下の級数展開の式を用いて計算すること。

arctan t = t - t^3/3 + t^5/5 -t^7/7 + … + (-1)^n * t^(2n+1) / 2n+1 + …

http://www-it.sci.waseda.ac.jp/ITB2/c-class2/itb2-rep1.pdf
[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] 言語:C言語
[4] 期限: ([2005年12月2日09:00まで]
[5] その他の制限:
よろしくお願いします。
881デフォルトの名無しさん:2005/11/30(水) 02:36:57
遅いけど
#include <stdio.h>
#include <string.h>
int main(void){
char str[256];
int i,j,n;
printf("文字列を入力してください\n");
scanf("%s",str);
printf("何番目から?\n");
scanf("%d",&n);
for(i=n;;){
printf("%c",str[i]);
i++;
j=strlen(str);
if(i>j){
break;
}
}
return(0);
}
882デフォルトの名無しさん:2005/11/30(水) 02:37:22
それアークタンジェントどこまで計算すればいいのよ
なんかここで計算止めみたいな基準ないの?
883874:2005/11/30(水) 02:37:29
>>876
なぜ%がダメなのか分からない。
ちなみにそれでは空白を含めない。
884デフォルトの名無しさん:2005/11/30(水) 02:40:01
>>883
それじゃ、abc%def、2、とでも入力して味噌。
885デフォルトの名無しさん:2005/11/30(水) 02:42:06
次スレには馬鹿が来ませんように ( 人 )
886デフォルトの名無しさん:2005/11/30(水) 02:43:15
>>881
せめてjの算出はループの外へ。
そうすれば条件判断もifでやることもないし。
つーか、変数名が安直過ぎ。
887デフォルトの名無しさん:2005/11/30(水) 02:44:52
別に商用でもないんだし動けばいいじゃん
888デフォルトの名無しさん:2005/11/30(水) 02:46:07
まあ上達につながるしいいんじゃないの?
889デフォルトの名無しさん:2005/11/30(水) 02:49:56
#include <stdio.h>
#include <math.h>

#define N 99

double myarctan(double x)
{
int i;
int sign;
double at = 0.0;

sign = 1;
for (i = 1; i <= N; i++) {
if (i%2 == 0) continue;
at += sign * pow(x, i)/i;
sign *= -1;
}
return at;
}

int main(void)
{
double pi;
pi = 4*(myarctan(1/2) + myarctan(1/4) + myarctan(1/8));

printf("π=%g\n", pi);
}
890889:2005/11/30(水) 02:52:06
arctanの級数展開はNで定義されてます。>>889では99です。
891デフォルトの名無しさん:2005/11/30(水) 02:53:47
>>889
forの繰り返し文を i += 2とすれば、その次のif文は要らない訳だが。
それと、sign *= -1;もsign = -sign;とした方が無駄な乗算が行なわれる可能性を排除できる。

処で、計算式が>880と違うわけだが、どっちが正しいんだ?
892889:2005/11/30(水) 02:55:47
>>891
pi = 4*(myarctan(1/2) + myarctan(1/5) + myarctan(1/8));
ですね^^

893デフォルトの名無しさん:2005/11/30(水) 02:56:18
毎回 arctan 計算するのは無駄だろ?
894デフォルトの名無しさん:2005/11/30(水) 02:56:46
人の宿題だし半分適当でもいいじゃん^^
895889:2005/11/30(水) 03:01:26
>>894
適当じゃないお
896デフォルトの名無しさん:2005/11/30(水) 03:02:06
不適当なのか?
897デフォルトの名無しさん:2005/11/30(水) 03:02:21
>>886
こういうのって最適化してくれないの?
まあそうでなくても外に出すべきだろうけど。
898デフォルトの名無しさん:2005/11/30(水) 03:05:56
適当は意味が2通りあるから都合の(・∀・)イイ!!ように考えてくれ^^
899デフォルトの名無しさん:2005/11/30(水) 03:07:51
>>897
strlen()は標準関数だし単純だからよきに計らってくれそうではあるね。
でも外に出せば条件判断がすっきりすることだし。
900デフォルトの名無しさん:2005/11/30(水) 03:08:40
短いからど〜でもい〜い〜ですよ〜
901デフォルトの名無しさん:2005/11/30(水) 03:12:03
ありゃ、円周率と聞いたから多倍長かと思って組んでたらdoubleでよかったのね。
組みあがったけどどうしよう…。
902デフォルトの名無しさん:2005/11/30(水) 03:17:51
とりあえず晒す
903889:2005/11/30(水) 03:17:52
>>901
結果はどうでした?
904901:2005/11/30(水) 03:27:22
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1175.txt
どうも文字化けしたくさい。せっかく日本語で入れたコメントが無駄になった。
JISだろうから変換できるならしてくれ。変換しないなら#defineの1行目末にある#define文を忘れずに分離してくれ。

>>903
こんだけのプログラムになると一応チェックする。1000桁で試したが、末尾の細かいことしてないから996桁までしか合ってない。
905901:2005/11/30(水) 03:28:24
違った。文字コードUTF-8だ。
906デフォルトの名無しさん:2005/11/30(水) 03:39:27
/*
sin(x) = x - x^3/3! + x^5/5! + ... + (-1)^(n-1)(x^(2n-1)/(2n-1)!) + ...

普通に計算した場合(func1-3), 逐次方式(func4)
x^3/3! = (x)*x*x/2/3
x^5/5! = (x^3/3!)*x*x/4/5
x^7/7! = (x^5/5!)*x*x/6/7
double の場合 n = 16 で収束
sin(π/6 = 0.523598775598298820) = 0.499999999999999940, 0.499999999999999940
sin(π/4 = 0.785398163397448280) = 0.707106781186547460, 0.707106781186547460
sin(π/3 = 1.047197551196597600) = 0.866025403784438490, 0.866025403784438490
sin(π/2 = 1.570796326794896600) = 1.000000000000000200, 1.000000000000000200
sin(2π/3 = 2.094395102393195300) = 0.866025403784438930, 0.866025403784438930
sin(π = 3.141592653589793100) = 0.000000000000000334, 0.000000000000000248

*/
907デフォルトの名無しさん:2005/11/30(水) 03:39:47
#include <stdio.h>
#include <math.h>

#define PI 3.14159265358979323846

struct pitable {
double x;
char *s;
};

int func1(int n)
{
return (int)pow(-1, n);
}

double func2(int n, double x)
{
int i;
double r = func1(n-1) * pow(x, (2 * n - 1));
for(i = 2 * n - 1; i > 1; i--) r /= i;
return r;
}

double func3(double x, int max)
{
int i;
double r = x;
for(i = 2; i <= max; i++) r += func2(i, x);
return r;
}
908デフォルトの名無しさん:2005/11/30(水) 03:40:08
double func4(double x, int max)
{
int i;
double r = x;
double y = x;
for(i = 1; i < max; i++){
y *= x * x / (2 * i) / (2 * i + 1);
r += (i & 1 ? -1 : 1) * y;
// printf("%03d, %20.18f, %20.18f\n", i + 1, y, r);
}
return r;
}
909デフォルトの名無しさん:2005/11/30(水) 03:42:02
int main()
{
int i, j;
struct pitable pt[] = {
PI / 6, "π/6",
PI / 4, "π/4",
PI / 3, "π/3",
PI / 2, "π/2",
PI * 2 / 3, "2π/3",
PI, "π"
};
for(i = 1; i <= 20; i++){
printf("%03d\n", i);
for(j = 0; j < 6; j++){
printf("sin(%s = %20.18f) = %20.18f, %20.18f\n",
pt[j].s, pt[j].x, func3(pt[j].x, i), func4(pt[j].x, i));
}
}
return 0;
}
910デフォルトの名無しさん:2005/11/30(水) 04:18:33
>>889 の改善 and 修正

#define N 10000

double myarctan(double x)
{
int i;
double result;
double d;
double s;

for (i=3, d=x, s=-1.0, result = x; i<=N; i+=2)
{
d *= x * x;
result += s * d / (double)i;
s = -s;
}

return result;
}

int main(void)
{
double pi;
pi = 4.*(myarctan(1./2.) + myarctan(1./4.) + myarctan(1./8.)); /* doble型に修正*/
printf("pai=%g\n", pi);
return 0;
}

精度は… orz
911 ◆uT/lnJ0nj2 :2005/11/30(水) 04:32:14
計算式が間違えてた

pi = 4.*(myarctan(1./2.) + myarctan(1./4.) + myarctan(1./8.)); /* doble型に修正*/

pi = 4.*(myarctan(1./2.) + myarctan(1./5.) + myarctan(1./8.)); /* doble型に修正*/
912デフォルトの名無しさん:2005/11/30(水) 05:26:46
>>910-911 の結果
N = 100 で収束してるから N = 10000 回実行は無駄のようです

pi = 3.29999999999999980 : n = 1
pi = 3.14173932800660390 : n = 10
pi = 3.14159265358979220 : n = 100
pi = 3.14159265358979220 : n = 1000
pi = 3.14159265358979220 : n = 10000

>>910-911 のは誤差が伝播するから
>>889,892 の方が精度高いと思われ

どっちも五十歩百歩なんだけど
913デフォルトの名無しさん:2005/11/30(水) 05:28:10
#include <stdio.h>

double arct(double x, int n)
{
int i;
double result;
double d;
double s;

for(i = 3, d = x, s = -1.0, result = x; i <= n; i += 2){
d *= x * x;
result += s * d / (double)i;
s = -s;
}

return result;
}

int main(void)
{
int i;
double pi;

for(i = 1; i <= 10000; i *= 10){
pi = 4.0 * (arct(0.5, i) + arct(0.2, i) + arct(0.125, i));
printf("pi = %20.17lf : n = %d\n", pi, i);
}

return 0;
}
914デフォルトの名無しさん:2005/11/30(水) 05:47:53


for(i = 1; i <= 10000; i *= 2){

で実行すると N = 32〜64 あたりで収束するから N = 100 (99) でも無駄大杉
915デフォルトの名無しさん:2005/11/30(水) 05:54:13
なんで収束見るのに回数決めうちしてるんよ.
適当な eps を取って while(error > eps) { ... } が定石でしょうが.
916デフォルトの名無しさん:2005/11/30(水) 06:09:31
N を +1 しながら過去 2 回の計算結果を比較して収束チェックするのが良
917デフォルトの名無しさん:2005/11/30(水) 07:43:41
>>829
正直すまんかった。

で、これなんてガウス・ザイデル法?
問題文>>818は「ガウス・ザイデル法で」という指定付なんだが。
だから困ってる。
918829:2005/11/30(水) 08:37:38
ぐへ,ごめん.ガウスジョルダンとガウスザイデル勘違いしてた orz....

ザイデルは反復解法のほうですね.こっちだと A x = 0 に反復させたら一発で x = 0 で終わりですね
919917:2005/11/30(水) 08:41:04
いや、俺も言葉が過ぎた。申し訳ない。
920デフォルトの名無しさん:2005/11/30(水) 08:47:22
921776:2005/11/30(水) 10:37:53
すいません、書き方が悪かったです
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
N個の要素よりなる配列をmain関数に宣言する。配列にデータを読み込む関数(例えばinput)
をmainから呼んで入力を行いデータを書き出す関数(例えばoutput)を呼んで出力するプログラムを
配列で呼んでポインタで受け取るやり方を書け。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:2005年11月21日
[5] その他の制限:
おねがいします
922デフォルトの名無しさん:2005/11/30(水) 10:44:54
void input(int *a){int i;for(i=0;i<N;i++){scanf("%d",a+i);}}
void output(int *a){int i;for(i=0;i<N;i++){printf("%d\n",*(a+i));}}
int main(){int a[N];input(a);output(a);return 0;}
923デフォルトの名無しさん:2005/11/30(水) 13:32:28
>>884
あ、2番目のprintfがいかんかったのか。
924デフォルトの名無しさん:2005/11/30(水) 15:27:35
寝坊をかまして闇の締切日の内容がリアルになりました。
925デフォルトの名無しさん:2005/11/30(水) 15:33:23
>>924
大丈夫だ、今日はまだ11/30だ。
>>453
提出日は明日11/31... と言い切れ!!
926デフォルトの名無しさん:2005/11/30(水) 15:58:27
学校の課題です。私の力では解けないのでよろしくおねがいします。
forを使用してください。あと初心者っぽくお願いします。

•3×3の2次元配列を用意する
• キーボードから任意の実数を9個入
力し,順番に配列にいれる.
([0][0]->[0][1]->[0][2]->....)
• その入力データから3×3の配列の
縦と横のそれぞれの平均(実数)を
求め,画面に表示する.
• 入力データ
– 1.1 1.2 1.3 1.4 1.5 ・・・・



例えば
1.1 1.2 1.3
1.4 1.5 1.6
1.7 1.8 1.9
があると,それぞれの横の平均1.2 1.5 1.8が出力されて
たての平均も1.4 1.5 1.6と出るようなプログラムを作ってください。
よろしくお願いします。
927デフォルトの名無しさん:2005/11/30(水) 16:00:44
>>926 坊や、>>1を見てくれ。それがここのルールだ。
928デフォルトの名無しさん:2005/11/30(水) 16:27:21
>>463
>>924
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1177.txt

メモリリークはご愛嬌(やるきなす)
929デフォルトの名無しさん:2005/11/30(水) 16:40:12
[1] プログラミング入門
[2] • 3×3の2次元配列を用意する
• キーボードから任意の実数を9個入力し,順番
に配列にいれる.([0][0]->[0][1]->[0][2]->....)
• その入力データから3×3の配列の縦と横のそ
れぞれの平均(実数でよい)を求め,画面に表
示する.
• 入力データ
– 1.1 1.2 1.3 1.4 1.5 ・・・・
[3] 環境
 [3.1] Windows
 [3.2] コマンドプロンプト 秀丸
 [3.3]C
[4] あと一時間半
[5] forを使って初心者っぽくお願いします。
930926 ◆8/./95naVw :2005/11/30(水) 16:41:33
[1] プログラミング入門
[2] • 3×3の2次元配列を用意する
• キーボードから任意の実数を9個入力し,順番
に配列にいれる.([0][0]->[0][1]->[0][2]->....)
• その入力データから3×3の配列の縦と横のそ
れぞれの平均(実数でよい)を求め,画面に表
示する.
• 入力データ
– 1.1 1.2 1.3 1.4 1.5 ・・・・
[3] 環境
 [3.1] Windows
 [3.2] コマンドプロンプト 秀丸
 [3.3]C
[4] あと一時間半
[5] forを使って初心者っぽくお願いします。
何回も書き込んですいません。
931デフォルトの名無しさん:2005/11/30(水) 16:43:46
>>926
初心者っぽい?

#include <stdio.h>

int main (void)
{
int i, j;
double d[3][3];

for (i=0; i<3; ++i)
for (j=0; j<3; ++j)
scanf("%lf", &(d[i][j]));

for (i=0; i<3; ++i)
printf("横平均 %f\n", (d[i][0] + d[i][1] + d[i][2])/3.0);

for (i=0; i<3; ++i)
printf("縦平均 %f\n", (d[0][i] + d[1][i] + d[2][i])/3.0);

return 0;
}
932デフォルトの名無しさん:2005/11/30(水) 16:52:49
933926 ◆8/./95naVw :2005/11/30(水) 16:53:51
ありがとうございます
またおねがいします(^_^)
934デフォルトの名無しさん:2005/11/30(水) 16:55:11
くそお、
#define フォー for
#define バッチコーイ scanf
#define セイセイセイセイ printf

なんてやって遊んでたら...
935デフォルトの名無しさん:2005/11/30(水) 16:59:27
>>934
どうみてもコンパイルエラーです
本当にありがとうございました
936デフォルトの名無しさん:2005/11/30(水) 17:06:53
#include <stdio.h> 
int main(int argc,char *argv[]){
    double a[3][3],r[3],c[3];
    int i;
    scanf("%lf %lf %lf %lf %lf %lf %lf %lf %lf",
           &a[0][0],&a[0][1],&a[0][2],
           &a[1][0],&a[1][1],&a[1][2],
           &a[2][0],&a[2][1],&a[2][2]);
    for(i=0;i<3;i++ ){
        i[r]=(a[i][0]+a[i][1]+a[i][2])/3;
        i[c]=(a[0][i]+a[1][i]+a[2][i])/3;
    }
    printf("横の平均%f %f %f\n",0[r],1[r],2[r]);
    printf("たての平均%f %f %f\n",0[c],1[c],2[c]);
    return 0;
}
いちおう入力データが1行かと思って作ってたら出遅れた
初心者っぽく記法をいじっといた。コンパイル通るのは確認した
937デフォルトの名無しさん:2005/11/30(水) 17:12:07
>>935
まちがいなくコンパイルエラーでした
本当にありがとうございました
938デフォルトの名無しさん:2005/11/30(水) 17:38:56
>>934が通らないとは糞なプリプロセッサばかりだな。
939デフォルトの名無しさん:2005/11/30(水) 17:43:51
VC6
error C2007: #define の後に識別子が必要です。

VC2005
OK!!

ktkr!!!
940デフォルトの名無しさん:2005/11/30(水) 18:21:50
>>934が通るってあるのか・・・・
941デフォルトの名無しさん:2005/11/30(水) 18:41:04
VC2003
error C3209: 'tH[' : Unicode 識別子は現在サポートされていません。

2003 → 2005でサポートされたのか…?
942デフォルトの名無しさん:2005/11/30(水) 18:50:28
学校の課題が解けません。

[1]授業単元:アルゴリズム・プログラム
[2]問題文:適当な連結成分を持つグラフを作り、関節点を見つけるプログラムを作ってください。
        グラフには関節点を入れるようにしてください。

[3]環境
 [3.1]OS:Windows
 [3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト
 [3.3]言語:どちらでも可
[4]期限:来週の月曜日

どなたかお願いします。。。
943デフォルトの名無しさん:2005/11/30(水) 19:37:31
>>942
入出力の仕様がわからなかったから昔作ったプログラムをそのままあげとく.参考にしてくれ.
http://acm.uva.es/p/v3/315.html を解くプログラム:

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1179.cpp
944 ◆XYndhCe37s :2005/11/30(水) 20:06:29
[1]授業単元:プログラミング基礎
[2]問題文:rand()を用いて一様乱数を100個発生させ、乱数の最大値RAND_MAXでそ
れぞれを割り、その答えが0≦i≦0.1、0.1<i≦0.2、・・・0.9≦i≦1
       の10個の区間にそれぞれ何個あるか調べよ
[3]環境
 [3.1]OS:Linux
 [3.2]コンパイラ名とバージョン:gcc 2.9
 [3.3]言語:どちらでも可
[4]期限:明日午前9時まで

お願いします
945 ◆XYndhCe37s :2005/11/30(水) 20:09:33
0.9<i≦1でした
946デフォルトの名無しさん:2005/11/30(水) 20:47:58
>>944
#include <stdio.h>
#include <stdlib.h>
int main(){
 int i, j, sum[10];
 double d;
 for(i = 0; i < 10; ++i) sum[i] = 0;
 for(i = 0; i < 100; ++i){
  d = (double)rand() / (double)RAND_MAX;
  for(j = 0;j < 10; ++j){
   if(d <= (double)(j+1)/10){ ++sum[j]; break;}
  }
 }
 for(i = 0;i < 10; ++i)
  printf("%0.1f < i <= %0.1f %2d\n", (double)i/10, (double)(i+1)/10, sum[i]);
 return 0;
}

適当に作ったんで誰か添削ヨロ
あと表示が0<i になってるけどキニシナイ
947デフォルトの名無しさん:2005/11/30(水) 20:58:13
暇なんで作ってみたC++Version

#include <stdlib.h>
#include <iostream>
int main()
{
using namespace std;
long box[10];
for (int j=0;j<10;j++)
box[j] = 0;
for (int i=0;i<100;i++)
{
int n = rand()*10/RAND_MAX;
box[n]++;
}
for (int k=0;k<10;k++)
{
cout << "0." << k << "~0." << k+1 << ":" << box[k] << endl;
}
return 0;
}
948デフォルトの名無しさん:2005/11/30(水) 21:17:47
[1] 授業単元:プログラミング演習U
[2] 問題文:

平面座標上のn個(4個以上)の長方形の2つの対角となる点をキーボードから入力し、
その点を一方向リストを使って表示するプログラムを作成せよ。
ただし、表示する時には長方形の面積も表示すること。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:12/1まで
[5] その他の制限:初心者にもわかりやすいようにお願いします。

462さんに一度作ってもらったのですが、LinuxでCtrl-Zを入力すると
プログラムが強制終了してしまうので、上手く動きませんでした。
Windowsではちゃんと動いたのですが。
あと表示するのは長方形の対角となる2点だけでもいいそうです。
申し訳ないですが、どなたかまたご教授お願いします。
949デフォルトの名無しさん:2005/11/30(水) 21:40:14
>>948
Linuxでは一般的にCtrlZはプロセス中断。強制終了ではない。
入力を閉じたいなら、CtrlDでできるはず。
950942:2005/11/30(水) 22:37:56
>>943
ありがとうございます
なんとか月曜までにがんばってみます
951デフォルトの名無しさん:2005/11/30(水) 22:45:30
>>947
int n = rand()*10/RAND_MAX;

これって大丈夫?

19.8.1 ISO C Random Number Functions
This section describes the random number functions that are part of the ISO C standard.

To use these facilities, you should include the header file stdlib.h in your program.

— Macro: int RAND_MAX

The value of this macro is an integer constant representing
the largest value the rand function can return.
In the GNU library, it is 2147483647,
which is the largest signed integer representable in 32 bits.
In other libraries, it may be as low as 32767.
952デフォルトの名無しさん:2005/11/30(水) 23:32:21
[1] 授業単元:プログラミングU
[2] 問題文:
1.最初にnの値を入力して、各入力を行った後、それぞれの目的を実行する以下のプログラムを作成しなさい。
ただし、nの大きさは100を超えないものとする。
n人の点数を入力した後、不可(60点以下)の人の数を調べるプログラム
ただし一次元配列を引数で渡すと各計算をして結果を返してくれる関数を作り、この関数を使って、
その計算を表示するプログラムを作りなさい。

2.
最初に行列の次元nの値を入力し、配列を使って次の計算をするプログラムを
作りなさい。ただし、nは100以内で、n次の正方行列とする。

行列AとBを入力すると、その掛け算A×Bを計算するプログラム
ただし二次元配列を引数で渡すと各計算する関数を作り、この関数を
使って、その計算を表示するプログラムを作りなさい。ただし、計算した
結果は、引数で渡した行列Aで戻すものとする。

[3] 環境
 [3.1] OS:xp
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:12/1まで
行列同士の規則性を見つけ出してプログラムで表してとくようなのですが、
いまいちよくわかりません。よろしくお願いいたします。
953デフォルトの名無しさん:2005/12/01(木) 01:01:58
[1] プログラミング演習
[2] 1〜100万までの整数から素数全てを表示せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:明後日
[5]整数の表示から素数の導きについて何を使えば分からずもし、よろしければ
  説明もお願いします
  長々と書きましたがどうぞよろしくお願いします
954デフォルトの名無しさん:2005/12/01(木) 01:05:01
955デフォルトの名無しさん:2005/12/01(木) 01:22:36
>>953
こんなでどう?
だけど、計算時間がものすごくかかるね

#include <stdio.h>

#define MAXNUM 1000000

int isprime(int pr)
{
int i;

for (i = 2; i < pr; i++) {
if (pr % i == 0) break;
}

return i == pr? 1: 0
}

int main(void)
{
int i;

for (i = 2; i <= MAXNUM; i++) {
if (isprime(i)) {
printf("%d\n", i);
}
}

return 0;
}
956デフォルトの名無しさん:2005/12/01(木) 01:26:56
>>953
眠たいので適当に書いた。
アルゴリズムは エラトステネスのふるい でググッて

#include<stdio.h>
int t[1000000],x,y;
int main(){
    for(x=t[0]=t[1]=2;x<1000000;++x)
    for(y=x+x;y<1000000;y+=x)t[y]=2;
    for(x=y=0;x<1000000;++x)t[x]||(printf("%7d ",x),++y%8||puts(""));
    return 0;
}
957デフォルトの名無しさん:2005/12/01(木) 01:27:36
>>953

printf("2, 3, 5, 7, 11,..............,999983\n");
958デフォルトの名無しさん:2005/12/01(木) 01:35:57
みなさんありがとうございます
参考にして頑張ります
>>957
えwwwwwwwwww
959デフォルトの名無しさん:2005/12/01(木) 02:23:42
素数って素数で割れなければいいんだっけ
あんまり覚えてないからフォルダ漁ったら出てきた

#include <stdio.h>
int main(void)
{
int i, n;
static int prime[1000000];
int ptr = 0;
int flag;

prime[ptr++] = 2;
prime[ptr++] = 3;

for (n = 5; n <= 1000000; n += 2) {
flag = 0;
for (i = 1; prime[i] * prime[i] <= n; i++) {
if (n % prime[i] == 0) {
flag = 1;
break;
}
}
if (!flag) {
prime[ptr++] = n;
printf("%d\n", n);
}
}
return 0;
}
960デフォルトの名無しさん:2005/12/01(木) 02:33:30
素数は素数で割れませんよ
961デフォルトの名無しさん:2005/12/01(木) 03:21:30
そーすね
962デフォルトの名無しさん:2005/12/01(木) 04:02:10
割れますが何か。
つーか、自分自身で割れない数は0だけですが。
963デフォルトの名無しさん:2005/12/01(木) 05:02:50
もっとも単純な方法は
ある奇数整数nが素数かを判断するには
3からルートnまでで割り切れるかどうかを調べればいい
964デフォルトの名無しさん:2005/12/01(木) 06:17:03
√nなら割り切れますね
965デフォルトの名無しさん:2005/12/01(木) 06:20:04
>>953
エラトステネスの素直なプログラム

#include <stdio.h>
#define N 1000000

int main (void)
{
char t[N+1];
int i, j, count;

printf("%d\n", 2);
count = 1;

for (i=0; i<=N; ++i) t[i] = 0;
for (i=3; i<=N; i += 2)
{
if (t[i] == 0)
{
printf("%d\n", i); ++count;
for (j=i; j<=N; j += i) t[j] = i;
}
}
printf("count = %d", count);
return 0;
}
966デフォルトの名無しさん:2005/12/01(木) 06:33:26
>>965
非常に無駄の多いエラトステネスですね
967デフォルトの名無しさん:2005/12/01(木) 06:47:04
効率なんか考えてねぇよ
968デフォルトの名無しさん:2005/12/01(木) 08:13:45
>>952(1)

int damecount(int*point,int n,int low){
int i; int m;
m=0;
for(i=0;i<n;i++)if(point[i]<=low)m++;
return m;
}
969デフォルトの名無しさん:2005/12/01(木) 08:38:34
970デフォルトの名無しさん:2005/12/01(木) 09:32:07
971970:2005/12/01(木) 09:35:44
<memory.h>か<string.h>
を#includeし忘れた。
972948:2005/12/01(木) 09:54:36
>>949
ありがとうございます。
解決しました。
973デフォルトの名無しさん:2005/12/01(木) 10:16:38
初めまして。C++を最近習い始めた超初心者なのですが、
ひとつ質問があります。
今授業で配列(x[ ]など)を学んでいるのですが、それの問題で
「5つ数字を入力してその内の最小値を見つけ、画面にその最小値の
配列番号を表示させる」というのがなかなかできません。
例えばx[4]={10,45,23,8,14}の場合x[3]が最小値を持ってるので
画面に「3」と出したいのですが・・・。
以下のようにやってみたところ表示されるのは最小値であって
配列の番号ではないんです。
void findIndex(int x[], int size);
int min;
int main()
{
int score[4];
    cout << "Enter 4 numbers: " << endl;
cin >> score[0];
min = score[0];
findIndex(score, 4);
    cout << "The index of the array which has the smallest number is: " << min << endl;
return 0;
}
void findIndex(int x[], int size)
{
int n;
     for (n = 1; n < size; n++)
{
cin >> x[n];
if (x[n] < min)
min = x[n];
}
}
どなたかご指導のほどよろしくお願いします。
974デフォルトの名無しさん:2005/12/01(木) 10:22:38
スレタイ半年読み返して来い。
975デフォルトの名無しさん:2005/12/01(木) 10:26:00
意味なくglobal変数使っている時点で終了。
findIndexでnを返り値にしろ。
976973:2005/12/01(木) 10:29:35
>>974
申し訳ございません。半年も読み返したら期限過ぎちゃうんでご勘弁を・・。
[1] 授業単元:Problem Solving with C++
[2] 問題文(含コード&リンク):上記
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: win visual studio 6.0
 [3.3] 言語: C++
[4] 期限: 明日まで
よろしくお願いします。
977973:2005/12/01(木) 10:47:34
>>975
>>意味なくglobal変数使っている時点で終了。
ごもっともです・・・。
なんせ初心者なんでいろいろ試してみてるんですが
その分無駄も多いですよね。
>>findIndexでnを返り値にしろ。
すいません、もう少し分かりやすくお願いできますでしょうか。
nを返り値にとはどうのようにすればできますか・・・?
978デフォルトの名無しさん:2005/12/01(木) 10:54:16
int findIndex(int x[], int size)
{
int n,ret=0;
int min = x[0];
     for (n = 1; n < size; n++)
{
cin >> x[n];
if (x[n] < min) {
min = x[n];ret=n;
}
}
return ret;
}
979デフォルトの名無しさん:2005/12/01(木) 10:54:28
スレ違いかと思いますがCASL2で 6×11-(4×8÷2)のプログラムのつくり方がわかりません。
どなたかわかるかた今したら教えていただけないでしょうか。
980デフォルトの名無しさん:2005/12/01(木) 11:07:14
981デフォルトの名無しさん:2005/12/01(木) 11:22:53
元も子もないかもワカランが、最小値なら
std::min_elementで一発だろ
最初は使い方覚えるだけでいいし、
自作するより遙かにマシなはず
982デフォルトの名無しさん:2005/12/01(木) 11:28:12
激初心者スレにも書いたんですが。。。。

Z1=2.5+3.2i
Z2=1.3+0.4i

この和と積を求めて、結果を打ち出すプログラムはどうなりますか?
自分でやってみたんですが、うまくいきません。
誰かわかる方教えてください
983デフォルトの名無しさん:2005/12/01(木) 11:46:53
>>982
スレ終了間際になってマルチとはいい根性してるジャマイカ。
http://pc8.2ch.net/test/read.cgi/tech/1129043264/932
984デフォルトの名無しさん:2005/12/01(木) 11:47:52
>>982
#include <stdio.h>
#include <complex.h>

int main(void)
{
double _Complex Z1 = 2.5 + 3.2i;
double _Complex Z2 = 1.3 + 0.4i;
double _Complex R = Z1 * Z2;
printf("%lf+%lfi\n", __real__ R, __imag__ R);
}
985984:2005/12/01(木) 11:48:43
おっと、和もか。
適宜追加してくれ。
986デフォルトの名無しさん:2005/12/01(木) 12:04:20
>>985
>1に則っていない、しかもマルチに回答すんじゃね。
#しかし、C99って便利になってんだな。
987973:2005/12/01(木) 12:05:36
>>978
なるほど!findIndexをvoidじゃなくてintにすればreturnできますね。
しかもret=nをifの{}の中に入れるとは思いつきませんでした!
ret=nみたいなことは試したのですが{}がなかったので
どんな数字入れても配列の一番最後の「4」が表示されるだけだったんです。
早速試してみます。
>>981
すみません、まだそういうの習ってないんでわかんないです・・・。
それは最小値を見つけてくれるんですか?だったらかなり使えそうですね。
勉強してきます。ありがとうございます。
988デフォルトの名無しさん:2005/12/01(木) 12:09:48
次スレ立ててみる
無理ならまた書き込む。
989988:2005/12/01(木) 12:12:55
次スレ
C/C++の宿題を片付けます 54代目
ttp://pc8.2ch.net/test/read.cgi/tech/1133406672/
990デフォルトの名無しさん:2005/12/01(木) 12:57:20
>970
ありがとうございました、ソースの大本はわかったのでこれを元に
改変してみます。
991デフォルトの名無しさん:2005/12/01(木) 16:57:01
スタックを
1.配列を利用して
2.また、構造体を用いたリストを応用して
実装してください。
プッシュ、ポップの関数を定義してください。
992デフォルトの名無しさん:2005/12/01(木) 16:57:47
>>991
>>1 やり直し。
993デフォルトの名無しさん:2005/12/01(木) 17:14:59
1] 授業単元:プログラム演習C
[2] 問題文(含コード&リンク):getchar関数を使用して文字を読み取り、ピリオドが出てきたら改行する
プログラムを作りなさい。(ファイルの終わりを入力したらプログラムを終了させる)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005年12月2日17時
[5] その他の制限: ポインタと標準入出力関数の初歩しか習っていません
よろしくお願いします
994デフォルトの名無しさん:2005/12/01(木) 17:23:16
#include <stdio.h>

int main(void)
{
  int ch;
  while (ch = getchar(), ch != EOF) if (ch == '.') puts("");
  return 0;
}
995デフォルトの名無しさん:2005/12/01(木) 17:48:39
>>988 乙。
996デフォルトの名無しさん:2005/12/01(木) 20:53:35
次スレ?
997デフォルトの名無しさん:2005/12/01(木) 20:55:36
>>996
C/C++の宿題を片付けます 54代目
http://pc8.2ch.net/test/read.cgi/tech/1133406672/
998デフォルトの名無しさん:2005/12/01(木) 20:57:01
(・∀・)カエレ!
999デフォルトの名無しさん:2005/12/01(木) 20:57:32
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< ぱいそんぱいそん!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< ぱいそんぱいそんぱいそん!
ぱいそん〜〜〜!   >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」               ̄     / /


1000デフォルトの名無しさん:2005/12/01(木) 20:58:00

                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< ぱいそんぱいそん!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< ぱいそんぱいそんぱいそん!
ぱいそん〜〜〜!   >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」               ̄     / /
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。