• ベストアンサー

関数の作り方(初心者です)

バブルソートをするプログラムを作っています。 以下の部分を関数として、作って挿入したいのですがどのようにすれば 読み出すことができるのでしょうか。 { int a,b,c,d; float e,f; a=year[l+1] year[l+1]=year[l] year[l]=a b=month[l+1] month[l+1]=month[l] month[l]=a c=day[l+1] day[l+1]=day[l] day[l]=c d=code[l+1] [l+1]=code[l] code[l]=d e=latitude[l+1] [l+1]=latitude[l] latitude[l]=d f=longitude[l+1] [l+1]=longitude[l] longitude[l]=f }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

質問の直接の回答にはならないかもしれませんが、とりあえず。 関数は簡単に書けば以下のような書き方になると思います。 void func(void); int main(void) {   ...   func();   ...   return 0; } void func(void) {   ... } ですからこれも上記のように書けばいいと思います。 たとえば、 void BubbleSort(void); int main(void) {   ...   BubbleSort();   ...   return 0; } void BubbleSort(void) {   // (質問内容の)関数本体 } こう書けば、main()関数からBubbleSort()関数が呼び出されます。 呼び出し元の関数はmain()関数である必要はありません。 同じようにして作った他の関数からの呼び出しももちろん可能です。 ただし、関数や変数には有効範囲がありますので呼び出せない場合もあります。 その辺は入門書などを読んで調べてください。 「スコープ」などと調べると出てくるかもしれません。 答えになっているのかなっていないのか、自分でもよく分からないのですが、参考まで。

kingyobachi
質問者

お礼

ご丁寧にありがとうございました。 大変参考になりました。

その他の回答 (1)

  • CueCue
  • ベストアンサー率40% (86/214)
回答No.1

 ご提示のソースがあってるはどうかは別として、この処理を関数化したいということと、読み出すというのは別の関数から呼び出す、ということですよね。  たとえばCで作る場合ですが、まずはこのソースに関数名をつけて、プロトタイプ宣言をし、mainなり呼び出す側の関数からその関数名を指定して呼び出します。  簡単に解説しているCやC++の参考書が山ほど書店にあると思います。まずはそちらで勉強されたほうが良いかと思いますが?

kingyobachi
質問者

お礼

ありがとうございました。 そうですね、もっと参考書を読む必要がありますよね。 がんばってみたいとおもいます。ありがとうございました。

関連するQ&A

  • ファイル入力のエラー

    以下のファイルを配列に読み込むプログラムを作っています。 1987 1100 12 23 2.467164 0.75153 1989 1202 12 31 2.456249 0.72896 1990 1204 9 28 2.484802 0.763903 1991 1206 11 26 2.520005 0.750182 1985 1207 9 26 2.499319 0.749116 以下の通りプログラムを組んでみました。 コンパイルしたところ、出力はされませんでした。 エラーも出ていないので、入力、出力などどこが悪いのかわかりません。 ほとんど初心者です。間違いが分かる方、よろしくお願いします。 #include<stdio.h> #define SIZE 5 main() { int a, b, c, d, i; static int year[SIZE],month[SIZE],day[SIZE],code[SIZE];   double e, f; static double latitude[SIZE],longitude[SIZE]; FILE *fp; fp=fopen("c\distance.dat","r"); while((fscanf(fp,"%d%d%d%d%lf%lf",&a,&b,&c,&d,&e,&f)) !=EOF) { year[i]=a; month[i]=b; day[i]=c; code[i]=d; latitude[i]=e; longitude[i]=f; i++; printf("%13d%8d%8d%8d%9.6lf%9.6lf\n",&a,&b,&c,&d,&e,&f); } fclose(fp); return(0); }

  • #VALUE!表示の解決方法

    いつもお世話になります。 WIN7 EXCELL2010 です。 現在は1日~月末の合計金額を月が替わる毎に表示しています。 入金の21日~翌月の20日締切で翌月の5日の入金にあわせて月毎の金額表示に変更したい。 参照図で説明します。 A(m/dd) B(文字列) C(数値) 列はユーザーフォームにて入力 D2 =IF(MONTH(A2)=MONTH(A3),"",SUMPRODUCT((MONTH(OFFSET($A$2,0,0,COUNT(A:A)))=MONTH(A2))*OFFSET($C$2,0,0,COUNT(A:A)))) E2 =IF(MONTH(F2)=MONTH(F3),"",SUMPRODUCT((MONTH(OFFSET($F$2,0,0,COUNT(F:F)))=MONTH(F2))*OFFSET($C$2,0,0,COUNT(F:F)))) F2 =IF(A2="","",WORKDAY(DATE(YEAR(A2),MONTH(A2)+1+(DAY(A2)>20),5)-1,1,祭日)) D列(1日~月末)の数式だと、例えば「D12 D13」などに#VALUE!の表示が出ません。 しかし「E12 E13」には#VALUE!の表紙が出ます。 A列とF列の違いは数式が入っているかいないかのようです。 このE列の 「#VALUE!」 の表示がでないようにするには、E列の数式をどう変更すればいいかご指導を仰ぎたいです。

  • エクセル関数等で出来ますか?

    エクセルでA行に数値、 B行以降にA行の数値分、値が入力されています。 A B C D E 1 0 2 4 a b f d 3 2 g l 4 1 s A行の数値分、その行以下に行を挿入し、 B行以降の値を入力する方法はないでしょうか?  A B C D E 1 0 2 4 a b f d 3 a 4 b 5 f 6 d 7 2 g l 8 g 9 l 101 s 11s 宜しくお願いします。

  • エクセルの関数

    =COUNTIFS(A10:A47,"一日有休",B10:B47,">=" & DATE(YEAR(E11)-1,MONTH(E11),DAY(E11)),B10:B47,"<" & E11) 上記の数式をJ11に入力してますが動きません。 (A10:A47)には一日有休などの文字が(B10:B47)には有給取得日が E11には有給付与日が2010/10/1等 結果が0になります。 どこが、がいけないのでしょうか

  • プログラムの内容

    以下のプログラムは答えとして渡されたものなんですが、 コマンド引数を使ったプログラムの流れがよくわかりません。 簡単に解説してくれる方、いませんか? #include <stdio.h> int leapyear(int year){ if(year%400 == 0) return 1; else if(year%4 == 0 && year%100 != 0) return 1; else return 0; } void addmonth(int *day, int *month, int *year){ *day = 1; (*month)++; if(*month > 12) { *month = 1; (*year)++; } } int main(int argc, char *argv[]){ int year, month, day, a=0, max_days; int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if(argc < 2) max_days = 10000; else max_days = atoi(argv[1]); printf("今日は西暦何年 何月 何日? "); scanf("%d%d%d",&year,&month,&day); while(a<max_days) { a++; day++; if(month == 2 && leapyear(year)) { if(day > 29) addmonth(&day, &month, &year); } else { if(day > month_days[month-1]) addmonth(&day, &month, &year); } } printf("今日から%d日後は、%d年%d月%d日です。",max_days, year, month, day); }

  • エクセル関数でグループ単位に集計を行う

    エクセル初心者です。 入力伝票データを元に、集計シートに自動的に品名コード順の合計を作成したいのですが、うまくできません。 データシートのデータをソートせずに関数だけで出来る方法をお教えください。 ※エクセルはExcel2003を使用しています。 《データシート》例 [見出し] A1:年月日,B1:伝票番号,C1:品名コード,D1:数量,E1:単価,F1:金額 [データ] A2:2008/10/1,B2:Z-001,C2:S0001,D2:3,E2:1,000,F2:3,000 A3:2008/10/1,B3:Z-002,C3:S0002,D2:1,E3:2,000,F3:2,000 A4:2008/10/1,B4:Z-003,C4:S0003,D4:2,E4:3,000,F4:6,000 A5:2008/10/2,B5:Z-004,C5:S0002,D5:1,E5:2,000,F5:2,000 A6:2008/10/2,B6:Z-005,C6:S0001,D6:3,E6:1,000,F6:3,000 A7:2008/10/3,B7:Z-006,C7:S0003,D7:2,E7:3,000,F7:6,000 《集計シート》例 [見出し] A1:品名コード,B1:伝票数,C1:数量計,D1:合計金額 [集計値] A2:S0001,B2:2,C2:6,D2: 6,000 A3:S0002,B3:2,C3:2,D3: 4,000 A4:S0003,B4:2,C4:4,D4:12,000 ※品名コードは固定せず、データシートに入力されたものだけを集計したい

  • VBAでオーバーフローが出て困っています(エクセル2000です)

    自動売買ロボット作成マニュアルという本のなかに株価をダウンロードするためのプログラムとしてソースが書かれているのですが、オーバーフローとなってしまい、実行できません。lastrow = (Range("B4").End(xlDown).Row + 1)のところでオーバーフローを起こします。この文章だけでは対処できないと思いますのでプログラムを写します。 恐れ入りますが、お助けください。 Sub Calc() Dim code As String Dim data_length As Integer, date_temp As Date Dim day_s As Integer, month_s As Integer, year_s As Integer Dim day_e As Integer, month_e As Integer, year_e As Integer Dim row_length As Integer code = input_temp(2) data_length = -100 date_temp = DateAdd("d", data_length, Now) day_e = Day(Now) month_e = Month(Now) year_e = Year(Now) day_s = Day(date_temp) month_s = Month(date_temp) year_s = Year(date_temp) Range("B4:R65000").ClearContents For i = 0 To Abs(data_length) * 0.65 Step 50 If i = 0 Then lastrow = "4" For wtbl = 19 To 25 url = "URL;http://table.yahoo.co.jp/t?s=" & code & "&a=" & month_s & "&b=" & day_s & "&c=" & year_s & "&d=" & month_e & "&e=" & day_e & "&f=" & year_e & "&g=d&q=t&y=" & i & "&z=" & code & "&x=.csv" Call Get_Data If Range("B4") = "日付" Then Exit For Else Range("B4:H54").ClearContents End If Next Else url = "URL;http://table.yahoo.co.jp/t?s=" & code & "&a=" & month_s & "&b=" & day_s & "&c=" & year_s & "&d=" & month_e & "&e=" & day_e & "&f=" & year_e & "&g=d&q=t&y=" & i & "&z=" & code & "&x=.csv" lastrow = (Range("B4").End(xlDown).Row + 1) Call Get_Data Range("B" & lastrow, "H" & lastrow).Delete row_length = (Range("B4").End(xlDown).Row) If row_length - lastrow < 49 Then Exit For End If End If Next Range("B5:H65000").Sort Key1:=Range("B5") lastrow = Range("B4").End(xlDown).Row Range("B5", "B" & lastrow).NumberFormatLocal = "yyyy/mm/dd" Range("C5", "H" & lastrow).NumberFormatLocal = "0" Range("A1").Select End Sub Sub Get_Data() With ActiveSheet.QueryTables.Add(Connection:=url, Destination:=Cells(lastrow, 2)) .Name = "Yahoo" .FieldNames = False .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = wtbl .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .Refresh BackgroundQuery:=False End With End Sub

  • エクセルVBA及び関数

    初心者です。お教えお願いします エクセル2003です 空白行及び0をなくしたいのですが(C列を入力された時点で自動でE列のようにしたい) 関数の場合及びVBAのシートコードを両方教えていただけないでしょうか VBAのコードは勉強の為です Sheet1    A    B     C     D     E     F 16          文字A        文字A 17          文字B        文字B 18            0         文字C 19          文字C        文字D 20            0         文字E 21          文字D        文字F      22      23          文字E 24 25          文字F 文字はC16~C80まで入っております B16~E80までのセルのみで行いたいのですが 他の場所は関数やグラフ等がすでに入ってますのでいじりたくありません E16~をフォームのコンボボックスのリストにしようと思ってます よろしくお願いましす

  • 多変数関数の最大値

    7変数の多変数関数をf(a,b,c,d,e,f,g)=19a+18b+17c+16d+15e+13f+11gとする。次の3つ条件をすべて満たす時のfの最大値を求めよ (1)a,b,c,d,e,f,gは0≦a,b,c,d,e,f,g≦98を満たす整数 (2)a+b+c+d+e+f+g=98 (3)3a+4b+5c+7d+8e+10f+12g=544 この問題はどっかの問題集にあったものではなくあるものを求めるために自分で作った問題です。しかしいくらがんばっても自分ではどうすることもできません。この問題はどうすれば解くことができるのでしょうか?この問題を解けるようなフリーソフトを探しましたが見つかりませんでした。もし問題を解けるフリーソフトがあるならそれも教えて欲しいです。

  • プロセッシングのmap関数

    プロセッシングで、float x =map(a,b,c,d,e)の使い方が分からないので教えてください。