C/C++の宿題を片付けます 69代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/07/05(水) 19:24:57【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 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++の宿題を片付けます 68代目
http://pc8.2ch.net/test/read.cgi/tech/1151158759/
【過去スレ一覧】
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
0002デフォルトの名無しさん
2006/07/05(水) 19:29:420003デフォルトの名無しさん
2006/07/05(水) 19:33:25スレ立て乙
0004デフォルトの名無しさん
2006/07/05(水) 20:31:08[2] 問題文(含コード&リンク):
1年分の各月の平均気温を配列に格納し(プログラム内で初期値として与えてよい),各データとそれらの平均値を表示するプログラムを作成せよ.
なお,データは摂氏と華氏の双方で表示すること.ただし,格納するデータはどちらか一方のみ.(この問題では,平均値は整数でよい(切り捨て,切り上げ,四捨五入いずれも可).月平均気温は適当でよい.)
摂氏→華氏変換式: F=(9/5)×C+32 ,ただしCは摂氏温度,Fは華氏温度.
ただし、摂氏から華氏への変換をユーザ定義関数として定義して,これを使うようにせよ.
[実行結果]
2005年の月平均気温(摂氏,括弧内は華氏)
1月:5(41)
2月:0(32)
<省略>
12月:10(50)
-----------
平均:15(59)
以上
[3] 環境
[3.1] OS: (Windows
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限: なるべく早く
[5] その他の制限: 関数まで習いました。
どうか、よろしくお願いします。
0005デフォルトの名無しさん
NGNG><省略>
するな。
0006デフォルトの名無しさん
2006/07/05(水) 20:40:52そういう問題なんだから仕方ないよ。
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
2006/07/05(水) 20:51:03#include <stdio.h>
double kashi(double t){
return 9/6*t+32;
}
main(){
double sesshi[12]={1,2,3,4,5,6,7,8,9,10,11,12},goukei=0;
int i;
for(i=0;i<12;i++){
goukei+=sesshi[i];
}
printf(" 2005年の月平均気温(摂氏,括弧内は華氏)\n\n");
printf(" 1月:%.0f(%.0f)\n",sesshi[0],kashi(sesshi[0]));
printf(" 2月:%.0f(%.0f)\n",sesshi[1],kashi(sesshi[1]));
printf(" <省略> \n");
printf(" 12月:%.0f(%.0f)\n",sesshi[11],kashi(sesshi[11]));
printf(" -----------\n");
printf("平均:%.0f(%.0f) \n",goukei/12,kashi(goukei/12));
printf("以上\n");
}
0009デフォルトの名無しさん
2006/07/05(水) 21:30:49>>4
前にもやった記憶が・・・
0010デフォルトの名無しさん
2006/07/05(水) 22:20:48先にあっち消費してくるか・・・
0011デフォルトの名無しさん
2006/07/05(水) 23:33:37[2]問題文:knightの巡回 m*nのマス目のチェス盤に対して解の求め方を、
1.出発点に戻らなくて良いので、全地点を巡回する
2.出発点に戻る解を一つ求める
3.出発点に戻る解を全て求める
の順序で付け加えていき、プログラムを完成させなさい。
(ナイトのスタート地点はどこでもよいが、四隅のどこかにして おけばよい。答えの表示は、m*nのマス目に訪問順番を書き込んだ形にせよ。)
[3]環境
[3.1]OS:mac
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:7/7午後5時
[5]その他の制限:ポインタはなるべく使わず。
ぜんぜん分かりません。よろしくお願いします。
0012デフォルトの名無しさん
2006/07/05(水) 23:39:36aaaaはクラスです。こんな定義できましたっけ?
0013デフォルトの名無しさん
2006/07/05(水) 23:48:19_aはaaaaを指すマネージドポインタ
0014デフォルトの名無しさん
2006/07/06(木) 00:45:08[2] 問題文(含コード&リンク):行列ベクトル積を行うプログラムを書く
[3] 環境 Linux gcc 3.4 C
[4] 期限: ほぼ無期限
[5] その他の制限: 行列を用意する方法は以下のやり方でやれといわれてます
//行列の確保
double **a, *x, *y;
a = (double **)malloc(sizeof(double *)*n);
a[0] = (double *)malloc(sizeof(double)*(n*n));
//行列の解放
free(a[0]);
free(a);
0015デフォルトの名無しさん
2006/07/06(木) 22:16:45[2] 問題文(含コード&リンク):
簡単な計算を行うプログラムを作る
例)
31 + 12 (Enter)
=43 (出力)
45 − 12 (Enter)
=33 (出力)
5 * 6 (Enter)
=30 (出力)
30 / 6 (Enter)
=5 (出力)
というプログラム。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 7月12日 2時30分
[5] その他の制限: switch caseを使う、Ctrc + Cを押さないと停止しないようにする
よろしくお願いします。
0016デフォルトの名無しさん
2006/07/06(木) 22:53:240017デフォルトの名無しさん
2006/07/06(木) 23:08:47#include <stdio.h>
void main(){
char buf[256], c;
int a, b;
while(1){
c = ',';
printf("[書式例]\n10 + 10\n");
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d %c %d", &a, &c, &b);
switch(c){
case '+': printf("=%d\n\n", a + b); break;
case '-': printf("=%d\n\n", a - b); break;
case '*': printf("=%d\n\n", a * b); break;
case '/': if (b == 0){
printf("error\n\n");
break;
} else {
printf("=%.2f\n\n", (float)a / b);
break;
}
default:
printf("error\n\n");
}
}
}
0018デフォルトの名無しさん
2006/07/07(金) 03:54:35一応構文解析するようにしてみた。多少バグあり。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2276.c
誰か治してくれ。 orz
0019デフォルトの名無しさん
2006/07/07(金) 14:24:520020デフォルトの名無しさん
2006/07/07(金) 14:55:10「 - 」 のときの処理(優先度とか)がおかしい気がする
0021デフォルトの名無しさん
2006/07/07(金) 15:12:12char cmojiretu2[50];
int isoeji = 0;
int icnt = 0;
int out = 0;
char ccnt;
printf("\n圧縮前文字列→%s\n", cmojiretu); //圧縮前文字列の表示
printf("圧縮前文字数→%d\n", strlen(cmojiretu)); //圧縮前文字数の表示
do {
if(ccnt == cmojiretu[isoeji])
icnt++; //icntを1つずつずらす
else{
for(; icnt > 9; icnt -= 9)
out += sprintf(cmojiretu2 + out, "@9%c", ccnt);
if(icnt <= 3)
while(icnt--) cmojiretu2[out++] = ccnt;
else
out += sprintf(cmojiretu2 + out, "@%c%d", ccnt, icnt);
icnt = 1;
ccnt = cmojiretu[isoeji];
}
}while(cmojiretu[isoeji++]);
cmojiretu2[out++] = '\0';
printf("\n圧縮後文字列→%s\n", cmojiretu2); //圧縮後文字列の表示
printf("圧縮後文字数→%d\n", strlen(cmojiretu2)); //圧縮後文字数の表示
return 0; //main関数を終了させる
}
このC言語のコメントがわかりません、わかる方コメントをお願いします
0022デフォルトの名無しさん
2006/07/07(金) 15:18:430023huniya
2006/07/07(金) 15:19:10問題:西暦と月を入力し、その月のカレンダーを出力せよ。
環境:C言語です。
0024デフォルトの名無しさん
2006/07/07(金) 15:30:44どうでもいいとこだけにコメントが書いてあるな。
0025デフォルトの名無しさん
2006/07/07(金) 15:33:010026c++
2006/07/07(金) 16:05:56[2] 問題文(含コード&リンク): 線形リストを用いて、素数とわかった数を保存し、指定された数(N)以下の素数を求めるプログラムを作成せよ。ただし、Nはプログラム実行中で外部から入力できるようにすること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: 6.0
[3.3] 言語: C++
[4] 期限: 2006年7月10日まで
[5] その他の制限:たぶんなし
この問題がわかりません。
基礎なことかもしれませんが、どうかお願いします
0027デフォルトの名無しさん
2006/07/07(金) 16:07:48そういえばもう夏休みの宿題の季節なんだな
0028デフォルトの名無しさん
2006/07/07(金) 16:17:32http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2285.txt
0029デフォルトの名無しさん
2006/07/07(金) 18:31:48[2] 問題文(含コード&リンク):
名前と点数を格納するデータ部を持つ自己参照型構造体を定義し、
線形リストを実装しなさい。
構造体の名前は struct grade とし、新たに glist 型として定義する。
構造体のメンバは、char name[40]、int score、及びポインタnext。
ノードは3つ作成し、それぞれキーボードからデータを入力する。
ポインタに値を代入し、ヘッダhdと3つのノードの間を繋ぐ。
読み出し用のポインタpを使って、リストのデータを順に画面に出力する。
【ヒント
実習時間中にスライドの指示に沿って作成したコードを提出しても良い。
余力のある人は、ノードを作成する際に動的にメモリを確保するコードを作成すること
(より効率的なコーディングが可能となる)。
[3] 環境
[3.1] OS: XP
[3.2] visual studio.2003
[3.3] 言語: C
[4] 期限: 来週の火曜日まで
[5] 配列、ループ、線形探索、二部探索、構造体
0030デフォルトの名無しさん
2006/07/07(金) 19:19:17#include<iostream>
using namespace std;
struct Cell{int car;Cell*cdr;Cell(int car,Cell*cdr):car(car),cdr(cdr){}};
Cell*enumFromTo(int from,int to)
{return from <= to?new Cell(from,enumFromTo(from+1,to)):NULL;}
Cell*erase(Cell*p,int n)
{return!p?NULL:p->car%n?new Cell(p->car,erase(p->cdr,n)):erase(p->cdr,n);}
Cell*solve(Cell*p){return p?new Cell(p->car,solve(erase(p->cdr,p->car))):NULL;}
int main(){
int n;cout<<"n <- ";cin>>n;
for(Cell*p = solve(enumFromTo(2,n));p;p=p->cdr)printf("%d ",p->car);
}
0031デフォルトの名無しさん
2006/07/07(金) 22:01:24[2] 問題文(含コード&リンク): テキストファイルを読み込ん(ファイル名はプログラム中に書き込んでおく)で,偶数行だけを画面に出力するプログラムを作成せよ.
ファイル名:test.txt
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VisualStudio.net2003
[3.3] 言語: C
[4] 期限: 7月11日
[5] その他の制限: よろしくお願いします
0032デフォルトの名無しさん
2006/07/07(金) 22:06:43#include <stdio.h>
int main(void)
{
int a;
FILE *fp;
if ((fp=fopen("a.txt","r"))==NULL){
perror("error![file] ");
return -1;
}
while (fscanf(fp,"%d",&a) != EOF){
if ((a%2)==0){
printf("%d\n",a);
}
}
return 0;
}
0033デフォルトの名無しさん
2006/07/07(金) 22:11:22こんなに早くありがとうございます!!
0034デフォルトの名無しさん
2006/07/07(金) 22:24:20[2] 問題文(含コード&リンク): ファイル名をキーボードから入力し,キーボードから10行分のテキスト(空白文字無し)を読み込んで,その内容をファイルに格納するプログラムを作成せよ.
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VisualStudio2003
[3.3] 言語: C
[4] 期限: できるだけ早くお願いします
0035デフォルトの名無しさん
2006/07/08(土) 00:02:45#include <stdio.h>
#include <stdlib.h>
int main(void) {
char filename[80],buf[255] ;
int i ;
FILE *fp ;
printf("FileName? ") ;
scanf("%s[^\n]",filename) ;
printf("Input!\n") ;
if(!(fp=freopen(filename,"w+",stdout))) {
fprintf(stderr,"Error!!\n") ;
exit(1) ;
}
for(i=0;i<=10;i++) {
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin) ;
printf("%s",buf) ;
}
return(0) ;
}
眠い。
0036デフォルトの名無しさん
2006/07/08(土) 00:08:00寝ろ
0037デフォルトの名無しさん
2006/07/08(土) 11:43:020038デフォルトの名無しさん
2006/07/08(土) 11:48:020039デフォルトの名無しさん
2006/07/08(土) 12:26:33#include<stdio.h>
#include<stdlib.h>
typedef struct grade { char name[40]; int score; struct grade *next; } glist;
static glist *hd = NULL;
static glist *new_rec() { glist *p = malloc(sizeof(*p)); if (p){ scanf("%s %d", p->name, &p->score); p->next = NULL; } return p; }
static void add_rec(glist **head, glist *rec) {
glist *p, *prev;
for(prev=NULL, p=*head; p; p=p->next) prev = p;
if (prev) prev->next = rec; else *head = rec;
}
static void output_rec(glist *rec){printf("%s %d\n", rec->name, rec->score); }
static void delete_recs(glist *head){
glist *p, *q;
for (p=head; p; p=q){ q = p->next; free(p); }
}
int main() {
int i; glist *p, *q;
for(i=0; i < 3; i++){ p = new_rec(); if (p) add_rec(&hd, p); }
for(p=hd; p; p=p->next){ output_rec(p); }
delete_recs(hd);
return 0;
}
0040デフォルトの名無しさん
2006/07/08(土) 12:28:330041デフォルトの名無しさん
2006/07/08(土) 13:59:17[1] 授業単元:プログラミング通信
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2298.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 10日(月)15時まで
[5] その他の制限: 問題文にある条件を満たしていただければ大丈夫です。
よろしくお願いします。
0042デフォルトの名無しさん
2006/07/08(土) 18:06:010043デフォルトの名無しさん
2006/07/08(土) 18:09:49004441
2006/07/08(土) 18:21:10文字通りの説明になってしまいますが、
相手側からのデータ受信、キーボードからの入力の
どちらが来ても対応できるように並列で処理するということでいいでしょうか。
そしてその並列処理(マルチスレッド)をselect()関数で実現するというのが
今回の課題の主眼らしいです。
0045デフォルトの名無しさん
2006/07/08(土) 18:30:350047デフォルトの名無しさん
2006/07/08(土) 18:46:50せめて行単位で
シ-‐‐-、
ノ //|.i i
やらないか
ノ/」_´__ソ.| <あたしゃもう疲れたよ
0048taka
2006/07/08(土) 19:23:39[2] 問題文(含コード&リンク): 線分を6本入力する。それらの線分のうち、垂直に交わっているものの組はどれかを判定するプログラムを作る。
http://up.spawn.jp/file/up27759.txt
startx,startyは始点のx,y座標、endx,endyは終点のy座標です。下の方のdouble型のtはtanのことです。
垂直の条件をtを使って表現したいのですが、このプログラムのままじゃ不完全ぽいです。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Microsoft Visual Studio .NET 2005
[3.3] 言語: C++
[4] 期限: [7月11日0:00まで]
[5] その他の制限: よろしくお願いします。
0050デフォルトの名無しさん
2006/07/08(土) 20:10:16もうすぐできる(と思う) (=´ω`)ノ
0051デフォルトの名無しさん
2006/07/08(土) 20:43:37誰かあら捜し頼む。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2300.txt
べ、べつに自分の勉強のために解いたんだからね!
005241
2006/07/08(土) 21:16:21家のPC環境ではコンパイルできないので、
月曜に大学で動作確認するつもりです。
すみませんが、それからまた報告にあがります。
0053デフォルトの名無しさん
2006/07/08(土) 21:53:26[2] 問題文(含コード&リンク):
�@ キーボードから正整数を読み込み,その数を素因数分解した結果を画面に表示する.
ただし,1つの整数を引数とし,その整数の最小の素因数を返す関数をユーザ定義関数として作成し,この関数を使用すること.
�A キーボードからファイル名を入力し,そのファイルの文字コードを判別し,画面に表示する.
ただし,指定ファイルの文字コードはJIS,EUC,SJISとする.
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006/07/20まで
[5] その他の制限: 特になし
よろしくおねがいします。
0054デフォルトの名無しさん
2006/07/08(土) 22:53:20tanを使うと面倒じゃない?
線分が与えられてるから位置ベクトルに直して内積で直角で交わるか否かを判定した方が楽だと思う
0055デフォルトの名無しさん
2006/07/08(土) 23:07:55scanf("%s", ...)は如何な最中。
空白を含む文字列を(そのままの形では)入力できないぞ。
あ、どうせだから文字数制限もしておくべきか。
#scanf("%1023[^\n]", ...)で委員で内科医?
0056デフォルトの名無しさん
2006/07/08(土) 23:21:58その例ならfgets使うほうが健全な気がしてならない
0057taka
2006/07/08(土) 23:23:49先ほど質問をさせて頂いた者です。
質問の内容に、一部不備がありました。申し訳ありません。
教授が言うには、垂直判定といっても、ぴったり90°で交わっている線分だけを垂直とみなすわけではなく、89°や91°も垂直とみなして良いというように、90°±αのゆるやかさを持たせなさい、とのことです。
ベクトルだと、びったり90°のものしか判定されないような気がするのですが…。
0058デフォルトの名無しさん
2006/07/08(土) 23:52:27(1)例外処理は任せた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2301.c
データを増やせばもっと速くなるぞ!
0059デフォルトの名無しさん
2006/07/08(土) 23:56:21もうそのネタ秋田
0060デフォルトの名無しさん
2006/07/09(日) 00:09:28006153
2006/07/09(日) 00:52:070062デフォルトの名無しさん
2006/07/09(日) 01:37:50ちょっと処理は増えるけど
・2つの線分の長さを算出
・ベクトルから内積を算出
をして
cos([89度のラジアン]) < ([内積] / [2つの線分の長さの積]) < cos([91度のラジアン])
とか?
tan は、始点と終点の x 座標が同じ時の処理がメンドイ・・・(ごめん)
0063デフォルトの名無しさん
2006/07/09(日) 01:43:29[2] 問題文(含コード&リンク):ttp://www.uploda.org/uporg439919.pdf
[3] 環境
[3.1] WindowsXP
[3.2] gcc
[3.3] C
[4] 期限:7月10日の早朝まで
[5] その他の制限:特にありません
3問と多いですが、どうか宜しくお願いしますm(_ _)m
0064デフォルトの名無しさん
2006/07/09(日) 03:07:47ダメなら寝るぞう
0065デフォルトの名無しさん
2006/07/09(日) 03:30:24>>63
「12F574」も一致させる必要がありますか?
っていうかpdfからコピペ出来ないからマンドクセ
0066デフォルトの名無しさん
2006/07/09(日) 03:36:59そもそもそういうのは各々の使用環境によって異なるんでは?
0067デフォルトの名無しさん
2006/07/09(日) 03:59:52main() {
char name[10] = {"NAOKISATO"};
char *add;
int i;
add = name;
for(i = 0; i < 9; i++){
printf("アドレス %x には文字 %c が格納されています。\n", 0x12F574, name[i]);
}
printf("\n");
printf("逆に並べ替えて表示すると\n");
for(i = 8; i >= 0; i--){
printf("アドレス %x には文字 %c が格納されています。\n", 0x12F574, name[i]);
}
}
0068デフォルトの名無しさん
2006/07/09(日) 04:27:230069デフォルトの名無しさん
2006/07/09(日) 04:53:16printf("アドレス %x には文字 %c が格納されています。\n", add++, *add);
}
printf("\n");
printf("逆に並べ替えて表示すると\n");
for(i = 8; i >= 0; i--){
printf("アドレス %x には文字 %c が格納されています。\n", --add, *add);
}
0070デフォルトの名無しさん
2006/07/09(日) 07:05:24PDFからコピペの方法しらんのか?
0071デフォルトの名無しさん
2006/07/09(日) 07:09:46知ってるなら教えて下さい
0072デフォルトの名無しさん
2006/07/09(日) 08:06:17普通は出来るけど >>63 のは禁止されてる
0073デフォルトの名無しさん
2006/07/09(日) 13:08:16右クリック⇒てのひらツールでテキスト選択
もしくは、上のツールバーの手のマークの横の「選択」ってのを押す
>>72
へ?できるんだが・・・
0074デフォルトの名無しさん
2006/07/09(日) 13:09:39と、思ったらマジで禁止されてる・・・何これ
0075デフォルトの名無しさん
2006/07/09(日) 13:44:240076デフォルトの名無しさん
2006/07/09(日) 15:01:07何これって、何それ
0077デフォルトの名無しさん
2006/07/09(日) 15:42:21[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2292.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2006年07月11日まで]
[5] その他の制限: なし
よろしくお願いします。
0078デフォルトの名無しさん
2006/07/09(日) 15:49:12含めてもらえんものかね。
どれが既出でどれが解かれてないのか、いちいちリンク先見ないとわからん。
007977
2006/07/09(日) 16:24:40申し訳ありません。以後気をつけます。
0080デフォルトの名無しさん
2006/07/09(日) 18:46:17http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2305.txt
ただしこっちの環境はwinでBCCだ
0081デフォルトの名無しさん
2006/07/09(日) 19:09:582、
struct prsn{
char name[256];
long birth;
char address[256];
char tel[256];
}prsn_data;
3、
#include<stdio.h>
#include<math.h>
#define PAI 3.14159
int main(void){
int i;
double x,y,r,theta;
FILE *fp;
fp = fopen("output.csv", "w");
for(i=0; i<360; i++){
r = (double)i * 0.1;
theta = PAI * (double)i/180.0;
x = r * cos(theta);
y = r * sin(theta);
fprintf(fp, "%8.4f,%8.4f\n", x, y);
}
fclose(fp);
return 0;
}
ただしこっちの環境はBCCだ
0083デフォルトの名無しさん
2006/07/09(日) 23:03:50[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
英語のテキストファイルを読み込み,各単語(空白あるいは,ピリオド「.」,カンマ「,」で区切られたものとする)
の出現数をカウントして出力するプログラムを外部ハッシュ法を用いて作成せよ. プログラムの流れは以下のようになる.
1. ファイルの先頭から最後まで順に1つの単語を読み込みながら2.を実行する
2.1.で読み込んだ単語wについて以下を行う.
2.1 ハッシュ値を求める.
2.2 同じハッシュ値をもつすべての単語について,wと同じものがあるかを調べる.
2.3 同じものがあればその出現回数を+1する.なければ,
w(およびその出現回数(初期値は1))を格納するセルを作成し,バケットに連結する.
3. 単語を出現回数と共に出力する.
ハッシュ表に格納するセルの定義は次のようなものとする.
typedef struct cell *cellptr;
typedef struct cell {
char *word;
int count;
struct cell *next;
} cell;
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: borland C++
[3.3] 言語: C言語
[4] 期限: 7/12まで
[5] その他の制限: ありません。
0084デフォルトの名無しさん
2006/07/09(日) 23:09:57そのハッシュ値ってどうやって計算するの?
008583
2006/07/09(日) 23:31:17#define B 100
#define W 6
int h(char *x)
{
int i,hash;
hash = i = 0;
while(x[i] != 0 && i < W){
hash = hash + (int)x[i];
i++;
}
hash = hash%B;
return (hash);
}
008683
2006/07/09(日) 23:32:40利用できそうなら、使ってください。
enum yn {yes,no};
enum yn menber(char *x, struct cell **A){
struct cell *q, *r;
q = A[h(x)];
while(q != NULL){
if(strcmp(q->word,x) == 0)
return(yes);
r = q;
q = q->next;
}
return(no);
}
よろしくお願いします。
0087デフォルトの名無しさん
2006/07/10(月) 03:10:23気になるところがいくつか
cellptr の typedef はまとめて
typedef struct cell {
char *word;
int count;
struct cell *next;
} cell, *cellptr;
でいいと思う
だけど
struct cell *q, *r;
としてるのが不明
せっかくだから
struct cellptr q, r;
という使い方しないの?
0088デフォルトの名無しさん
2006/07/10(月) 08:42:44ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2309.c
0090デフォルトの名無しさん
2006/07/10(月) 09:42:50#include <stdlib.h>
int main(int argc, char *argv[])
{
double x,y;
char buf[1024];
do
{
printf("実数1を入力してちょ: ");
fgets(buf,1024,stdin);
}while((sscanf(buf,"%lf",&x))!=1);
do
{
printf("実数2を入力してちょ: ");
fgets(buf,1024,stdin);
}while((sscanf(buf,"%lf",&y))!=1);
printf("和: %lf\n",x+y);
printf("差: %lf\n",x-y);
printf("積: %lf\n",x*y);
printf("商: %lf\n",x/y);
system("PAUSE");
return 0;
}
値はscanf()で文字列として取り込み、
atof()で実数に変換するにはどうすればいいですか?
0091デフォルトの名無しさん
2006/07/10(月) 09:59:25いまのでいいじゃん
009241
2006/07/10(月) 13:56:01無事に動きました!
ありがとうございました!!ぜひとも参考にさせていただきます。
>>56,>>56
貴重なご意見ありがとうございます。
早速、改良してみようと思います!
0093デフォルトの名無しさん
2006/07/10(月) 14:40:53[2] 問題文
次の配列の平均、分散、標準偏差を計算するプログラムを作りなさい。
double a[5]={1.0,2.0,3.0,4.0,5.0};
N-1
平均 α=1/N*Σαi
i=0
N-1
分散 σ^2=1/N*Σ(αi-α)^2
i=0
標準偏差 σ=√σ^2
3] 環境
[3.1] XP
[3.2] gcc 3.4
[3.3] Cのみ
[4] 期限:今日中にお願いします(*。_。)
[5] その他の制限:まだ初心者です、誰か優しい方お願いします(o^-^o)
表記の仕方とかよくわからないんで適当にやってしまったのですが
わかり辛かったらごめんさなぃ<(_ _*)>
0094デフォルトの名無しさん
2006/07/10(月) 15:29:16// 既存ソースの流用なんで、scanf()のところを配列参照にするのはやってくれ
#include <stdio.h>
#include <float.h>
#include <math.h>
int main(void)
{
int n = 0;
double x, mean, mean2, dis;
while (scanf("%lf", &x) == 1) {
if (n == 0) {
mean = x;
mean2 = x * x;
} else {
mean += x;
mean2 += x * x;
}
++n;
}
mean /= n;
dis = mean2 / n - mean * mean;
printf("平均値:%.15g\n分散:%.15g\n標準偏差:%.15g\n",
mean, dis, sqrt(dis));
return 0;
}
0095デフォルトの名無しさん
2006/07/10(月) 15:39:21使えないやつだな
0096デフォルトの名無しさん
2006/07/10(月) 15:39:25#include <stdio.h>
#include <math.h>
int main(void)
{
double a[5]={1.0,2.0,3.0,4.0,5.0};
double mean = 0;
double mean2 = 0;
int n = sizeof(a) / sizeof(* a);
for (int ic = 0; ic < n; ++ic) {
mean += a[ic];
mean2 += a[ic] * a[ic];
}
// 分母の調整が要りそうなので、その場合は次の行を有効に。
// --n;
mean /= n;
double dis = mean2 / n - mean * mean;
printf("平均値:%g\n分散:%g\n標準偏差:%g\n", mean, dis, sqrt(dis));
return 0;
}
0097デフォルトの名無しさん
2006/07/10(月) 18:24:50だったらお前がソースを書けよwwwww
つかえねぇー低レベルな学校の教員さんよぉ
0098デフォルトの名無しさん
2006/07/10(月) 18:49:17難易度の把握と模範解答若しくは単に解答例の
獲得を主たる目的とするスレです
0099デフォルトの名無しさん
2006/07/10(月) 21:21:49[2] 問題文(含コード&リンク):
アルファベットaとbを適当な順番で並べた任意の長さの文字列に対して、隣り合う2文字が同じであればSに、
異なっていればDに置き換えたい。すなわちabbaaabbbabbaと入力した場合に、DSDSSDSSDDSDと出力させるようにせよ。
入力文字列の文字数よりも、出力文字列の文字数が1文字少なくなることに留意すること。
【ヒント】ポインタの位置を進める前に、ポインタ変数の刺す文字型データを文字型変数に代入しておく
(文字型変数をpreとするとpre = *abとすればよい)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Visual C++ 2005 Express Edition
[3.3] 言語: C
[4] 期限: 11日末まで
0100デフォルトの名無しさん
2006/07/10(月) 22:13:06#include<stdio.h>
#include<string.h>
int main(void){
char *str = "abbaaabbbabba";
char alp = *str;
int i, iCnt = strlen(str);
for(i=1; i<iCnt; i++){
str++;
if(*str == alp)putchar('S');
else putchar('D');
alp = *str;
}
return 0;
}
ただしこっちの環境はBCC
0101デフォルトの名無しさん
2006/07/10(月) 22:21:51ごめん無駄に長かった
#include<stdio.h>
int main(void){
char *str = "abbaaabbbabba";
char alp = *str;
while(1){
if(*++str == '\0')break;
putchar(*str ==alp? 'S':'D');
alp = *str;
}
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています