C/C++の宿題を片付けます 96代目
■ このスレッドは過去ログ倉庫に格納されています
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
【前スレ】
C/C++の宿題を片付けます 95代目
http://pc11.2ch.net/test/read.cgi/tech/1187944110/
0208デフォルトの名無しさん
2007/09/24(月) 18:31:230209163
2007/09/24(月) 18:37:42自分のプログラムですが
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4960.txt
エラーがひとつ、どうしても消えません
修正可能な方よろしくお願いします
0210デフォルトの名無しさん
2007/09/24(月) 18:45:26エラーがひとつって…いくつも間違いあるぞ
cinでendlいらない
powやsqrtを自分で宣言してどうする
0211デフォルトの名無しさん
2007/09/24(月) 18:45:51int pow(int base,int exponent);
double sqrt(int base);
--
標準関数を自分勝手に宣言してはいけません。しかも、間違っています。
--
int result1;
result1=pow(base,exponent);
double result2;
result2=sqrt(base);
--
変数は定義と同時に初期化しましょう。そうしなければいけない理由がないのに
不定値のまま放置するのは阿呆のすることです。
0212デフォルトの名無しさん
2007/09/24(月) 18:46:18コンパイラ通してないけど、ぱっと見で見つけたエラー。
>cin >> base >> endl;
std::endlに何か入力させようとしてる…
>int pow(int base,int exponent);
>double sqrt(int base);
自分で関数内関数宣言?cmathをincludeしてるのに
0213デフォルトの名無しさん
2007/09/24(月) 18:48:02[2] 問題文:txtファイルdata.txtに
memo1.txt
memo2.txt
memo3.txt
と書かれているとする。
今main関数で、ファイルdata.txtの中身のファイル(memo*.txt)をぬきとる。
その中身のファイルを違う関数void functionに移してファイルオープンして
中身を表示せよ。
-----------
memo1.txtの中身は
2
4
5
memo2.txtの中身は
1
4
6
memo3.txtの中身は
4
5
とします。
[3] 環境
LINUX
[4] 期限:はやければはやいほうがいいです。
[5] その他の制限:特になし
0214デフォルトの名無しさん
2007/09/24(月) 18:51:37小学生?
0215デフォルトの名無しさん
2007/09/24(月) 18:52:29ファイルの中身のファイル?
0216デフォルトの名無しさん
2007/09/24(月) 18:53:01死ね。
0217デフォルトの名無しさん
2007/09/24(月) 18:55:43#include <stdio.h>
#include <string.h>
void function(char *filename)
{
char command[1024];
sprintf(command, "cat %s", filename);
system(command);
}
int main(void)
{
char filename[1001];
FILE* fp = fopen("data.txt", "r");
if( fp == NULL ) { return 1; }
while( !feof(fp) ) {
int len;
fgets(filename, 1000, fp);
len = strlen(filename);
while( filename[len - 1] == '\n' ) filename[len - 1] = '\0';
printf("%sの中身は\n");
function(filename);
}
return 0;
}
0218デフォルトの名無しさん
2007/09/24(月) 18:56:370219デフォルトの名無しさん
2007/09/24(月) 18:57:42memo1.txt
memo2.txt
memo3.txt
で
memo1.txtにかかれてあるのが
2
4
5
で
memo2.txtにかかれてあるのが
1
4
6
で
memo3.txtにかかれてあるのが
4
5
という意味です
0220デフォルトの名無しさん
2007/09/24(月) 19:00:32cat使ったのを書こうと思ったらかぶったよw
0221デフォルトの名無しさん
2007/09/24(月) 19:06:00え?
0222デフォルトの名無しさん
2007/09/24(月) 19:18:35 ̄ ̄ ̄ ̄ ̄ ̄
どこの国の方ですか?
0223デフォルトの名無しさん
2007/09/24(月) 19:33:220224163
2007/09/24(月) 19:40:29http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4961.txt
今度はエラー3とでましたが、、、
0225デフォルトの名無しさん
2007/09/24(月) 19:50:42pow(double, double)
0226デフォルトの名無しさん
2007/09/24(月) 19:53:03でたから何?
表示されたエラーを読めば解決する問題だよね?
0228デフォルトの名無しさん
2007/09/24(月) 20:24:060229163
2007/09/24(月) 20:32:21無視なんてとんでもないです
ありがとうございますと言ったのは主に185さんに対してです
ただ全く習っていない解法でしたので、、、
ありがたく使わせてもらいます
0230デフォルトの名無しさん
2007/09/24(月) 20:36:210231185
2007/09/24(月) 20:51:31私がわるかったです。
0232デフォルトの名無しさん
2007/09/24(月) 20:56:540233デフォルトの名無しさん
2007/09/24(月) 21:00:040234デフォルトの名無しさん
2007/09/24(月) 21:04:05宣言時>void Display(int result1,double result2,int base,int exponent);
使用時>Display(result1,result2);
引数の数が合ってないのが悪い。
「エラー3」とかではなくて、何行目にどういうエラーがあるのかということを
出力するはずだから、どうせならそれを書いてくれ。
0235デフォルトの名無しさん
2007/09/24(月) 21:21:00#include<stdio.h>
int main(void){
int num;
printf("=>");
scanf("%d",&num);
if(num == 19) printf("2 4 6 8 10 12 14 16 18\n");
return 0;
}
問題文どおりならこうなる
0236デフォルトの名無しさん
2007/09/24(月) 21:21:47#include<stdio.h>
int main(void){
int num;
printf("=>");
scanf("%d",&num);
if(num == 19) printf("2 4 6 8 10 12 14 16 18\n");
return 0;
}
問題文どおりならこうなる
0237デフォルトの名無しさん
2007/09/24(月) 21:27:08#include<stdio.h>
int main(void){
int num;
printf("=>");
scanf("%d",&num);
if(num == 19) printf("2 4 6 8 10 12 14 16 18\n");
return 0;
}
問題文どおりならこうなる
0238デフォルトの名無しさん
2007/09/24(月) 21:34:08そこまでして書き込みたいのか。
0239デフォルトの名無しさん
2007/09/24(月) 21:40:55書き込めないと思ってたら100-200までを
表示した画面をブックマークしてた
0240デフォルトの名無しさん
2007/09/24(月) 22:25:07死ね。
0241デフォルトの名無しさん
2007/09/24(月) 22:32:380242デフォルトの名無しさん
2007/09/24(月) 22:37:350243デフォルトの名無しさん
2007/09/24(月) 22:48:170244デフォルトの名無しさん
2007/09/24(月) 23:05:55というかわざわざCalcPower,CalcSquareRoot関数を作る必要がないだろ
0245デフォルトの名無しさん
2007/09/25(火) 00:02:090246デフォルトの名無しさん
2007/09/25(火) 00:10:500247デフォルトの名無しさん
2007/09/25(火) 00:11:420248デフォルトの名無しさん
2007/09/25(火) 00:14:41他の人が回答済み
0249デフォルトの名無しさん
2007/09/25(火) 00:23:04おまえもいちいちうるさいよ
0250デフォルトの名無しさん
2007/09/25(火) 00:24:120251デフォルトの名無しさん
2007/09/25(火) 00:25:01そこらへんも解決済み
0252デフォルトの名無しさん
2007/09/25(火) 00:26:100253デフォルトの名無しさん
2007/09/25(火) 02:49:55[2] 問題文(含コード&リンク):
ある2つのファイルがある。
この時1つのファイルには次元nの2つの整数ベクトルが書き込まれている。
この2つのベクトルを読み出し、内積を計算した後、
結果をもう1つのファイルに書き込むプログラムを作成せよ。
読み込むファイル、書き込むファイルどちらもファイル名を
任意に(キーボードから)指定できるようにする。
※なお、任意の大きさnのデータを処理できるようにする。
また、nはファイルの最初に置かれ、スペースによって要素は区切られる。
ベクトル要素のアクセスにはポインタを用いる。
[3] 環境
[3.1] OS: (WindowsXP)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C言語)
[4] 期限: ([07年9月26日] )
[5] その他の制限: なし
よろしくお願いします。
0254デフォルトの名無しさん
2007/09/25(火) 03:20:59>ある2つのファイルがある。
>この時1つのファイルには次元nの2つの整数ベクトルが書き込まれている。
これを用意してくれ
0255デフォルトの名無しさん
2007/09/25(火) 03:36:52適当に2つ条件にあうファイルを作ればいいんだろう?
0256デフォルトの名無しさん
2007/09/25(火) 04:16:46(___ ___)
∇
0257デフォルトの名無しさん
2007/09/25(火) 04:37:20n次元整数ベクトルってのが何だったか思い出せなかったので適当に書いてみた。
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE* fp; char filename[256];
int i, j, n, * vector[2], result = 0;
//ファイル読み込み
do{
printf("読み込むファイル?"); scanf("%s", filename);
}while((fp = fopen(filename, "r")) == NULL);
fscanf(fp, "%d", &n);{
for(i=0; i!=2; i++){
vector[i] = calloc(n, sizeof(int));
for(j=0; j!=n; j++)
fscanf(fp, "%d", (vector[i] + j));}
close(fp);}
//内積を求める
for(i=0; i!=n; i++) result += *(vector[0] + i) * *(vector[1] + i);
//ファイル書き込み
printf("書き込むファイル?"); scanf("%s", filename);
fp = fopen(filename, "w");
fprintf(fp, "%d", result);
close(fp); free(vector[1]); free(vector[0]);
return 0;}
0258163
2007/09/25(火) 06:06:24ありがとうございました
一応コード貼っておきます
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4964.txt
おさわがせしてごめんなさい
0259デフォルトの名無しさん
2007/09/25(火) 06:17:32Windows
WZ EDITOR
gcc
for文,1次元変数,do-while文,if-else文,doubleなどは習いました。
期限:今日中
問題
2次方程式の開放プログラム:a,b,cをそれぞれ入力し、axの2乗+bx+c=0の2つの解を表示するプログラムです。
0260デフォルトの名無しさん
2007/09/25(火) 06:28:21他の質問者と同じ形式で書き込もうとは思わない?
0261デフォルトの名無しさん
2007/09/25(火) 06:34:10いちいちうるせーんだよ、答えもしないクズが
0262デフォルトの名無しさん
2007/09/25(火) 06:39:09http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4965.c
0263デフォルトの名無しさん
2007/09/25(火) 07:53:08[2] 問題文(含コード&リンク):
main引数に格納されたtest.txt(ファイル名)を
変更してtest.abc.txtとするコードを作成せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 9/25
[5] その他の制限: なし
引数で得たファイル名の拡張子の前に「.abc」を入れるというものなのですが
うまく作成できません。よろしくお願いいたします。
0264デフォルトの名無しさん
2007/09/25(火) 08:00:20ファイルのリネームをしろってこと?
コピーを作れってこと?
0265デフォルトの名無しさん
2007/09/25(火) 08:22:33ファイルのコピーを作って
リネームしろってことだと思います。
0266デフォルトの名無しさん
2007/09/25(火) 08:27:28Cygwin?MinGW?
0267デフォルトの名無しさん
2007/09/25(火) 08:29:16すみません書き忘れでした
cygwinです
0268デフォルトの名無しさん
2007/09/25(火) 08:33:16複数拡張子(a.txt.bak) や拡張子無しはどうすれば?
0269デフォルトの名無しさん
2007/09/25(火) 08:35:42とくにその辺は指定がないので
気にしなくて(ないものと考えて)
良いと思われます
0270デフォルトの名無しさん
2007/09/25(火) 08:41:06#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int c,char**v){
char com[256]="./tmp.bat ";
strcat(com,v[1]);
FILE*fp=fopen("tmp.bat","w");
fprintf(fp,"%s","cp %1 tmp\nren tmp %~n1.abc.%~x1");
fclose(fp);
system("chmod 744 tmp.bat");
system(com);
system("rm tmp.bat");
return 0;
}
0271デフォルトの名無しさん
2007/09/25(火) 09:32:18http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4966.c
0272デフォルトの名無しさん
2007/09/25(火) 09:35:48http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4967.c
0273デフォルトの名無しさん
2007/09/25(火) 09:40:500274デフォルトの名無しさん
2007/09/25(火) 10:14:27#include <stdio.h>
#include <string.h>
#include <assert.h>
int main(int argc, char **argv)
{
char outname[256];
char *dot;
if( argc != 2 ){
printf("Usage:%s filename",argv[0]);
return 1;
}
if( (dot = strrchr(argv[1], '.')) == NULL ){
strcpy( outname, argv[1]);
strcat( outname, ".abc" );
}else{
int i;
for( i=0 ; argv[1][i] != *dot ; i++){
outname[i] = argv[1][i];
}
outname[i] = '\0';
strcat(outname, ".abc");
strcat(outname, dot);
}
if( rename( argv[1], outname ) == -1){
perror("Error");
return 1;
}
return 0;
}
0275274
2007/09/25(火) 10:20:170276デフォルトの名無しさん
2007/09/25(火) 10:51:490277デフォルトの名無しさん
2007/09/25(火) 10:58:40~~~~~~~~~~~~~~~~~~~~~
0278デフォルトの名無しさん
2007/09/25(火) 11:06:430279デフォルトの名無しさん
2007/09/25(火) 11:13:33大変参考になりましたm(__)m
0280デフォルトの名無しさん
2007/09/25(火) 13:13:52#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[]){
char *src_orig, dest_orig[FILENAME_MAX+1], *src, *dest, *ptr;
if(argc==2) src_orig=argv[1];
else src_orig="test.txt";
src=src_orig;
dest=dest_orig;
ptr=strrchr(src, '\\');
if(ptr==NULL) ptr=strrchr(src, '/');
if(ptr!=NULL) dest+=sprintf(dest, "%.*s", ptr-src+1, src), src=ptr+1;
ptr=strrchr(src, '.');
if(ptr==NULL) ptr=src+strlen(src);
sprintf(dest, "%.*s.abc%s", ptr-src, src, ptr);
printf("%s -> %s\n", src_orig, dest_orig);
if(rename(src_orig, dest_orig)!=0){
printf("Error : rename failed. %s -> %s\n", src_orig, dest_orig);
}
return 0;
}
0281デフォルトの名無しさん
2007/09/25(火) 13:21:39[2] 問題文
機能の異なる加工機械が三種類M1・M2・M3(一台ずつ)があり、それぞれ加工経路の異なる三種類の製品A・B・Cの発注がランダムに来る。
発注が来てからスケジュールを行い、何日で完成するかを出すプログラムを作りなさい。
ただし、製品Aの加工順路はM1⇒M2⇒M3、加工時間はM1:5M2:10 M3:15時間
製品Bの加工順路はM2⇒M3⇒M1、加工時間はM1:10M2:15 M3:5時間
製品Cの加工順路はM3⇒M1⇒M2、加工時間はM1:15M2:5 M3:10時間
発注が来た時点で、使用したい加工機械が他の製品を加工中だった場合、その製品の加工が終了してから、
加工を開始するものとする。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語: C
[4] 期限: 9/25
[5] その他の制限: なし
よろしくお願いします。
0282デフォルトの名無しさん
2007/09/25(火) 13:25:41#include<stdio.h>
char *addext(char *cs, int size, char *org, char *ext) {
char *p;
for (p = org; *p != '.' && *p != '\0'; p++)
continue;
strncpy(cs, org, (p - org));
strncpy(cs + (p - org), ext, strlen(ext));
strncpy(cs + (p - org) + strlen(ext), p, strlen(p));
return cs;
}
int copy(char *from, char *to) {
FILE *src = fopen(from, "r");
if (!src) return -1;
FILE *dst = fopen(to, "w");
int c, n;
for (n = 0; (c = getc(src)) != EOF; n++) {
putc(c, dst);
}
fclose(src);
fclose(dst);
return n;
}
int main(int argc, char **argv) {
int size = 256;
char dst[size], *src = argv[1];
if (1 < argc && 0 < copy(src, addext(dst, size, src, ".abc"))) {
printf("copy `%s' -> `%s'", src, dst);
}
}
0283デフォルトの名無しさん
2007/09/25(火) 13:31:05最短日数を答えるんだよね?アルゴリズムとか書いてない?
0284デフォルトの名無しさん
2007/09/25(火) 13:32:481日24時間で計算し、常に稼動しているものとしておk?
入力するデータ形式はどんな感じ?
加工途中で追加の発注が割り込む可能性はある?
発注の最小時間単位は1時間?1分?1秒?
絶対遵守の納期設定はある?
0285デフォルトの名無しさん
2007/09/25(火) 13:34:220286281
2007/09/25(火) 13:40:41アルゴリズムですか。。。
発注が着たら前詰めで、割り付けていくとしか書いてないんですけど。。。
例えば、製品Aの発注が来た時点で、M1が使用中で3時間後にその作業が終了するなら、
発注が来て三時間後に製品Aの加工を開始するって意味だと思うんですけど。。。
もちろん次のM2がまた使用中ならその作業が終了してから、M2での製品Aの加工を開始するって意味です。
よろしくお願いします。
0287281
2007/09/25(火) 13:48:321日24時間で計算し、常に稼動しているものとしておk?
⇒大丈夫です。
加工途中で追加の発注が割り込む可能性はある?
⇒他の製品の発注が来ることはありますが、同じ製品の追加はないです。
早く来た発注がを最優先でお願いします。
発注の最小時間単位は1時間?1分?1秒?
⇒一時間でお願いします。
絶対遵守の納期設定はある?
⇒ありません。
0288デフォルトの名無しさん
2007/09/25(火) 13:50:010289281
2007/09/25(火) 13:55:37発注のタイミングは、ランダムでお願いします。
終了条件書き忘れてました。各製品5回、発注が来たら終了でお願いします。
よろしくお願いします。
0290デフォルトの名無しさん
2007/09/25(火) 14:10:38仮に下のような2つの発注があった場合、解はどうなる?
#発注時(単位:時) 製品種別 注文コード(便宜上勝手に決めた)
0 製品A 000A
15 製品C 015C
経過時間順に
0 000A発注 000A-M1開始
5 000A-M1終了 000A-M2開始
15 000A-M2終了 000A-M3開始 015C発注 015C-M3開始 <- 発注時間と加工開始時間が重なる時リスケジューリングが先?
000A-M3 が優先になるか 015C-M3 が優先になるのかどっち?
000A-M3 が優先の時、総時間 60時間
015C-M3 が優先の時、総時間 55時間
0291281
2007/09/25(火) 14:22:06000Aの発注が先なので、000Aを優先でお願いします。
よろしくお願いします。
0292デフォルトの名無しさん
2007/09/25(火) 14:59:28を表示するプログラムを教えて。
0293デフォルトの名無しさん
2007/09/25(火) 15:56:53例えば、ランダムで90〜110の数字を出すためにはどうしたらいいですか?
誰か教えてください。
0294デフォルトの名無しさん
2007/09/25(火) 16:01:35スレ違いだが、
90〜110 -> 90 + 0〜20
0295デフォルトの名無しさん
2007/09/25(火) 16:02:16rand()%21 にすると乱数の範囲は ???〜??? になります
それに ??? を足すと乱数の範囲は ???〜??? になります
0296デフォルトの名無しさん
2007/09/25(火) 16:10:5351を90〜110 -> 90 + 0〜20 に書き換えればいいってことですか?
0297デフォルトの名無しさん
2007/09/25(火) 16:36:380298デフォルトの名無しさん
2007/09/25(火) 17:16:19分かったら消えろ
0299253
2007/09/26(水) 00:56:25書き込まれているデータは例えば3次元整数ベクトルでしたら
1 2 3
4 5 6
のような数字のみであり、
1行目をベクトルa、2行目をベクトルbとしてそれを認識し内積を求め、
その結果を別のもう1つのファイルに書き込む。
と言ったイメージであると思います(問題には質問時に書いた事以上は
書かれていなかったのであくまで私の考えですが)。
ですから、おそらく問題にあるn次元の「n」は1つの行に書かれた数値の数
で決定し、データ(数値)はファイルの先頭から書かれているという条件があるので、
1行目と2行目を読み込むだけで、内積を求めるための要素は揃うという事だと思います。
申し訳ないのですが再度よろしくお願いします。
0300デフォルトの名無しさん
2007/09/26(水) 01:21:523
1 2 3
4 5 6
もしくは
3 1 2 3 4 5 6
のどっちかだろ。ってわけでその話は>>257でおしまい
0301デフォルトの名無しさん
2007/09/26(水) 01:25:09fortranとかだと結構見かけるんだけれども、C++はほとんど無い気がします。勿体無いですよね??
0302デフォルトの名無しさん
2007/09/26(水) 01:35:100303デフォルトの名無しさん
2007/09/26(水) 01:39:14[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4970.txt
[3] 環境
[3.1] OS: (Windows)
[3.2]
[3.3] 言語: (C)
[4] 期限: 9/26
[5] その他の制限: なし
よろしくお願いします。
0304デフォルトの名無しさん
2007/09/26(水) 01:41:160305デフォルトの名無しさん
2007/09/26(水) 01:55:23【1】
(1) 38行目でFp2を閉じている。「Fp2」
(2) 起動時に指定された2つめをファイル名として与える。「argv[2]」
(3) 一つめのファイルを開くのには成功している。この時点で閉じなければならないのは「Fp1」
(4) strerrorはエラー番号を引数にしてエラーメッセージへのポインタを返す関数。「(errno)」
(5) strcmpは同じ文字列であれば0を返す。ここは同じでないときに-1を返す処理なので「0」
ただし4がそれで良いのかどうかは自信なし(汗
0306デフォルトの名無しさん
2007/09/26(水) 02:00:22期限過ぎてしもた
思ったよりもずっと難しかったし、1回全部作り直したのに見通しがよくならないし…
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4971.c
使うには標準入力から下のような文字列を与える
発注時間(整数で単位は hour) 製品種別(A,B or C))
0 A
14 C
15 A
15 B
EOFで発注を終了
./a.out -v のようにコマンドラインオプション -v をつけると詳細表示
0307デフォルトの名無しさん
2007/09/26(水) 02:03:42発注順序はソート済みとする
■ このスレッドは過去ログ倉庫に格納されています