トップページ⇒tech
1001コメント387KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/07/05(水) 19:24:57
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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:42
いいかげんにしろ
0003デフォルトの名無しさん2006/07/05(水) 19:33:25
>>1
スレ立て乙
0004デフォルトの名無しさん2006/07/05(水) 20:31:08
1] 授業単元:プログラミング
[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
>>4
><省略>

するな。
0006デフォルトの名無しさん2006/07/05(水) 20:40:52
>>5
そういう問題なんだから仕方ないよ。
0007デフォルトの名無しさんNGNG
プログラム内で指定すべき初期値を省略されたら書けない罠。
0008デフォルトの名無しさん2006/07/05(水) 20:51:03
>>4
#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
とりあえずは何番目かの66の片方を使う事に流れたみたいだな・・・
先にあっち消費してくるか・・・
0011デフォルトの名無しさん2006/07/05(水) 23:33:37
[1]授業単元:プログラミング
[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:36
aaaa^ _a;

aaaaはクラスです。こんな定義できましたっけ?
0013デフォルトの名無しさん2006/07/05(水) 23:48:19
CLIだな。
_aはaaaaを指すマネージドポインタ
0014デフォルトの名無しさん2006/07/06(木) 00:45:08
[1] 授業単元:伏せ
[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
[1] 授業単元:コンピューター実習
[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:24
CtrlDを押したらどうなるべきなんだろう……
0017デフォルトの名無しさん2006/07/06(木) 23:08:47
>>15 超適当
#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
>>15

一応構文解析するようにしてみた。多少バグあり。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2276.c

誰か治してくれ。 orz

0019デフォルトの名無しさん2006/07/07(金) 14:24:52
0で割ろうとすると…
0020デフォルトの名無しさん2006/07/07(金) 14:55:10

「 - 」 のときの処理(優先度とか)がおかしい気がする
0021デフォルトの名無しさん2006/07/07(金) 15:12:12
char cmojiretu[50] = "AAABCCCCCCCCDDDEFGHHHHJJJ";
char 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:43
nihongono bankyouha simashitaka?
0023huniya2006/07/07(金) 15:19:10
授業単元:Windos
問題:西暦と月を入力し、その月のカレンダーを出力せよ。
環境:C言語です。
0024デフォルトの名無しさん2006/07/07(金) 15:30:44
>>21
どうでもいいとこだけにコメントが書いてあるな。
0025デフォルトの名無しさん2006/07/07(金) 15:33:01
ってかマルチだしスルーでしょ
0026c++2006/07/07(金) 16:05:56
[1] 授業単元: プログラミング言語
[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:32
>>23
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2285.txt
0029デフォルトの名無しさん2006/07/07(金) 18:31:48
[1] C言語プログラミング
[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
>>26
#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
[1] 授業単元: プログラミング
[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
>>31
#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
>>32
こんなに早くありがとうございます!!
0034デフォルトの名無しさん2006/07/07(金) 22:24:20
[1] 授業単元: プログラミング基礎1
[2] 問題文(含コード&リンク): ファイル名をキーボードから入力し,キーボードから10行分のテキスト(空白文字無し)を読み込んで,その内容をファイルに格納するプログラムを作成せよ.

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VisualStudio2003
 [3.3] 言語: C
[4] 期限: できるだけ早くお願いします
0035デフォルトの名無しさん2006/07/08(土) 00:02:45
>>34
#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
>>35
寝ろ
0037デフォルトの名無しさん2006/07/08(土) 11:43:02
なぜ標準入力ではなくキーボードなのか
0038デフォルトの名無しさん2006/07/08(土) 11:48:02
>>29 お願いします
0039デフォルトの名無しさん2006/07/08(土) 12:26:33
>>29
#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:33
あ…まぁいいや。
0041デフォルトの名無しさん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:01
入力と受信の並列処理ってなに?(´・ω・`)
0043デフォルトの名無しさん2006/07/08(土) 18:09:49
文字通りの意味でしょ?
0044412006/07/08(土) 18:21:10
>>42
文字通りの説明になってしまいますが、
相手側からのデータ受信、キーボードからの入力の
どちらが来ても対応できるように並列で処理するということでいいでしょうか。

そしてその並列処理(マルチスレッド)をselect()関数で実現するというのが
今回の課題の主眼らしいです。
0045デフォルトの名無しさん2006/07/08(土) 18:30:35
書き込み中に受信があったら表示す(=゚ω゚)ノぃょぅるのね
0046412006/07/08(土) 18:35:12
>>45
はい、そういう仕様で大丈夫ですので
ぜひともお願いします。
0047デフォルトの名無しさん2006/07/08(土) 18:46:50
>>45
せめて行単位で
     シ-‐‐-、
    ノ //|.i i
やらないか
    ノ/」_´__ソ.| <あたしゃもう疲れたよ
0048taka2006/07/08(土) 19:23:39
[1] 授業単元: プログラミング
[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] その他の制限: よろしくお願いします。
0049412006/07/08(土) 19:24:51
>>47
肝は並列処理らしいですので
行単位でも並列処理していただければ大丈夫だと思います。
よろしくおねがいします。
0050デフォルトの名無しさん2006/07/08(土) 20:10:16
>>49
もうすぐできる(と思う) (=´ω`)ノ
0051デフォルトの名無しさん2006/07/08(土) 20:43:37
>>41
誰かあら捜し頼む。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2300.txt

べ、べつに自分の勉強のために解いたんだからね!
0052412006/07/08(土) 21:16:21
早速ありがとうございます!!
家のPC環境ではコンパイルできないので、
月曜に大学で動作確認するつもりです。
すみませんが、それからまた報告にあがります。
0053デフォルトの名無しさん2006/07/08(土) 21:53:26
[1] 授業単元:プログラミング演習
[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:20
>>48
tanを使うと面倒じゃない?
線分が与えられてるから位置ベクトルに直して内積で直角で交わるか否かを判定した方が楽だと思う
0055デフォルトの名無しさん2006/07/08(土) 23:07:55
>>51
scanf("%s", ...)は如何な最中。
空白を含む文字列を(そのままの形では)入力できないぞ。
あ、どうせだから文字数制限もしておくべきか。
#scanf("%1023[^\n]", ...)で委員で内科医?
0056デフォルトの名無しさん2006/07/08(土) 23:21:58
>>55
その例ならfgets使うほうが健全な気がしてならない
0057taka2006/07/08(土) 23:23:49
>>54
先ほど質問をさせて頂いた者です。
質問の内容に、一部不備がありました。申し訳ありません。

教授が言うには、垂直判定といっても、ぴったり90°で交わっている線分だけを垂直とみなすわけではなく、89°や91°も垂直とみなして良いというように、90°±αのゆるやかさを持たせなさい、とのことです。
ベクトルだと、びったり90°のものしか判定されないような気がするのですが…。
0058デフォルトの名無しさん2006/07/08(土) 23:52:27
>>53
(1)例外処理は任せた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2301.c

データを増やせばもっと速くなるぞ!
0059デフォルトの名無しさん2006/07/08(土) 23:56:21
>>58
もうそのネタ秋田
0060デフォルトの名無しさん2006/07/09(日) 00:09:28
(´・ω・`) ショボーン
0061532006/07/09(日) 00:52:07
自己解決しました
0062デフォルトの名無しさん2006/07/09(日) 01:37:50
>>57
ちょっと処理は増えるけど
・2つの線分の長さを算出
・ベクトルから内積を算出
をして

cos([89度のラジアン]) < ([内積] / [2つの線分の長さの積]) < cos([91度のラジアン])

とか?
tan は、始点と終点の x 座標が同じ時の処理がメンドイ・・・(ごめん)
0063デフォルトの名無しさん2006/07/09(日) 01:43:29
[1] 授業単元:プログラミング言語C
[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:52
#include <stdio.h>

main() {
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:23
printf("アドレス %x には文字 %c が格納されています。\n",&add[i],add[i]); かな?
0069デフォルトの名無しさん2006/07/09(日) 04:53:16
for(i = 0; i < 9; i++){
printf("アドレス %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:24
>>65
PDFからコピペの方法しらんのか?
0071デフォルトの名無しさん2006/07/09(日) 07:09:46
>>70
知ってるなら教えて下さい
0072デフォルトの名無しさん2006/07/09(日) 08:06:17
>>70

普通は出来るけど >>63 のは禁止されてる
0073デフォルトの名無しさん2006/07/09(日) 13:08:16
>>71
右クリック⇒てのひらツールでテキスト選択
もしくは、上のツールバーの手のマークの横の「選択」ってのを押す

>>72
へ?できるんだが・・・
0074デフォルトの名無しさん2006/07/09(日) 13:09:39
>>72
と、思ったらマジで禁止されてる・・・何これ
0075デフォルトの名無しさん2006/07/09(日) 13:44:24
タグ名 prsn なんて、悪いコーディングのお手本だな。
0076デフォルトの名無しさん2006/07/09(日) 15:01:07
>>74
何これって、何それ
0077デフォルトの名無しさん2006/07/09(日) 15:42:21
[1] 授業単元:プログラミング実習
[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
問題が長い人さー、問題の先頭3,4行とか、問題の概略とかをコメントに
含めてもらえんものかね。
どれが既出でどれが解かれてないのか、いちいちリンク先見ないとわからん。
0079772006/07/09(日) 16:24:40
>>78
申し訳ありません。以後気をつけます。
0080デフォルトの名無しさん2006/07/09(日) 18:46:17
>>77
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2305.txt
ただしこっちの環境はwinでBCCだ
0081デフォルトの名無しさん2006/07/09(日) 19:09:58
>>63
2、
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だ
0082772006/07/09(日) 22:23:25
>>80
私の環境でも無事動作することを確認しました。
本当のありがとうございました。
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
>>83
そのハッシュ値ってどうやって計算するの?
0085832006/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);
}

0086832006/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:44
>>83

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2309.c
0089832006/07/10(月) 08:47:59
>>87
存在判定は教科書のを載せたので、struct cellptr q, r; でいいと思います。

>>88
ありがとうございます。
0090デフォルトの名無しさん2006/07/10(月) 09:42:50
#include <stdio.h>
#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
scanfは使うな
いまのでいいじゃん
0092412006/07/10(月) 13:56:01
>>51
無事に動きました!
ありがとうございました!!ぜひとも参考にさせていただきます。

>>56,>>56
貴重なご意見ありがとうございます。
早速、改良してみようと思います!
0093デフォルトの名無しさん2006/07/10(月) 14:40:53
[1] 授業単元:プログラミング
[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
>>93
// 既存ソースの流用なんで、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
>>94
使えないやつだな
0096デフォルトの名無しさん2006/07/10(月) 15:39:25
// >94を題意にあわせて、よりシンプルに
#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
>>95
だったらお前がソースを書けよwwwww
つかえねぇー低レベルな学校の教員さんよぉ
0098デフォルトの名無しさん2006/07/10(月) 18:49:17
ここは学生に宿題を出す前にスレの住人に解かせて
難易度の把握と模範解答若しくは単に解答例の
獲得を主たる目的とするスレです
0099デフォルトの名無しさん2006/07/10(月) 21:21:49
[1] 授業単元: プログラム
[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
>>99
#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
>>99
ごめん無駄に長かった
#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;
}
■ このスレッドは過去ログ倉庫に格納されています