08/10/10 12:03:51
>>199
ありがとうございました
201:デフォルトの名無しさん
08/10/10 12:16:32
なぜうp先は関西2ちゃんねらーなんですか
202:デフォルトの名無しさん
08/10/10 15:52:19
[1] 授業単元: c言語
[2] 問題文(含コード&リンク): ペイントソフトを作る
[3] 環境
[3.1] OS: windowsXP
[3.2] コンパイラ名とバージョン: Visual studio .NET 2003
[3.3] 言語: c,c++
[4] 期限: 2週間後の火曜まで
[5] その他の制限: MFCを使用しない
線の描画などはできましたが、ペンの太さや色の変更、 操作のやり直しなどが分かりません
どなたかよろしくお願いします
203:デフォルトの名無しさん
08/10/10 16:39:02
>>202
単線だけでいいんじゃないの
機能つけるときりがないよ
アンドゥとか特に無理
204:デフォルトの名無しさん
08/10/10 17:14:13
>>203
返事ありがとうございます
やはり、アンドゥ機能などは難しいのですかね?
今までc言語はやった事があったのですが
それに比べるとVC++は色々ややこし過ぎて困っています。
画面を左右に分けて、描画とパレットのように分けて作ろうと思っているのですが
雛形みたいなのはあるのでしょうか?
205:デフォルトの名無しさん
08/10/10 19:34:20
1] 授業単元:C++
[2] 問題文:ファイルから波形を読み込み、FFTした結果をテキスト出力する
プログラムを作成せよ。
波形のデータは以下のようなものです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C++
[4] 期限: [無制限]
[5] その他の制限:まだCの勉強が浅く、色々と検索してみましたがどうもバタフライ演算の
やり方が難しく分かりません。。何か説明不足があれば聞いてください。
FFTで詰まってしまい困っています。どうか、よろしくお願いしますm(_ _)m
206:デフォルトの名無しさん
08/10/10 19:35:12
>>204
宿題できてんじゃん。
色・ふとさ固定、undoできないなどの機能制限がたくさんあるが、それは立派なペイントソフトだよ。
さらに機能追加をしたいのであれば必要に応じてデバイスコンテキストに関する質問その他を
やってけば?宿題スレじゃなく。
207:デフォルトの名無しさん
08/10/11 01:02:05
どなたか>>100お願いできませんか
208:デフォルトの名無しさん
08/10/11 02:44:59
>>207
鬱になったので、途中から手を抜いてしまった。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
PerlでもRubyでも好きなの使った方がラクダと思うけどキリンか。
209:デフォルトの名無しさん
08/10/11 02:57:37
>>204
汚いけど、これじゃだめ??
URLリンク(kansai2channeler.hp.infoseek.co.jp)
210:デフォルトの名無しさん
08/10/11 02:59:33
>>204じゃなくて>>207でした(´・ω・`)
211:デフォルトの名無しさん
08/10/11 08:13:31
>>202
線じゃなくて、点を打つようにすると太さ変えるのも楽になる
お絵かきチャットでは、線と線を結んでる場合が多いけど
ローカルで使えるペイントソフトはたいてい点を打って点を繋いでると思われる
点をつなげるのは、結構めんどい
アンドゥは、やり方がいくつかある
画像として管理するか
数値データとして管理するか、かな。
突貫でいいなら画像として管理するのを作ったほうが楽かもしれない
どちらが得意かによる
212: ◆ZnBI2EKkq.
08/10/11 12:00:32
[1] 授業単元:情報処理A
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Cygwin gcc 3.4.4
[3.3] 言語:C
[4] 期限:2008年10月17日 16:00まで
[5] その他の制限:scanf関数は禁止、再帰呼び出しを用いること、エラー処理を入れること
今もやっているのですが、とても期限までに終わる気がしません。。。
誰か助けてください。
213:デフォルトの名無しさん
08/10/11 15:35:33
[1] 授業単元:c++ builder
[2] 加算平均を求めよ
[3] 環境
[3.1] OS:windows xp
[3.2] コンパイラ名とバージョン: c++ builder5
[3.3] 言語: どちらでも可
[4] 期限:2008年10月13日まで
テキスト1には テキスト2には テキスト3には
8 3 4
5 4 7
7 9 9
8 8 5
9 3 4
9 8 9
という形で与えられており、これをOpendialogで読み込んで加算平均しMemo1に
5
5.33333
8.33333
7
5.33333
8.66666
のように計算したものを出したいのですがどのようにすればよいでしょうか?
全然わからなくて何度か自分なりにつくっているのですが、うまくいきません。
どなたか助けてもらえませんか
読み込みはなんとかできそうですが加算平均の配列の計算のプログラムの作り方が
どうしてもわかりません。
よろしくお願いします。
214:デフォルトの名無しさん
08/10/11 16:00:03
>>213 Opendialog っていうのが分からなかった
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define NUMBER_OF_FILES 3
int main(void){
FILE *fp_in[NUMBER_OF_FILES], *fp_out;
char *filename_in[NUMBER_OF_FILES]={"テキスト1", "テキスト2", "テキスト3"}, *filename_out="Memo1";
double value[NUMBER_OF_FILES], sum;
int i;
for(i=0;i<NUMBER_OF_FILES;i++){
if((fp_in[i]=fopen(filename_in[i], "r"))==NULL){
fprintf(stderr, "\nError: %s cannot open.\n", filename_in[i]);
exit(1);
}
}
if((fp_out=fopen(filename_out, "w"))==NULL){
fprintf(stderr, "\nError: %s cannot open.\n", filename_out);
exit(2);
}
while(1){
for(i=0,sum=0.0;i<NUMBER_OF_FILES;i++){
if(fscanf(fp_in[i], "%lf", &value[i])!=1) break;
sum+=value[i];
}
if(i<NUMBER_OF_FILES) break;
fprintf(fp_out, "%g\n", floor(sum/NUMBER_OF_FILES*100000)/100000);
}
for(i=0;i<NUMBER_OF_FILES;i++) fclose(fp_in[i]);
fclose(fp_out);
return 0;
}
215:デフォルトの名無しさん
08/10/11 16:01:28
>>212
マージャン知らないと不利な課題だな。
216:デフォルトの名無しさん
08/10/11 16:07:36
>>212
URLリンク(www5f.biglobe.ne.jp)
参考になるかも?
217:デフォルトの名無しさん
08/10/11 16:49:40
>>207 >>100
URLリンク(kansai2channeler.hp.infoseek.co.jp)
一応動くようにしてみた。コマンドライン引数は、すべて実装しているわけではない。
後は好きなようにしてくれ。
218:デフォルトの名無しさん
08/10/11 17:14:43
>>207 >>100
URLリンク(kansai2channeler.hp.infoseek.co.jp)
>>217 の細かい修正とエラー処理追加しておいた。荒れそうなので、これくらいにしておく(鬱)。
219:デフォルトの名無しさん
08/10/11 20:58:59
>>218ありがとうございます。
>>209ファイル入力、標準出力はうまくいきました。
標準入出力、ファイル入出力を成功させるにはどうしたらいいでしょうか。
220:デフォルトの名無しさん
08/10/11 21:08:15
[1] 授業単元: 測量学
[2] 問題文:"度"形式から"度分秒"形式への変換
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: コマンドプロンプト バージョンはすいません分からないです。
[3.3] 言語: C言語
[4] 期限: 10月13日(月)まで
[5] その他の制限: 簡単な関数のみでお願いします。
(例)
35.2361 → 35°14′9.96″
変換式は、まず
35.2361の小数点部分の0.2361×60=14.166
この結果の整数部分の14が分になります。
そして、14.166の小数点部分の0.166×60=9.96
この結果の9.96が秒になります。
初期値35.2361も出力値35°14′9.96″も文字列です。
初期値が35.2361ではなく、何が初期値でも通用するようにしてください。
また、初期値の小数点以下が2361と4桁と決まっているわけでもありません。
221:デフォルトの名無しさん
08/10/11 21:46:26
>>220
スレリンク(tech板:312-315番)
222:デフォルトの名無しさん
08/10/11 22:01:49
>>220
#include<stdio.h>
#include<math.h>
void convert(char *dms, const char *deg)
{
double x, d, m;
sscanf(deg, "%lf", &x);
x = fabs(modf(x, &d) * 60);
x = modf(x, &m) * 60;
sprintf(dms, "%g°%g′%g″", d, m, x);
}
int main()
{
static const char deg[] = "-35.2361";
char dms[100];
convert(dms, deg);
printf("%s\n", dms);
return 0;
}
223:213
08/10/11 22:03:42
>>214
即レスありがとうございます。大変感謝しています;;
Opendialogはc++builder5のダイアログでファイルを開くというコマンドを示しています
わざわざプログラムを書いていただいたのですが、これをc++builderに
置き換えていくことができませんでした。すいません;;
自分でも今まで書いていたのですが、Memo1には-2と一行書き出されるだけでした;
多分読み込んだ配列の計算としての基本的な計算とプログラムが間違っていると思うのですが、
自分ではどこが間違っているのかわかりませんでした。。
どなたかよければ教えていただけないでしょうか。よろしくお願いします><
224:213
08/10/11 22:08:40
void __fastcall TForm1::Button1Click(TObject *Sender) ファイルを開いてテキスト1を読み込む
{
OpenDialog1->Execute();
Fname1 = OpenDialog1->FileName;
Edit1->Text = Fname1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender) テキスト2を読み込む
{
OpenDialog1->Execute();
Fname2 = OpenDialog1->FileName;
Edit2->Text = Fname2;
}
225:213
08/10/11 22:09:10
void __fastcall TForm1::Button3Click(TObject *Sender) テキスト3を読み込む
{
OpenDialog1->Execute();
Fname3 = OpenDialog1->FileName;
Edit3->Text = Fname3;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender) 3つのテキストを加算平均してMemo1に書き出す
{
AnsiString kasan;
char Fname1[5],Fname2[5],Fname3[5];
for(m=0;m<=5;m++);
{
kasan = (Fname1[m] + Fname2[m] + Fname3[m])/3;
}
Memo1->Lines->Add(kasan);
226:213
08/10/11 22:10:31
長文失礼しました。。
こんな感じです。
227:デフォルトの名無しさん
08/10/12 03:30:31
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
#include <fstream>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE 管理のコンポーネント
TEdit *Edit1;
TEdit *Edit2;
TEdit *Edit3;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Button4;
TOpenDialog *OpenDialog1;
TMemo *Memo1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button4Click(TObject *Sender);
private: // ユーザー宣言
AnsiString Fname1;
AnsiString Fname2;
AnsiString Fname3;
228:デフォルトの名無しさん
08/10/12 03:31:35
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
これがUnit1.hね
それからUnit1.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenDialog1->Execute();
Fname1 = OpenDialog1->FileName;
Edit1->Text = Fname1;
}
229:デフォルトの名無しさん
08/10/12 03:32:24
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
OpenDialog1->Execute();
Fname2 = OpenDialog1->FileName;
Edit2->Text = Fname2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
OpenDialog1->Execute();
Fname3 = OpenDialog1->FileName;
Edit3->Text = Fname3;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
std::ifstream ifs[3];
ifs[0].open(Fname1.c_str());
ifs[1].open(Fname2.c_str());
ifs[2].open(Fname3.c_str());
for (int i = 0; i < 6; i++) {
double sum, t1, t2, t3;
ifs[0] >> t1;
ifs[1] >> t2;
ifs[2] >> t3;
sum = (t1 + t2 + t3) / 3;
Memo1->Lines->Add(AnsiString(sum));
}
}
230:213
08/10/12 03:59:24
>>227>>228>>229
ありがとうございました!
おかげで正しく算出することができました><
231:デフォルトの名無しさん
08/10/12 04:15:13
[1] 授業単元:アルゴリズム
[2] 引数nに対して、1/nの小数表示を逆配列と動的配列を用いた形でプログラムせよ
URLリンク(kk.kake.info.waseda.ac.jp)
[3] 環境
[3.1] OS: Windows
[3.2] cygwin gcc 3.4
[3.3] 言語: C
[4] 期限: [2008年10月12日00:00まで]
[5] 特になし
全然わかりません……どなたか助けて頂けると幸いです……
232:デフォルトの名無しさん
08/10/12 13:29:10
>>231
URLリンク(kansai2channeler.hp.infoseek.co.jp)
233:デフォルトの名無しさん
08/10/12 14:05:25
>>232
動きました!
あぁ…なんといっていいやら……ありがとうございます!!
これからプログラムの挙動について考えてみたいと思います
234:デフォルトの名無しさん
08/10/12 20:21:40
てs
235:デフォルトの名無しさん
08/10/12 21:59:38
[1] 授業単元:アルゴリズムとデータ構造
[2] 問題文(含コード&リンク):任意の長さの文字列(英字のみ)データをファイルから読み込み(ファイル名をキーボードから入力して読み込ませる)、辞書順に並べ替えて最終結果のみを表示するプログラムを作成せよ。
ただし、データは改行で区切られており、文字列の最大長を64文字、データの最大個数を1000個(1000行)とする。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc (バージョン不明です)
[3.3] 言語: C言語
[4] 期限: 2008年10月14日23:59まで
[5] その他の制限: バブルソートの基本らしいのですが…str~、getsなど使用する関数や、とりあえず、配列とポインタを使わないといけないんだろう、など断片的なものにしか自信が、持てずプログラムを組んでみたものの実行できません…orz
助けてください…。
236:デフォルトの名無しさん
08/10/12 22:05:11
>>235
問題文には含んでないけど
結局バブルソートは自分で書かなきゃだめなのか?
平たくいえばqsortとstrcmp使っていいか?
237:デフォルトの名無しさん
08/10/12 22:15:10
>>236
qsortという関数はまだ習っていないのでなるべく控えたいのですが、strcmpは自分がプログラムを組んでみた時にも使用しましたので使っていただいて大丈夫です。
早速ありがとうございます。
238:デフォルトの名無しさん
08/10/12 22:31:36
>>235
#include<stdio.h>
#include<string.h>
#define WORD_NUM_MAX 1000
#define WORD_LEN_MAX 64
int main(void){
char word[WORD_NUM_MAX][WORD_LEN_MAX+1+1], tmp[WORD_LEN_MAX+1], *p;
char filename[256];
int i, j, word_num;
FILE *fp;
printf("Input filename : ");
scanf("%255[^\n]", filename);
if((fp=fopen(filename, "r"))==NULL) return 1;
for(word_num=0;word_num<WORD_NUM_MAX;word_num++){
if(fgets(word[word_num], sizeof(word[0]), fp)==NULL) break;
if((p=strchr(word[word_num], '\n'))!=NULL) *p='\0';
}
fclose(fp);
for(i=0;i<word_num;i++){
for(j=0;j+1<word_num-i;j++){
if(strcmp(word[j], word[j+1])>0){
strcpy(tmp, word[j]);
strcpy(word[j], word[j+1]);
strcpy(word[j+1], tmp);
}
}
}
for(i=0;i<word_num;i++) puts(word[i]);
return 0;
}
239:デフォルトの名無しさん
08/10/12 23:21:54
[1] 授業単元:c++ builder
[2] 3科目4人分の得点と科目ごと、個人ごとの平均点を配列を使って作れって
[3] 環境
[3.1] OS:windows xp
[3.2] コンパイラ名とバージョン: c++ builder5
[3.3] 言語: どちらでも可
[4] 期限:2008年10月13日まで
240:デフォルトの名無しさん
08/10/12 23:57:56
>>239
とりあえずgccでは動いた。
#include <stdio.h>
int main(int argc, char *argv[]) {
int score[4][3] = {{90,73,82},{60,50,55},{71,59,80},{95,88,80}};
int i,j;
double personAvg[4];
double classAvg[3];
printf("人別平均\n");
for(i=0; i<4; i++) {
for(j=0; j<3; j++) {
personAvg[i] += score[i][j];
}
personAvg[i] /= 3;
printf("%f\n", personAvg[i]);
}
printf("科目別平均\n");
for(j=0; j<3; j++) {
for(i=0; i<4; i++) {
classAvg[j] += score[i][j];
}
classAvg[j] /= 4;
printf("%f\n", classAvg[j]);
}
}
241:デフォルトの名無しさん
08/10/13 00:07:50
>240
ありがとうございました・・・
世の中すてたもんじゃないっておもいました・・
本当に困ってたので・・・
242:デフォルトの名無しさん
08/10/13 00:17:33
>>241
妙な授業単元に問題文
ついでに抜けてる部分を修正できると思えない人間
言葉からにじみ出てくる、「俺は悪くないよ」オーラ
世の中ろくなもんじゃないよ
243:デフォルトの名無しさん
08/10/13 00:28:25
それは本当の優しさなのだろうか。
244:デフォルトの名無しさん
08/10/13 00:53:39
下記の問題をやっていただける方いませんか?よろしくお願いします
[1]
情報処理
[2]
ある自然数nがある。
このnを和に分解するすべての場合を列挙しなさい。
なお、以下の例のように順列でも組み合わせでもかまわない。
例
n = 4
1 1 1 1
1 1 2
1 2 1
1 3
2 1 1
2 2
3 1
n = 4
1 1 1 1
1 1 2
1 3
2 2
3 1
[3]
[3.1] Linux
[3.2] gcc4.0
[3.3] C言語
[4]
10月15日23:59
[5] 再帰について習いました
245:デフォルトの名無しさん
08/10/13 01:18:06
>>244
#include<stdio.h>
#define N_MAX 100
int g_result[N_MAX];
void bar(int result_num, int n){
int i;
if(n<=0){
for(i=0;i<result_num;i++) printf(" %d", g_result[i]);
printf("\n");
return;
}
for(i=1;i<=n;i++){
g_result[result_num]=i;
bar(result_num+1, n-i);
}
}
void foo(int n){
int i;
if(n>N_MAX) return;
for(i=1;i<=n-1;i++){
g_result[0]=i;
bar(1, n-i);
}
}
int main(void){
int n=4;
printf("n = %d\n", n);
foo(n);
return 0;
}
246:デフォルトの名無しさん
08/10/13 02:55:57
じゃあ僕は組み合わせで。
#include<stdio.h>
#include<string.h>
int partition(int n,int m,char *exp);
int main(void){
int i,n,c;
do{
printf("nを入力してください。 n=");
scanf("%d",&n);
c=0;
for(i=n;i>0;i--) c += partition(n,i,"");
printf("Total:%d\n",c);
}while(n != 0);
return 0;
}
int partition(int n,int m,char *exp){
int i,c=0;
char ex[100]="";
if(n==m){
printf("%s%d\n",exp,m);
return 1;
}
if(m==0) return 0;
if(n>m){
sprintf(ex,"%s%d+",exp,m);
for(i=m;i>0;i--) c += partition(n-m,i,ex);
return c;
}
return 0;
}
247:デフォルトの名無しさん
08/10/13 02:57:17
>>245
どうもありがとうございました。
248:デフォルトの名無しさん
08/10/13 02:58:05
>>246
こちらもどうもありがとうございました。
>>245,246
ソースを理解していきたいです。
249:デフォルトの名無しさん
08/10/13 11:00:03
どなたか >>205 お願いできませんでしょうか・・
250:デフォルトの名無しさん
08/10/13 12:54:17
[1] 授業単元: C
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VB2008
[3.3] 言語: C++
[4] 期限: 10/14まで
[5] その他の制限: 特になし。
どなたか、お願いします。
251:デフォルトの名無しさん
08/10/13 14:09:18
>>249
ネットでぱくれ
252:デフォルトの名無しさん
08/10/13 14:34:26
2次方程式ax^2+bx+cの根を計算するプログラムをかきなさい。
という問題です。
//二次方程式の根を計算するプログラム
#include <stdio.h>
void main () {
double a, b, c, d;
printf("3つの数字を入力してください");
scanf("%d %d %d", &a ,&b ,&c);
d = b*b-4*a*c;
printf("二次方程式の根は%d\n",d);
}
のように書いたのですがすべて答えが同じになってしまいます
お願いします。
253:デフォルトの名無しさん
08/10/13 14:36:35
%d →%f
254:デフォルトの名無しさん
08/10/13 14:38:04
>>252
> 2次方程式ax^2+bx+cの根を計算するプログラムをかきなさい。
>
> という問題です。
> //二次方程式の根を計算するプログラム
> #include <stdio.h>
> void main () {
> double a, b, c, d;
> printf("3つの数字を入力してください");
> scanf("%d %d %d", &a ,&b ,&c);
> d = b*b-4*a*c;
> printf("二次方程式の根は%d\n",d);
> }
>
> のように書いたのですがすべて答えが同じになってしまいます
> お願いします。
> scanf("%d %d %d", &a ,&b ,&c);
scanf("%lf %lf %lf", &a ,&b ,&c);
> printf("二次方程式の根は%d\n",d);
printf("二次方程式の根は%f\n",d);
255:235
08/10/13 16:30:13
>>238
お礼が遅れてすいません、ありがとうございます。
…しかしながら…自分の説明不足のせいで大変申し訳ないのですが、
問題文中の「辞書順」=「大文字小文字も区別する」ということなのです…。
つまり、
A<a<B<b<C<c<D<d<・・・・・・・・・・・・・<X<x<Y<y<Z<z
このように並べ替えたいのです。
>>238さんのプログラムを参考に自分でももう少し考えてみますが、あまり自信がないので手助けしていただけたら幸いです…。
大変申し訳ないです。
256:デフォルトの名無しさん
08/10/13 17:26:45
>>253
>>254
ありがとうございます。
どうやら自分が勘違いしてたようで根は二次方程式の解そのものみたいです。
少し自分でも書きなおしてみましたが教科書には
a=0の場合は1次方程式,b=0かどうかをチェックする必要がある。
二次方程式は判別式の符号をチェックする必要があるとかいてありそれがよくわかりません。
よろしくおねがいします。
#include <stdio.h>
#include <math.h>
void main () {
double a, b, c, d;
printf("3つの数字を入力してください");
scanf("%lf %lf %lf", &a ,&b ,&c);
d = sqrt(b*b-4*a*c);
printf("二次方程式の根は%lf,%lf\n",-b+d/2*a,-b+d/2*a);
}
257:デフォルトの名無しさん
08/10/13 17:38:24
>>256
判別式が負だったらどうすればいいの
解なしと表示するのか虚数まで表示するのか
258:デフォルトの名無しさん
08/10/13 17:59:25
>>257
虚数表示でいいと思います。
259:デフォルトの名無しさん
08/10/13 19:37:42
>>235>>255
URLリンク(kansai2channeler.hp.infoseek.co.jp)
main()はあまりいじってない。もっとクールな比較関数を誰か頼む。
260:デフォルトの名無しさん
08/10/13 19:49:40
それなんてstrcasecmp
261:デフォルトの名無しさん
08/10/13 19:51:29
こうするだけでよくね?
#include<stdio.h>
#include<string.h>
#define WORD_NUM_MAX 1000
#define WORD_LEN_MAX 64
int main(void){
char word[WORD_NUM_MAX][WORD_LEN_MAX+1+1], tmp[WORD_LEN_MAX+1], *p;
char filename[256];
int i, j, word_num;
int icmp;
FILE *fp;
printf("Input filename : ");
scanf("%255[^\n]", filename);
if((fp=fopen(filename, "r"))==NULL) return 1;
for(word_num=0;word_num<WORD_NUM_MAX;word_num++){
if(fgets(word[word_num], sizeof(word[0]), fp)==NULL) break;
if((p=strchr(word[word_num], '\n'))!=NULL) *p='\0';
}
fclose(fp);
for(i=0;i<word_num;i++){
for(j=0;j+1<word_num-i;j++){
if((icmp = stricmp(word[j], word[j+1])) == 0 && strcmp(word[j], word[j+1])>0 || icmp >0){
strcpy(tmp, word[j]); strcpy(word[j], word[j+1]); strcpy(word[j+1], tmp);
}
}
}
for(i=0;i<word_num;i++) puts(word[i]);
return 0;
}
262:259
08/10/13 20:19:53
>>260>>261
strcasecmp()もstricmp()も
A<a<B<b<C<c<D<d<・・・・・・・・・・・・・<X<x<Y<y<Z<zの順にならないと思うのだが。
strcasecmp()は、実際にthe The The the the みたいになってうまくいかなかった。
stricmp()も、比較前に文字列を小文字にするから、同じだろう。
263:デフォルトの名無しさん
08/10/13 20:40:25
小文字で比較して一緒だったら、大文字も考慮して比較すればいいと思ったけど、だめなのかなぁ。
264:259
08/10/13 21:07:41
if ( ((icmp = stricmp(word[j], word[j+1])) == 0 && strcmp(word[j], word[j+1])>0) || icmp >0 )
たしかに、論理的にもこれでいけますね。
stricmp()なかったので、作ってやってみました。
265:デフォルトの名無しさん
08/10/13 21:56:11
>>250
の、すごろくをどなたかお願いします。
266:デフォルトの名無しさん
08/10/13 21:57:22
>>261
The book // 1番目
the apple // 3番目
tHe earth // 2番目
これを並べ替えると
the apple // 3番目
The book // 1番目
tHe earth // 2番目
こうなったよ
267:デフォルトの名無しさん
08/10/13 22:17:21
>>258#include <stdio.h>
#include <math.h>
int main() {
double a, b, c, d, x;
printf("a^2 * x + b * x + c = 0となるa, b, cを入力してください\n");
scanf("%lf %lf %lf", &a ,&b, &c);
if (a == 0) {
puts("2次方程式ではありません");
return 1;
}
b /= a;
if (c == 0) {
printf("x = %g, 0\n", -b);
} else {
c /= a;
b /= 2; /* x^2 + 2b'x + c = 0の形へ */
d = b * b - c; /* 判別式 */
if (d > 0) {
if (b > 0) {
x = -b - sqrt(d);
} else {
x = -b + sqrt(d);
}
printf("x = %g, %g\n", x, c / x);
} else if (d < 0) {
printf("x = %g ± %gi\n", -b, sqrt(-d));
} else {
printf("x = %g\n", -b);
}
}
return 0;
}
268:デフォルトの名無しさん
08/10/13 22:18:01
C言語による最新アルゴリズム事典には、解の公式をそのまま使うと、
|b| ≒ √(b^2 - 4ac)のとき桁落ちを起こすから、桁落ちしないほうだけ公式で求めて、
残りは解と係数の関係(解α, βとしてαβ = c / a)で求めろって書いてあるからそうした。
269:259
08/10/13 22:56:37
>>266 のおっしゃる通りでした。
一瞬、そのテストケースもあったのか、と思ったが、
>>[2] 問題文(含コード&リンク):任意の長さの文字列(英字のみ)データ(>>235)
だから、スペースが入る文字列はテストケースとしては、条件外になる。
しかし、指摘通り今回の問題では、>>261では、スペースをのぞいてひとつの文字列に見せかけて食わせたとき、大文字優先の原則に従っていなくなりますね。
私は、単語だけと思っていたけど、英字だけの文字列だったのね。
これ以上出ると荒れそうなので、私が出るのは止めておくが、誰か>>259よりクールな比較関数頼む。
270:デフォルトの名無しさん
08/10/13 23:12:12
>>250
>>265
ほい、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
でも、VB2008じゃないんで…
VC6なんて、iostreamとかの .h とかは自分の環境に合わせてくれ
それと、ゴール出来ない双六が出来る可能性もあると言えばある
271:デフォルトの名無しさん
08/10/13 23:44:10
てか、strcmpだけで正しく辞書順になるんじゃね?頭こんがらがってきた\(^o^)/
272:デフォルトの名無しさん
08/10/13 23:55:22
>>271
いやasciiコードだとして英字が
A-Zがならんでその次にa-zになるじゃん
273:デフォルトの名無しさん
08/10/14 00:22:14
でも、strcmpの戻り値は辞書式で比較した値でしょ??
URLリンク(msdn.microsoft.com)(VS.80).aspx
難しく考えなくていいんじゃない??
274:デフォルトの名無しさん
08/10/14 00:47:53
Order by case insensitive dictionary order,dictionary order.
Are you OK?
275:デフォルトの名無しさん
08/10/14 00:58:30
>>235
>>238 にこれを追加して strcmp を mystrcmp に変更すれば希望通りになる筈
int mystrcmp(const unsigned char *a, const unsigned char *b){
static int table[256], is_table_initialized=0;
int i;
if(!is_table_initialized){
for(i=0;i<256;i++) table[i]=i*2;
for(i=0;i<26;i++) table['a'+i]=table['A'+i]+1;
is_table_initialized=1;
}
for(;*a!='\0';a++,b++) if(*a!=*b) break;
return table[*a]-table[*b];
}
276:デフォルトの名無しさん
08/10/14 02:04:40
>>273
「辞書式順序」 (dictionary order)というのは英和辞典なんかの並び順のことじゃないぞ。
きちんとした定義を持った数学用語。
URLリンク(ja.wikipedia.org)
1文字目が同じなら2文字目の大小で比較し、
2文字目も同じなら3文字目の大小で比較し、……という順序付けのこと。
>>275なんかももちろん辞書式順序。
strcmpは各文字の大小比較を単純に文字コードの値で比較しており、
それだと>>273の言うとおりなので、>>255の要求には沿わないわけ。
277:デフォルトの名無しさん
08/10/14 13:19:06
どなたか>>162の問題をお願いできないでしょうか?
278:デフォルトの名無しさん
08/10/14 13:23:04
>>277
このスレを「すごろく」で検索
279:デフォルトの名無しさん
08/10/14 15:00:10
[1] 授業単元:プログラミング言語
[2] 問題文:直角三角形の直行する2辺の長さ、a、bともに正の整数(n≧0)が与えられた時、斜辺の長さcをプリントするプログラムを書き、数例に対して実行せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:2008年10月15日まで
[5] その他の制限:floatを使えと指示されました。
習い始めたばかりでまったくと言っていいほどわかりません。呆れるほど簡単な問題かもしれませんが、よろしくお願いします!
280:デフォルトの名無しさん
08/10/14 15:08:38
>>279
俺にも出来そうな問題がきた
#include <stdio.h>
#include <math.h>
int main(void)
{
int a, b;
float c;
printf("a = ");
scanf("%d", &a);
printf("b = ");
scanf("%d", &b);
c = (float)sqrt(a * a + b * b);
printf("\n答え %f\n", c);
return 0;
}
>数例に対して実行せよ。
の意味がわからないので入力値で計算させた
281:デフォルトの名無しさん
08/10/14 15:22:09
>>280
ありがとうございます!
もう一つお聞きしてもよろしいですか?
書いていただいたプログラムをこのままコピーしてコンパイルして実行したら未定義のシンボルsqrtとか重大なエラーとか出てきてしまったんですが、
この場合はどうすればよろしいのでしょうか?
282:デフォルトの名無しさん
08/10/14 15:23:58
>>281
gcc -lm hoge.c
かな
283:デフォルトの名無しさん
08/10/14 15:29:34
>>282
できました!!本当にありがとうございます!!!
こんな見ず知らずの勉強不足クソ野郎にもかかわらず、ご親切に教えていただきまして大変感謝しております。
ありがとうございました!
284:デフォルトの名無しさん
08/10/14 15:39:34
sqrtくらい実装した方がいい
285:デフォルトの名無しさん
08/10/14 15:47:42
たとえばroot(n,c) cのn乗根の作り方
x=n√cとおくとx^n=cとなる。f(x)=x^n-cという関数の根を求めればいい
一般に、f(x)の根はニュートン法で計算できる。
点aでfに接する直線の方程式は、y = f'(a)(x-a) + f(a)
これがy=0としてxについてとくと、x = a + f(a)/f'(a)
この値を新たにaとしておいて、同様の操作をすると収束すれば解が求まる。
286:デフォルトの名無しさん
08/10/14 15:56:34
コンパイルは通してないがおおかたこんな通りだろう
float pow(int n, float c){
int k; float a=1;
for( k=0; k<n; k++)a*=c;
return a; }
float root(int n, float c){
int k; float a=c;
for( k=0; k<50; k++) a += (pow(n,a)-c)/(n*pow(n-1,a));
return a; }
287:デフォルトの名無しさん
08/10/14 16:03:24
#include <stdio.h>
float pow(int n, float c){
int k; float a=1;
for( k=0; k<n; k++)a*=c;
return a; }
float root(int n, float c){
int k; float a=c;
for( k=0; k<50; k++) a -= (pow(n,a)-c)/(n*pow(n-1,a));
return a; }
float sqr(float c){ return root(2,c); }
int main(){
printf("√2 =%f\n",sqr(2));
printf("√3 =%f\n",sqr(3));
}
288:デフォルトの名無しさん
08/10/14 16:06:45
微分、積分して関数で返すライブラリってある?
289:デフォルトの名無しさん
08/10/14 16:44:57
こっちの方が速い
#include <stdio.h>
#define GOSA 0.00001
double pow(int n, double c){
int k; double a=1;
for( k=0; k<n; k++) a*=c;
return a; }
float root(int n, float c){
double x=c,y,z;
while(1){
y=pow(n-1,x); z=x*y;
if(z>c-GOSA && z<c+GOSA)break;
x -= (z-c)/(n*y);
printf("root( %d , %.1f )の計算経過 %f\n",n,c,x);
}
return x; }
float sqr(float c){ return root(2,c); }
int main(){
printf("√2 =%f\n\n",sqr(2));
printf("√3 =%f\n\n",sqr(3));
}
290:デフォルトの名無しさん
08/10/14 16:52:47
これでいいか
#define GOSA 0.00001
float sqr(float c){
double x=c,y;
while(1){
y=x*x;
if(y>c-GOSA)if(y<c+GOSA)break;
x -= (y-c)/(2*x);
printf("sqr( %.1f )の計算経過 %f\n",c,x);
}
return x; }
291:デフォルトの名無しさん
08/10/14 17:04:40
みなさまに質問があります。若干スレチになるかもしれんが、一つ力を貸してくれないだろうか…
292:デフォルトの名無しさん
08/10/14 17:09:06
質問ならもっとふさわしいスレがあるだろう
ここは宿題をやってもらうスレ
293:デフォルトの名無しさん
08/10/14 17:09:39
標準ライブラリ速いな どうやったら速度を抜けるだろうか?
#include <stdio.h>
#include <math.h>
#include <time.h>
#define GOSA 0.0001
float sqr(float c){
double x=c,y;
while(1){
y=x*x;
if(y>c-GOSA)if(y<c+GOSA)break;
x -= (y-c)/(2*x);}
return x; }
int main(){
double sum;
int n,cl;
sum=0; cl=clock(); for(n=0;n<1000000;n++)sum+=sqr(1000);
cl=clock()-cl; printf("time=%d sum=%f\n",cl,sum);
sum=0; cl=clock(); for(n=0;n<1000000;n++)sum+=sqrt(1000);
cl=clock()-cl; printf("time=%d sum=%f\n",cl,sum);
}
294:デフォルトの名無しさん
08/10/14 17:09:52
>>292
そうだな。すまん。
295:デフォルトの名無しさん
08/10/14 19:18:31
ソースみればいいだろ標準の
296:デフォルトの名無しさん
08/10/14 19:55:39
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] Linux
[3.3] 言語: C
[4] 期限: 明日の朝
[5] その他の制限:出来るだけ簡単に
意味不明なんでお願いします。
297:デフォルトの名無しさん
08/10/14 20:59:43
#include <stdio.h>
int main(void)
{
FILE *fp;
int m, p1, p2, s1 = 0, s2 = 0;
char *member[] = {"", "会","特","非"};
if((fp=fopen("data03.dat", "r"))==NULL) return 0;
printf("種別 購入金額(円) 支払い金額(円)\n");
while(fscanf(fp, "%d%d", &m, &p1)==2) {
switch(m) {
case 1: p2 = p1 * 9 / 10;
break;
case 2: p2 = p1 * 7 / 10;
break;
case 3: p2 = p1 < 15000 ? p1 : p1 - 1000;
break;
}
printf(" %s %15d%15d\n", member[m], p1, p2);
s1 += p1, s2 += p2;
}
printf("---------------------------------------\n");
printf("合計%15d%15d\n", s1, s2);
return 0;
}
298:デフォルトの名無しさん
08/10/14 21:08:06
>>296
URLリンク(kansai2channeler.hp.infoseek.co.jp)
299:デフォルトの名無しさん
08/10/14 22:36:32
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] Linux
[3.3] 言語: C
[4] 期限: 明日の昼
[5] その他の制限:出来るだけ簡単に
300:デフォルトの名無しさん
08/10/14 22:42:31
>>296 == >>299 ?
301:デフォルトの名無しさん
08/10/14 23:03:00
>>299 手ごわかったぜ
#include<stdio.h>
int nabeatu(int num){
if(num%3==0) return 1;
for(;num>0;num/=10) if(num%10==3) return 1;
return 0;
}
int main(void){
int i, n=100, nabeatu_count=0, stop_flag=0;
printf("自然数を入力してください。\n");
scanf("%d", &n);
for(i=1;i<=n;i++){
if(nabeatu(i)){
nabeatu_count++;
if(nabeatu_count>10 && n-i>30){
static int is_first=1;
if(is_first){
printf("~~~~~~~~~~~~~~~~~~~~~~~\n"
" すいません、打つの大変なので中略します><\n"
"~~~~~~~~~~~~~~~~~~~~~~~\n");
}
is_first=0;
stop_flag=1;
}else{
if(!stop_flag) printf(" %5d%.*s", i, !(nabeatu_count%5), "\n");
if(nabeatu_count%5==0) stop_flag=0;
}
}
}
return 0;
}
302:デフォルトの名無しさん
08/10/14 23:15:36
成績をつけるプログラムを教えてほしいです。
80点以上100点以内 A
65点以上80点未満 B
50点以上65点未満 C
0点以上50点未満 D
それ以外の整数に対しては「ありえない」と出す
303:デフォルトの名無しさん
08/10/14 23:18:00
>>302
if elseでも並べておけば?
304:デフォルトの名無しさん
08/10/14 23:19:28
>>303
A・B・C・Dに分けれたのですが、101など100を超える場合を組み込めません
305:デフォルトの名無しさん
08/10/14 23:22:00
if
else if
else if
else if
else ありえない
306:デフォルトの名無しさん
08/10/14 23:22:47
#include <stdio.h>
int main(void) {
int score;
scanf("%d",&score);
if(80<=score&&score<=100) printf("A\n");
else if(65<=score&&score<80) printf("B\n");
else if(50<=score&&score<65) printf("C\n");
else if(0<=score&&score<50) printf("D\n");
else printf("ありえない\n");
return 0;
}
307:デフォルトの名無しさん
08/10/14 23:22:53
[1] 授業単元:データ構造
[2] 再帰的二分探索
入力の引数をint x(求める値)、int v[]、int n(要素数)の三つを用いて
ループを使用せずに関数の再帰呼び出しを使うこと。
外部変数で値の受渡しはしてはいけない。
[3] 環境
[3.1] OS: Windows
[3.2] gcc
[3.3] C
[4] 期限: 10月15日16:00まで
[5] 探索する配列はソート済みのものと考えてよい。
308:デフォルトの名無しさん
08/10/14 23:26:38
>>306
できました。
ありがとうございました。
309:298
08/10/14 23:43:34
>>301
友達になれそうだなw
310:デフォルトの名無しさん
08/10/15 00:01:48
質問です
ある整数が格納されている配列seisuu[4]がある。
その配列の添え字に対応して優先度が格納される配列priority[4]を考える。
整数が小さいほど優先度は高くする。優先度は最高が4最低が0。
格納されている整数が0の場合は優先度は0。
格納されている数字は同じ場合もある。
というのを考えているのですが、
for(i=0 ; i<4 ; i++){
priority[i] = 1; /* 初期化 */
}
for(i=0 ; i<4 ; i++){
if(seisuu[i] == 0){
priority[i] = 0; /* 整数が0なら優先度も0 */
}else{ /* 整数が0以外のものを発見 */
for(j=i+1 ; j<4 ; j++){ /* 発見した次の配列から数字のある配列を探索 */
if(seisuu[j] != 0){ /* 0以外の配列を発見 */
if(seisuu[i] < seisuu[j]){ /* 最初の方が小さいなら */
priority[i]++; /* 最初の方の優先度をアップ */
}else if(seisuu[i] > seisuu[j]){ /* 発見した方が小さいなら */
priority[j] = priority[i]+1; /* 発見した方の優先度を最初の方の優先度+1 */
}else{ /* 整数が同じなら */
priority[i] = priority[j]; /* 優先度を同一とする */
}
}
}
}
}
このように考えてみたのですが、何か違うような気がします。
指摘等宜しくお願いします。
311:デフォルトの名無しさん
08/10/15 00:05:25
5 3 2 3 と入っていたら 2 1 0 1 としたいということ?
312:デフォルトの名無しさん
08/10/15 00:20:04
>>311
レスありがとうございます
整数 :5 3 2 3だと
優先度:1 2 3 2
としたいです
313:デフォルトの名無しさん
08/10/15 00:40:31
>>312
要素数が4個固定ならガチで見てもいいと思うけど、
増減ありなら、構造体にでも詰めて、ソートしてからの方がいいように思う。
314:デフォルトの名無しさん
08/10/15 00:45:00
>>307
int *func(int x, int v[], int n){
int c;
c=n/2;
if(n<=0) return NULL;
if(x<v[c]) return func(x, &v[0], c);
if(x>v[c]) return func(x, &v[c+1], n-c-1);
return &v[c];
}
315:デフォルトの名無しさん
08/10/15 01:24:52
>>300 YES
>>301 ちょwこれはwwマジすかww これを参考に考えて見ますwあざす^^
316:デフォルトの名無しさん
08/10/15 01:33:31
1] 授業単元: 関数
[2] 問題文(含コード&リンク): 3次元のfloat型の配列 a[3]、b[3]、c[3]を頂点の座標とする三角形ABCを考える。
1.ベクトルの長さを計算する関数を作れ、ただし関数の宣言は以下のようになるようにせよ。
float Vnagasa(float *x);
2.ベクトルの差 z=y-xを計算する関数を作れ。ただし関数の宣言は以下のようになるようにせよ。
void Vhiku(float *x, float *y, float *z);
3.ベクトルの外積z=x×yを計算する関数を作れ。ただし関数の宣言は以下のようになるようにせよ。
void Vgaiseki(float *x, float *y, float *z);
4.上記1,2,3を用いて、ベクトルx、y、zを頂点とする三角形の面積を計算する関数を作れ。
float Vmenseki(float *x, float *y, float *z);
5.1,2,3,4に関してそれぞれ正しく動作しているかどうか確認するプログラムを作れ。
6.ベクトルx、y、z及び原点からなる三角錐の表面積を計算するプログラムを作れ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2008年10月20日16:00まで
[5] その他の制限: 自分で関数の宣言をしなくてはならない
4番からがうまく出来ません
お願いします
317:デフォルトの名無しさん
08/10/15 02:53:16
[1]C言語初級
[2]次のコードを並べ替えて動作するものにせよ。また
動作仕様を簡潔に述べよ。(コンパイル可能なコードと
動作仕様署を提出)
for(k=0,j=1;j<=i/2;j++)
k+=j;
int main(int argc,char **argv){
if(i%j==0)
int i=1,j,k,l,c=0;
for(l=0,j=1;j<=k/2;j++)
if(( i==l )&&(i<k)){
}
}
}
l+=j;
#include <stdio.h>
return 0;
c++;
if( k % j==0 )
while(c<=10){
printf("(%d,%d)¥n",i,k);
i++;
[3] Solaris/Gnu C++/C
[4]10/31正午まで
急ぎませんがよろしく御願いします。この手の問題
苦手中の苦手です。
318:デフォルトの名無しさん
08/10/15 03:09:27
/*
for(k=0,j=1;j<=i2;j++)
k+=j;
if(i%j==0)
int i=1,j,k,l,c=0;
for(l=0,j=1;j<=k2;j++)
if(( i==l )&&(i<k)){
}
}
l+=j;
#include <stdio.h>
c++;
if( k % j==0 )
while(c<=10){
printf("(%d,%d)¥n",i,k);
i++;
int argc,char argv
*/
int main(){
return 0;
}
なにもせずに終了するプログラム
319:デフォルトの名無しさん
08/10/15 03:38:14
>>316
URLリンク(kansai2channeler.hp.infoseek.co.jp)
6番は正しいか単体テストはしてない、答えが分るテストデータは自分で用意してくれ
320:デフォルトの名無しさん
08/10/15 08:33:14
>>317
#include <stdio.h>
int main(int argc,char **argv){
int i=1,j,k,l,c=0;
while(c<=10){
for(k=0,j=1;j<=i/2;j++)
if(i%j==0)
k+=j;
for(l=0,j=1;j<=k/2;j++)
if( k % j==0 )
l+=j;
if(( i==l )&&(i<k)){
printf("(%d,%d)\n",i,k);
i++;
}
c++;
}
return 0;
}
/*何も表示しないプログラム*/
321:デフォルトの名無しさん
08/10/15 10:48:31
うわあ。並べ替え分からんなあと思いながらやってたら>>320と全く同じでワロタw
322:デフォルトの名無しさん
08/10/15 12:24:48
[1] 授業単元:マルチタスクプログラミング
[2] 問題文(含コード&リンク):
funcA 1~5を表示する
funcB A~Eを表示する
メインにてスレッドを生成し、生成したスレッドにfuncBを走らせる。
メインスレッドはfuncAを走らせる。
そのうえで表示結果が
「1A2B3C4D5E」となるようマルチタスクプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:VisualStudio2005
[3.3] 言語:C++
[4] 期限:10/17(金)
[5] その他の制限:特に無し
イベントのやり取りでスレッドを制御せよとのことなのですがサンプルを提示して
頂けると助かります。スレッド等イメージをまだ把握しておらず…
申し訳ないですが宜しくお願いします。
323:デフォルトの名無しさん
08/10/15 13:26:06
並べ替え問題はこうだと思う。
友愛数を求めるアルゴリズム。
URLリンク(ja.wikipedia.org)
#include <stdio.h>
int main(int argc,char **argv){
int i=1,j,k,l,c=0;
while(c<=100000){
for(k=0,j=1;j<=i/2;j++)
if(i%j==0)
k+=j;
for(l=0,j=1;j<=k/2;j++)
if( k % j==0 )
l+=j;
if(( i==l )&&(i<k)){
printf("(%d,%d)\n",i,k);
}
i++;
c++;
}
return 0;
}
324:デフォルトの名無しさん
08/10/15 13:39:56
まちがった。こうだ~!
友愛数を小さい方から10個見つけるプログラム。
#include <stdio.h>
int main(int argc,char **argv){
int i=1,j,k,l,c=0;
while(c<=10){
for(k=0,j=1;j<=i/2;j++)
if(i%j==0)
k+=j;
for(l=0,j=1;j<=k/2;j++)
if( k % j==0 )
l+=j;
if(( i==l )&&(i<k)){
c++;
printf("(%d,%d)\n",i,k);
}
i++;
}
return 0;
}
325:320
08/10/15 13:44:18
>>323
なるほど
forには{ }がなくてifには { }があるので2文以上入るんだろうなと思ったんだよ
/* 友愛数を10個表示するプログラム */
#include <stdio.h>
int main(int argc,char **argv){
int i=1,j,k,l,c=0;
while(c<=10){
for(k=0,j=1;j<=i/2;j++)
if(i%j==0)
k+=j;
for(l=0,j=1;j<=k/2;j++)
if( k % j==0 )
l+=j;
if(( i==l )&&(i<k)){
printf("(%d,%d)\n",i,k);
c++;
}
i++;
}
return 0;
}
326:デフォルトの名無しさん
08/10/15 14:15:14
>>322
後始末無視して簡単に書いてみた
#include<windows.h>
#include<stdio.h>
HANDLE eventA,eventB;
DWORD func(HANDLE self,HANDLE other,const char*str){
while(*str)
WaitForSingleObject(self,INFINITE) , putchar(*str++) , SetEvent(other);
return 0;
}
DWORD WINAPI funcA(LPVOID p){return func(eventA,eventB,"12345");}
DWORD WINAPI funcB(LPVOID p){return func(eventB,eventA,"ABCDE");}
int main(){
eventA = CreateEvent(0,0,1,0);
eventB = CreateEvent(0,0,0,0);
HANDLE f[] = {CreateThread(NULL,0,funcA,0,0,0),CreateThread(NULL,0,funcB,0,0,0)};
WaitForMultipleObjects(2,f,1,INFINITE);
printf("\n");
}
327:デフォルトの名無しさん
08/10/15 14:23:45
>>326
ホント面倒かけて申し訳ない。
なにやってるか全くわからないけどとりあえず張り付けてデバッグします
ありがとう
328:デフォルトの名無しさん
08/10/15 16:26:42
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):
このアーカイブにはいってるprog.cのファイルの逆の処理をする
プログラムを作ってほしいのですが。プログラムの説明はソースの一番上にかいてあります。
URLリンク(www1.axfc.net)
パスはsageです。知りたいところがあれば聞いてください
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限: 10/16 の12時くらい
329:デフォルトの名無しさん
08/10/15 16:34:57
/ディレクトリ以下ファイルを強制的に全部消去し、消去した
ファイルのサイズの平均を求めるプログラムの逆の動作って
どうやって定義するのでしょうか?
330:デフォルトの名無しさん
08/10/15 16:35:43
できない
331:デフォルトの名無しさん
08/10/15 17:04:22
>>328
ソースファイルだけあげればよかったのに。
a.outとかバックアップとかいらないしそもそもgzファイルじゃなくてtgzだろとか
332:デフォルトの名無しさん
08/10/15 17:28:25
いや確認用に
333:デフォルトの名無しさん
08/10/15 17:47:08
どこの馬の骨が作ったともしれないバイナリを実行するぐらいなら自分でコンパイルするだろ。
スレ的にも。
334:デフォルトの名無しさん
08/10/15 18:19:19
>>332
ふてくされるなよ
335:デフォルトの名無しさん
08/10/15 19:37:00
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限: 10/16
よろしくお願いします
336:デフォルトの名無しさん
08/10/15 20:03:36
>>335
if(*(s+i)==' '){
これを!とか,とかでも通るようなor条件をバカみたいに作ればいいと思うよ。
337:デフォルトの名無しさん
08/10/15 20:09:51
だよな。
そんなこともわからずにプログラムかいてるのか
338:sage
08/10/15 20:35:06
[1]プログラミング及び演習
[2]標準入力から読み込んで標準出力へ書き出すプログラムのいろいろ
#include <stdio.h>
#define MAX 128
int main(void)
{
char buf[MAX];
while (fgets(buf, MAX, stdin) != NULL) fputs(buf, stdout); /* function */
return 0;
}
を参考に行番号を付加するプログラムを自作してみて下さい.
例えば,こんな感じで出力されれば OK です.
1: #include <stdio.h>
2:
3: int main(void)
4: {
5: int c;
6:
7: while ((c = getchar()) != EOF) putchar(c);
8:
9: return 0;
10: }
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:VisualStudio2005
[3.3] 言語:
[4]期限: 10/21
[5]簡潔でも構わないので解説があると助かります
よろしくお願い致します
339:デフォルトの名無しさん
08/10/15 21:01:14
>>337
自分のできる範囲でバカみたいにかいた上で、これはもうちょっと
どうにかならんのかねって疑問がわき、そこでやっとASCIIコード体系なりis系関数なりを知って
感激しつつ改善するに至るんだが、いきなり結果を得ても何も理解できないし苦痛だよね。
340:デフォルトの名無しさん
08/10/15 21:02:19
自分の学籍番号,氏名をキーボードから入力し,
画面に表示するプログラムを文字型配列を用いて作成せよ
341:デフォルトの名無しさん
08/10/15 21:05:33
>>338
int i = 0;
while (fgets(buf, MAX, stdin) != NULL) printf("%d: %s", i++, buf);
342:338
08/10/15 21:30:57
>>341
回答ありがとうございます。
試してみたのですが
エラー E2342 numcpy.c 6: パラメータ '__s' は signed char * 型として定義されてい
るので int は渡せない(関数 main )
と出てしまいました。
また自分の説明不足なのですが、まだ明解C言語入門編第8章という
初歩的なところまでしか学習しておらず、%sという表現が理解できません。
御手数おかけして大変申し訳ないのですが、もう少し簡単な回答を頂けないでしょうか?
343:デフォルトの名無しさん
08/10/15 21:56:16
>>342
>>341じゃないけど。
numcpy.cを全部貼ってみて。
while (fgets(buf, MAX, stdin) != NULL) {fprintf(stdout, "%d: ", i++); fputs(buf, stdout);}
これなら?
8章まで進んでたらprintfぐらい出てきてそうなもんだけどな。
344:デフォルトの名無しさん
08/10/15 21:57:03
>>338
#include <stdio.h>
int main(void) {
int buf,i=1;
do{ printf("%d:",i++);
while ( (buf=getchar()) != '\n' && buf!= EOF) ;
}while(buf!=EOF);
return 0; }
345:デフォルトの名無しさん
08/10/15 22:10:26
>>344
寝てこい
346:デフォルトの名無しさん
08/10/15 22:12:08
>>345
お前がまともなソースを書いてから意見しろよ、クズがw
347:デフォルトの名無しさん
08/10/15 22:14:56
>>346
まともなソースかどうか知らんが回答はしてる。
直近だと>>343になってしまうけどな。
348:デフォルトの名無しさん
08/10/15 22:19:20
>>346
あんまりカリカリすんなよw
どの宿題待ち?
349:338
08/10/15 22:21:56
>>343 >>344
回答ありがとうございます。
#include <stdio.h>
#define MAX 128
int main(void)
{
char buf[MAX];
while (fgets(buf, MAX, stdin) != NULL) fputs(buf, stdout); /* function */
return 0;
}
と343を参考に
#include <stdio.h>
#define MAX 128
int main(void)
{
int i;
char buf[MAX];
while (fgets(buf, MAX, stdin) != NULL) {fprintf(stdout, "%d: ", i++); fputs(buf, stdout);}
return 0;
}
としてみましたが、
2147344384:
2147344385:
2147344386:
2147344387:
となってしまいました。
自分なりに考えてみたのですが、どこが間違っているのでしょうか?
350:デフォルトの名無しさん
08/10/15 22:22:57
そんなエラー
あれが間違ってるにきまってんじゃん。
そういうエラーに遭遇したことないのか
351:デフォルトの名無しさん
08/10/15 22:24:06
>>349
int i=0; のところを参考にし忘れてる
352:デフォルトの名無しさん
08/10/15 22:27:51
その変数がからかどうかを確認するのは
一番最初じゃね?
353:338
08/10/15 22:30:45
>>351
ご指摘ありがとうございます
#include <stdio.h>
#define MAX 128
int main(void)
{
int i=0;
char buf[MAX];
while (fgets(buf, MAX, stdin) != NULL) {fprintf(stdout, "%d: ", i++); fputs(buf, stdout);}
return 0;
}
0:
1:
2:
3:
4:
となりました。ただ、問題には
例えば,こんな感じで出力されれば OK です.
1: #include <stdio.h>
2:
3: int main(void)
4: {
5: int c;
6:
7: while ((c = getchar()) != EOF) putchar(c);
8:
9: return 0;
10: }
とあるのですが、これで正解ということでいいんでしょうか?
何度も質問してしまい、申し訳ありません。
354:デフォルトの名無しさん
08/10/15 22:33:20
>>353
numcpy.exe < numcpy.c
とかコマンドプロンプトで。
1から開始したいという要望が出ると思うけどそこは自分なりに考えて。
355:デフォルトの名無しさん
08/10/15 22:35:55
>>353 >>338
#include <stdio.h>
#include <string.h>
#define MAX 128
int main(void) {
char buf[MAX];
int i=1,ch;
FILE *tmp=tmpfile();
if(tmp==NULL) {perror(""); return 1;}
while (fgets(buf, MAX, stdin) != NULL) fwrite(buf,strlen(buf),1,tmp); /* function */
rewind(tmp);
do{
printf("%d: ",i++);
while((ch=fgetc(tmp))!='\n' && ch!=EOF) putchar(ch);
puts("");
}while( ch != EOF );
return 0; }
356:デフォルトの名無しさん
08/10/15 22:38:53
なっ、なぬっ!?リダイレクトを使うとな?ならば先にそう言うでおじゃるよ。
357:338
08/10/15 22:39:21
>>354
なるほど、そういうことだったんですね。
>1から開始したいという要望が出ると思うけどそこは自分なりに考えて。
はい。ここまで教えて頂けたので後は自力でなんとかしたいと思います。
色々と本当にありがとうございました。
>>355
回答ありがとうございます。
こちらも参考にさせて頂きますね。
358:デフォルトの名無しさん
08/10/16 00:00:56
>>328
URLリンク(kansai2channeler.hp.infoseek.co.jp)
気が向いたので、なんとなく作ってみた。
359:328
08/10/16 00:11:00
>>358
ありがとう。
360:デフォルトの名無しさん
08/10/16 00:23:58
>>358
俺が作ったのも同じバイナリを吐くんだけど、元のバイナリと内容が異なる
361:358
08/10/16 00:37:46
>>360
それをまたテキストも戻して、diffしてバイナリにする元のテキストと同じだから気にしなかった。
コンパイラやそのバージョンによっても、生成される機械語が違うからそんなもんだと思う。
最初にできたときにはdiffが違うのが気になって確認した。
しかし、float(0x3E624825)とfloat(0x3E62480F)が同じ値になっていたので、上げたんだけど。
362:328
08/10/16 01:23:45
まあ試験的に数値が多いテキストでもバイナリにしようとおもうんだけど
この例では13個x()個てデータだったけど
30個x()個なかんじのデータだったらサイズもかえないといけないのかな?
とおもったけどそうでもなさそうですね。
363:デフォルトの名無しさん
08/10/16 01:59:56
>>361
> コンパイラやそのバージョンによっても、生成される機械語が違うからそんなもんだと思う。
うーん、実行ファイルについてではなくて。
> しかし、float(0x3E624825)とfloat(0x3E62480F)が同じ値になっていたので、上げたんだけど。
なるほど。
にしても元のバイナリに戻せないのでは意味がないように思うんだなあ。何で変わっちゃうんだろ。
364:デフォルトの名無しさん
08/10/16 02:48:17
問題文:2つの円の位置関係(交わる(交点)、含まれる、離れている)
これを求めるにはどんな感じで書けば良いでしょうか?
365:デフォルトの名無しさん
08/10/16 02:52:49
数学じゃん!
2円の半径と中心間の距離を考える!
366:デフォルトの名無しさん
08/10/16 02:52:53
>>364
中心座標間の距離 - ( 円1の半径 + 円2の半径 )
の符号を調べる
367:デフォルトの名無しさん
08/10/16 02:58:03
数学的な考え方は解るのですが、
先週C++を始めたばかりで書き方がなかなか解りません;;
初歩的ですみません。
368:358
08/10/16 03:03:52
>>363
0 01111100 11000100100100000100101 (0x3E624825)
0 01111100 11000100100100000001111 (0x3E62480F)
s [- e -] [--- m ---]
(-1)^s × 2^(e-127) × (1 + m/(2^23)) (Sign, Exponent, Mantissaはそれぞれ、十進数)
(-1)^(0)*2^(124-127)*(1+6440997/(2^23)) = 0.220978335
(-1)^(0)*2^(124-127)*(1+6440975/(2^23)) = 0.220978007
となるから、floatの精度のため値としては同じになったみたい。
16進表記で変わった理由は、機械語とそれに伴うFPU命令の違いからじゃないかな(実際はどうか知らん)。
エロい人後は頼んだ。
369:デフォルトの名無しさん
08/10/16 03:24:27
>>368
質問者でもない者に対して丁寧に細かくありがとう><
エンディアンそっちのけでバイナリデータ見てた俺のバカ!
370:デフォルトの名無しさん
08/10/16 03:32:57
まっ、麻呂のクソースはいらんかえぇ~~?
371:デフォルトの名無しさん
08/10/16 07:20:45
>>361
テキストにした時点で精度が落ちてるから元には戻せないよ
372:デフォルトの名無しさん
08/10/16 08:49:22
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 英文を入力すると、単語に分割して出力するプログラムを書く。
ただし、ピリオドとカンマは出力しないようにすること。
(実行例)
英文を入力してください:
There is , a textbook.
---
There
is
s
textbook
---
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 来週の木曜日
[5] その他の制限: 出来ればプログラミング下手な自分にもわかるように解説を付けてくれると助かります。
よろしくお願いします。
373:デフォルトの名無しさん
08/10/16 09:40:15
>>372
#include <stdio.h>
#include <string.h>
int main(void){
char buf[256];
char *p;
printf("英文を入力してください:(255文字まで)\n");
fgets(buf, 256, stdin);
p = buf;
p = strtok(buf, " ,.\n");
while (p)
{
printf("%s\n", p);
p = strtok(NULL, " ,.\n");
}
return 0;
}
374:デフォルトの名無しさん
08/10/16 10:04:36
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
まず大きな正方形のエリアがあり
その大きな正方形の中に小さな正方形のエリアがある。
次に大きな正方形の線上で2点を取る。(一方は左下に固定)
左下の固定点と入力した大きな正方形の線上の二点を線で結び
その直線が中の小さい正方形に重なるか重ならないかを判定する
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:10月中
[5] その他の制限:特になし
考えてみたけどさっぱりわかりません
正方形の大きさは変えられると助かります
よろしくお願いします。
375:デフォルトの名無しさん
08/10/16 11:21:02
数学知識に遥かにウェイトがある問題に言語の技巧の問題を
組み合わせた課題を出す教師は...
376:デフォルトの名無しさん
08/10/16 11:29:00
一般化すれば、
平面座標内に正方形と直線があり
交わりがあるかどうかを調べる
377:デフォルトの名無しさん
08/10/16 11:33:00
>>374
(数学の解)
まず直線の傾きとy切片を求め直線の式を作れ
y = ax + b
次に小さい正方形のx座標を代入してその値とy座標の値を比較
a * x1 + b - y1
a * x2 + b - y2
a * x3 + b - y3
a * x4 + b - y4
4つの正負が同じなら重ならない
1個でも負号が違えば重なる
0は適当にどちらかに決めて処理
↓
Cでプログラム
378:デフォルトの名無しさん
08/10/16 11:34:54
より一般化すれば、凸多角形の共通部分や、
多角形ポリゴン同士の衝突判定をしたいのですが。。。
だ。
Spaghetti Source - 凸多角形の共通部分
URLリンク(www.prefield.com)
多角形ポリゴン同士の衝突判定をしたいのですが。。。 - 教えて!goo
URLリンク(oshiete1.goo.ne.jp)
379:374
08/10/16 11:42:23
ありがとうございます
書き忘れて申し訳ないのですが二次元で大丈夫です
>>377さん
左下を原点とすれば切片0は可能ですよね?
Cの知識がなさすぎて組めないorz
380:デフォルトの名無しさん
08/10/16 13:32:11
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
bmp画像の各ピクセルごとの数値を読み込み、
二次元配列として表示するプログラムを作成せよ
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C
[4] 期限:10月中
[5] その他の制限:特になし
まったく見当がつきません。
よろしくお願いします
381:デフォルトの名無しさん
08/10/16 13:34:45
[1] 授業単元:c++builder
[2] 問題文(含コード&リンク):下に提示
[3] 環境
[3.1] OS:windows xp
[3.2] C++ builder5
[3.3] 言語:C++ builder
[4] 期限: 10/17まで
Memo1には Memo2には Memo3には Memo4には
5 4 5 2
6 3 2 6
5 1 8 4
6 4 6 6
と出してあるのですがこの4つのMemoの列に対応させて足し算したものを
Memo5に
16
17
18
22
と出したいのですがどのようにすればいいんでしょうか。
builderに関してほとんど手探り状態なのでどなたかわかる方よろしくお願いします。
382:デフォルトの名無しさん
08/10/16 13:58:13
見当つかないんだったらフォーマットくらい調べろよ できるかもしれないじゃんか
383:デフォルトの名無しさん
08/10/16 15:10:05
C++で2分法のf(x)=X*X-2
プログラムよろしくお願いします。
384:デフォルトの名無しさん
08/10/16 15:19:35
>>379
合ってるかどうかは知らない
あと、くそーすだがあしからず
#include <stdio.h>
int main(void)
{
double x, y, a, tmp;
int i;
//大きな正方形の座標(左下、右下、左上、右上)
double large_x[4] = {0.0, 10.0, 0.0, 10.0};
double large_y[4] = {0.0, 0.0, 10.0, 10.0};
//小さな正方形の座標(左下、右下、左上、右上)
double small_x[4] = {5.0, 7.0, 5.0, 7.0};
double small_y[4] = {1.0, 1.0, 3.0, 3.0};
printf("大きな正方形の線上の点");
scanf("%lf %lf", &x, &y);
a = y / x;
tmp = a * small_x[0] - small_y[0];
for(i=1; i<4; i++){
if( tmp * (a * small_x[i] - small_y[i]) <= 0.0 )
break;
}
if(tmp > 0.0) printf("重ならない\n");
else printf("重なる\n");
return 0;
}
385:デフォルトの名無しさん
08/10/16 15:19:42
#include <stdio.h>
#define GOSA 0.0001
float sqr(float c){
double x=c,y;
while(1){
y=x*x;
if(y>c-GOSA)if(y<c+GOSA)break;
x -= (y-c)/(2*x);}
return x; }
386:デフォルトの名無しさん
08/10/16 15:19:46
[1] 授業単元:情報処理演習2
[2] 問題:1.大きさ5の配列の各要素に整数データを読み込みながら順次格納して、全要素を逆に並びかえて、その配列の0番から順に内容を表示するプログラムをつくりなさい
2.正整数を順次配列に読み込んで、三番目に大きな数(全て大きい数なら、左から三番目の数)を出力するプログラムを作れ。尚、0を読み込むと終了すること
ただし、必ず3個以上を読み込むと仮定してもよい
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語:C
[4] 期限
16日の23:59分まで
お願いします
387:デフォルトの名無しさん
08/10/16 15:20:40
>>385は
X*X=cを解くプログラムね
388:デフォルトの名無しさん
08/10/16 15:50:49
>>386
(1)
#include<stdio.h>
int main(){
int a[5],i,left,right;
for(i=0;i<5;++i)scanf("%d",a+i);
for(left=0,right=5-1;left<right;++left,--right)
i = a[left] , a[left] = a[right] ,a[right] = i;
for(i=0;i<5;++i)printf("%d\n",a[i]);
}
(2)
#include<stdio.h>
#include<stdlib.h>
int compare(const void*a,const void*b){
int c=*(int*)a,d=*(int*)b;
return (c>d) - (c<d);
}
int main(){
int a[4]={-1,-1,-1,-1};
while(scanf("%d",a),*a != 0)qsort(a,sizeof a/sizeof*a,sizeof*a,compare);
printf("%d\n",a[1]);
}
389:386
08/10/16 17:00:07
すいません!
osなんですが、Linuxとunix系OSを間違えて書いてました……
正しくは
OS:unix系のOSかwindowsです
申し訳ありません……
390:デフォルトの名無しさん
08/10/16 18:45:15
[1] 授業単元:
[2] 問題文(含コード&リンク):
以下のようなデータが大量に格納されているファイルがある.
[ダウンロード URLリンク(www.vox.tutkie.tut.ac.jp) ]
このファイルを読み込み,数値(キー)と英単語(データ)をセットにして
1データとして2分木へ格納し、数値(キー)にある値を指定して検索を行えば、
その数値(キー)に対応する英単語(データ)を検索できるプログラムを作成せよ。
ふたつめ
上記で使用したtest.list を読み込み,数値(キー)と英単語(データ)をセットにして
1データとしてリストへ格納し、数値(キー)にある値を指定して検索を行えば、
その数値(キー)に対応する英単語(データ)を検索できるプログラムを作成せよ。
そして、上記の木構造による実装との検索時間を比較せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:[2008年10月19日24:00まで]
391:390
08/10/16 18:46:22
5] その他の制限:
1. 格納できるデータ量は(メモリの許す限り)上限はない.
2. 対応する英単語が見付からない場合は、その旨を表示すること。
3. データは,「数値,英単語\n」(\nは改行)で定義されるものとする.
4. データが格納されたファイルは、プログラムの引数で指定できるようにせよ。
5. データは2分木に格納せよ。
6. 数値(キー)に重複はない。
7. 数値(キー)は8桁以内である。もしファイルに9桁以上の数値が入っていた場合はエラーを出力して終了せよ。
8. 数値(キー)に数字以外の文字(アルファベットなど)が含まれていた場合は,エラーを出力して終了せよ.
9. 検索時の入力にも9桁以上の数値や数字以外の文字が入力された場合はエラーを出力して終了せよ.
10. 英単語は25文字以内である。もしファイルに25文字以上の英単語が入っていた場合はエラーを出力して終了せよ。
ふたつめ
# リストによる実装において、データの挿入は数値(キー)によるソートは行わず、単純にファイルに出現した順番にリストに追加していって下さい。
# リストによる実装での検索も、単純にリストの先頭から比較していくような単純なアプローチで結構です。
# 1回の検索では検索時間の差がないでしょうから、10000回くらい繰り返して下さい。なお、test.list のデータ数は130万個あります。
よろしくお願いします。
392:374
08/10/16 18:46:38
>>384
ありがとうございます
ヒントにしてもうちょい考えてみます
393:デフォルトの名無しさん
08/10/16 21:26:24
>>373
ありがとうございました。
これを参考に、自分なりにもう少し頑張ってみます
394:デフォルトの名無しさん
08/10/16 22:02:18
>>380
bmpのフォーマットは?
395:デフォルトの名無しさん
08/10/16 23:06:39
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
UDPサーバURLリンク(kansai2channeler.hp.infoseek.co.jp)
UDPクライアントURLリンク(kansai2channeler.hp.infoseek.co.jp)
問題文(2問あります)URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:WindowsXP
[3.2] Visual stdio2005
[3.3] 言語:C
[4] 期限:10月17日午後13:00まで
[5] その他の制限:特になし
よろしくお願いします
396:デフォルトの名無しさん
08/10/17 00:43:47
[1] 授業単元:プログラミング技術
[2] 問題:30000以下の数字を入力して、「○時間、○分、○秒」と出力するプログラムを作りなさい。
<時間を分にして、分は秒にして、秒は分の答えの余り>
[3] 環境
[3.1] OS:Windows XP
[3.2] Ultla C
[3.3] 言語:C
[4] 期限
特にありません
よろしくお願いします。
397:デフォルトの名無しさん
08/10/17 01:17:09
>>396
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
printf("%2d時間%02d分%02d秒", x / 3600, x % 3600 / 60 , x % 3600 % 60);
return 0;
}
398:デフォルトの名無しさん
08/10/17 01:28:59
[1] 授業単元:C
[2] 問題:n=1
4973/n*2で始まり、4973/n*2の計算の答えが1になるまでnを増やしていき
1になったところで今まで出した数字を全部足した答えを出すプログラム。
少数は切り捨て。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限 [10/17/07:00まで]
2 4 8 4096
(4973/n*2)+(4973/n*2)+(4973/n*2)+・・・・(4973/n*2)
2486 + 1243 + 621 +・・・・ 1 =4965
手計算だと最後のnは2048になって答えが4965になったのですが。
プログラムについてはさっぱりなので助けてください。。。
399:デフォルトの名無しさん
08/10/17 01:36:21
>>398
あ、n*2じゃなくて、2^nです。
400:デフォルトの名無しさん
08/10/17 01:41:42
こんなでいい?
#include<stdio.h>
int main(){
int sum,ex;
for(sum=0,ex=2; 4973/ex >= 1; ex*=2){
sum += 4973/ex;
}
printf("%d\n",sum);
return 0;
}
401:デフォルトの名無しさん
08/10/17 01:50:56
include <stdio.h>
int main()
{
int n, sum = 0;
for (n = 1; 4973 / (1 << (n - 1)) != 1; ++n) {
sum += 4973 / (1 << (n - 1));
}
sum += 1;
printf("%d : %d", n, sum);
return 0;
}
402:401
08/10/17 01:51:44
すいません間違えました
403:デフォルトの名無しさん
08/10/17 01:54:33
そんなすっきりなプログラムが!!
ありがとうございます!!
404:デフォルトの名無しさん
08/10/17 01:56:50
>>402
ぇ?答えの4956もでましたけど・・・
405:404
08/10/17 01:58:31
あ、>>400の方と>>401の方を読み間違えた自分が恥ずかしい…
406:デフォルトの名無しさん
08/10/17 03:26:13
>>392
if( tmp * (a * small_x[i] - small_y[i]) <= 0.0 )
↓
if( (tmp *= (a * small_x[i] - small_y[i])) <= 0.0 )
な気がする
407:デフォルトの名無しさん
08/10/17 04:04:02
>>380
URLリンク(kansai2channeler.hp.infoseek.co.jp)
全BMPフォーマット対応は面倒だから、条件付き、
良く読んで理解して使用のこと
408:デフォルトの名無しさん
08/10/17 04:51:51
>>407 ん~~~
409:デフォルトの名無しさん
08/10/17 07:23:29
[1]授業 c
[2] 問題: 1単語を入力し、その単語のスペルを判定する。その判定を Ctrl-D を入力するまで続ける。判定は、ファイル ``eng.txt'' にその単語が存在する場合に限り、スペルが正しいと判定する。
[3] 環境
[3.1] OS:linux
[3.2] gcc
[3.3] 言語:C
[4] 期限 10/19 16:00
関数は何を使ってもいいです。
何日も考えたのですがぜんぜんわかりませんでした。
どなたかお願いします
410:395
08/10/17 07:26:17
すみません
問題文2問あるといっておいて4問ありました
B1とB2のみで構いません
多少遅れても大丈夫なので引き続きよろしくお願いいたします
411:デフォルトの名無しさん
08/10/17 07:40:04
>>395
UDPサーバ:URLリンク(kansai2channeler.hp.infoseek.co.jp)
UDPクライアント:URLリンク(kansai2channeler.hp.infoseek.co.jp)
412:410
08/10/17 07:48:20
>>410ちょっと訂正
UDPサーバ:URLリンク(kansai2channeler.hp.infoseek.co.jp)
UDPクライアント:URLリンク(kansai2channeler.hp.infoseek.co.jp)
413:396
08/10/17 07:59:31
>>397
ありがとうございました
414:デフォルトの名無しさん
08/10/17 08:29:04
400と401の両方とも、条件部とループ内部で同じ計算をしてるのが無駄
415:デフォルトの名無しさん
08/10/17 10:31:23
>>412
ありがとうございました
416:デフォルトの名無しさん
08/10/17 11:13:35
>>411
そんなの最適化されるんじゃないの?
417:デフォルトの名無しさん
08/10/17 11:15:12
>>411じゃなくて>>414
418:デフォルトの名無しさん
08/10/17 15:40:59
>>409
URLリンク(kansai2channeler.hp.infoseek.co.jp)
419:デフォルトの名無しさん
08/10/17 15:51:15
[1]C言語実習
[2]問題文
以下のコードは、2つのプログラム(同一動作)のコードを
まとめたものです。(各ソースにおいて、行の順番は変えていません)
このコードを2つのプログラムに分解して、それぞれコンパイルが
通り、同一の動作をするようにして下さい。
また処理内容についても簡単にコメントして下さい。
コード
URLリンク(kansai2channeler.hp.infoseek.co.jp) Linux/Gnu-C4.0/C
[4]無制限だそうです。難問だそうです。よろしくお願い致します。
420:デフォルトの名無しさん
08/10/17 15:55:13
>>416
よく知らないんだが、どのコンパイラでどのオプションつけるとこれが最適化されるの?
421:デフォルトの名無しさん
08/10/17 16:14:39
>>419
#include <stdio.h>
int is_prime(int p){
int i;
if(p<=1)
return 0;
if((p==2)||(p==3))
return 1;
if((p%2==0)||(p%3==0))
return 0;
for(i=3;i*i<=p;i+=2)
if(p % i==0)
return 0;
return 1;
}
int main(void){
int i,c=0;
for(i=1;i<=1000000;i++){
if(is_prime(i))
c++;
if(i%100==0)
printf("%d %d\n",i,c);
}
return 0;
}
素数の個数を求めるプログラム
残りはエラトステネスの篩だな
422:デフォルトの名無しさん
08/10/17 17:57:37
>>420
僕もよく知らない、ってかよく知らないのに突っ込まないでください><
基本的に、共通部分式の削除が行われるんじゃないですか?
423:デフォルトの名無しさん
08/10/17 18:25:25
418さんありがとうございました
感謝です
424:デフォルトの名無しさん
08/10/17 20:01:06
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク): BMI値を判定するプログラムを作成する
入力:身長t(m),体重w(kg)
出力:判定結果{やせ,標準,肥満}
身長をt(m),体重をw(kg)としたとき,
BMI=w/tの二乗
BMI値が18.5未満⇒やせ
BMI値が18.5以上かつ25.0未満⇒標準
BMI値が25.0以上⇒肥満
#include <stdio.h>
int main(void) {
float t, w;
printf("t = "); scanf("%f", &t);
printf("w = "); scanf("%f", &w);
????????????????????????????????←この部分が解りません。
}
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年10月20日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数,条件分岐(if文,if-else文)は習いました。
お願い致します。
425:デフォルトの名無しさん
08/10/17 20:06:21
int main(void) {
float t, w, bmi;
printf("t = "); scanf("%f", &t);
printf("w = "); scanf("%f", &w);
bmi = w / t / t;
if (bmi < 18.5) printf("やせ\n");
else if (bmi < 25.0) printf("標準\n");
else printf("肥満\n");
return 0;
}
426:デフォルトの名無しさん
08/10/17 20:55:26
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限: 10/18
すいません。なかなかうまくいきませんよろしくお願いします
427:デフォルトの名無しさん
08/10/17 21:03:49
いくつかレスをもらっても何も進歩してないことにがっかりした
428:デフォルトの名無しさん
08/10/17 21:29:19
>>426
ちゃんとみてないけど、
if(*(s+i)==' '){
の行を
if(*(s+i)==' ' || *(s+i)=='?' || *(s+i)=='!' …){
ってやっていけばいいんじゃね
429:デフォルトの名無しさん
08/10/17 21:52:12
ということを>>336-337が。
430:デフォルトの名無しさん
08/10/17 22:13:26
>>426
#include<stdio.h>
#include<string.h>
#define MAX 256
int main(void){
int len=0, max=0, moji;
char s[MAX+1], l[MAX+1]="";
while((moji=getchar())!=EOF){
if(strchr(" \t\n?!.,()", moji) || len>=MAX){
if(len>max){
strcpy(l, s);
max=len;
}
len=0;
}else{
s[len++]=moji;
s[len]='\0';
}
}
printf("The longest word is \"%s\"\n", l);
return 0;
}
431:デフォルトの名無しさん
08/10/17 23:41:45
個人的にはif elseよりswitchの方が好きだ。
432:デフォルトの名無しさん
08/10/18 00:09:20
個人的にはふさわしい方を使うのが好きだ。
433:デフォルトの名無しさん
08/10/18 00:15:54
>>390
二分木の方だけやってみた
URLリンク(kansai2channeler.hp.infoseek.co.jp)
434:デフォルトの名無しさん
08/10/18 10:37:12
[1] 授業単元:先輩の課題
[2] 問題文(含コード&リンク):
5.3 121.1 123.0 56.8
4.6 21.4 9.2 6.7
・
・
・
みたいなtxtファイルがあるとします。
これを行ごとに呼んで double data[4]に順番にいれて、関数にわたす。
そして次の行をまた同じ配列data[4]にいれて、関数に渡すっていう処理するプログラムを書け
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual studio 2008
[3.3] 言語: C
[4] 期限: 今日
[5] その他の制限: なし
435:デフォルトの名無しさん
08/10/18 12:18:31
>>434
意味不明
文章を見直せ
436:デフォルトの名無しさん
08/10/18 12:25:05
[1] 授業単元:先輩の課題
[2] 問題文(含コード&リンク):
5.3 121.1 123.0 56.8
4.6 21.4 9.2 6.7
・
・
・
みたいなtxtファイルがあるとします。
これを行ごとに呼んで double data[4]に順番にいれて、関数にわたす。
そして次の行をまた同じ配列data[4]にいれて、関数に渡すっていう処理を
ファイルの終わりまで繰り返すプログラムを書け
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual studio 2008
[3.3] 言語: C
[4] 期限: 今日
[5] その他の制限: なし
これでわかりますかね。すいません
437:デフォルトの名無しさん
08/10/18 12:33:08
>>436
#include <stdlib.h>
#include <stdio.h>
void f(double *d)
{
}
int main(int argc, char *argv[])
{
FILE *fp;
double data[4];
if (argc != 2) return 1;
if (!(fp = fopen(argv[1], "r"))) {
return 1;
}
while (fscanf(fp, " %lf %lf %lf %lf",
&data[0], &data[1], &data[2], &data[3]) == 4) {
f(data);
}
return 0;
}
438:デフォルトの名無しさん
08/10/18 12:34:52
>>437
ありがとうございます。
列が100ぐらいあるときは%lfを百個打つのはめんどくさいんですが・・・
なんとかなりませんか?
439:デフォルトの名無しさん
08/10/18 12:44:10
>>438
Ctrl+Vを99回押すだけだろ
440:デフォルトの名無しさん
08/10/18 12:44:49
>>439
そうなんですが・・・ソースが汚いのかなぁとおもいまして・・・
441:デフォルトの名無しさん
08/10/18 12:45:04
9回コピーして10個まとめたのをあと9回コピー
442:デフォルトの名無しさん
08/10/18 12:51:09
>>440
見た目の問題かい
ループで回したらいいじゃん
while (!feof(fp))
{
for (i = 0; i < 100; i++)
{
if (fscanf(fp, "%lf", &data[i]) != 1)
{
printf("error");
return 0;
}
}
f(data);
}
443:デフォルトの名無しさん
08/10/18 12:58:08
>>442
どうもありがとうございました
444:デフォルトの名無しさん
08/10/18 13:01:02
もうひとつ質問させていただきます。
入力ファイルの途中に
5.3 121.1 123.0 56.8
4.6 21.4 9.2 6.7
52.3 121.1 123.0 56.8
45.3 121.1 123.0 56.8
4.6 21.4 9.2 6.7
改行で空いてる行があったとしても正常に動きますか?ためしたところ問題ないようにみえましたが・・・
445:デフォルトの名無しさん
08/10/18 13:02:07
>>444
正常の定義は?
エラーを出して止まるのが正常なのか
書式を無視するのが正常なのか
446:デフォルトの名無しさん
08/10/18 13:07:44
>>445
空白の行を無視して次の行から配列に代入する処理というのが正常です
447:デフォルトの名無しさん
08/10/18 19:03:24
[1]授業 c言語
[2] 問題:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:linux
[3.2] gcc
[3.3] 言語:C
[4] 期限 10/20
448:デフォルトの名無しさん
08/10/18 19:56:05
&s[i].id
s[i].name
&s[i].score[j]
449:デフォルトの名無しさん
08/10/18 22:10:12
[1] 授業単元:プログラミング基礎
[2] 問題文
体重と身長をキーボードから入力し、BMIを計算して出力するプログラムを書け。
BMIの計算はユーザ定義の関数を用いて行い、データの型にはdoubleを用いよ。
ただし、BMIの計算式は以下の通り。
BMI=体重(kg)/身長(m)^2 例:65kg/(1.70m * 1.70m) =22.49
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年10月21日まで
[5] その他の制限: かなり初歩の段階みたいです。
よろしくお願いします。
450:デフォルトの名無しさん
08/10/18 22:27:55
>>449
>>424-425
451:デフォルトの名無しさん
08/10/18 22:31:24
>>449
#include<stdio.h>
double bmi(double weight, double height)
{
return weight / (height * height);
}
int main()
{
double weight, height;
printf("体重(kg)?");
scanf("%lf", &weight);
printf("身長(m)?");
scanf("%lf", &height);
printf("BMI=%g\n", bmi(weight, height));
return 0;
}
452:デフォルトの名無しさん
08/10/18 22:56:20
>>450>>451
すいません。説明不足でしたがelseやifなんかはまだ習ってないくらい初歩なので
>>424-425はよくわからないんです。
お早いレスで助かりました。ありがとうございます。
453:デフォルトの名無しさん
08/10/19 02:08:14
>>425
こんなに早くやって下さり、本当に有難う御座いました。
助かりました。
454:デフォルトの名無しさん
08/10/19 05:04:55
>>453
elseやifについてどう思うかを>>452に伝えてやってくれまいか
455:デフォルトの名無しさん
08/10/19 13:54:08
[1] 授業単元:プログラミング
[2] 問題文:
"A>B"と入力すると"AはBより大きい"のように、不等式を文章に変換するプログラムを作成せよ。また、入力データと実行結果は以下の通りとし、変換された文章をテキストファイルに順番に出力すること。
実行結果
データ1:A>B
データ2:B<C
データ3:A<C
○○○.txtに出力しました
○○○.txt
AはBより大きい
BはCより小さい
AはCより小さい
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:10/21
[5] その他の制限:可能な限り初歩的なものでお願いします
456:デフォルトの名無しさん
08/10/19 14:38:08
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fpr, *fpw;
char s1[1000], s2[1000], c;
if (argc != 3) { fprintf(stderr, "引数にこでたのむ\n"); return 1; }
if (!(fpr = fopen(argv[1], "r"))) {fprintf(stderr, "ファイルが\n"); return 1; }
if (!(fpw = fopen(argv[2], "w"))) {fprintf(stderr, "ファイルが\n"); return 1; }
while (fscanf(fpr, " %[^<> ] %c%s", s1, &c, s2) == 3) {
switch (c) {
case '<':
fprintf(fpw,"%sは%sより小さい\n", s1, s2);
break;
case '>':
fprintf(fpw,"%sは%sより大きい\n", s1, s2);
break;
default:
fprintf(stderr, "なかみが\n"); return 1;
}
}
fclose(fpr);
fclose(fpw);
return 0;
}
457:デフォルトの名無しさん
08/10/19 15:42:56
[1]授業 c言語
[2] 問題:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
3.1 OS:linux
3.2 gcc
3.3 言語:C
[4] 期限 10/20
すいません、よろしくお願いします。
458:デフォルトの名無しさん
08/10/19 15:48:02
>>447
>>448
459:デフォルトの名無しさん
08/10/19 16:04:58
>>457
まず、リスト①はmain関数の外で定義な。中でもいいけど、個人的には外の方が分かりやすい。
で、○○○は上から順に
&s[i].id
s[i].name
&s[i].score[j]
あんまり偉そうなこといいたくないが、これって構造体の基本問題だろ??
できるだけ自分で解けるようにしないと後々、辛い目にあうぞ。
460:457
08/10/19 17:07:53
>>459
ウザいです。
偉そうな口を聞いて欲しくないです。