C/C++の宿題やらせてください。9代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG今まで1年*ヶ月、ほとんど毎日休まず一生懸命C++を勉強してきた。
わからない宿題若しくは処理があったら私にやらせてくださいm(_ _)m
8代目(前スレ): http://pc2.2ch.net/test/read.cgi/tech/1055056940/l50
7代目: http://pc2.2ch.net/test/read.cgi/tech/1053963794/l50
6代目: http://pc2.2ch.net/test/read.cgi/tech/1053045530/l50
5代目: http://pc2.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc2.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc2.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
宿題手伝いますYO!!: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
ラウンジ:質問が長い時はココを使うと便利
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG>>乙
0004964
NGNG>> 997
http://pc2.2ch.net/test/read.cgi/tech/1055864305/49
これ↑も私なんですよ。
だけど、うまくできない気がするのです。
0005デフォルトの名無しさん
NGNGその方法でできる。
0006964
NGNGlist={a, b, c, d, e} として、一番下の葉を(ab) として考えると、
list={(ab), c, d, e} として4要素の木について再帰的に行うことに
なると思うのですが、
この木の作り直しをどうすればよいのか分からないのです。
list[0]=(list[0] と list[1] をくっつけたやつ)
list[1]=list[2]
list[2]=list[3]
list[3]=list[4]
て、効率悪いですよね?
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG具体的に何がしたいんだ?
0009964
NGNG最終的に作りたいのは、根無し木なので、
((((ab)c)d)e) と (((ab)c)(de)) は同じとみなさなくてはいけないのですよ。
そのことを言っているのかと早とちりしてしまいました。
でも、これに対する対処は後から考えますので、その前に木の作り直しを、
・(list[0] と list[1]をくっつけたもの) を list に追加
・list[0] と list[1] を list から消去
だけでできるようにしたいのです。
list 構造を使うか、インデクスを使うことになると思うのですが、
よく分かりません。
0010デフォルトの名無しさん
NGNGとりあえずそれでやってみたら?
動くものをつくってから、効率云々考えてもいいんじゃない?
叩き台があったほうがアドバイスも出やすいと思うよ。
0011デフォルトの名無しさん
NGNGよくわからんが、
list[0]=(list[0] と list[1] をくっつけたやつ)
list[1]=list[4]
でどーよ。
0012デフォルトの名無しさん
NGNG二つの正の整数を入力して、その整数と整数の間にある
素数を求めるというプログラムなのですが、以下で実行してみたところ
ふたつめの整数がひとつめの整数よりも大きい場合には正しく動作したのですが
ひとつめの整数がふたつめの整数より大きい場合に正しく動作してくれません。
0013デフォルトの名無しさん
NGNGint main(void)
{
int i, a, b;
do {
printf("1つめの正の整数を入力してください:");
scanf("%d", &a);
if (a < 0);
{
puts("正の整数を入力してください");
}
} while (a < 0);
do {
printf("1つめの正の整数を入力してください:");
scanf("%d", &b);
if (b < 0);
{
puts("正の整数を入力してください");
}
} while(b < 0);
printf("%dと%dの間にある素数を表示します。\n", a, b);
0014デフォルトの名無しさん
NGNGif (a < b)
{
for (a; a <= b; a++)
{
for (i = 2; i < b; i++)
{
if (a % i == 0)
{
break;
}
}
if (a == i)
{
printf("%d\n", a);
}
}
}
0015デフォルトの名無しさん
NGNG{
for (b; b <= a; b++)
{
for (i = 2; i < a; i++)
{
if (b % i == 0)
{
break;
}
}
if (b == i)
{
printf("%d\n", b);
}
}
}
return(0);
}
0016デフォルトの名無しさん
NGNGよくわらんが、それを一緒くたにしたら括弧関係なくならないか?
0017デフォルトの名無しさん
NGNGprintf("%dと%dの間にある素数を表示します。\n", a, b);
if(a>b){i=a;a=b;b=i} // 取り敢えず、この1行を入れなはれ
0018964
NGNGとりあえず、ものはできました。
>>11
そうすると、対象性がぐちゃぐちゃになりますよね。
(c(ab)) が生成されることになる。これは ((ab)c) と一緒だから
作りたくないんですよ。
0019964
NGNGvoid tree(struct ArraySeq array[], int Num){
char tmp[100];
char left[100]="(";
char right[100]=")";
char comma[100]=",";
int i=0;
int j=0;
int k=0;
struct ArraySeq newarray[MaxNumLeaves];
if (Num == 1){
printf("%s\n", array[0].Seq);
}else{
for (i=0; i < Num-1; i++){
for (j=i+1; j < Num; j++){
strcpy(tmp, left);
strcat(tmp, array[i].Seq);
strcat(tmp, comma);
strcat(tmp, array[j].Seq);
strcat(tmp, right);
strcpy(newarray[i].Seq, tmp);
0020964
NGNGstrcpy(newarray[k].Seq, array[k].Seq);
}
for (k=i+1; k < j; k++){
strcpy(newarray[k].Seq, array[k].Seq);
}
for (k=j; k < Num-1; k++){
strcpy(newarray[k].Seq, array[k+1].Seq);
}
}
}
}
}
0021964
NGNGもう少し効率を上げたいので、この部分を何とかしたいのですが。
ちなみに最初の array が {A,B,C,E} とかだと、
(((A,B),C),D)
(((A,B),D),C)
((A,B),(C,D))
(((A,C),B),D)
(((A,C),D),B)
((A,C),(B,D))
(((A,D),B),C)
(((A,D),C),B)
((A,D),(B,C))
((A,(B,C)),D)
((A,D),(B,C))
(A,((B,C),D))
((A,(B,D)),C)
((A,C),(B,D))
(A,((B,D),C))
((A,B),(C,D))
((A,(C,D)),B)
(A,(B,(C,D)))
とちゃんとできます。
0022964
NGNGこれってどうやって除外しよう・・・。
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG10名の学生の名前、得点、偏差値(数値は適当でよい)を入力し、出力しなさい。
ここで、構造体のメンバーの参照は、構造体ポインタ変数を用いた間接参照とする。
2.1.を改良し、最も得点の高い学生を選ぶプログラムにしなさい。
最大値を求める部分は関数にしなさい。
0025デフォルトの名無しさん
NGNG#include "stdio.h"
struct seiseki{
char name[10];
int tensu;
float hensachi;
};
main()
{
struct seiseki gakusei[10];
struct seiseki *p;
int i;
p=gakusei;
printf("名前 点数 偏差値 を入力\n");
for(i = 0; i < 10; i++){
scanf("%s %d %f", p->name, &p->tensu, &p->hensachi);
p++;
}
p=gakusei;
putchar('\n');
for(i = 0; i < 10; i++){
printf("名前:%s \n点数:%d \n偏差値:%f \n\n", p->name, &p->tensu, &p->hensachi);
p++;
}
return 0;
}
0026デフォルトの名無しさん
NGNGで?
0027デフォルトの名無しさん
NGNG点数と偏差値がうまく表示できないです。
0028デフォルトの名無しさん
NGNG-#include "stdio.h"
+#include <stdio.h>
-main()
+int main()
- printf("名前:%s \n点数:%d \n偏差値:%f \n\n", p->name, &p->tensu, &p->hensachi);
+ printf("名前:%s \n点数:%d \n偏差値:%f \n\n", p->name, p->tensu, p->hensachi);
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG1.円筒の表面積A及び体積Vを計算するプログラムを作りなさい
なお以下のような構成にすること
#include <stdio.h>
#define PAI 3.14159
main()
{
GetInputs(&r,&h); /*scanfでr,hを読み込む関数*/
ComputeAandV(r,h,&A,&V); /*表面積及び体積を計算する関数*/
DisplayAnswers(A,V); /*解をファイルに書き出す関数*/
}
003130
NGNG#include <stdio.h>
#define PAI 3.14159
void GetInputs(double *rp, double *hp);
void ComputeAandV(double r,double h, double *Ap,double *Vp);
void DisplayAnswers(double A,double V);
int main()
{
double r1,h1,A1,V1;
GetInputs(r1,h1);
ComputeAandV(r1,h1,&A1,&V1);
DisplayAnswers(A1,V1);
return(0);
}
003231のつづき
NGNG{
printf("半径rと高さhを入力してください。\n");
printf("r:"); scanf("%lf",&r);
printf("h:"); scanf("%lf",&h);
}
void ComputeAandV(double r,double h,double *Ap,double *Vp)
{
*Ap=2*PAI*r*h;
*Vp=PAI*r*r*h;
}
003332のつづき
NGNG{
printf("表面積は%lfで体積は%lfです。\n",A,V);
}
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNGこれじゃ、呼び出し元にr,hは渡らない。
0036デフォルトの名無しさん
NGNGGetInputs(r1,h1)とComputeAandV(r1,h1,&A1,&V1)の引数の使い方を比べてみよう
あともう少しだな
0037デフォルトの名無しさん
NGNGvoid GetInputs(double *rp, double *hp)で宣言しておいて
void GetInputs(double r,double h)と定義してる
003830
NGNGすいません言い方が悪かったです
Null Reference なんとかというのが出てくるんです。
>>35
void GetInputs(double *r,double *h)
にすればいいんですか?
>>37
間違えました・・・
先ほどから頑張ってるんですが本見てもよく分かりません・・・
0039デフォルトの名無しさん
NGNG直接の答ではないけど、関数で変数を設定するにはこんな感じ。
#include <stdio.h>
void
substitute1(double *x)
{
*x = 0.1;
}
int main(){
double a;
substitute1(&a);
printf("%f\n", a);
return 0;
}
004030
NGNGありがとうございました。
0041デフォルトの名無しさん
NGNGclock_t StartTime = clock();
while((int)((clock() - StartTime) / CLOCKS_PER_SEC) < sec)
}
上の関数を利用して1秒毎にコンマ’.’を表示させたいんですが、
どうすればいよいでしょうか?
004241
NGNG004341
NGNGint i = 0;
while(i++ < sec){
while(1){
clock_t StartTime = clock();
while((int)((clock() - StartTime) / CLOCKS_PER_SEC) < 1);
break;
}
putchar('.');
}
}
これで一応成功したんですが、もっといい方法ってありますよね?
0044デフォルトの名無しさん
NGNGhttp://yahooo.s2.x-beat.com/linkvp/linkvp.html
004541
NGNG0046デフォルトの名無しさん
NGNG利用してってそういうことなのか?
004741
NGNGint i = 0;
while(i++ < sec){
clock_t StartTime = clock();
while((int)((clock() - StartTime) / CLOCKS_PER_SEC) < 1);
putchar('.');
}
}
ここまで短くなりましたが、もっとスマートな方法ってありますかね?
0048デフォルトの名無しさん
NGNGwhile(1){
wait(1);
printf(".");
}
}
004941
NGNGはい、
>clock_t StartTime = clock();
>while((int)((clock() - StartTime) / CLOCKS_PER_SEC) < sec);
上の部分をうまく利用して、という意味です。
いや、別に利用しなくてもいいんですが、
思いつくのがこれしかなくて・・・。
0050デフォルトの名無しさん
NGNG#include <time.h>
void wait(int sec)
{
clock_t StartTime = clock();
while((int)((clock() - StartTime) / CLOCKS_PER_SEC) < sec);
}
int main()
{
for (;;) {
putchar('.');
fflush(stdout);
wait(1);
}
return 0;
}
0052デフォルトの名無しさん
NGNG木とは階層をもつデータ構造で、親(要素)は複数の子(要素)を持つが、
子は1つの親しか持たない。
親がたかだか2つの子しか持たないような木を2分木という。
0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNG君にはここがお似合い
http://jbbs.shitaraba.com/computer/6765/
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNGvoid *hoge(){
char *aho;
aho = (char *)malloc(100);
}
void main(){
/*
プログラム
*/
/*ahoを開放*/
}
0058ランランラン
NGNG6個とも何を計算するプログラムかを教えてください
�@void main()
{
int a,b,x,y,s=0;
scanf("%d",&x),scanf("%d",&y);
for(a=0;a<x;a++) {
for(b=0;b<y;b++)
s+=b;
}
printf("%d\n",s);
}
0059ランランラン
NGNG{
int a,b,x,s=0;
scanf("%d",&x);
for(a=0;a<x;a++) {
for(b=0;b<y;b++)
s+=b;
}
printf("%d\n",s);
}
0060ランランラン
NGNG{
int a,x,s=0;
scanf("%d",&x);
while (x--) {
s+=x;
}
printf("%d %d\n",x,s);
}
0061デフォルトの名無しさん
NGNGそれじゃ、解放できなくなる。普通は
------------------------------
char *create_hoge(void){
return malloc(100);
}
void delete_hoge(char *a){
free a;
}
main(){
char *aho;
aho = create_hoge();
//処理
delete_hoge(aho);
}
------------------------------
みたいにする。
0062ランランラン
NGNG{
int x,y=0;
x=0;
while (y<=200) {
x++;y+=x;
}
printf("%d\n",x);
}
0063ランランラン
NGNG{
int x,y=0,a;
x=0;
scanf("%d",&a);
while (y<=a) {
x++;y+=x;
}
printf("%d\n",x);
}
0064デフォルトの名無しさん
NGNG再利用しないなら開放する必要は無い
0065>>57
NGNGあるいは、free(aho); と書いてもよい。実害はない。益もないが。
0066デフォルトの名無しさん
NGNGfreeできないよ
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNG#include <stdio.h>
#include <stdlib.h>
main()
{
int i, j, k;
int a[8] = {3, 13, 45, 55, 30, 46, 74, 87};
int b[8];
printf("整列前\t");
for ( i = 0; i < 8; i++ ) {
printf("%2d ", a[i]);
}
printf("\n");
printf("整列後\t");
for ( i = 0; i < 8; i++ ) {
printf("%2d ", a[i]);
}
}
0069ランランラン
NGNG{
int x,y=0,a,w;
x=0;
scanf("%d",&a);
while (y<=a) {
x++;
for(w=1;w<=x;w++)
y+=w;
}
printf("%d\n",x);
}
以上です。お手数ですがお願いします
007057
NGNG>>61さんのも試してみたいと思います。
それから、もうひとつ似たようなもので質問よろしいでしょうか?
free()の引数にはアドレスが入ってそのアドレスのメモリを開放するんですよね?
ってことは
char *hoge(){
char *aho;
aho = (char *)malloc(100);
return aho;
}
void main(){
char *ahooo;
ahooo = hoge()
/*
プログラム
*/
/*ahoを開放*/
}
としたら、mainにfree(ahooo);としてもahoは開放されるってことなんでしょうか?
0071デフォルトの名無しさん
NGNGされるよ
0073デフォルトの名無しさん
NGNG領域確保を関数内でするなら、それと対になった開放用の関数をつくった方がいい。
007452
NGNGどういうことを付け足せばいいの?
というか詳しくないという判断がつく程度の知識があるなら、
自分で満足するものを書けばいいと思うが。
字数を増やして欲しいというのなら、
テキトーに足しますが…
0075デフォルトの名無しさん
NGNGchar mojic(char a[],char b[])
{
char *pa,*pb,*ps,s[80];
pa=a;pb=b;ps=s;
while((*ps=*pa)!='\0'){
ps++;
pa++;
}
ps++;
while((*ps=*pb)!='\0'){
ps++;
pb++;
}
return(s);
}
main(void)
{
char a[80],b[80];
printf("Input strings 1?");
scanf("%s",a);
printf("\nInput strings 2?");
scanf("%s",b);
printf("\nOutput :%s",mojic(a,b));
return 0;}
Cで文字列コピーの関数を作ったのですが
'return' : 'char [80]' から 'char' に変換することはできません。
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
というエラーがでてコンパイルできません。
どこを直せばいいのか検討がつかないのでご教授お願い致します。
0076デフォルトの名無しさん
NGNGchar *mojic(char a[],char b[], char s[]){
//処理
return s;
}
main()
char a[80],b[80],s[80];
//a,bデータセット
printf("%s",mojo(a,b,s));
}
007776
NGNG0078デフォルトの名無しさん
NGNGatoiを作る〜とか。
0079デフォルトの名無しさん
NGNG参考書の「関数」の章を見れ。
0080デフォルトの名無しさん
NGNG本当は、図で示せば分かりやすいんだけどね。
0081デフォルトの名無しさん
NGNGありがとうございました!!
008282
NGNGファイルfdataに書き込むプログラムを作成しなさい。ただし、入力の
終了は記号'/'の入力で判定を行うこと。
0083デフォルトの名無しさん
NGNGint main()
{
int c;
FILE *fp;
fp=fopen("fdata","w"); // 失敗しない。絶対に失敗しない。しないったらしない。
while((c=getchar())!='/')
fputc(c,fp);
fclose(fp);
return 0;
}
008482
NGNG標準入力関数fgetcを用い、コマンドラインからファイル名を指定した
ときに、その次から1文字ずつ読み込み、ディスプレイに表示する
プログラムを作りなさい。
ヒント:コマンドラインからファイル名を指定する方法に関しては、
以下を利用のこと。
int main(int argc, char *argc[])
{
FILE *fp_r, *fp_w;
if(argc == 1){
fp_r = stdin;
fp_w = stdout;
}
else
fp_r = fopen(argc[1],"r");
fp_w = stdout;
}
if(fp_r = NULL || fp_w == NULL) exit(-1);
fclose(fp_r);
fclose(fp_w);
return 0;
}
お願いします
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG008782
NGNGその次から→そのファイルから
です。ごめんなさい
0088デフォルトの名無しさん
NGNGそうだよね。ひどいよね。
0089デフォルトの名無しさん
NGNG13万円だけ儲けました
さあ マネーゲームの始まりです。メール1通送るだけで1000円ゲッツ
この情報で月30万円ぐらい稼ぐ勢いだよ みんな真似して転売しよう
http://user.auctions.yahoo.co.jp/jp/user/yaekaoricom?
http://user.auctions.yahoo.co.jp/jp/user/「 」?
まず落札して情報を仕入れます。
「 」 に自分のIDを貼り付けて2CHに貼ります。
それから自分もよく似た文章でヤフオクに出品する ウマー
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNGwhile((c = fgetc(fp_r)) != EOF)
{
fprintf(fp_w, "%c\n", c);
}
0092デフォルトの名無しさん
NGNG0093アルジャーノン
NGNGキーボードから文字を入力し、memo.txtの中を一行ずつ検索して
符合するかどうかを出力するプログラムなのですが改行コードを削ると
どうしてもうまくいきません。コメント内の**で示してある個所をコメントアウト
すると動くのですが、都合上改行コードは削っておきたいのです。
どうすればよいのでしょうか・・・(投稿時改行多すぎるといわれたので無理矢理行数削ったので見辛いですごめんなさい。)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main(){char word[256];char hikaku[256];int flag=0;FILE *fp;fp=fopen("memo.txt","r");
if(fp==NULL){printf("コマンドファイルが見つかりません。");exit(1);}
printf("キーワードを検索します:");
fgets(word,256,stdin);word[strlen(word)-1]='\0';//ここと
while(fgets(hikaku,256,fp)!=NULL)hikaku[strlen(hikaku)-1]='\0';//ここ
if(strcmp(hikaku,word)==0)flag=1;
if (flag==1)printf("見つかりました\n");else printf("見つかりませんでした\n");
printf("お疲れ様。\n");fclose(fp);
}
/*
---memo.txtの中身---
mona
(´∀` )
*/
0094デフォルトの名無しさん
NGNG改行コードを削ることが問題なのではありません
再度よーくコードを眺めてみてください
0095デフォルトの名無しさん
NGNG改行コードを削りたいのは変数に改行を入れておきたくない、
ということです。(後の処理が面倒なので・・・)
ここにソースを貼り付けてカキコしようとしたら、改行が多すぎると怒られたので
無理矢理ソースの改行を削った、という意味です。
「別の意味でいってんだバカ!('A`)」
だったらごめんなさい・・・
0096デフォルトの名無しさん
NGNGstrcmp(hikaku,word) は何回評価されるのかな、という話かと
0097デフォルトの名無しさん
NGNGほんとによーく眺めた?
hikaku[strlen(hikaku)-1]='\0'をputs("bug")で置き換えてみ。
結果はどうなる?それともコピペミスかい?
0098アルジャーノン
NGNG解決熟女しましたー。{}をつけていませんでした。ありがとうございます。やっと寝れる・・・。
じゃ彼女とぬっぽり寝てきます('∀`)マダキンヨウダヨー
0100Ωアルジャーノン
NGNG0101Ωアルジャーノン
NGNG■ このスレッドは過去ログ倉庫に格納されています